この記事では,初心者ガイドと戦略識別で始まった定量取引に関するシリーズを継続しています.この2つの長い,より複雑な記事は非常に人気がありますので,この流れで継続し,戦略バックテストのテーマについて詳細を提供します.
アルゴリズムバックテストには,心理学,数学,統計,ソフトウェア開発,市場/取引マイクロ構造を含む多くの分野に関する知識が必要です.これらのトピックをすべて1つの記事でカバーすることを期待することはできませんので,それらを2つまたは3つの小さな部分に分割します.このセクションでは,何を議論しますか?バックテストを定義して,それを実行する方法の基礎を説明します.次に,Beginner's Guide to Quantitative Tradingで触れたバイアスを説明します.次に,利用可能なさまざまなバックテストソフトウェアオプションの比較を紹介します.
次の記事では,しばしばほとんど言及されていないまたは無視されている戦略実装の詳細を検討します.また,取引取引所の特徴を含め,バックテストプロセスをより現実的にする方法も検討します.その後,取引コストとバックテストの設定でそれらを正しくモデル化する方法について議論します.我々はバックテストのパフォーマンスについての議論で終了し,最後に,平均逆転ペア取引として知られる一般的な量子戦略の例を提供します.
バックテストとは何かと なぜそれをアルゴリズム取引で行うべきかを説明しましょう
アルゴリズムの取引は,豊富なデータ利用の結果として,過去のパフォーマンスから将来のパフォーマンスに関する期待をより信頼的に提供できるため,他のタイプの投資クラスとは異なります.これを実行するプロセスはバックテストとして知られています.
簡単な言葉で言えば,バックテストは,特定の戦略アルゴリズムを歴史的な財務データに曝し,一連の取引シグナルにつながることで行われます.各取引 (ここで2つのシグナルの"回転"を意味します) には関連した利益または損失があります.この利益/損失の蓄積は,戦略バックテストの期間中に総利益と損失 (P&LまたはPnLとも呼ばれます) に導きます.これはアイデアの本質です.しかし,もちろん,悪魔は常に詳細にあります!
アルゴリズム戦略のバックテストの主な理由は?
バックテストはアルゴリズム取引に多くの利点をもたらす.しかし,戦略を直接バックテストすることは常に不可能である.一般的に,戦略の頻度が増加するにつれて,市場と取引所のマイクロ構造効果を正しくモデル化することは難しくなります.これは信頼性の低いバックテストにつながり,選択した戦略の評価が難しくなります.これは,超高周波アルゴリズムと同様に,実行システムが戦略のパフォーマンスに鍵となる特定の問題です.
バックテスト は,あらゆる 種類 の 偏見 に 満ち て い ます.前 の 記事 に は,これら の 問題 に つい て いくつ か 触れました.しかし,今 は その 問題 に つい て 詳細 に 話し ます.
バックテストされた戦略のパフォーマンスに影響を与えるバイアスはたくさんあります.残念ながら,これらのバイアスは,パフォーマンスを低下させるのではなく,パフォーマンスを膨らませる傾向があります.したがって,バックテストを常に戦略の実際のパフォーマンスに対する理想化された上限とみなすべきです.アルゴリズム取引からバイアスを排除することはほとんど不可能です.したがって,アルゴリズム戦略について情報に基づいた決定を下すために,可能な限りそれらを最小限に抑えるのが私たちの仕事です.
私がお話ししたい4つの大きなバイアスがあります 最適化バイアス 展望バイアス 生き残りバイアス 心理的寛容バイアスです
これはおそらくすべてのバックテストバイアスの中で最も陰謀的なものです.バックテストデータセットの戦略パフォーマンスが非常に魅力的なようになるまで,追加の取引パラメータを調整または導入することを意味します.しかし,一度実行すると,戦略のパフォーマンスが著しく異なる可能性があります.このバイアスの別の名前は
最適化バイアスは,アルゴリズム戦略には多くのパラメータが含まれるため,排除するのは難しい.
このバイアスを軽減する1つの方法は,感度分析を行うことです.これは,パラメータを漸進的に変化させ,性能の"表面"をプロットすることを意味します.パラメータ選択のための健全で基本的な推論は,他のすべての要因を考慮すると,よりスムーズなパラメータ表面につながるべきです.非常にジャンプ的なパフォーマンス表面がある場合,パラメータが現象を反映していないことをしばしば意味し,テストデータのアーティファクトです.多次元最適化アルゴリズムに関する膨大な文献があり,非常に活発な研究分野です.私はここでそれに停留しませんが,素晴らしいバックテストを持つ戦略を見つけるときにはそれを心の裏に留めてください!
バックテストは,将来データが実際に利用できないシミュレーションの時点で偶然含まれるときに,バックテストシステムに導入される.もしバックテストを年代順に実行し,時間点Nに到達した場合,k>0の任意の点N+kにデータが含まれている場合,バックテストは発生する.バックテストの誤差は非常に微妙である.以下は,バックテストの導入方法の3つの例です.
オプティマイゼーションバイアスのように,その導入を避けるには非常に注意する必要があります.これはしばしば,取引戦略が"ライブ・トレーディング"でバックテストを大幅に下落する主な理由です.
生き残りのバイアスは特に危険な現象であり,特定の戦略タイプでは,大幅に膨張したパフォーマンスを引き起こす可能性があります. 戦略は,特定の時点で選択された可能性のある以前の資産の完全な宇宙を含まないデータセットでテストされ,現在の時点まで"生き残った"もののみを考慮する場合に発生します.
例えば,2001年の市場崩壊前後の株式のランダムな選択で戦略をテストしてみましょう.一部のテクノロジー株は破産し,他の株は浮上し,繁栄さえしました.この戦略を市場引き下げ期間を通過した株だけに制限していたら,彼らはすでに私たちに成功を証明しているため,生存バイアスを導入していたでしょう.実際には,これは将来の情報が過去の分析に組み込まれているため,前向きなバイアスの別の特定のケースです.
戦略のバックテストで 生き残りの偏見を軽減する方法が 2つあります
取引の業績に影響を与える心理現象を 検討します
この特定の現象は定量取引の文脈ではしばしば議論されない.しかし,より裁量的な取引方法に関して広く議論されている.それはさまざまな名前がありますが,問題の本質を捉えるため,それを"心理的寛容偏差"と呼ぶことにしました. 5年またはそれ以上の期間でバックテストを作成するとき,上向きの傾向の株式曲線を見て,複合年収,シャープ比率,さらには引き下げ特性を計算し,結果に満足することは簡単です.例として,戦略は最大相対引き下げ25%と最大引き下げ期間を4ヶ月持っています.これはモメンタン戦略にとって不典型ではありません.しかし,全体的なイメージがバラ色であるため,そのような損失の期間を許容することは容易であると自分自身を説得することは簡単です.実際は,はるかに難しいです!
バックテストで 25%以上の歴史的な引き下げが起こると,ライブ・トレードで同様の引き下げの期間が見られる可能性が高い.これらの引き下げの期間は心理的に耐え難い.私は,機関的な環境で延長された引き下げがどんなものになるかを直接観察した.そしてそれは愉快ではない - バックテストがそのような期間が起こることを示唆しても.私がそれをバイアスと呼ぶ理由は,通常,成功する戦略は,延長された引き下げの期間中に取引から停止され,その結果,バックテストと比較して劣悪なパフォーマンスをもたらすからです.したがって,戦略はアルゴリズムの性質があるにもかかわらず,心理的要因は依然として収益性に大きな影響を与えます.引き下げは,特定の割合と期間をバックグラウンドで見ると,あなたはそれを期待する必要があります.
戦略バックテストのためのソフトウェア・ランドスケープは広大です.ソリューションは,完全に統合された機関級の洗練されたソフトウェアから,ほぼすべてがゼロから書き上げなければならないC++,Python,Rなどのプログラミング言語まであります (または適切な"プラグイン"を取得します). 量子トレーダーとして,我々は,当社の開発方法論の速度と信頼性に対して,当社の取引技術スタックを"所有"できるバランスに関心があります.ソフトウェア選択の主要な考慮事項は以下です:
もっと人気のあるパッケージのいくつかを見てみましょう. 比較してみましょう.
注:私は,ほとんどの小売業者とソフトウェア開発者に利用可能なソフトウェアのみを掲載します.これはサイトの読者数です.より機関的なグレードのツールなどの他のソフトウェアが利用可能ですが,これは小売環境で効果的に使用するには高価すぎると感じています.そして,個人的に経験はありません.
バックテストソフトウェアの比較
記述:WYSIWYG (what-you-see-is-what-you-get) スプレッドシートソフトウェア.金融業界では非常に普及している.データとアルゴリズムは緊密に結合している.
実行:はい,Excelはほとんどのブローカーに結びつけることができます.
カスタマイズ: VBA マクロは,実装を隠すことでより高度な機能を可能にします.
戦略の複雑性: 複数の資産を数百個含む戦略と同様に,より高度な統計ツールが実装するのが困難です.
バイアス最小化: セルハイライト機能 (VBAがないと仮定) によって前向きバイアスを検出することは簡単です.
開発速度: 基本的な戦略を迅速に実行する.
実行速度: 実行速度が遅い - 低周波戦略のみに適している.
費用: 安いか 無料か (ライセンス に かかっ て).
オプション:OpenOffice
記述: プログラミング環境は,元々計算数学,物理学,工学のために設計された. ベクトル化演算と数直線代数を伴う操作に非常に適しています. 量子取引のための幅広いプラグインを提供しています. 定量ヘッジファンドで広く使用されています.
実行:ネイティブ実行機能がないため,MATLABには別々の実行システムが必要です.
カスタマイズ: コンピューティング数学のほぼすべての分野のためのコミュニティプラグインの膨大な数量.
戦略の複雑性: すでに利用可能で,よくテストされている多くの高度な統計方法.
バイアス最小化:前向きなバイアスを検出するのが難しく,広範なテストが必要です.
開発速度: 短いスクリプトは簡単に洗練されたバックテストを作成できます
実行速度:ベクトル化/並列化アルゴリズムを想定すると,MATLABは高度に最適化されています.伝統的な繰り返しのループでは劣っています.
費用:ライセンスの費用は約1,000ドルです.
オルタナティブ:オクターブ,SciLab
記述: 開発速度のために設計された高レベルの言語. 想像可能なほぼすべてのプログラミングタスクのための幅広いライブラリ. ヘッジファンドと投資銀行コミュニティでより広く受け入れられている. 実行速度のためにC / C ++ほど速くありません.
実行:Pythonプラグインは,インタラクティブ・ブローカーなどの大きなブローカーのために存在する.したがって,バックテストと実行システムはすべて同じ"技術スタック"の一部である.
パーソナライゼーション: Python は非常に健全な開発コミュニティを持ち,成熟した言語である. NumPy/SciPy は量子取引に関連する急速な科学コンピューティングと統計分析ツールを提供します.
戦略の複雑性:主要なアルゴリズムには多くのプラグインがありますが,MATLABの量子コミュニティはそれほど大きくありません.
バイアス最小化:あらゆるハイレベル言語と同じバイアス最小化問題は存在します.テストについて非常に注意する必要があります.
開発速度:Pythonの主な利点は,開発速度であり,テスト能力がしっかりと組み込まれています.
実行速度:C++ほど速くありませんが,科学的コンピューティングコンポーネントは最適化され,Pythonは特定のプラグインでネイティブCコードと会話できます.
費用:無料/オープンソース
オルタナティブ:ルビー,エルラング,ハスケル
記述: 高度な統計方法と時間列分析のために設計された環境. 幅広い特定の統計,経済学およびネイティブグラフツールセット. 大規模な開発者コミュニティ.
実行:Rは,一部のブローカー,特にインタラクティブブローカーにプラグインを持っています.したがって,エンドツーエンドシステムは完全にRで記述できます.
パーソナライゼーション:Rはあらゆるパッケージでパーソナライズできますが,その強みは統計/経済学分野にあります.
戦略の複雑性:利用可能なプラグインにより,経済学,統計学,機械学習の戦略を実行する場合,主に有用です.
バイアス最小化:PythonやC++などの高レベルの言語でバイアスの可能性が類似しているため,テストを行う必要があります.
開発速度: R は統計的方法に基づいた戦略を書くための高速です.
実行速度:RはC++よりも遅いが,ベクトル化操作 (MATLABと同様に) に比較的最適化されている.
費用:無料/オープンソース
オルタナティブ:SPSS,スタタ
記述:実行速度のために設計された成熟した高レベルの言語. 定量金融と数値ライブラリの幅広い範囲. デバッグが難しく,PythonやMatLABよりも実装に時間がかかります. 購入と販売の両方で非常に一般的です.
実行:ほとんどのブローカージ API は C++ と Java で書かれています.したがって多くのプラグインがあります.
カスタマイズ:C/C++は,基礎メモリへの直接アクセスを可能にし,したがって超高周波戦略を実装することができる.
戦略の複雑性:C++ STLは,幅広い最適化されたアルゴリズムを提供しています.ほぼすべての専門的な数学アルゴリズムは,ウェブ上で無料でオープンソースのC/C++実装を持っています.
バイアス最小化:前向きなバイアスを排除するのは難しいかもしれませんが,他のハイレベル言語よりも難しくありません. 優れたデバッグツールですが,基礎メモリに対処する際には注意する必要があります.
開発速度:C++は,同じアルゴリズムでPythonやMatlabと比較してかなり語彙が多い.より多くのコード行 (LOC) は,バグの可能性が高くなります.
実行速度:C/C++は極めて高速な実行速度を持ち,特定のコンピューティングアーキテクチャに最適化することができます.これが使用する主な理由です.
コスト:様々なコンパイラ:Linux/GCCは無料で,MS Visual Studioには異なるライセンスがあります.
C#,Java,スカラ
HFTとUHFT戦略はC/C++で記述される (現在はGPUとFPGAでしばしば実行される),低周波の指向型株式戦略はソフトウェア/ブローケージの"全体"性により,TradeStationで実装が容易である.
私の個人的な好みは,Pythonです.それは私のニーズや戦略に適したカスタマイズ,開発速度,テスト能力,実行速度を提供します.何か速くする必要がある場合,私は直接私のPythonプログラムからC++にドロップすることができます.多くの量子トレーダーが好む1つの方法は,Pythonで戦略のプロトタイプを作成し,次に遅い実行セクションをC++に繰り返す方法で変換することです.最終的には,すべてのアルゴリズムはC++で書かれ,取引に単独で置き去りにすることができます!
バックテストに関する次の記事では,アルゴリズム取引のバックテストシステムの実装をめぐる特定の問題や,取引取引所の効果をどのように組み込むかについて見ていきます.戦略のパフォーマンス測定について議論し,最後に戦略の例で締めくくります.