5.2 定量的な取引のバックテストをどのように行うか

作者: リン・ハーン優しさ作成日: 2019-05-08 13:08:52, 更新日:

概要

バックテストの重要性と重要性には疑いがない.定量的なバックテストを行うとき,戦略は可能な限りリアルで近い歴史的環境に置かれるべきである.歴史的な環境のいくつかの詳細が無視される場合,定量的なバックテスト全体が無効である可能性があります.この記事は適切な定量的な取引バックテストを行う方法を説明します.

バックテストはデータ再生に相当する.歴史的なK線データを再生し,シャープ比率,最大リトラセメント率,年収率,資本曲線などのリアルマーケットの取引ルールを実行することによって.現在,これらのすべてを行うことができる多くのソフトウェアがあります.github.com柔軟にカスタマイズできます

FMZ Quantは,商業的な定量取引ソフトウェアとして,計算をより速く定量化するために,フォールループ (投票) バックテストフレームを使用した高性能バックテストエンジンと付属しています.そして統一されたバックテストとリアルタイムコードは,"バックテストは簡単ですが,実際の市場では難しい"ジレンマを解決しました.

FMZ量子バックテストインターフェースの紹介

  • ステップ 1

FMZ Quantの公式ウェブサイトを開きます (www.fmz.com) ダッシュボード,戦略をクリックし,戦略を選択し,バックテストをクリックし,次のページへ移動します:

img img

バックテストの設定インターフェイスでは,実際のニーズに応じてカスタマイズできます.例えば:バックテスト期間,K線サイクル,データタイプ (シミュレーションレベルデータまたはリアルマーケットレベルデータ). 対照的に,シミュレーションレベルのデータバックテストのスピードは速く,リアルマーケットレベルのデータバックテストはより正確です. さらに,バックテストの佣金とアカウントの初期資金も設定できます.

  • ステップ2

mylanguage core トレーディングライブラリをクリック (この戦略はM言語で記述されているため,他のプログラミング言語を使用した場合,このオプションが表示されない場合があります) まず,トレードラベルを設定します. FMZ Quant M言語には,2種類のバックテスト実行方法があります. 閉値モデルと最新の価格モデルです. 閉値モデルは,現在のKラインが完了した後,次のKラインの開始時にモデルを実行することを指します. 最新価格モデルは,価格の変化ごとにモデルを実行することを指し,取引シグナルが確立されるとすぐに取引します. 下記のとおり:

img img

デフォルトのオープン・ロットサイズは,バックテストの際に開設および閉じるポジションの金額を指します. 最大取引額1回は,バックテストエンジンに1回の取引で送信される最大開設ポジションです.

実際の取引価格と計画された取引価格の間には常に偏差がある.このオフセットは,一般的にトレーダーにとって有利でない方向に動いており,取引で追加の損失をもたらします.したがって,実際の取引環境をシミュレートするために滑り込みを追加する必要があります.

  • ステップ3

この場合は,毎週k行を使います. this_weekを入れます. this_weekを入れます. this_weekを入れます.

img

リアルマーケット設定オプションは,主にリアルマーケット取引に使用されます.バックテスト環境では,デフォルト設定は大丈夫です. 自動回復進捗が true とマークされている場合,ロボットがリアルマーケットで停止すると,ロボットを再起動すると,自動的に信号を再計算せずに以前の信号位置を回復します. 注文再試行数はデフォルトで20に設定されています. 注文の提出が失敗すると,20回まで再送信を試みます. ネットワーク投票間隔 (ミリ秒) は,ロボットが戦略コードを毎回実行する場所です.

img

  • ステップ4

スポット取引オプションは,主に仮想通貨取引のために使用されます.バックテストを行うとき,デフォルト設定で保存しても大丈夫です. 望む場合は,これらの設定ですべてのパラメータを指定できます. さらに,一部の仮想通貨取引所では,レバレッジサイズやその他の関連設定を設定することもできます.

img

戦略 バックテスト

バックテストの前に,取引戦略を決定してください. ここでは,温度計タイミング戦略を例として挙げます. この戦略は,市場状況に応じてトレンド市場のトレンド戦略を採用し,不安定な市場で振動戦略を採用します. ソースコードは以下のとおりです (FMZ Quant ウェブサイトの戦略スクエアページからもダウンロードできます):

// Calculate CMI indicator to distinguish between Oscillating and trend market
CMI:=ABS(C-REF(C,29))/(HHV(H,30)-LLV(L,30))*100;

// Define key prices
KOD:=(H+L+C)/3;

// In the Oscillating market, the closing price is greater than the key price is suitable for selling market, otherwise it is for buying market
BE:=IFELSE(C>KOD,1,0);
SE:=IFELSE(C<=KOD,1,0);

// Define 10-day ATR indicator
TR:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR10:=MA(TR,10);

// Define the highest and lowest price 3-day moving average
AVG3HI:=MA(H,3);
AVG3LO:=MA(L,3);

// Calculate the entry price of the Oscillating market
LEP:=IFELSE(C>KOD,O+ATR10*0.5,O+ATR10*0.75);
SEP:=IFELSE(C>KOD,O-ATR10*0.75,O-ATR10*0.5);
LEP1:=MAX(LEP,AVG3LO);
SEP1:=MIN(SEP,AVG3HI);

// Calculate the entry price of the trend market
UPBAND:=MA(C,50)+STD(C,50)*2;
DNBAND:=MA(C,50)-STD(C,50)*2;

// Calculate the quit price of the trend market
MA50:=MA(C,50);

// Oscillating strategy logic
CMI<20&&C>=LEP1,BK;
CMI<20&&C<=SEP1,SK;
CMI<20&&C>=AVG3HI,SP;
CMI<20&&C<=AVG3LO,BP;

// Trend strategy logic
CMI>=20&&C>=UPBAND,BK;
CMI>=20&&C<=DNBAND,SK;
CMI>=20&&C<=MA50,SP;
CMI>=20&&C>=MA50,BP;
AUTOFILTER;

バックテストの設定を設定した後に,バックテストの開始ボタンをクリックすると,バックテストの結果は数秒後にすぐに表示されます. バックテストログでは,バックテスト,ログ,取引総数のために使用された秒数を示します. 口座情報は戦略バックテストの最終結果を印刷します:平均利益と損失,ポジション利益と損失,マーージン,佣金手数料,推定利益.

img

ステータスバーは,取引の種類,ポジション,ポジション価格,最新の価格,以前の取引シグナルタイプ,ポジションの最高値と最低値,更新数,資本および時間情報などを記録する.さらに,浮動利益と損失ラベルでは,口座の詳細な資金曲線が表示され,一般的に使用されるパフォーマンス指標も含まれています:収益率,年収率,シャープ比率,年収変動率,最大リトラセインメント率,これは基本的にほとんどのユーザーのニーズを満たすことができます.

シェルプ比率は,株価指数と株価指数との比較で,株価指数と株価指数の比較で,株価指数と株価指数の比較で,株価指数と株価指数の比較で,株価指数と株価指数の比較で,株価指数と株価指数の比較で,株価指数と株価指数の比較で,株価指数と株価指数の比較で,株価指数と株価指数の比較で,株価指数と株価指数の比較で,株価指数と株価指数の比較で比較される.

年間変動は,単純に,数字を年化すると,短期間の観測が1年を通して続くと仮定する.これはファンドのリスクの測定値であるが,間違いなく全リスクではない.例えば,戦略Aはより大きな変動が有するが,上昇する変動が有し,利益は良好である;戦略Bはわずかな変動が有するが,安定的に動いている (ほとんど動いていない).戦略Bは戦略Aよりも優れていると言えるだろうか?戦略Aは下記のとおり:

img

最後に,日記情報には,バックテストの際に各取引の中間取引状況の詳細な記録,取引の特定の時間,取引情報,オープン・クローズポジションの種類,バックテストエンジンマッチオーダーメカニズム,取引数および印刷情報を含む.

img

バックテスト後

多くの場合,そしてほとんどの場合,バックテストの結果は,あなたが期待しているものとは遠いでしょう. 結局のところ,長期,安定し,収益性の高い戦略は,あなたが市場を理解する能力を必要とする,取得することがそれほど簡単ではありません.

戦略のバックテストの結果がお金を失う場合,落ち込まないでください. これは実際にはかなり普通です. 戦略の論理がコードによって誤って解釈されているか,いくつかの極端なパラメータを使用しているかどうか,開設ポジション条件をあまりにも多く使用しているかどうかを確認してください. また,別の角度から取引戦略と取引アイデアを再検討する必要があります.

戦略のバックテスト結果が非常に良い場合,資金の曲線は完璧で,シャープ比率は1以上です. 焦らないでください. この場合,ほとんどの状況は,将来の機能,価格を盗む,過剰なフィットメント,または滑り値を追加しないなどを使用しています. これらの問題を排除するために,サンプル外データとシミュレーションのリアルマーケット取引を使用できます.

結論から言うと

上記は,取引戦略のバックテストのプロセス全体であり,すべての詳細に特異的であると言えます. 歴史データバックテストは,すべてのリスクが知られている理想的な環境であることに注意してください. したがって,戦略のバックテスト時間のために牛と熊市場を回るのが最善です. 効果的な取引数は,いくつかの生存者偏見を避けるために100倍未満でなければなりません.

市場は常に変化と進化の過程にある. 歴史的なバックテスト戦略は,将来が同じになると意味しない.それは,バックテスト環境における既知の可能なリスクに対処するために戦略を任せるだけでなく,将来における未知のリスクに対処するためにもである.したがって,戦略のリスク抵抗性と普遍性を高めることは非常に必要である.

放課後 運動

  1. このセクションの戦略をコピーして バックテストしてみてください

  2. このセクションの戦略を,あなたの取引経験に基づいて改善し最適化してみてください.


もっと