アルゴリズム取引戦略の成功裏テスト - 第1部

作者: リン・ハーン優しさ作成日: 2019-03-20 17:00:16, 更新日:

この記事では,初心者ガイドと戦略識別で始まった定量取引に関するシリーズを継続しています.この2つの長い,より複雑な記事は非常に人気がありますので,この流れで継続し,戦略バックテストのテーマについて詳細を提供します.

アルゴリズムバックテストには,心理学,数学,統計,ソフトウェア開発,市場/取引マイクロ構造を含む多くの分野に関する知識が必要です.これらのトピックをすべて1つの記事でカバーすることを期待することはできませんので,それらを2つまたは3つの小さな部分に分割します.このセクションでは,何を議論しますか?バックテストを定義して,それを実行する方法の基礎を説明します.次に,Beginner's Guide to Quantitative Tradingで触れたバイアスを説明します.次に,利用可能なさまざまなバックテストソフトウェアオプションの比較を紹介します.

次の記事では,しばしばほとんど言及されていないまたは無視されている戦略実装の詳細を検討します.また,取引取引所の特徴を含め,バックテストプロセスをより現実的にする方法も検討します.その後,取引コストとバックテストの設定でそれらを正しくモデル化する方法について議論します.我々はバックテストのパフォーマンスについての議論で終了し,最後に,平均逆転ペア取引として知られる一般的な量子戦略の例を提供します.

バックテストとは何かと なぜそれをアルゴリズム取引で行うべきかを説明しましょう

バックテストとは?

アルゴリズムの取引は,豊富なデータ利用の結果として,過去のパフォーマンスから将来のパフォーマンスに関する期待をより信頼的に提供できるため,他のタイプの投資クラスとは異なります.これを実行するプロセスはバックテストとして知られています.

簡単な言葉で言えば,バックテストは,特定の戦略アルゴリズムを歴史的な財務データに曝し,一連の取引シグナルにつながることで行われます.各取引 (ここで2つのシグナルの"回転"を意味します) には関連した利益または損失があります.この利益/損失の蓄積は,戦略バックテストの期間中に総利益と損失 (P&LまたはPnLとも呼ばれます) に導きます.これはアイデアの本質です.しかし,もちろん,悪魔は常に詳細にあります!

アルゴリズム戦略のバックテストの主な理由は?

  • フィルタリング - 戦略識別に関する記事から覚えているなら,初期研究段階での我々の目標は,戦略パイプラインを設定し,特定の基準を満たさない戦略をフィルタリングすることでした.バックテストは,我々のパフォーマンスニーズを満たさない戦略を排除できるので,別のフィルタリングメカニズムを提供します.
  • モデリング - バックテストは,取引コスト,オーダールーティング,レイテンシー,流動性,その他の市場マイクロ構造の問題などの特定の市場現象の新しいモデルを (安全に!) テストすることができます.
  • 最適化 - 戦略の最適化は偏見に満ちているが,バックテストは,その戦略に関連したパラメータの量または値を修正し,そのパフォーマンスを再計算することによって戦略のパフォーマンスを向上させることができる.
  • 検証 - 私たちの戦略は,しばしば戦略パイプラインを通じて外部から調達されます. 戦略のバックテストは,それが正しく実装されていないことを保証します. 外部戦略によって生成された信号にアクセスすることはめったにありませんが,私たちはしばしばシャープ比率や引き下げ特性などのパフォーマンスメトリックにアクセスできます.したがって,それらを私たちの実装と比較することができます.

バックテストはアルゴリズム取引に多くの利点をもたらす.しかし,戦略を直接バックテストすることは常に不可能である.一般的に,戦略の頻度が増加するにつれて,市場と取引所のマイクロ構造効果を正しくモデル化することは難しくなります.これは信頼性の低いバックテストにつながり,選択した戦略の評価が難しくなります.これは,超高周波アルゴリズムと同様に,実行システムが戦略のパフォーマンスに鍵となる特定の問題です.

バックテスト は,あらゆる 種類 の 偏見 に 満ち て い ます.前 の 記事 に は,これら の 問題 に つい て いくつ か 触れました.しかし,今 は その 問題 に つい て 詳細 に 話し ます.

戦略のバックテストに影響を与えるバイアス

バックテストされた戦略のパフォーマンスに影響を与えるバイアスはたくさんあります.残念ながら,これらのバイアスは,パフォーマンスを低下させるのではなく,パフォーマンスを膨らませる傾向があります.したがって,バックテストを常に戦略の実際のパフォーマンスに対する理想化された上限とみなすべきです.アルゴリズム取引からバイアスを排除することはほとんど不可能です.したがって,アルゴリズム戦略について情報に基づいた決定を下すために,可能な限りそれらを最小限に抑えるのが私たちの仕事です.

私がお話ししたい4つの大きなバイアスがあります 最適化バイアス 展望バイアス 生き残りバイアス 心理的寛容バイアスです

最適化バイアス

これはおそらくすべてのバックテストバイアスの中で最も陰謀的なものです.バックテストデータセットの戦略パフォーマンスが非常に魅力的なようになるまで,追加の取引パラメータを調整または導入することを意味します.しかし,一度実行すると,戦略のパフォーマンスが著しく異なる可能性があります.このバイアスの別の名前は曲線フィッティングまたはデータスヌーピングバイアスです.

最適化バイアスは,アルゴリズム戦略には多くのパラメータが含まれるため,排除するのは難しい. パラメータは,この場合,エントリー/アウトグイト基準,バックバック期,平均期 (すなわち移動平均のスムーズ化パラメータ) または波動性測定頻度である可能性があります. パラメータの数を最小限に抑え,トレーニングセット内のデータポイントの数を増やすことで最適化バイアスを最小限に抑えることができます. 実際,古いトレーニングポイントは,以前の体制 (規制環境など) に従属し,現在の戦略に関連がない可能性がありますので,後者のことも注意する必要があります.

このバイアスを軽減する1つの方法は,感度分析を行うことです.これは,パラメータを漸進的に変化させ,性能の"表面"をプロットすることを意味します.パラメータ選択のための健全で基本的な推論は,他のすべての要因を考慮すると,よりスムーズなパラメータ表面につながるべきです.非常にジャンプ的なパフォーマンス表面がある場合,パラメータが現象を反映していないことをしばしば意味し,テストデータのアーティファクトです.多次元最適化アルゴリズムに関する膨大な文献があり,非常に活発な研究分野です.私はここでそれに停留しませんが,素晴らしいバックテストを持つ戦略を見つけるときにはそれを心の裏に留めてください!

将来 を 見る 偏見

バックテストは,将来データが実際に利用できないシミュレーションの時点で偶然含まれるときに,バックテストシステムに導入される.もしバックテストを年代順に実行し,時間点Nに到達した場合,k>0の任意の点N+kにデータが含まれている場合,バックテストは発生する.バックテストの誤差は非常に微妙である.以下は,バックテストの導入方法の3つの例です.

  • テクニカルバグ - コード内の配列/ベクトルにはしばしばイテレーターまたはインデックス変数があります.これらのインデックスの誤ったオフセットは,ゼロ以外のkに対してN+kでデータを組み込むことで,前向きなバイアスにつながる可能性があります.
  • パラメータ計算 - 予測バイアスのもう一つの一般的な例は,二つの時間列間の線形回帰など,最適な戦略パラメータを計算するときに発生する. 全体のデータセット (将来のデータを含む) が回帰係数を計算するために使用され,したがって最適化目的でトレード戦略に遡及的に適用されれば,将来のデータが組み込まれ,予測バイアスが存在する.
  • 最大値/最小値 - 特定の取引戦略は,OHLCデータに高値または低値を組み込むなど,任意の期間における極端値を使用する.しかし,これらの最大値/最小値が期間末にのみ計算できるため,これらの値が現在の期間中に使用される場合,前向きなバイアスが導入されます.それらを使用する取引戦略では,常に高値/低値を少なくとも1期遅れにする必要があります.

オプティマイゼーションバイアスのように,その導入を避けるには非常に注意する必要があります.これはしばしば,取引戦略が"ライブ・トレーディング"でバックテストを大幅に下落する主な理由です.

生き延びる 偏見

生き残りのバイアスは特に危険な現象であり,特定の戦略タイプでは,大幅に膨張したパフォーマンスを引き起こす可能性があります. 戦略は,特定の時点で選択された可能性のある以前の資産の完全な宇宙を含まないデータセットでテストされ,現在の時点まで"生き残った"もののみを考慮する場合に発生します.

例えば,2001年の市場崩壊前後の株式のランダムな選択で戦略をテストしてみましょう.一部のテクノロジー株は破産し,他の株は浮上し,繁栄さえしました.この戦略を市場引き下げ期間を通過した株だけに制限していたら,彼らはすでに私たちに成功を証明しているため,生存バイアスを導入していたでしょう.実際には,これは将来の情報が過去の分析に組み込まれているため,前向きなバイアスの別の特定のケースです.

戦略のバックテストで 生き残りの偏見を軽減する方法が 2つあります

  • 存続バイアスフリーデータセット - 株式データの場合,リスト解除されたエンティティを含むデータセットを購入することは可能ですが,それは安価ではなく,機関企業のみが利用する傾向にあります.特に,Yahoo Financeデータは存続バイアスフリーではありません.これは多くの小売アルゴトレーダーによって一般的に使用されています.特定の商品 (およびそれらの将来の派生品) などの存続バイアス傾向のない資産クラスでも取引できます.
  • より最近のデータを使用する - 株式の場合,より最近のデータセットを使用すると,選択された株式の選択が短期間で全体的な株式のリスト解除の可能性が低いため",生存者"に重み付けされる可能性が軽減されます.また,現在の時点からデータを収集することによって個人生存率バイアスフリーデータセットを構築することもできます. 3-4年後には,さらなる戦略をバックテストするための堅牢な生存率バイアスフリーデータセットを備えます.

取引の業績に影響を与える心理現象を 検討します

心理的 寛容 バイアス

この特定の現象は定量取引の文脈ではしばしば議論されない.しかし,より裁量的な取引方法に関して広く議論されている.それはさまざまな名前がありますが,問題の本質を捉えるため,それを"心理的寛容偏差"と呼ぶことにしました. 5年またはそれ以上の期間でバックテストを作成するとき,上向きの傾向の株式曲線を見て,複合年収,シャープ比率,さらには引き下げ特性を計算し,結果に満足することは簡単です.例として,戦略は最大相対引き下げ25%と最大引き下げ期間を4ヶ月持っています.これはモメンタン戦略にとって不典型ではありません.しかし,全体的なイメージがバラ色であるため,そのような損失の期間を許容することは容易であると自分自身を説得することは簡単です.実際は,はるかに難しいです!

バックテストで 25%以上の歴史的な引き下げが起こると,ライブ・トレードで同様の引き下げの期間が見られる可能性が高い.これらの引き下げの期間は心理的に耐え難い.私は,機関的な環境で延長された引き下げがどんなものになるかを直接観察した.そしてそれは愉快ではない - バックテストがそのような期間が起こることを示唆しても.私がそれをバイアスと呼ぶ理由は,通常,成功する戦略は,延長された引き下げの期間中に取引から停止され,その結果,バックテストと比較して劣悪なパフォーマンスをもたらすからです.したがって,戦略はアルゴリズムの性質があるにもかかわらず,心理的要因は依然として収益性に大きな影響を与えます.引き下げは,特定の割合と期間をバックグラウンドで見ると,あなたはそれを期待する必要があります.

バックテストのためのソフトウェアパッケージ

戦略バックテストのためのソフトウェア・ランドスケープは広大です.ソリューションは,完全に統合された機関級の洗練されたソフトウェアから,ほぼすべてがゼロから書き上げなければならないC++,Python,Rなどのプログラミング言語まであります (または適切な"プラグイン"を取得します). 量子トレーダーとして,我々は,当社の開発方法論の速度と信頼性に対して,当社の取引技術スタックを"所有"できるバランスに関心があります.ソフトウェア選択の主要な考慮事項は以下です:

  • プログラミングスキル - 環境の選択は,ソフトウェアをプログラミングする能力に大きく左右されます.私は,全体的なスタックをコントロールすることは,ベンダーソフトウェアに可能な限り多くのアウトソーシングよりも長期的なP&Lに影響を及ぼすことになると主張します.これは,ベンダーソフトウェアで修正できない外部バグや特異性があるというマイナスリスクによるものです.
  • 実行能力/ブローカーインタラクション - トレデステーションなどの特定のバックテストソフトウェアは,ブローカーと直接結びついています.取引コストを削減することが,シャープ比率の高さを獲得する大きな要素であるため,このアプローチのファンではありません.特定のブローカーに結びついている場合 (そしてトレデステーションがそれを強制している場合),必要に応じて新しいソフトウェア (または新しいブローカー) に移行するのが難しくなります.インタラクティブブローカーは,少し鈍いインターフェースを持つものの,堅牢なAPIを提供します.
  • カスタマイズ - MATLABやPythonのような環境は,アルゴ戦略を作成する際に非常に柔軟性があり,想像可能なほぼすべての数学的操作のための素晴らしいライブラリを提供し,必要に応じて広範なカスタマイズも可能にします.
  • 戦略の複雑性 - 特定のソフトウェアは,重い数字処理や数学的複雑性には適していない. Excelはそのようなソフトウェアの1つである.より単純な戦略には良いが,多くの資産やより複雑なアルゴリズムを高速に処理することはできません.
  • バイアス最小化 - 特定のソフトウェアやデータが取引バイアスに適しているのでしょうか? バイアスにつながるバグを導入しないことを確認する必要があります.
  • 開発速度 - バックテストエンジンの実装に何ヶ月も費やさなくてもいい.プロトタイプ作成には数週間しかかかりません. 実行速度の追加の数パーセントポイントを獲得するために,ソフトウェアがあなたの進歩を大きく阻害していないことを確認してください. C++はここでの"部屋のゾウ"です!
  • 実行速度 - あなたの戦略が完全に実行タイムリーさに依存している場合 (HFT/UHFT のように),C や C++ などの言語が必要になります.しかし,これらのドメインのためのLinux カーネル最適化と FPGA 使用に限界があります.これはこの記事の範囲外です!
  • コスト - アルゴリズム取引戦略をプログラムできるソフトウェア環境の多くは完全に無料でオープンソースです. 実際,多くのヘッジファンドは,アルゴ取引スタック全体にオープンソースソフトウェアを使用しています. さらに,ExcelとMatLABはどちらも比較的安価で,それぞれに無料の代替品もあります.

もっと人気のあるパッケージのいくつかを見てみましょう. 比較してみましょう.

注:私は,ほとんどの小売業者とソフトウェア開発者に利用可能なソフトウェアのみを掲載します.これはサイトの読者数です.より機関的なグレードのツールなどの他のソフトウェアが利用可能ですが,これは小売環境で効果的に使用するには高価すぎると感じています.そして,個人的に経験はありません.

バックテストソフトウェアの比較

MS エクセル

記述:WYSIWYG (what-you-see-is-what-you-get) スプレッドシートソフトウェア.金融業界では非常に普及している.データとアルゴリズムは緊密に結合している.

実行:はい,Excelはほとんどのブローカーに結びつけることができます.

カスタマイズ: VBA マクロは,実装を隠すことでより高度な機能を可能にします.

戦略の複雑性: 複数の資産を数百個含む戦略と同様に,より高度な統計ツールが実装するのが困難です.

バイアス最小化: セルハイライト機能 (VBAがないと仮定) によって前向きバイアスを検出することは簡単です.

開発速度: 基本的な戦略を迅速に実行する.

実行速度: 実行速度が遅い - 低周波戦略のみに適している.

費用: 安いか 無料か (ライセンス に かかっ て).

オプション:OpenOffice

MATLAB

記述: プログラミング環境は,元々計算数学,物理学,工学のために設計された. ベクトル化演算と数直線代数を伴う操作に非常に適しています. 量子取引のための幅広いプラグインを提供しています. 定量ヘッジファンドで広く使用されています.

実行:ネイティブ実行機能がないため,MATLABには別々の実行システムが必要です.

カスタマイズ: コンピューティング数学のほぼすべての分野のためのコミュニティプラグインの膨大な数量.

戦略の複雑性: すでに利用可能で,よくテストされている多くの高度な統計方法.

バイアス最小化:前向きなバイアスを検出するのが難しく,広範なテストが必要です.

開発速度: 短いスクリプトは簡単に洗練されたバックテストを作成できます

実行速度:ベクトル化/並列化アルゴリズムを想定すると,MATLABは高度に最適化されています.伝統的な繰り返しのループでは劣っています.

費用:ライセンスの費用は約1,000ドルです.

オルタナティブ:オクターブ,SciLab

パイソン

記述: 開発速度のために設計された高レベルの言語. 想像可能なほぼすべてのプログラミングタスクのための幅広いライブラリ. ヘッジファンドと投資銀行コミュニティでより広く受け入れられている. 実行速度のためにC / C ++ほど速くありません.

実行:Pythonプラグインは,インタラクティブ・ブローカーなどの大きなブローカーのために存在する.したがって,バックテストと実行システムはすべて同じ"技術スタック"の一部である.

パーソナライゼーション: Python は非常に健全な開発コミュニティを持ち,成熟した言語である. NumPy/SciPy は量子取引に関連する急速な科学コンピューティングと統計分析ツールを提供します.

戦略の複雑性:主要なアルゴリズムには多くのプラグインがありますが,MATLABの量子コミュニティはそれほど大きくありません.

バイアス最小化:あらゆるハイレベル言語と同じバイアス最小化問題は存在します.テストについて非常に注意する必要があります.

開発速度:Pythonの主な利点は,開発速度であり,テスト能力がしっかりと組み込まれています.

実行速度:C++ほど速くありませんが,科学的コンピューティングコンポーネントは最適化され,Pythonは特定のプラグインでネイティブCコードと会話できます.

費用:無料/オープンソース

オルタナティブ:ルビー,エルラング,ハスケル

R

記述: 高度な統計方法と時間列分析のために設計された環境. 幅広い特定の統計,経済学およびネイティブグラフツールセット. 大規模な開発者コミュニティ.

実行:Rは,一部のブローカー,特にインタラクティブブローカーにプラグインを持っています.したがって,エンドツーエンドシステムは完全にRで記述できます.

パーソナライゼーション:Rはあらゆるパッケージでパーソナライズできますが,その強みは統計/経済学分野にあります.

戦略の複雑性:利用可能なプラグインにより,経済学,統計学,機械学習の戦略を実行する場合,主に有用です.

バイアス最小化:PythonやC++などの高レベルの言語でバイアスの可能性が類似しているため,テストを行う必要があります.

開発速度: R は統計的方法に基づいた戦略を書くための高速です.

実行速度:RはC++よりも遅いが,ベクトル化操作 (MATLABと同様に) に比較的最適化されている.

費用:無料/オープンソース

オルタナティブ:SPSS,スタタ

C++

記述:実行速度のために設計された成熟した高レベルの言語. 定量金融と数値ライブラリの幅広い範囲. デバッグが難しく,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++で書かれ,取引に単独で置き去りにすることができます!

バックテストに関する次の記事では,アルゴリズム取引のバックテストシステムの実装をめぐる特定の問題や,取引取引所の効果をどのように組み込むかについて見ていきます.戦略のパフォーマンス測定について議論し,最後に戦略の例で締めくくります.


もっと