CTA 戦略、すなわち商品取引顧問(Commodity Trading Advisor、略称 CTA)。一般的に、資産の 60%以上を先物市場に投資することが求められます。つまり、1 億円の投資資金を管理する先物戦略のプライベートファンドがあると仮定すると、少なくとも 6000 万円が先物の保証金として必要です。CTA 戦略は量的投資分野において重要な要素であり、株式の量的戦略と比較して、CTA 戦略はより安定した収益とより小さなリスクを持っています。CTA 戦略のヘッジ性と高頻度性に基づいて、市場のすべての変動は徐々に平滑化されると言えます。つまり、ヘッジがうまくできれば、基本的に市場全体を無視することができます。
最近、CTA 戦略の開発ツールを整理しました。市販のプログラム可能な取引ソフトウェアには TB や MC などがありますが、一方でこれらの商業ソフトウェアは高価であり、他方で、プログラミングに使用されるいわゆる EasyLanguage は非常にニッチで、複雑な機能の開発は面倒です。いくつかの比較を行った結果、最終的に VN.PY を CTA 戦略の開発プラットフォームとして選定しました。本稿では、VN.PY の入門心得を紹介し、皆さんが VN.PY を理解し、迅速に入門できるようにすることを目的としています。戦略の開発については(戦略の開発は一冊の本でも書ききれません。。。)
一、VN.PY のインストール#
VN.PY に基づく CTA 戦略は主に VNStation に依存しており、公式サイトから最新バージョンをダウンロードしてインストールできます。現在の最新バージョンは 2.5.1 です。デフォルトのインストールディレクトリは C:\vnstudio です。注意点は以下の通りです:
1)VNStation のインストールには Python パッケージが付属しているため、ローカルに Python を事前にインストールする必要はありません。開発 IDE としては、VSCode などの付属の Python パッケージをコンパイラとして選択することをお勧めします。他の Python 環境がローカルに存在しない方が良く、VNStation だけをクリーンに使用するのがベストです。
2)vnpy のソースコードは C:\vnstudio\Lib\site-packages\vnpy ディレクトリにありますが、このソースコードはGitHubのソースコードとは若干異なります。vnpy ディレクトリ内は一致しているはずですが、GitHub のソースコードには他のディレクトリ、例えば examples のディレクトリがあり、インストールパッケージには含まれていない多くの参考になるソースコードがあります。
二、VNStation の起動#
1、戦略コードディレクトリの作成
C:\Users [ユーザー名または Administrator]\strategies ディレクトリを作成し、開発が完了した戦略コードをこのディレクトリに置くことができます。
2、VNStation の起動
VNStation を起動すると、以下のような画面が表示されます:
【VN Trader Pro】を選択し、以下の画面が表示されます:
左側の下層インターフェースで【CTP】または【CTP テスト】を選択します。右側の上層アプリケーションは、主に必要に応じて選択し、一般的には【CTA 自動取引モジュール】と【CTA バックテスト研究モジュール】が多く選ばれます。下部の実行ディレクトリは、上記の【1、戦略コードディレクトリの作成】のディレクトリと一致させることに注意してください。クリックして起動します。補足説明は以下の通りです:
1)CTP と CTP テスト
現在、上期技術は API を通じて透過的な監視に接続することをサポートしており、主な開発言語は C++ です。VN.PY はすでにこの複雑なタスクを底層で私たちのために完了しているため、この部分について心配する必要はありません。しかし、透過的な監視に接続するにはアカウントが必要で、テストアカウント(CTP テスト)と実取引アカウント(CTP)の両方が必要です。テストアカウントを使用して投資戦略の正確性を検証し、実取引アカウントを使用して実取引を行います。このアカウントの申請は、主に自分が所属する先物会社を通じて行います。申請手順は、記事《この一文を読めば、期貨透過式 CTP API を完全に理解できる》を参考にしてください。
もし、実取引を行わずに戦略の研究だけを行いたい場合、CTP 取引アカウントを取得する別の方法があります。それは Simnow の仮想実取引 / テストアカウントです。Simnow アカウントを使用する予定がある場合、以下の点に注意してください:
- 下層インターフェースは CTP を選択し、CTP テストではありません!!
- SimNow は 2 つの環境を提供しており、最初の仮想実取引環境は取引時間帯(9:00-15:00)のみ使用可能で、2 つ目の仮想テスト環境は非取引時間帯(その他のすべての時間)でのみ使用可能です;非取引時間帯に最初の環境を使用すると、メイン画面の左下のログエリアには出力情報が表示されません。対応する時間帯に接続できない場合は、まず VNTrader に再ログインして確認することをお勧めします。
- 最初の環境は 3 つのサーバーに分かれており、vn.py の公式推奨により、第 2 および第 3 グループのサーバー(透過的な検証をサポートするバージョン)のみ接続可能で、第 1 グループには接続できません;
- 運用管理上の理由から、SimNow サーバーは時々メンテナンスのために停止することがあります(2019 年以降特に頻繁です)。その場合は、次の取引日まで待つしかありません。
2)CTA 自動取引モジュールと CTA バックテスト研究モジュール
名前の通り、前者は CTA 戦略の実施、後者は CTA 戦略のバックテストです。両方を選択しない場合、後続の起動画面ではページに基づく基本的な売買操作しかできず、CTA 戦略取引の機能を使用することはできません。
3、CTP または CTP テストの接続
VNTrader のメインページに入ると、以下のようになります:
左上の【システム】-【CTP に接続(または CTP テストに接続)】をクリックして CTP(または CTP テスト)の設定を行います:
CTP または CTP テストの設定については、一般的に先物会社が関連文書を提供します。Simnow に基づく CTP 設定の場合は、公式サイトの紹介を参考にすることができ、また記事《国内期貨 CTP 設定チュートリアル》も参考にできます。Simnow に接続成功後の【ログ】ウィンドウのページは以下の通りです:
先物会社の接続成功後は、Simnow ほど詳細ではない場合があります。すべては先物会社の認定基準に従います。
接続後は【ポジション】と【資金】ウィンドウのデータが正しく表示されているか確認できます。
接続後は、マーケットデータが正しく取得できるかテストすることもできます。【取引】ウィンドウの【コード】に契約コードを入力し、エンターを押して、マーケットウィンドウが正しく表示されるか確認します。注意点として、契約コードが正しく入力されているか、国内の 4 つの先物取引所の契約命名規則には違いがあるため、vn.py 内部ではすべて公式命名を使用しており、コードは大文字と小文字を区別します。例えば、TF2003、rb2003 などです。
三、CTA バックテストと CTA 戦略#
1、VNTrader のグローバル設定
【CTA 戦略】または【CTA バックテスト】を使用する前に、データの準備を行う必要があります。戦略内では、過去のデータに基づいてテクニカル指標を計算する必要がある場合もあれば、バックテストで過去のデータを利用して戦略を検証する必要がある場合もあります。
VNTrader のデータ準備には 2 つの方法があります。1 つは RQData データを使用する方法、もう 1 つはローカルデータベースサービスを構築する方法です。前者は便利で、より推奨されます。具体的な使用方法は以下の通りです:
1)【設定】ページを開く
2)【グローバル設定】ページの以下の 2 つの項目を設定
注意:ここでの rqdata.username と rqdata.password は RQData 公式サイトのユーザー名とパスワードとは異なります!!
rqdata.username は固定で:license
rqdata.password は:(rqdata を申請後、公式サイトから長い文字のライセンスが与えられます)
設定が完了したら、【機能】-【CTA バックテスト】を起動し、ログウィンドウで RQData が正常に接続されているか確認します。以下の図のように:
正常に接続できない場合で、確認しても問題がない場合は、VN Station prompt ウィンドウを開き、pip install rqdatac -U を入力して更新し、問題が解決するか確認してみてください。
また、RQData の連続契約データは、88、888、99 などの多様なタイプを提供しており、株価指数先物契約の例として、その違いは以下の通りです:
- IF88:IF 株価指数先物の各主要月の量価データを単純に結合し、平滑処理は行っていません。主要契約の月替わり時にデータにギャップが生じるため、このデータは日内 CTA 戦略のバックテスト(終値にポジションなし)にのみ適しています;
- IF888:IF88 データを基に、主要契約の月替わり時に月替わりの価格差を記録し、以前の歴史データにその価格差を加えたり引いたりして平滑処理を行います。したがって、このデータは隔夜 CTA 戦略のバックテスト(終値にポジションあり)に適しています;
- IF99:すべての取引可能な品種のデータを累積ポジション量で加重平均した指数データであり、現実には取引できないため(取引所は指数契約を提供していません)、このデータをバックテストに使用することは推奨されず、特定のデータモデルの研究に使用できます。
2、CTA バックテスト
VP.PY では、投資家がバックテストや戦略取引を行うためにいくつかのクラシックな戦略が事前に開発されています。例えば、ArtRsi 戦略、DualThrust 戦略などがあり、初心者はこれらの戦略を使用または修正することから始めることができます。
【機能】-【CTA バックテスト】を起動し、戦略を選択し、ローカルコード(形式は【商品コード。商品取引所】、例えば TF2003.CFFEX)および他のバックテスト条件を入力し、【バックテスト開始】をクリックします。バックテストページは以下のように表示されます:
各バックテスト指標は中央に表示され、【口座純資産】、【純資産バックテスト】、【日次損益】、【損益分布】のグラフィカルページは右側に表示されます。
注意:
1)(バックテスト)取引は開始日から始まるわけではありません。VN.PY は一定の取引日(例えば 10 取引日)のデータを初期化として必要とし、その日数内には取引データがありません。この時、バックテスト指標の【最初の取引日】で確認できます。この部分のプログラムは戦略の on_init 関数内の self.load_bar (10) を参考にできます。
2)バックテストページでは、決済手数料を特別に設定することはできません(決済手数料と隔夜手数料の手数料は大きく異なり、収益結果に影響を与えます)
3)中間のバックテスト指標バーが正しく表示されない場合は、以下を試してみてください
i)グローバル設定で font.size を小さくする
ii)C:\vnstudio\Lib\site-packages\vnpy\app\cta_backtester\ui\widget.py の 184 行を小さい値(例えば 600)に設定する。
【CTA バックテスト】ページでもパラメータの最適化を行うことができます。例えば、ある戦略において移動平均の絡み具合を比較し、短期移動平均のウィンドウ期間と長期移動平均のウィンドウ期間をどのように設定すれば最良の収益率やシャープレシオを得られるかを比較する必要があります。クリックして【パラメータ最適化】を行い、目標値、短期移動平均ウィンドウ値、長期移動平均ウィンドウ値を比較し、比較が終了したら【最適化結果】をクリックして確認します。
3、CTA 戦略
【機能】-【CTA 戦略】を起動し、ログウィンドウの情報を確認します:
戦略を選択し、【戦略を追加】をクリックします、
strategy_name:戦略名を示し、任意の文字列を設定できます。例えば demo1
vt_symbol:取引コードを示し、形式は【商品コード。商品取引所】、例えば TF2003.CFFEX
他は自分の戦略の必要に応じて設定します。
一部の変数、例えば atr_value、atr_ma などの値は 0 であることがわかります。これはまだ過去のデータを計算していないためです。クリックして【初期化】を行い、上記の必要な値に値を設定します。
初期化後、【起動】をクリックして戦略を起動します。この時、戦略に基づいて量的取引が開始されます。
この時、【CTA 戦略】ウィンドウを閉じても、戦略の実行は停止しません。
4、戦略デバッグ
方法 1:cmd デバッグ
戦略をデバッグする場合は、VN Studio Prompt を通じて VN Station を起動する必要があります。コマンドラインに入力します:python -m vnstation。以下の図のようになります:
vn trader で CTA バックテストモジュールを選択し、デバッグしたい戦略を選択して、バックテストを開始します。対応するデバッグ出力(個人のニーズに応じて設定する必要があります。一般的には print()関数を使用します)は cmd に表示されます。cmd に表示されるのは、Python インタープリタが戦略ファイルを実行しているときの出力です。これにより戦略デバッグが実現します。
方法 2:Jupyter notebook デバッグ
デスクトップアイコンから vnstation を起動し、ポップアップしたグラフィカルインターフェースで Jupyter Notebook を選択します。
デバッグする戦略のディレクトリを Jupyter Notebook の実行ディレクトリ、すなわち C:\Users [ユーザー名または Administrator]\strategies ディレクトリに設定します。
Jupyter notebook でデバッグする戦略をインポートします。
#%%
from vnpy.app.cta_strategy.backtesting import BacktestingEngine, OptimizationSetting
from vnpy.app.cta_strategy.strategies.atr_rsi_strategy import (
AtrRsiStrategy,
)
from datetime import datetime
次に、バックテストする品種、バックテストの開始時点、バックテストの終了時点、取引手数料、スリッページ、価格変動、バックテスト資金を順に変更します。vt_symbol、interval、start、end、rate、slippage、size、pricetick、capital を設定します。最後に、デバッグする戦略を engine.add_strategy (デバッグする戦略,{}) として設定します。
#%%
engine = BacktestingEngine()
engine.set_parameters(
vt_symbol="IF88.CFFEX",
interval="1m",
start=datetime(2019, 1, 1),
end=datetime(2019, 4, 30),
rate=0.3/10000,
slippage=0.2,
size=300,
pricetick=0.2,
capital=1_000_000,
)
engine.add_strategy(AtrRsiStrategy, {})
コードを実行し、エラーが発生した場合は、engine.strategy. を使用して戦略内の変数にアクセスしてエラーを調査できます。また、戦略コード内で print () 関数を使用することもできます。より詳細なデモコードは vnpy-master\examples\cta_backtesting\backtesting_demo.ipynb を参考にしてください。
四、VN.PY の関連学習資料#
本稿では VN.PY の迅速な入門を紹介しましたが、VN.PY の学習においてはほんの一部に過ぎません。以下の学習資料を参考にして、VN.PY をより深く理解してください。
1、VN.PY 公式アカウントのビデオチュートリアル(有料)
チュートリアル名:《全実戦進階策略 —CTA 策略》。このチュートリアルは、コンピュータの画面を操作しながら授業を行い、段階的に分解され、易しいものから難しいものへと進むため、非常に適した学習資料です。自身の立場(投資家、戦略開発者、プラットフォーム開発者)に応じて、異なる章を選択的に視聴できます(この選択は自己判断が必要です)。
2、VN.PY 公式サイトのプロジェクト文書
https://www.vnpy.com/docs/cn/index.html
このプロジェクト文書は比較的簡潔で、資料検索に適しており、初心者には少し難しいかもしれませんが、ビデオと組み合わせて見ることで理解が容易になります。
3、VN.PY の Zhihu
https://zhuanlan.zhihu.com/vn-py
これは VN.PY の作者の Zhihu チャンネルで、定期的に更新されており、継続的な学習資料として利用できます。
4、VN.PY の Snail ブログ
http://www.snailtoday.com/archives/category/qihuo/vnpy
これはあるエキスパートの VN.PY 学習ブログで、多くの記事が VN.PY 公式文書と補完し合い、VN.PY のソースコードの原理に関する内容が多く、実践的で、プラットフォーム開発者に特に適しています。
5、《Python 量的取引》(張陽飛著)
この本は VN.PY に基づいて書かれた量的取引に関するもので、VN.PY の原理を非常に詳細に紹介しています。また、VN.PY が事前に開発したいくつかのクラシックな取引戦略についても、金融面での詳細な説明が行われており、公式資料の不足を補っています(公式資料は Python の開発面に重点を置いています)。ただし、VN.PY の更新バージョンの速度が非常に速く、多くの書籍で紹介されている内容が最新バージョンとあまり一致しないことがあります。