MQL5 無料EA -バックテスト検証 24「Moving Average Crossover」
「バックテスト検証」シリーズでは、MQL5コミュニティに登録されている無料EAについて、バックテスト結果からそのパフォーマンスを検証しています。皆様のEA選択の際の一助になれば幸いです。
※MQL5コミュニティーからEAやインジケーターをダウンロードするには会員登録(無料)が必要ですので、こちらの記事を参考にアカウントを作成しておきましょう!
第24回目は「Moving Average Crossover」です。
「Moving Average Crossover」について
このEAは実験的なテストEAのようで、最低化がうまくいかないと好成績は望めません。そこで、この機会に最適化方法の一つ「Forward optimization」をご紹介したいと思います。
MQL5の公式ページからの引用(翻訳)
このロボットは、移動平均線のクロスを利用して動作します。移動平均線は主にトレンドを追うために使用されます。移動平均線をクロスさせる戦略は、大きな強気・弱気の動きを利用することを主目的としています。
すべてのパラメータは編集可能で、簡単に使用できます。これは実験的なプロジェクトです。
「Moving Average Crossover」のトレードの様子
このEAのロジックは、二本の移動平均線(短期・長期」のクロスでエントリーし、設定したテイクプロフィット/ストップロス(TP/SL)値で終了するだけのシンプルなものです。
- ゴールデンクロス(買いシグナル):長期の移動平均線を、短期の移動平均線が下から上に突き抜けたとき(交差したとき)
- デッドクロス(売りシグナル):長期の移動平均線を、短期の移動平均線が上から下に突き抜けたとき(交差したとき)
ただし、反対のシグナル(クロス)で、トレードをクローズする機能はないようなので、TP/SLも最適化する必要があります。
最適化の方法(Forward optimization)
今回紹介する最適化の方法を実施するためには、ある程度EAの特性を把握しておかなければなりません。また、いくつかの前提条件がありますのでご注意ください。
- 複数の変更可能なパラメーターがあり、数値を変更しても、ロジックは基本的に変わらない。
- 最適化の際、「始値のみ」でバックテストを実施したいので、EAにトレーリング等の機能がないことが望ましい。
「全Tick」でもできないことはないが、テストに時間を要するため、現実的には難しい。 - 同様の意味で、EAそのもののバックテストが速いことが望ましい。
ストラテジーテスターの起動
まずMT5のメニューからストラテジーテスターを立ち上げ、「Forward optimization」を選択します。
ストラテジーテスターの設定
- 通貨ペアー: EURUSD#
- 時間枠: H1
※今回は、予備テストの結果からEURUSD、H1で実施 - 期間: 2013.01.01- 2022.12. 31
- フォワード期間設定: 1/2(適宜変更可能)
※テスト期間を2013.01.01~2022.12.31と設定したので、前半の1/2(2013.01.01~2017.12.31)が最適化期間、後半の1/2(2018.01.01~2022.12.31)がフォワード期間(最適化の結果を基にしたテスト)となります。 - 使用するヒストリカルデータ: 始値のみ
- 最適化方法: 遺伝的アルゴリズム
- 最適化の際の順位付け: Profit Factor順
※今回は、Profit Factor maxを使用しましたが、他の指標のほうが良い場合もあります。
パラメーターの設定
- EAのパラメーターは以下の通りです。
- lot: ロット
- takeprofit: テイクプロフィット
- stoploss: ストップロス
- SlowAverage_MediaLenta: 長期移動平均線の期間
- FastAverage_MediaRapida: 短期移動平均線の期間MetodoMM_Slow_Lenta: 長期移動平均線の種類
- MetodoMM_Fast_Rapida: 短期移動平均線の種類
- 今回は、これらのうちテイクプロフィット、ストップロス、長期および短期移動平均線の期間の4項目を最適化対象とします。
最適化対象のパラメーターのStart – Step – Stopに数値を入力します。入力値の範囲は、トレードの仕方を考えてあまり逸脱しない値がベターかと思います。
上表のテイクプロフィットの例では、5~250まで1づつ (5, 6, 7, 8,…, 249, 250)パラメーターを替えてバックテストすることを意味します。
テイクプロフィットについては246通り、ストップロスについては97通り、移動平均の期間については、長期、短期それぞれ226、71通り、トータルでは「246 x 97 x 226 x 71 = 382,889,562」通りの組み合わせになります。
ただし、約4億回のバックテストをすべて実行するのではなく、遺伝的アルゴリズムを使って成績の良い条件に集約させていき回数を制限する感じです。
バックテストの実施
右下の「Start」ボタンを押すと、まず最適化期間のバックテストが実施されます。その後、自動的にフォワード期間のテストが開始します。
- 最適化期間: 2013.01.01~2017.12.31
Profit Factor maxでスクリーニングを実施しているので、緑色が濃いプロットほどプロフィットファクターが高く成績が良いことを示します。
- フォワード期間: 2018.01.01~2022.12.31
フォワード期間のテストは、前述のバックテストで最適化されたパラメーターを使用してテストされます。
バックテスト(最適化)およびフォワードテストの結果
- 勘の良い人は、上の図をご覧になっただけでお気付きになったかもしれませんね。
バックテスト(青い枠)のプロフィットファクターの大きい順にソートした結果です。左の赤い枠内の数字はバックテストと同じパラメーター設定でフォワード(仮想)を実施した際の結果です。
バックテスト(最適化期間)で好成績であっても、その後のフォワードテストではことごとくマイナスになっていることがわかります。
最適化したパラメーターでのバックテスト
損益曲線は以下の通りです。
最適化期間: 2013.01.01~2017.12.31
フォワード期間: 2018.01.01~2022.12.31
- 同じパラメーターでテストしたグラフとは思えないようなグラフですが、これが現実です。
最適化期間とフォワード期間、双方がプラスの条件は?
あまり成績は良くはないですが、最適化結果の中にあることはあります。
2018.01.01から運用開始していたとして、上記のパラメータを選択できていたとも思えませんが、もし選択できていれば、その後もプラスであったと言えます。ただし、今後も同じような結果となるかどうかは保証はできません。最適化結果の見極めが大切です。
Forward optimizationについては、テクニックの一つとしてマスターしておいて損はないですよ!