QTEASY クイック スタート ガイド

インストールとインポート

使用 pip 安装(要求 Python >= 3.9, <3.13):部分功能(如全部内置策略、数据库存储等)需要可选依赖,详见 FAQ 与安装说明。

pip install qteasy

起動後、qteasy をインポートしてバージョン番号を確認できます。

>>> import qteasy as qt
>>> print(qt.__version__)

出力は次のとおりです。

2.6.0

1分で実行可能

このセクションでは、次の作業を完了します: tushare Token を設定 → 10 年間の CSI 300 インデックス データをダウンロード → データとローソク足チャートを表示 → 組み込み DMA 戦略を使用して 000300.SH でタイミング バックテストを実行し、使用可能なバックテスト結果を取得します。

1.tushare トークンを構成する

デフォルトでは、qteasyTushare を使用して財務データをダウンロードします。データをダウンロードするには、まずシステム起動設定ファイルで Tushare の API トークンを設定する必要があります (トークンを取得するには、まず tushare 公式 Web サイト に登録してください)。

起動設定ファイルを変更するには、次の 2 つの方法があります。

方法 1: コードで起動構成を設定します 初めてデータをダウンロードする前に、update_start_up_setting() を実行して起動構成を変更し、起動構成ファイルに自動的に保存します。

>>> qt.update_start_up_setting(tushare_token='你的tushare_API_Token')  # 启动配置将被保存到启动配置文件中
>>> qt.start_up_settings()  # 查看启动配置文件的内容

出力は次のとおりです。

Start up settings:
--------------------
tushare_token = <你的tushare_API_token>
...

方法 2: 起動設定ファイルを直接変更する 起動設定ファイル qteasy.cfg は、qteasy ルート ディレクトリに保存されます (qt.QT_ROOT_PATH を介して設定ファイルのパスを表示できます)。任意のテキスト エディタでこのファイルを開き、次の行を追加します。

tushare_token = 你的tushare_API_Token  # 直接打开文件并在其中新增配置,字符串配置不需要使用双引号

2. 下载 000300.SH 十年指数数据

tushare トークンを構成した後、CSI 300 インデックスの日次データ (000300.SH) をダウンロードします。最初に取引カレンダーと指数の基本情報をダウンロードし、次に指数の日次データ (約 10 年) をダウンロードすることをお勧めします。

qteasy.refill_data_source() 関数を使用すると、qteasy は設定されたデータ ソースからデータを自動的にダウンロードします。データ量が大きすぎる場合は、自動的に分割してダウンロードされ、データのチェックとクリーニングが実行されてデータベースに保存されます。

>>> # 下载交易日历与指数基础信息
>>> qt.refill_data_source(tables=['trade_calendar', 'index_basics'])
>>> # 下载 000300.SH 近十年日线数据
>>> qt.refill_data_source(
...     tables=['index_daily'],
...     start_date='20140101',
...     end_date='20241231',
...     symbols=['000300.SH'],
... )

出力は次のとおりです。

Filling data source file://csv@qt_root/data/ ...
into 1 table(s) (parallely): {'trade_calendar'}
<trade_calendar> 35000 wrn: 100%|█████████████████████████████████████████████████████| 8/8 [00:05<00:00,  1.58task/s]
Data refill completed! 35000 rows written into 1/1 table(s)!

Filling data source file://csv@qt_root/data/ ...
into 2 table(s) (parallely): {'index_daily', 'index_basic'}
<index_daily> 152760 wrn: 100%|███████████████████████████████████████████████████████| 2/2 [00:05<00:00,  2.51s/task]
<index_basic> 1327 wrn: 100%|█████████████████████████████████████████████████████████| 8/8 [00:05<00:00,  1.58task/s]
Data refill completed! 154087 rows written into 2/2 table(s)!

3. 查看数据与 K 线图

データがローカルに保存されたら、get_history_data でデータを取得し、HistoryPanel.plotqt.candle でローソク足をプロットし、データと引用符が正常かどうかを確認できます。

>>> # 获取近一年日线,直接返回 HistoryPanel
>>> hp = qt.get_history_data(
...     htypes='open, high, low, close',  # 需要获取的数据类型分别为开盘价、最高价、最低价、收盘价
...     shares='000300.SH',  # 资产类型为沪深300指数
...     start='20230101',  # 数据起始日期
...     end='20231231',  # 数据结束日期
... )
>>> print(hp)  # 查看数据结构与范围
>>> # 在 HistoryPanel 上绘制静态 K 线 + 成交量
>>> hp.plot(interactive=False)
>>> # 或者使用 qt.candle 快速绘制 K 线(内部同样基于 HistoryPanel)
>>> qt.candle('000300.SH', start='2023-06-01', end='2023-12-01', asset_type='IDX')

3.1 インタラクティブなチャート (Plotly) と依存関係

ノートブック内の各ローソク足/インジケーターに対応する特定の値をズーム、パン、表示したい場合は、インタラクティブなプロットを使用できます。

>>> hp.plot(interactive=True)

インタラクティブなグラフは Plotly に依存しています。使用環境に基づいてインストールを選択することをお勧めします。

  • 基本的なインタラクション (Plotly Figure):

pip install plotly
  • Notebook でのより完全な対話 (FigureWidget + コールバック):

pip install ipywidgets anywidget

Notebook では、qteasy はまず、より完全な FigureWidget エクスペリエンスを提供しようとします。現在のカーネル/依存関係が要件を満たしていない場合は、HTML 表示に戻ります。 Plotly がインストールされていない場合、interactive=True は英語のエラー メッセージ (通常は「plotly が必要です」を含む) を直接表示します。

3.2 最も一般的に使用される対話型パラメータ

  • plotly_backend_app='auto'|'FigureWidget'|'html': ノートブックの出力モードを選択します (デフォルトは 'auto')。

  • layout='auto'|'overlay'|'stack': マルチアセットのレイアウト。 'overlay' は、2 つのアセットのみのオーバーレイ比較に最もよく使用されます。 'auto' は「2 つのアセット → オーバーレイ、それ以外の場合 → スタック」のいずれかを自動的に選択します。

  • highlight='max'|'min': 最大/最小値ポイントを強調表示します (静的プロットと対話型プロットの両方で使用可能)。

出力は次のとおりです。

{'000300.SH':
               open     high      low    close
2023-01-03  3864.84  3893.99  3831.25  3887.90
2023-01-04  3886.25  3905.90  3873.65  3892.95
2023-01-05  3913.49  3974.88  3912.26  3968.58
...             ...      ...      ...      ...
2023-10-10  3696.25  3701.26  3655.59  3657.13
2023-10-11  3674.75  3689.53  3658.35  3667.55
2023-10-12  3697.93  3711.50  3682.84  3702.38

[186 rows x 4 columns]
}

png

3.5 履歴データの操作 (HistoryPanel)

実際の研究では、多くの場合、「ローソク足チャートを確認する」だけでなく、過去のデータの統計を計算し、コードで因子を生成することも必要になります。 DataFrame を返すことに加えて、get_history_data() は 3D HistoryPanel を直接返すこともできるため、複数の金融商品や複数の指標にわたる統一された計算を簡単に実行できます。

>>> # 获取 000300.SH 的 OHLCV 历史数据,并返回 HistoryPanel
>>> hp = qt.get_history_data(
...     htypes='open, high, low, close, vol',
...     shares='000300.SH',
...     start='20230101',
...     end='20231231',
...     as_data_frame=False,          # 关键:返回 HistoryPanel
... )
>>> print(hp.shape, hp.shares, hp.htypes)

>>> # 1) 计算简单收益率矩阵(时间 × 股票)
>>> ret = hp.returns(price_htype='close', method='simple')
>>> print(ret.head())

>>> # 2) 计算 20 日滚动波动率
>>> vol = hp.volatility(window=20, price_htype='close', annualize=True)
>>> print(vol.tail())

>>> # 3) 生成 K 线技术指标(如 20 日均线、MACD)
>>> hp_ma = hp.kline.sma(window=20)              # 在 htypes 中新增 'sma_20'
>>> hp_ma_macd = hp_ma.kline.macd()              # 再追加 MACD 指标
>>> print(hp_ma_macd.htypes)

>>> # 4) 识别蜡烛形态(如锤头线)
>>> hammer = hp.candle_pattern('cdlhammer')      # 返回 DataFrame,非 0 代表出现形态
>>> print(hammer[hammer['000300.SH'] != 0].head())

>>> # 5) 单只股票切片成 DataFrame,方便与 pandas / sklearn 等联动
>>> df_300 = hp_ma_macd.to_share_frame('000300.SH')
>>> print(df_300.tail())

上の例は、get_history_data(..., as_data_frame=False) から HistoryPanel を取得した後、わずか 1 ~ 2 行のコードで リターン、ボラティリティ、テクニカル指標、およびパターンシグナルを計算し、さらに分析するためにいつでも使い慣れた DataFrame に切り替えることができる方法を示しています。

HistoryPanel を使用するためのより体系的なガイドについては、「ユーザー ガイド」の「履歴データの操作と分析」の章および HistoryPanel API リファレンス を参照してください。

4. 使用 DMA 策略做择时回测

000300.SH を取引商品として、組み込みの DMA 移動平均タイミング戦略を使用し、ダウンロードした 10 年間のデータでバックテストを実行します。以下では、一般的に使用される比較的安定したパラメーターのセット (短い MA 20、長い MA 60、DMA 期間 10) を使用して、バックテストの結果とチャートを直接取得します。

>>> # 设置qteasy的运行配置参数
>>> qt.configure(
...     asset_pool='000300.SH',  # 交易资产池包括沪深300指数
...     asset_type='IDX',  # 投资资产类型为IDX-指数
...     invest_cash_amounts=[100000],  # 回测初始投资金额为十万元
...     invest_start='20150101',  # 回测投资初始日期
...     invest_end='20241231',  # 回测投资结束日期
...     cost_rate_buy=0.0003,  # 交易费率:买入手续费万分之三
...     cost_rate_sell=0.0001,  # 交易费率:卖出手续费万分之一
...     visual=True,  # 是否输出回测结果可视化图表:是
...     trade_log=True,  # 是否输出回测记录:是
... )
>>> op = qt.Operator(strategies='dma')  # 创建一个交易员对象,执行一个DMA交易策略
>>> op.set_parameter('dma', par_values=(20, 60, 10))  # 设置交易策略的参数
>>> res = qt.run(op, mode=1)  # 启动交易,运行模式为1(回测交易)

出力は次のとおりです。

====================================
|                                  |
|         BACKTEST REPORT          |
|                                  |
====================================
qteasy running mode: 1 - History back testing
time consumption for operate signal creation: 81.3 ms
time consumption for operation back testing:  4.9 ms
investment starts on      2015-01-05 15:00:00
ends on                   2024-12-30 15:00:00
Total looped periods:     10.0 years.
-------------operation summary:------------
Only non-empty shares are displayed, call 
"loop_result["oper_count"]" for complete operation summary
          Sell Cnt Buy Cnt Total Long pct Short pct Empty pct
000300.SH   340       41    381   44.7%     -0.0%     55.3%  

Total operation fee:     ¥    3,261.19
total investment amount: ¥  100,000.00
final value:              ¥  115,601.73
Total return:                    15.60% 
Avg Yearly return:                1.46%
Skewness:                         -1.16
Kurtosis:                         16.95
Benchmark return:                 1.67% 
Benchmark Yearly return:          0.17%

------strategy loop_results indicators------ 
alpha:                            0.006
Beta:                             0.975
Sharp ratio:                      0.113
Info ratio:                       0.001
250 day volatility:               0.130
Max drawdown:                    36.85% 
    peak / valley:        2015-04-27 / 2018-11-27
    recovered on:         Not recovered!


==================END OF REPORT===================

png

実行後は、資産曲線、最大ドローダウン、シャープレシオなどの評価指標と、視覚化されたチャートが表示されます。他のパラメータを試したり範囲を最適化するには、パラメータの最適化について次のセクション「qteasy でできること」と バックテスト ドキュメント を参照してください。


qteasy は何ができますか?

過去の財務データを取得して管理:

  • 複数のソースから大量の過去の財務データを簡単に取得し、データをクリーンアップして、統一された形式でローカルに保存します。

  • DataType オブジェクトを使用して、財務データ内の利用可能な情報を構造化された方法で管理します。調整後の価格や指数構成銘柄などの複雑な情報でも、たった 1 行のコードで取得できます。

  • DataTypeオブジェクトに基づく財務データの可視化、統計分析、分析結果の可視化

  • データをローカルに保存し、オンデマンドで取得することで、バックテストやライブ取引に一貫したデータ基盤を提供し、結果の再現を容易にします。

png

シンプルかつ安全な方法で取引戦略を作成

  • BaseStrategy クラスを使用すると、取引戦略を定義する方法が直感的で、ロジックが明確になります。

  • すぐに使用できる 70 を超える組み込み戦略に加え、独自の戦略混合およびグループ化メカニズムにより、ブロックで構築するなど、単純な戦略から複雑な戦略を組み立てることができます。

  • 取引戦略のデータ入力と使用方法は完全にカプセル化され安全であり、将来の機能の不用意な導入やデータ漏洩などの問題を完全に回避し、戦略結果の信頼性と信頼性を保証します。

  • バックテストとライブ取引の両方に同じ戦略ロジックが使用され、「優れたバックテスト結果」と「圧倒的なライブパフォーマンス」の間のギャップが減少します。

png

トレーディング戦略のバックテスト評価、最適化、自動トレーディングのシミュレーション

  • Operator トレーダー クラスを通じて戦略の実行を管理し、実際の市場取引リズムに従って戦略をバックテストし、複数の側面にわたって包括的に取引結果を評価し、取引レポートと結果チャートを生成します。

  • シミュレーテッド アニーリング、遺伝的アルゴリズム、ベイジアン最適化などを含む複数の最適化アルゴリズムを提供し、大きなパラメーター空間で戦略のパフォーマンスを最適化します。

  • リアルタイムの市場データを取得し、自動取引の戦略シミュレーションを実行し、取引ログ、株式ポジション、口座残高の変化などの情報を追跡および記録します。

  • バックテスト、最適化、ライブ取引では同じ実行メカニズムが使用されます。つまり、戦略を一度作成すれば、再現とトラブルシューティングが容易な明確な構成で、すべてのモードで実行されます。

  • 将来的には、QMT API を介してブローカーのライブ取引インターフェイスに接続し、自動取引を可能にする予定です。

png
png
png


エンドツーエンドのロードマップ/チュートリアル

「設定からバックテスト、最適化、シミュレーション/ライブ取引」までの完全なワークフローに従いたい場合は、次の順序でチュートリアルとドキュメントを読むことができます。各ステップには、対応するセクションと例があります。

  1. データ ソースとトークンの構成チュートリアル: はじめにチュートリアル: データの取得

  2. データのダウンロードチュートリアル: データの取得財務履歴データのダウンロードと管理

  3. 戦略とバックテストの定義チュートリアル: 最初の戦略チュートリアル: 組み込み戦略チュートリアル: カスタム戦略バックテスト

  4. パラメータの最適化チュートリアル: 取引戦略の最適化取引戦略の最適化

  5. シミュレーション/ライブ取引チュートリアル: 取引戦略の展開と実行シミュレーション/ライブ取引の概要

上記のチュートリアルでは、設定からバックテスト、最適化、シミュレーション/ライブ取引までの完全なチェーンをすでにカバーしています。問題が発生した場合は、FAQ で「エンドツーエンドで実行する方法」、「遅い理由」、「先読みバイアスの回避」などの一般的な説明を確認できます。