Pythonで自作せずにトレーディングボットを構築する方法
プログラマーがアルゴリズム取引に挑戦しようと決めたとき、すべては通常、独自のスクリプトを作成することから始まります。スクリプトはREST APIでローソク足データを取得し、いくつかのインジケーターを計算して注文を送信します。1ヶ月が経過すると、プロジェクトはネットワークエラー処理、ソケットの同期外れ、注文制御のための場当たり的な回避策が入り組んだ厄介な構造になってしまいます。
一からすべてを書く代わりに、完成済みのフレームワークを使う方が賢明です。VeighNaプロジェクト(旧名VN.py)は2015年に登場しました。GitHubで4万3千以上のスターを獲得しており、現在も積極的に開発が続けられています。
このプラットフォームとは
VeighNaは、Pythonでアルゴリズム取引するためのオープンソースフレームワークです。内部アーキテクチャはイベントエンジン中心に構築されています。システムはエンドレスな待機ループを実行する必要がなく、受信したティック、注文ステータスの変更、システムタイマー信号に応答します。
このプロジェクトは機関投資家向けフォーカスされています。中国では、先物ブローカー、資産運用会社、プライベートヘッジファンドで使用されています。これにより、コードベースにある程度の影響を与えています。
標準搭載のコネクターのほとんどは中国の金融市場向け(CTP、XTP、HTS)に調整されています。それでも、国際取引所で動作するInteractive Brokers用のアダプターは存在します。必要な取引所や暗号通貨プラットフォームがリストにない場合は、ベースGatewayクラスから継承して独自のゲートウェイを記述する必要があります。
実践的なタスクを解決するためのモジュール
システムアーキテクチャは、3つの主要部分から構成されています:コア、トレーディングアプリケーション(アプリ)、データアダプターです。
戦略のために、様々な専門エンジンが用意されています:
- CTA Strategyは、単一銘柄での標準的なトレンド取引およびカウンターtrend取引を処理します。
- Spread Tradingは、ペア取引と空間アービトラージの実装を支援します。
- Option Masterには、オプション評価、ボラティリティ曲線の構築、Greeks計算のためのツールが含まれています。
- Portfolio Strategyは、複数の資産を同時に取引する戦略に焦点を当てています。
素晴らしい点の1つは、バックテスト用の готовые インターフェースが存在することです。過去のデータでアイデアをテストするために、必ずしもJupyter Notebookを開く必要はありません。システムにはPyQtベースの組み込みGUIがあり、パラメータ最適化を実行して、エクイティカーブやドローダウンチャートをすぐに表示できます。
履歴の保存には、SQLiteやMySQLなどの標準的なリレーショナルデータベースと、高速な時系列入出力に最適化されたQuestDBやTDengineなどの専門カラムナストアスがサポートされています。
Release 4.0の機械学習
フレームワークの第4世代では、モジュールvnpy.alphaが導入されました。開発者は正直に、MicrosoftのQlibプロジェクトに触発されたと認めています。
このモジュールは、ML戦略の開発サイクルを閉じます:
- Alpha158ファクター式セットに基づく特徴量生成と処理。
- LightGBM、Lasso、または多層パーセプトロン(MLP)を使用した予測モデルのトレーニング。
- リサーチノートブックからライブまたはシミュレートされたアカウントでの実行への素早い移行。
リポジトリにはサンプルの готовые Jupyterノートブックが含まれており、データ準備とトレーニングパイプラインへの入門は難しくないでしょう。
コードの内容
必要なモジュールセットでトレーディングターミナルを起動するのは、文字通り数十行で可能です。以下の例では、CTPゲートウェイ接続と2つのモジュール(CTA戦略実行とヒストリカルテスト)を備えたアプリケーションを組み立てています。
from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import MainWindow, create_qapp
from vnpy_ctp import CtpGateway
from vnpy_ctastrategy import CtaStrategyApp
from vnpy_ctabacktester import CtaBacktesterApp
def main():
qapp = create_qapp()
event_engine = EventEngine()
main_engine = MainEngine(event_engine)
main_engine.add_gateway(CtpGateway)
main_engine.add_app(CtaStrategyApp)
main_engine.add_app(CtaBacktesterApp)
main_window = MainWindow(main_engine, event_engine)
main_window.showMaximized()
qapp.exec()
if __name__ == "__main__":
main()
起動後、注文テーブル、ポジション、ログ、ローソク足チャートを含む完全なデスクトップウィンドウが開きます。
本番で使用する価値はあるか
VeighNaは巨大なプラットフォームです。スポット市場へ1日1回REST API経由で少数の注文を送信するだけでよければ、フレームワークは過剰に複雑に感じるでしょう。
しかし、イベント駆動型取引のための実績のあるアーキテクチャを探している、自分でコネクターを記述する予定がある、またはリスク管理とバックテスト機能を備えた готовые デスクトップターミナルが必要な場合は、このツールは必ず役に立ちます。重要なのは、一部のドキュメントやコミュニティのコメントが中国語から翻訳されていることを覚悟しておくことです。
関連プロジェクト