ほとんどの戦略は,ボットで実行される前に検証のためにバックテストを必要とする. FMZは,一部の暗号通貨のスポット,先物,永久契約,およびすべての種類の商品先物をサポートする.しかし,FMZ Quantプラットフォームのバックテストメカニズムは,多くの初心者にとって混乱を引き起こした一般的なオンバーバックテストとは異なります.この記事は,いくつかの一般的なバックテストの質問を詳細に説明し,回答します.
上記の図に示されているように,バックテスト開始時間から終了時間までの時間は時間軸として考えることができます.バックテスト中に,バックテストの時間点は,バックテストを開始するために軸に沿って左から右に移動します.ある時間点では,この時間点前の履歴データのみを取得できます.履歴データに基づいて,戦略は購入と販売を行い,最終的に利益と損失を形成します.明らかに,バックテストの時間ポイントの分布は離散であり,分布の密度はバックテストの正確性を表しています. もちろん,バックテストの時間ポイントが密度が高いほど,必要な時間が長くなるので,実際のバックテストシステムは精度と効率の間で選択する必要があります.
オンバーバックテストメカニズムは,Kラインに基づいています.つまり,各Kラインはバックテストのタイムポイントを生成します.そのタイムポイントでは,現在のKラインの最高値,最低値,開閉値,取引量など,およびこのタイムポイント前のKラインの履歴情報などの情報を入手できます.
このメカニズムのデメリットは明らかである.Kラインでは1回だけ取引が生成され,価格は通常Kラインの閉じる価格に基づいている.Kラインは4つの価格,すなわち開閉,閉閉,最高,最低価格のみを取得できますが,Kラインの価格変化や,最低価格が最初に発生するか,または最高価格が最初に発生するかといった情報を取得することはできません.例として1時間のKラインを挙げましょう.市場情報はボットで数秒ごとに取得され,Kラインが終了するのを待つ代わりにボットで取引命令も発行されます.オンバーバックテストメカニズムの利点は,理解が容易であり,バックテストのスピードが非常に速いことです.
上記の図は,FMZのバックテスト設定インターフェイスを示しています.バックテストモードは,シミュレーションレベルと実際の市場レベルという2種類に分かれています.
ティックは?
ティックは,K線データとは異なり,特定の時点での価格である.K線データによると,実際に開場価格と閉場価格が発生した時期のみを知ることができる.価格がK線期間の最高値に達する時期は明らかではない.実際には,K線データもティックのベースで生成される.K線データによると,K線期間の特定のティックの変化もシミュレートできる.これは実際のティックではないが,バックテストをより正確にする.そしてシミュレーションに基づくK線期間は,バックテストに使用される期間よりもはるかに短くなるので,正確性は高い.
シミュレーションレベル バックテスト
シミュレーションレベルバックテストのために,バックテストに使用されるKライン期間とアンダーレイヤKライン期間を選択する必要があります.例えば,戦略が毎時間ラインバックテストを使用し,アンダーレイヤKラインが5分に設定されている場合,バックテスト時間ポイントの間隔は,5分Kラインによってシミュレーションされたティックのベースになります.これは最新の1時間のKライン閉値の継続的な変化に反映されます.KラインのTick生成のメカニズムは,Kラインに従ってMT4に似ている.この投稿には詳細な指示があります.https://www.fmz.com/bbs-topic/662
戦略コードです. 戦略コードは,
function main() {
while(true){
var records = exchange.GetRecords() //GetRecords can fill the parameters, and obtain K-lines of different periods
var ticker = exchange.GetTicker()
Log('K-line close price: ', records[records.length-1].Close, 'ticker Buy1 Sell1 prices: ', ticker.Buy, ticker.Sell)
//js backtest does not use Sleep, and it will skip to the next tick; Python needs 1 hour of sleep time
}
}
バックテスト結果:
各Kラインのオープン・クローズ・ティックは固定され,シミュレーションされた12つのティックは真ん中に加えられ,1つのKラインが14のバックテストタイムポイントを形成する.下層Kライン期間5分で1日間バックテストを行う場合,合計24×12×14=4032のタイムポイントが生成される.従来のオンバーバックテストは24点しかなく,精度は大幅に向上する.オープン・クローズ・ポジションオペレーションも1つのKライン期間中に完了できる.中間生成されたティックはシミュレーションされているが,それはあまり影響しない.バックテストでは,注文価格が購入価格よりも大きく,販売注文価格が購入価格よりも小さい限り,バックテストがマッチする.この方法では,すべての取引の速度と精度を考慮し,それを推奨する.
リアル市場レベルバックテスト
リアルマーケットレベルバックテストはリアルティックを使用し,各時間点間の最短の間隔はわずか1秒である.この種のバックテストは1秒間に変化する精度が高いが,大量のデータにより,バックテスト速度は遅いし,バックテスト時間は長すぎない.下図はリアルティックを示している.リアルマーケットレベルバックテストは戦略を正確に検証するために使用できる.
実際の市場レベルのバックテストや実際のボット取引でさえも,取引履歴取引を取得できないこと,実際の深度変更,実際のネットワーク遅延等を取得できないことなどの明らかなデータ欠陥があります.それでも,FMZの現在のバックテストシステムは比較的完全であり,ネットワークエラーをシミュレートするなどの多くの小さな機能があります.
バックテストがサポートされているのは なぜか?
現時点では,一般的な取引ペアのデータしかありません.実際には,戦略と多様性の関係はあまり密接ではありませんので,戦略を検証するのに十分です.
BitMEXをシミュレートして 融資料金を請求できるのか?
もちろん,ログを開くには BitMEX バックテストを選択できます.
バックテストが行われる場所?
JavaScript 戦略のバックテストはブラウザで実行されるが,Python は FMZ サーバまたは独自のドッカーを選択してバックテストを実行することができる.
バックテストログはダウンロードできますか?
もちろん ダウンロードボタンが右隅にある
バックテストを局所で行うことはできますか?
FMZ は Python バックテスト エンジンのソースを開きます.参照:https://www.fmz.com/bbs-topic/1687