この投稿文は次の言語で読めます: 日本語
Contents
バックテスト最適化の最適化
バックテストはオプティマイザを使って最適化しますが、
その最適化したパラメータでフォワードテストをすると、期待値と大きく乖離するケースは多くあり、
それは直近のテストデータに対してのみ過剰に最適化している(カーブフィッティング)状態でになっています。
これを避ける一つの手段としてウォークフォワード最適化があります。
ウォークフォワード分析とは?
図
予め決めたバックテスト期間とフォワードテスト期間を、一定のステップずつずらしながら繰り返し実行し、
フォワードテスト全期間での成績や、バックテスト期間とフォワードテスト期間の成績の比率からEAの品質を図る手法です。
指標
ウォークフォワード効率(Walk-Forward Efficiency)(WFE)
バックテストとフォワードテストを同じ期間(年次)で評価した場合の比率。
バックテストで利益が1,000,000円、 WFEが60%だったとすると、
同一期間フォワードテストした場合の想定利益が600,000円程度、ということ。
数値が高いほどバックテストの結果を信頼して見て良いということだが、
50%以上あればある程度の信頼性があるそうです。
→つまり、バックテストの結果通りの結果がフォワードでも起きる可能性は低い。
最適化方法
- バックテスト期間
- フォワードテスト期間
- 最適化手法(最大利益、最大PF,最大ドローダウン、...)
辺りの設定によりパフォーマンスが大きく変わります。
同じEAで上記パラメータの組み合わせを色々変えてみた結果、
-19% ~ 79%まで、かなりのブレっぷりでした。
これはバックテストで定めた期間に生じた特性が、フォワードで定めた期間で再現性が高いかどうか?
という意味かなと思っていますが、同じEAでもテストの仕方とパラメータの定期的な見直し方のルールによって
パフォーマンスが大きく変わる証拠だと思います。
実装方法は?
調べたところ、MQL5.com のマーケット内に、そのものズバリ WalkForwardOptimizer というライブラリがありました。
MT4版と MT5版がありましたが、今回はMT5版を購入し、実際に利用してみます。
利用手順
パラメータ設定方法
なかなかクセがあり理解に時間がかかりました、、
以下、User Guide パラメータ設定方法 翻訳結果です。
- wfo_windowSize
定義済のウィンドウサイズの一つ。 デフォルト:年
カスタムを選択した場合は、カスタム日付番号を wfo_customWindowSizeDays に渡す必要があります。
もし None を選択した場合は、ウィンドウ管理は無効になり、これは EAがウィンドウの終了日後もトレードを続け、フォワードテストも実行されます。
最適化処理の最終点検として使用して、EAのパフォーマンスが再定義なしで、その先の長い期間においてどの程度劣化するのかを把握します。 - wfo_customWindowSizeDays
最適化ウィンドウサイズ(日付)
クラスタ分析のための、メタパラメータとして最適化に追加することができる。 - wfo_stepSize
定義済のフォワードステップサイズの一つ。デフォルト:四半期。
ウィンドウサイズよりも小さくする必要があります。 - wfo_customStepSizePercent
フォワードステップサイズをウィンドウのパーセントで表します。
クラスタ分析のための、メタパラメータとして最適化に追加することができる。 - wfo_stepOffset
ロールフォワードのシリアル番号。
常に最適化のメタパラメータとして追加しなければならない。(アンカーモードは除外)
また、つねに増分は1でなければならない。
※上記に加え、実行ステップ数を、バックテスト期間、wfo_windowSize、wfo_stepSize の3つから計算して、手動セットする必要がある - wfo_outputFile
CSVデータの出力ファイル名。 ←デフォルト空欄だが、何かしらセットする
ファイル名が空欄の場合は、EAは動作し続けるが本ライブラリはジョブを実行しない。
これはEAの再コンパイルなしにライブラリを無効化する一つの手段として使用できます。 - wfo_estimation
最適化中のEAパフォーマンス測定値として使用される推定値のセレクタ。 デフォルトでは - wfo_built_in_loose
実行方法
User Guide和訳。
事前定義された期間または任意の期間を使用した単純なロールフォワード最適化
- 最適化ウィンドウサイズ である wfo_WindowSize を、事前定義されたリストの中から選択するか、
カスタム期間を選択し、wfo_customWindowSizeDaysに指定した日数を入力します。 - wfo_stepSize に フォワードステップのサイズを指定します。 事前定義されたリストから選択するか、
カスタム期間を選択肢、 wfo_customStepSizePercent にパーセンテージを指定します。 - 最適化を有効にするには、 wfo_stepOffset に、 0から、履歴範囲に収まる数字範囲を設定し、ステップ幅は1とします。
- 最適化を実行します。
- 実行結果が保存されるcsvファイルを、 MQL/Files にコピーします。(MT4のみ対応必要)
- WalkForwardReporter スクリプトを実行する(MT4のみ)
- 生成されたHTMLレポートファイルを開きます。
<例>
2010年-2016年までの期間を参考例とします。
- 最適化ウィンドウは year
- フォワードステップサイズは 1四半期
とします。
期間としては6年半です。
1年分は、ウィンドウの移動に消費され、残りは前方への連続的なステップとしてカバーされます。
その期間は5年半になり、サンプル外のテスト22四半期分になりますので、
wfo_stepOffset は 0 → 21 まで進める必要があります。(22回めのステップは2016年第3四半期であり、テストすることができません)
レポート
シンプルで分かりやすいです!
期間ごとの集計と、累積利益も照会できます。各種KPIも表示されている。
ただ、パラメータにあるレポートファイル名を都度手動で変えないと、前回実行レポートを上書きしてしまい、、
前回分のウォークフォワード分析レポートは消えて無くなりましたのでご注意を。。
以下は、色々試した結果、ウォークフォワード効率が最も良かったもので79.94%でした!
なかなか良い方ですかね。
ちなみに下記は自作EAで USDJPY, H1, バックテスト1年、フォワードテスト1ヶ月 で期間10年で検証したものです。
タイミング的に、円安トレンドが強く出ていた2014年前後で強烈にプラスに伸び、それ以降は僅かにプラスに伸びている程度でしょうか。
強いトレンドで勝ち、それ以外の所では大きく負けないのならばポートフォリオの一つとして採用すれば良い結果が得られそうな感じです。
価格は?
有償ライブラリです。 1ヶ月レンタルが$12.5、買切り版が$85。
感想
これはこれで便利ですが、マーケット等から購入したEAや、
自作EAにウォークフォワード分析付きで販売したい場合には利用できないのが課題です。
terminal.exe は MT5でもコマンドライン実行ができるので、自作でも良いかと思いました。
ただバックテストやフォワードテストを実施するよりは
その品質を評価する目安として機能すると思われますので、時間あれば自作版も検討したいですね。
MT5用EA Helios 6.0を公開しました!!!
EAは無料でご利用頂けます
上記EAは無料でご利用いただけます。 ご興味をお持ち頂けましたら、以下のページに概要と申込ページへのリンクがありますので、そちらからお問い合わせください。
MT5を使うなら、海外の証券会社がオススメ!
国内証券会社は追証リスクある上に、ほとんどの証券会社でMT5を利用することができません。
入金額以上のリスクを負わずに済むゼロカット制度が適用されるのは海外証券会社のみとなります。
- 低スプレッド環境でトレードが出来る
- トレードの遅延が少なく品質が安定している
- 入金ボーナスで、少額からトレード可能
- 入出金トラブルがない
等、多くのメリットを享受できます。 MT5を使う際は、同時に海外証券会社での口座開設もご検討ください。
EA利用者限定の特典あり!
EAをリアル口座で活用頂いている方への特典として、独自開発したインジケーターを無料でご利用いただけます。
自動売買ツールを活用すればトレードそのものはプログラムが規則に従い継続的に行うことができますが、
どのEAを、いつ起動/停止するのかを判断するのは人間の役割となります。
相場環境の分析が必要になることもありますので、是非これらの無料インジケーターを使用して堅実な投資の実現にお役立てください。
新着記事をお見逃しなく!
新しいEAや無料インジケーターの情報は、随時ブログ記事として公開していきます。
新着記事を見逃さないためには、ブログの通知設定が便利です。
以下の画像のように通知設定の許可ボタンが表示されたら是非クリックしてください。