SlideShare a Scribd company logo
1 of 60
Download to read offline
1
VNPY:中国で総合的な定量的取引
フレームワーク
次世代システム研究室
任勇(ニン ユウ)
2021/03/30
目次
2
3
4
5
定量的取引の開発
VNPYの紹介
VNPYでバックテストの検証
サマリー
2
1 定量的取引の紹介
• 未来が来た時代
• Q:金融領域で自動的にトレードできますか?
• A : 定量的取引を試しましょうか?
3
定量的取引の紹介 -- 背景
• 定量的取引は、機会を認識するためにデータ分析、数式と計算に依存
する金融市場での技術的な投資戦略。
• 定量的取引戦略では、コンピューターソフトウェアプログラムとスプレッド
シートを使用して、取引行動のパターンや傾向を追跡する。
• 金融専門家の洞察と分析に基づいた投資手法である定性的取引に代
わるもの。
4
定量的取引の紹介--定義
https://www.netinbag.com/ja/finance/what-is-quantitative-trading.html
• 自動的トレード
• 先物トレード: 商品投資顧問(英:Commodity Trading Advisor)
• FXトレード: エキスパート・アドバイザー(英:Expert Advisor)
• ロボットアドバイザー
• 最新の金融工学に基づいたロボットが最適な資産運用方法をご提案し、その後
の運用等についても手助けしてくれるサービス
5
定量的取引の紹介-- 応用
6
定量的取引の紹介--代表者
ジェームズ・ハリス・シモンズは、アメリカのヘッジファンドマネージャー、
数学者である。年収は1700億円で、英紙フィナンシャル・タイムズ
には「最も賢い億万長者」と評された。
-- wikipedia
7
定量的取引の初歩--発展
1970年代米国の株式市場で生まれた
RenTech: 1988-2008
年間の投資利益率は35%を超えた
2014でVirtu Financialという
HFT会社損失の日: 0
Sentient Technologies:
2015年で1.43億ドルの投資を受けた
AIのトレードポリシーを開発した
2016年: top 10高収入の
ヘッジファンドマネージャーの中で8人は
定量取引の従業者
• Githubで定量的取引ツールのランキング
8
定量的取引の紹介--ツール
https://zhuanlan.zhihu.com/p/355915905
目次
2
3
4
5
定量的取引の開発
VNPYの紹介
VNPYでバックテストの検証
サマリー
9
1 定量的取引の紹介
10
定量的取引の開発--構成
データ
分析
ポリシー
バックテスト
トレード
リスク
コントロール
管理
ポリシー分析
ポリシー開発
11
定量的取引の開発--データ
データサービス
データサービス
分析、テスト
データ保存
データ処理
データ収集
マーケット
別のデータ
ニュース、SNS、財務情報などの「別のデータ」も重要
12
定量的取引の開発--分析
ポリシー
バックテスト
データサービス
トレード
• 昔のデータでなるべく実際的な取引のシミュレーションを行ない、トレードポ
リシーを検証する
13
定量的取引の開発--バックテスト
データサービス
トレード
ポリシー
結果分析
データ準備
データ
前処理
バッチで
実行
PnL分析
ポリシー
更新
14
定量的取引の開発--トレード
ポリシー
データサービス
リスクコントロール
リスクコントロール
金融市場
クロスプラットフォーム C/Sモード
基準的なインタフェース
15
定量的取引の開発--リスクコントロール
ポリシー
トレード リスク分析
管理システム
リスク分散化
複数レイヤーで管理
厳密に実行 リスクコントロール
ポリシー
常にルールに従って取引される
16
定量的取引の開発--管理
ポリシー
トレード 分析
複数レイヤーで
モニタリング
リスク評価
ポリシー評価
取引分析
リスクコントロール
システム
厳密な管理は大事
• 高頻度取引(HFT)
• 超高速で取引を実行して、瞬間のチャンスを取って利益を取れることに目指す
• 低いポジション、利益取れる確率が高い、取引にあたりの利益が低い、取引手数
料が高い
• 商品取引アドバイザー(CTA)
• 動的ポジション、市場のトレンドを判断することが必要である
• 利益取れる確率が少し低い、取引にあたりの利益が高い
• アービトラージ(Arbitrage)
• 複数の投資資産に関わる
• 動的ポジション、利益取れる確率が高い、取引にあたりの利益が低い
17
定量的取引の開発--タイプ
18
定量的取引の開発--振り返り
データ
分析
ポリシー
バックテスト
トレード
リスク
コントロール
管理
ポリシー分析
ポリシー開発
定量的取引の開発=複雑なトレードシステムを立ち上げる
定量的取引フレームワーク(その1)
名前 開発 特徴 備考 国家
vnpy Python トレードに向け、総合
性
バージョンが多い 中国
Zipline Python ポリシーを
Quantopianのサー
バーに提出
昨年Quantopianがク
ローズした
アメリカ
Lean C#, F#とPython API バックテストが速い アメリカ
Backtrader Python バックテスト+本場ト
レード
厳しいコード審査 アメリカ
RQalpha Python 豊富なデータソース 中国
Abuquant Python AIポリシー 中国
Fmzquant Python, JavaScript Webに基づき 中国
AIOquant Python 性能が高い バックテストがない 中国
• 複雑なトレードシステムを開発するため、定量的取引フレーム
ワークが誕生
19
定量的取引フレームワーク(その2)
• プロプライエタリソフトウェア
20
目次
2
3
4
5
定量的取引の開発
VNPYの紹介
VNPYでバックテストの検証
サマリー
21
1 定量的取引の紹介
Demo 1
VNPYの紹介
Hello VNPY !
22
VNPYの紹介--ユーザー
• 中信証券オプションデパートメント
23
VNPYの紹介--最初の定位
• オープンソースのトレードツールだった
• 2015/01陳暁優という先物のトレーダーによりリリースした
Pythonで定量取引のツールボックス
データ
収集
データ分析 ポリシー分析 トレード
24
VNPYの紹介--アーキテクチャ
関係DB
• マインエンジンとイベントエンジン以外、他のコンポーネントはプラグイン 25
VNPYの紹介--イベントエンジン
• Python queueの上で開発された
• 基本操作: put(), get()
• Redis pub/subと似ている
• Handlersリスト
• Type:イベントタイプ
(e.g., order, tradeとポジションの変化など)
• Dict: 内容
• Hander list:モニター関数リスト
• Register():モニター関数を追加する
• Thread
• イベントを取り込み、Handlersリストに知らせ 26
VNPYの紹介--イベントエンジンの使用
• 使用Demo
• CTA エンジン
27
VNPYの紹介--メインエンジン
DB
• 各エンジンのインスタンス化
• CtaEngine
• EventEngine
• DataEngine
• …
• Gatewayのカプセル化
• DataEngineのカプセル化
28
VNPYの紹介--CTAエンジン
• CTAポリシーの容器
29
Demo 2
ポリシーの起動
ポリシーの監視
VNPYの紹介--取引インターフェース
• 基準化になる
• 拡充できる
ctp_gateway
ib_gateway
okex_gateway
xxx_gateway
vnpy/trader/gateway vnpy/gateway
30
VNPYの紹介--データエンジン
• データエンジン
• 違うタイプのデータベースに統一の操作API
• 関係データベース: SQLite、MySQL
• ドキュメントデータベース: MongoDB
• 時系列データベース: InfluxDB
31
Demo 3
VNPYの紹介--リスクコントロール
• トレード実行の視点でリスクコントロール
• order数量の制限
• トレード数量の制限
「頻繫に取引したら、リスクが高くなる」
32
VNPYの紹介--バックテストエンジン(その1)
• バックテストエンジンの動き
• ポリシーのロード、初期化と実行
• データのロードとデータをポリシーに渡す
• ポリシーのトレード指令を受け取るし、ローカルで実行とマッチング
• 結果をまとめる
• データ
• Barデータのバックテスト
• 分間単位、時間単位とデイリィ
• 価格のOpen、High、Low、Close、取引数量
• Tickデータのバックテスト
• ミリ秒単位
• 売買の価格
33
VNPYの紹介--バックテストエンジン(その2)
34
VNPYの紹介--総括
• 定量的取引の開発
35
• VNPYの「 ALL IN ONE 」
• データ
• データレコーダー、データエンジン
• 分析
• Anaconda, 可視化GUI
• バックテスト
• バックテストエンジン
• トレード
• 統一的API
• リスクコントロール
• ルールに従って取引される
• 管理
• 管理GUI
• ポリシー
• ポリシーエンジン、開発用テンプレート
VNPYの紹介--他のバージョン
• 強化バージョン
• https://github.com/msincenselee/vnpy
• イベントエンジン: queue → RabbitMQ
• もっとポリシーとインターフェースが増えている
• リスクコントロールを改良する
• …
• RedTorch: Javaで実装
• https://github.com/sun0x00/redtorch
• VNGO: Goで実装
• https://github.com/pseudocodes/vngo
• Pyalgotrader: 英語のバージョン
• https://github.com/day0market/pyalgotrader
36
目次
2
3
4
5
定量的取引の開発
VNPYの紹介
VNPYでバックテストの検証
サマリー
37
1 定量的取引の紹介
VNPYの紹介--ポリシーの開発 (その1)
• CTAポリシー開発の流れ
38
VNPYの紹介--ポリシーの開発(その2)
• @virtualを全部の
データ事例しなけれ
ばならない
• on_barはもっと重要
• ポリシーのロジックが
置いてある
アクション 意味
Buy longポジションを立てる
Sell longポジションをクローズ
Short shortポジションを立てる
Cover shortポジションをポジション 39
• 商品取引アドバイザー(CTA)
• 傾向に沿う取引ポリシー
• 持っているポジションを活かせる
• 成熟したアルゴリズムが多い
• ポートフォリオを作れる
• 代表的なCTAアルゴリズム
40
VNPYで実例の検証--CTA
ポリシー タイプ
ダブル移動平均 (Double MA) トレンドフォロー
AtrRsi, Dual Thrust, King Keltner 突破
• ダブル移動平均(英: Double MA)
• 普段、直近の5時間単位と10時間単位の価格の平均値(MA)を比較
• MA5はMA10を上回ると、購入してみる
• MA5はMA10を下回ると、販売してみる
41
VNPYで実例の検証--Double MA
http://www.calgocbots.com/ma-cbots/double-simple-moving-average-crossover-cbot
• ATR (Average True Range)
• 価格変動(ボラティリティ)の度合い
• RSI (Relative Strength Index)
• 相対力指数
• >=0.7:買いが優勢⇒上昇トレンド⇒買われ過ぎ
• <=0.3:売りが優勢⇒下落トレンド⇒売られ過ぎ
42
VNPYで実例の検証– AtrRsi (その1)
https://www.avatrade.co.jp/kojiro/13/
https://www.moneypartners.co.jp/support/tech/rsi.html
• AtrRsiの実装
43
VNPYで実例の検証– AtrRsi (その2)
(1) RSIで取引のシグナルを生成
(2) 取引を実行する:ATRでシグナルをフィルタ
(3) 取引を止める: trailing_stopで離れる
• Cincoポリシー
• VNPYに追加したポリシー
• 公開の実装
44
VNPYで実例の検証--Cinco
Bollinger Band 信号とフィルタリング
Trailing stop 取引停止
動的ポジション管理 リスクコントロール
https://github.com/renyong/vnpy/blob/master/vnpy/app/cta_strategy/strategies/cinco.py
Self.trading_size = int(self.risk_level / self.atr_value)
• パラメータのチューニング
• ブルート・フォース (Brute force)
• 進化アルゴリズム方法
• パラメータチューニングの流れ
45
VNPYで実例の検証-- パラメータチューニング
https://deap.readthedocs.io/en/master/
パラメータ空間を決める
グローバルで進化アルゴリズム
によってチューニング
ローカルでBrute force
トレーニングのデータで検証
テストデータで検証
Demo 4
暗号資産の爆発
https://assets.coingecko.com/reports/2020-Year-End-
Report/CoinGecko-2020-Report-JP.pdf
46
• CTAポリシーの検証
• データ
• データソース: Binance、分間単位、先物の取引データ
https://www.cryptodatadownload.com/data/
• パラメータチューニング: BTC-USDT(2020/09/12-2021/01/31)
• テスト: BTC-USDT(2021/02/01-2021/03/20)
• ポートフォリオと統計的アビトラを試す: ZTC-USDT(2021/02/01-2021/03/20)
• パラメータチューニング
• DEAPで遺伝的アルゴリズムによる特徴選択 (DEAP documentation — DEAP 1.3.1
documentation)
47
VNPYで実例の検証-- CTAの検証(その1)
*Binance: 暗号資産取引所の No.1
https://assets.coingecko.com/reports/2020-Year-End-
Report/CoinGecko-2020-Report-JP.pdf
• チューニングしたパラメータ
• ダブル移動平均
• AtrRsi
• Cinco
• デフォルトのパラメータ
48
VNPYで実例の検証-- CTAの検証(その2)
fast window (5-19) slow window (20-50)
12 50
atr length (20-50) atr ma length (5-10)
33 10
• 結果の比較
49
VNPYで実例の検証-- CTAの検証(その3)
sharp ratio(年間) バランス 收益率(デーリー)
Double MA -17.25 904,213 -0.25%
AtrRsi -13.98 941,230 -0.15%
Cinco 4.81 1,016,957 0.04%
50
VNPYで実例の検証--ポートフォリオの検証
• 複数の資産を組み合わせてポートフォリオを作れる
• ポートフォリオの結果
• BTC-USDT (80万の最初の資金、 Cincoポリシー)
• ZEC-USDT (20万の最初の資金、 Cincoポリシー)
• 伝統な資産と組み合わせて良いポートフォリオを作れるかもしれない
• ボラティリティを抑えることは大事
sharp ratio(年間) バランス 收益率(デーリー)
全部BTC-USDT 4.81 1,016,957 0.04%
ポートフォリオ 2.80 1,017,962 0.05%
Demo 5
• 複数の資産を組み合わせてアービトラージポリシーを作れる
• 統計的なアービトラージの紹介
• 短期売買
• 複数資産の組み合わせ(ポートフォリオ)
• ミーンリバージョン(英: mean reversion)という理論に関連する
• カレンダー・スプレッドとインターコモディティ・スプレッドによく使われる
51
VNPYで実例の検証--統計的アビトラ(その1)
https://www.tequity.co.in/post/statistical-arbitrage-or-pair-trading
• 設定
• 方法:統計的なアービトラージ,ボリンジャー・バンド(英: Bollinger Band)
• rate:0.04% , slippage: 0.1%, 最初資金: 1M USDT
• 結果
52
VNPYで実例の検証--統計的アビトラ(その2)
• 結果分析
• 価格の相関性が高い
• spearman 相関係数: 0.852
• 両方の価格差は高くなっている
• ミーンリバージョンはあまり起こっていなかった
53
VNPYで実例の検証--統計的アビトラ(その3)
目次
2
3
4
5
定量的取引の開発
VNPYの紹介
VNPYでバックテストの検証
サマリー
54
1 定量的取引の紹介
• 定量トレードの紹介
• 定義、応用、発展など
• VNPYの紹介
• アーキテクチャ、各コンポーネントと使い方に関する説明
• VNPYで定量トレードプリンターの実装と検証
• CTAポリシー(double MA、AtrRis、Cinco)、ポートフォリオ、統計的アビトラ
• 進化アルゴリズムに基づきパラメータのチューニング
55
サマリー (その1)
• VNPYのメリット
• 本番のトレードに向け:様々な取引資産に支える
• V2がリリースして以来、簡単的なデプロイできるようになる
• 便利な使用方: GUI
• 総合的なシステムになる:「all in one」の構築
• カスタマイズは簡単に達成できる
• Tickデータでバックテストとpaper accountが使用できる
56
サマリー (その2)
• VNPYのデメリット
• 中国人に向け:中国語のみのGUI、中国語でソースコードコメント、中国人のコ
ミュニティ
• 性能の懸念: pythonで開発された、queueの上で構築されたイベントエンジン
• スプレッドアビトラエンジン:Tickデータの取り込みにバグがある。こちらは改修しまし
た。
57
サマリー (その3)
• 高性能のフレームワークに注力したい
• VNPYの強化バージョン
• https://github.com/msincenselee/vnpy
• AIOquant
• https://github.com/paulran/aioquant
三角裁定取引(英:Triangular arbitrage) 、マーケットメイク(英:Market Making)の開発に使われる
58
今後の課題
• 李来佳(Li Laijia)
• 強化バージョンのVNPYの開発者
59
特別な感謝
https://github.com/msincenselee
http://huafuzc.com/intro_team.html
ご清聴
ありがとうございました
60

More Related Content

Similar to Renyong 20210330

ファイナンシャル・エクストラネット
ファイナンシャル・エクストラネットファイナンシャル・エクストラネット
ファイナンシャル・エクストラネットKVH Co. Ltd.
 
大企業のためのリーンスタートアップ ~不確実性への挑戦 0.2~
大企業のためのリーンスタートアップ ~不確実性への挑戦 0.2~大企業のためのリーンスタートアップ ~不確実性への挑戦 0.2~
大企業のためのリーンスタートアップ ~不確実性への挑戦 0.2~naoto kyo
 
システムトレード構築セミナー
システムトレード構築セミナーシステムトレード構築セミナー
システムトレード構築セミナーYoshiyuki Hongoh
 
140928 競争優位を築くため「ビジネスモデル」
140928 競争優位を築くため「ビジネスモデル」140928 競争優位を築くため「ビジネスモデル」
140928 競争優位を築くため「ビジネスモデル」Kenichi Takara
 
第8回 スキルアップ勉強会
第8回 スキルアップ勉強会第8回 スキルアップ勉強会
第8回 スキルアップ勉強会Kenichi Takara
 

Similar to Renyong 20210330 (6)

ファイナンシャル・エクストラネット
ファイナンシャル・エクストラネットファイナンシャル・エクストラネット
ファイナンシャル・エクストラネット
 
大企業のためのリーンスタートアップ ~不確実性への挑戦 0.2~
大企業のためのリーンスタートアップ ~不確実性への挑戦 0.2~大企業のためのリーンスタートアップ ~不確実性への挑戦 0.2~
大企業のためのリーンスタートアップ ~不確実性への挑戦 0.2~
 
システムトレード構築セミナー
システムトレード構築セミナーシステムトレード構築セミナー
システムトレード構築セミナー
 
140928 競争優位を築くため「ビジネスモデル」
140928 競争優位を築くため「ビジネスモデル」140928 競争優位を築くため「ビジネスモデル」
140928 競争優位を築くため「ビジネスモデル」
 
Dynamic+arms+fx091111
Dynamic+arms+fx091111Dynamic+arms+fx091111
Dynamic+arms+fx091111
 
第8回 スキルアップ勉強会
第8回 スキルアップ勉強会第8回 スキルアップ勉強会
第8回 スキルアップ勉強会
 

Renyong 20210330