EA、MT4の自動売買を取得してもバックテストと合わないことは多々あります
特に何年も前に作成されたEAは相場からずれている場合もあるかもしれません
その場合は、パラメータを最適化することで利益を増やすことも可能です
パラメータの最適化
EAのバックテストをする前提としてのヒストリカルデータのインポートについて
バックテストのやり方はこちらを参考にしてください
エキスパートアドバイザー
例として、「弁財天ゆーろえん」で最適化を行ってみます
[PR]
このEAは「全ティック」と「始値のみ」がほぼ同じなので最適化の時間短縮になります
10年間のバックテストでは、「全ティック」純益:691950、「始値のみ」 純益:692250
とあまり変わらないので始値のみで最適化のテストをやれます
最適化の開始:
MT4のストラテジーテスターに目的のEAを設定します
- エキスパートアドバイザー:BenZaiTen_EURJPY_M5_v1.4.exe
- 通貨ペア:EURJPY
- これはEAで決められている場合が多いので、たの通貨ペアでテストはできない
- モデル:全ティック
- こちらは時間短縮のため「始値のみ」でも可能
- 期間を指定:開始日 2013.04.01 終了日 2023.04.01
- FXTFのヒストリカルデータで切り良く10年としてみた
- 期間:M5
- これもEAで限定されている時間足、他の時間足ではテストできない
- スプレッド:13
- 国内FX業者ではこの程度、これが大きくなると成績が大きく変わるEAが多い
- 最適化:チェック
- 最適化テストにはここをチェックする、逆に普通のテストでは外す
- エキスパート設定:次の設定を参照
エキスパート設定
エキスパート設定には3つのタブがあります
「テスト設定」
- 初期証拠金:1000000 JPY
- EURJPYで決済通貨が円なので「JPY」と直接入力して設定が可能
- あまり少なすぎるとドローダウンで証拠金以下になり終わってしますので注意
- EURGBPなどでは、USDやJPYにするのは間違い、GBPとしてpips的な考えで相対的なものとして損益を考えないといけない
- ポジション:Long & Short
- 買いと売りでの比較をしたい場合はそれぞれLongとShortを分けてテストできる
- 最適化:
- 遺伝的アルゴリズムを使う場合はチェックを入れる
ここにチェックを入れない場合は総当たりのテストになります - 遺伝的アルゴリズムでは、生物の進化の仕組みを模した、最適化のためのアルゴリズムのことで、例えばランダムに2つのグループに分け良かった方を残しいくのを繰り返し最終的に最適値を求めるものです
但し、過剰に適応しすぎたり、最適解の生成を妨げるヒッチハイク問題などもあります
- 遺伝的アルゴリズムを使う場合はチェックを入れる
- 最適化パラメータ:最適化するときの優先事項
- Balance:残高
- Profit Factor:プロフィットファクター
- Expected payoff:期待値(総損益額/総トレード数)
- Maximal Drawdown:最大ドローダウン金額
- Drawdown Percent:ドローダウン率
- Custom:オリジナルの基準
「パラメータの入力」
今回は例としてTakProfit(利確)の値を最適化してみたいのでチェックを入れます
スタート:10
ステップ:2
ストップ:100
このEAでは単位がpipsになるのでTakProfitを10から2づつ増やして100pipsまでテストします
また、パラメータを複数選択するとテスト数は更に増える事になります
時々はハマることとして、パラメータの変更はMT4を終了しても残っている場合があるので
新しく始める場合は必ず「リセット」しておきましょう
「最適化」
最適化タブでは一定の条件になったらテストを止める設定
この設定は無くても最初は大丈夫です
その他の設定ボタン
- 通貨ペアのプロパティ
- 選択した通貨ペアについての詳細
- チャートを開く:バックテスト後に、売買のタイミングをチャート上で確認
- 実際の売買記録はEA設定次第なので、ビジュアルモードにしないと分からない
- エキスパート編集
- MetaEditorが起動してソースコードがあれば編集ができる、開発者用
最適化結果
最適化が終わると「最適化結果」が出てきます
「損益」タブをクリックして最適なパラメータを見ると、TakeProfit=98と分かります
一方で「最適化グラフ」を見ると
46以上はあまり変わらないことが分かります
また、このパラメータはあまりぶれが少ないです
結果が何も表示されない場合があります
すべてがマイナスの結果のケースです
マイナスでも優劣が知りたい場合は
「マイナスの結果は表示しない」のチェックを外します
次にStipLossのパラメーターを最適化したいと思います
スタート:10
ステップ:5
ストップ:100
でテストした結果 StopLoss=70以上はあまり変わらないようです
ドローダウンで比較し、利益がある程度出ていてドローダウンが小さい
StopLoss=65 がいいかもしれません
TakeProfit=46
StopLoss=65
でテストしてみると、損益は減少しましたがドローダウンの改善にはなりました
また、MaxPosition=7なので、このパラメータも振ってみます
MaxPosition=9にすると損益が同じ程度でドローダウンは9%程度になりました
このEAは2021年6月以降はバージョンアップされていないので
2年間ほどの比較をしてみます
期間:2021.04.01-2023.04.01
オリジナル | 最適化 | |
純益 | 20,0306 | 20,4544 |
プロフィットファクター | 1.28 | 1.25 |
最大ドローダウン | 4.49% | 3.78% |
総取引数 | 2153 | 2414 |
勝率 | 61.59% | 59.94% |
このケースではあまり変わらないかもしれません
以上のような要領でバックテストでパラメータを最適化できます
ただ、あまりにやりすぎるとカーブフィッティングに陥ってしまうこともあります
カーブフィッティングは限定された相場のみで有効で、相場の変化についていけずに
損失が増大する可能性があります