取引戦略をバックテストする際に 最も重要なことは?スピード?パフォーマンス指標?
バックテストの目的は,戦略の論理性と実行可能性を確認することです.これはバックテストそのものの意味でもあります.他のものは次要です.戦略の歴史的データを真に反映したバックテストの結果には基準値があります.見かけに完璧なバックテスト曲線は良い物語を語ることができますが,実際の市場環境ではできません.
数量的なトレーダーが気になる問題は,正確なバックテストをどのように達成するかです. まず最初に,取引に含まれるデータは,データの質がバックテストの質を大きく決定しているからです.
このデータタイプでは,ほとんどの人は開示価格,最高価格,最低価格,閉じる価格,K線チャートでの取引量について考えます.よりよい区別のために,これらのデータを集合的にバーデータと呼びます.これをK線として理解できます. しかし,データがどこから来たのか,そしてこれらのデータのソースはどこにあるのか考えたことはありますか?
実際には,交換から送信されるデータは,これらのバーデータを含まない. Tick データのみ. では,Tick データとは何ですか? 交換内のデータを川のようにイメージすることができます. この川は,各オーダーの詳細なデータを含んでいます. Tick データとはデータストリームのスライスです. 周波数は2スライス/秒です.それは特定の市場の状況の再現です.
1分間のバーデータは1分間のバーデータから構成され,5分間のバーデータは5分間のバーデータから構成され,次のようなものになります.それはさまざまな分間のチャート,時間チャート,日々のチャートなどを形成しました. 1分間のK線には1つのバーデータしかありませんが,120個の टिकデータが含まれます.したがって,バックテストの歴史データは以下に分けることができます:バーデータと टिकデータ,そして टिकデータのデータの量は同じサイクルのバーデータの量よりもはるかに大きい.
市場にある定量取引ソフトウェアのほとんどは,すべてのバーデータのバックテストをサポートしています. データ量が小さいため,バックテストエンジンのワークロードは大幅に簡素化されています. したがって,このバックテストは通常非常に速く,10年間のデータが数秒以内にバックテストすることができます.同時に数十種類の先物品をバックテストしても1分を超えない. しかし,バーデータのバックテストには多くの問題があります.
ほとんどのトレーダーは,日々の制限価格で購入または販売することが困難であることを知っていますが,バックテスト環境で取引することができます.一部の新規トレーダーは定量取引に参加します.戦略でこの状況をフィルタリングしなければ,バックテストの結果は実際の市場結果と一致しません.
価格が急に最低限から最高限値に跳ね上がり,または価格ギャップが現れるとき,それは大きなサイクルK線チャート上で大きな正のK線として表示されますが,その間,取引は行われません. リアルタイム価格取引戦略を設計している場合は,バックテストのバーデータは取引できます.
例えば,現在のK線は価格5000の周りに浮いているが,突然市場閉店の近くで5100に上昇し,中間には待機中のオーダーや取引がほとんどない.あなたの戦略が5050のこの価格でポジションを開く場合,それはバーデータバックテストで取引され,この現象は非常に一般的です.
定量トレーダーの多くはこのようなピットに遭遇していると思います. 45度角バックテスト曲線のほとんどはこれから生まれています. 皆さんの理解を容易にするため,もう一つの例をお見せしましょう. 1つのK線が4つの価格を持っていることを知っています. 1分間の正のk線である場合,このK線の形成は:開口価格 >>> 最低価格 >> >> 最高価格 >>> 閉値です.
しかし,大きなサイクルのk線はそれほど単純ではありません.それは新しい高値に達し,次に新しい低値に達し,それから閉じるかもしれません.また,新しい低値に達し,次に新しい高値に達し,それから閉じるかもしれません.または,一輪の曲がり折りの後,新しい低値に達し,次に新しい高値,そして新しい低値に達し,それから閉じるかもしれません.しかし,それは上下の影を持つK線として現れるだけです.その形成の真ん中に多くの可能性があります.
K線がこんな感じで表示されている場合:開口価格4950,最低価格4900,最高価格5100,閉じる価格5050,通常の正のK線.あなたの戦略は,最新の価格が前の最高価格5000を超えると,ロングを買い,開場後1%のストップロスを設定します.つまり,価格が4950を下回ると,ストップロスは実行されます.
ではバックテストを始めましょう
Opening price 4950
The price exceeds the previous high 5000
Opening long position
Earned 1% when the market closed
しかし現実には こんな感じかもしれません
Opening price 4950
The price exceeds the previous high 5000
Opening long position
Soon the price begins to fall
Continue to fall to 4949
Stop loss signal triggers stop loss 1%
Price rises to 5100
Market close at 5050
上記の例では,同じ戦略,同じデータで,非常に異なる2つの結果が出ています. その理由は依然としてデータの違いです. バーレベルバックテストでは,毎日K線バックテストを使用すると,これらのK線がどのように形成されるかわからないでしょう. 時毎のK線バックテストを使用すると,これらの時毎のk線が形成されるかわからないでしょう. 要するに,バーデータテストは弱です.
Tick のデータをバックテストと分析に使用できる場合,大きな利点があることは間違いない.しかし,市場にはTick のデータバックテストと分析のための定量的な取引プラットフォームがないようです.例えば,MT4 はインターポレーションシミュレーションデータを使用します.これはデータの変化をシミュレートするだけです.実際のTick のデータではありません.
もちろん,Tickレベルバックテストを行うことができると主張するソフトウェアがあります. しかし,これらのソフトウェアは,バックテストエンジンを設計する際に致命的な間違いをしました. それは:
実際の取引環境では,私たちが発注したオーダーは,取引所のTickデータストリームにマッチされます. 取引所のマッチングルールは:価格優先度,時間優先度です. この時点でオーダーの深さは太くない場合,私たちが送った5000価格の購入オーダーは,受動的に取引される可能性があります.
FMZ Quant プラットフォーム (fmz.com) Tickレベルバックテストエンジンが作成され,このバックテストエンジンは,Tickデータの価格優先度に基づいて注文をマッチするだけでなく,同じ価格優先度に基づいて,現在の未定の注文が受動取引の状態に達したか否かを決定するために待機中の注文の数が計算されます.実際のシミュレーション環境を達成するために.以下の例を挙げましょう:
最初のTickは 販売: 101 巻: 80 購入: 100 巻: 30
2番目のティックは: 販売: 101 巻: 60 購入: 100 巻: 50
3つ目のTICは 販売: 101 巻: 80 購入: 100 巻: 30
4番目のティックは: 販売: 101 巻: 80 購入: 100 巻: 10
最初のTickでは,購入価格が100で,待機中の注文の量は30ロットです.この時点で,購入信号が来ます.100価格で20ロットを購入します.第2のTickは生成され,購入価格が100で,待機中の注文の量は50です.待機中の注文は20ロットです.第3のTickは生産され,購入価格が100で,待機中の注文の量は30ロットです.これは20ロットが実行またはキャンセルされたことを証明し,取引を終了しています.第4のTickは生産され,購入価格が100で,待機中の注文の量は10ロットでした.それは大きなセラーであり,私たちのすべての購入注文が一度に実行されました.
上記の例を通して,Tickデータでは,価格が変化していないという前提で,待機中のオーダーの金額の変更により,待機中のオーダーの受動的な取引があるかどうかを計算することが可能である.同じ価格,タイムファーストアプローチを使用する.この種のバックテストエンジンは,取引と偽取引の"価格マッチングメカニズム"を排除し,実際の取引環境をほぼバイオニック化し,バックテストが実際の市場と同じであるように,すべての市場データが真に表示されるように,バックテストだけが意味を持つ.
FMZ Quant プラットフォームでは,バーとティックレベルのバックテストが同時に存在する.各定量トレーダーは,独自の取引戦略に応じて異なるバックテストエンジンを使用することができ,どの種類のバックテストを使用しても構いません.エンジンは戦略コードを変更する必要はありません.各タイプのバックテストはシームレスに切り替えることができます.
低周波戦略バックテストには複雑なマッチングエンジンが不要である.そのような戦略の取引数が小さいため,スリップコストは戦略自体に大きな影響を与えない.一般的に,バックテスト中に数点のスリップポイントしか追加する必要がないため,バーレベルのバックテストを使用するだけで十分である.本当に注意を払う必要があるのはオーバーフィッティングの問題です.
日中取引または日中にポジションを開く戦略によっては,バックテスト設定パラメータページのデータ粒度も調整できます.例えば,1時間サイクルのバックテストは,15分間の詳細なデータに調整できます.また,バックテストの精度を向上させるために必要なときにTickレベルデータを使用できます.
高周波取引は,取引数が十分に高いため,単一品種は1日に数十回,または数百回も取引できるので,マッチングエンジンが合理的である限り,大数の法則の影響下では,バックテストの結果は基本的に信頼性があります.過度にフィットする問題は一般的にありません.しかし,高周波取引の数が高いため,バックテストエンジンの需要は非常に高いです.
高周波取引のバックテストでは,取引頻度が高くなるほど,保有ポジションの期間が短くなり,単一の取引の平均利益が低くなります.この時点で,バックテストエンジンの設計が不合理である場合,またはマッチングオーダーの方法が実際の取引環境と比較して同じでない場合,小さな差が巨大な千の格差を生む現象が発生します.したがって,高周波取引では,Tickレベルでのバックテストエンジンは最良の選択です.
TickレベルバックテストがC++ (PythonとJavaScriptもサポートする) で書かれた高周波市場作りの戦略でどのように動作するかを示します. 戦略を完了し,下記のリンクをクリックしてオンラインバックテストを実行できます. 次の写真はログ情報から取られています. 注意してください,2019-07-12 14:59 に 2231 の価格で 1 ロットを購入し, 2232 で販売しました.
最初のTickは 販売: 2232 巻: 409 購入: 2231 巻: 73
2番目のティックは: 販売: 2232 巻: 351 購入: 2231 巻: 84
3つ目のTICは 販売: 2232 巻: 369 購入: 2231 巻: 67
このデモンストレーション戦略は,価格表示の利益を得るときにポジションを閉じる.ポジションを開いた後,ロングポジションを閉じるために2232で閉じるポジションオーダーを送信し,ショートポジションを閉じるために2231を送信します.伝統的なバーレベルバックテストによると,この待機中のオーダーの価格は閉められません.しかし,プラットフォームのTickレベルバックテストエンジンは,市場のオーダーの量の変化を常に計算します.第3のTickデータが生成されると,取引所の交換オーダーマーチングメカニズムに従って,価格が同じであれば,タイムファーストルールに従って,私たちの閉じるロングポジション操作が取引されます.
このリンクをクリックします (https://www.fmz.com/strategy/162372) を設定することなく,完全な戦略をコピーできます.
注: 現在,我々は中国の国内商品先物と暗号通貨のOKEX取引所のTickレベルデータのみをサポートしています.将来,より多くの取引所にサポートします.
上記はFMZ Quantプラットフォームの分析と全レベルのバックテストの実際の戦闘です. それだけでなく,プロトレーダーと機関ユーザをサポートすることに加えて,まだ始めていない初心者にも非常に友好的です. 視覚言語はコードを書くことなく実装できます. さらに,My言語は10の文で解決できます.
戦略について考え,統計を行い,分析...取引は非常に困難でした. あなたが低周波CTA,日中取引,高周波取引であるにせよ,FMZ Quant定量取引プラットフォームは完全にシームレスにサポートできます. 私たちは玩具機能を作っていません. Tickレベルでの正確な歴史的バックテストに基づいて,最適な投資ポートフォリオを構築するのに役立つために,複数の種類,複数の戦略,複数のサイクルを組み合わせてテストすることができます.