MQL5でEA開発 77 最適化
最適化
ブレイクアウトEAのパラメータの最適化をします。
デフォルトでは
長期期間:20
短期期間:10
としていました。
しかし、このパラメータはタートルズの例に従っただけで、最適なものかどうかは分かりません。
そこでパラメータの最適化ということをやってみます。
最適化の設定
設定は以下だけ変更します。
「設定」タブ
オプティマイズ:完全アルゴリズム(遅い)、最大回復係数
前回の記事で説明しましたように、最大回復係数とは最大のリカバリファクターのことです。
最適化したパラメータをリカバリファクターの大きい順に並べ替えします。
ただ、最適化が終わってから別の指標で並べ替えすることもできますので、他の指標にしても問題はありません。
私はリカバリファクターを重視しているので、このようにしただけです。
「パラメータ」タブ
長期期間と短期期間にチェックを入れます。
そしてスタート、ステップ、ストップの順に
長期期間:2、1、20
短期期間:2、1、20
とします。
これはパラメータをスタートから始め、ステップ刻みごとに増やして、ストップで終わるという意味です。
長期期間、短期期間の例では2、3、…、19、20と増えてきます。
そして、その設定でバックテストをします。
スタートを1にすると、当日の、つまり未完成の足だけになるので、2から始めました。
長期期間、短期期間のステップ数はともに19なので、パラメータの組み合わせは19*19=361となります。
最適化を実行すると、パラメータの組み合わせを変えながら361回バックテストが行われることになりますので、かなり時間がかかります。
パラメータが多いと最適化にかかる時間が爆発的に増えますので、検証コストという意味でもシンプルなほうがいいと言えます。
スタート、ステップ、ストップをどのように設定すべきかについては試行錯誤で決めていくしかありません。
スタートは最適なパラメータより小さく、1/2くらいにし、ストップは最適なパラメータより大きく、2倍くらいにすればいいと私は考えています。
スタートとストップの範囲を狭くしすぎると、最適なパラメータを見落としてしまうかもしれません。
ステップをどうするかで最適化にかかる時間が大きく変わりますので、どのくらいの時間なら許容できるか、パソコンの性能はどのくらいかで決めればいいと思います。
しかし、ステップを大きくすると、やはり最適なパラメータを見落してしまうリスクがあります。
先ずはステップを大きめで最適化し、この戦略は使えないと判断すればそれまでとし、使えそうだと思えば、ステップを小さくして最適化し直すというやり方もあります。
ただ、本当に使える戦略であれば、最適なパラメータでなくても良好なパフォーマンスになるはずなので、あまり神経質になる必要はありません。
指標ごとに並べ替え
さて、最適化が終了すると、「オプティマイズ結果」タブで「結果」のパフォーマンスがよい順に表示されます。
この「結果」の列は「オプティマイズ」の設定で「最大回復係数」を選択しているので、リカバリファクターの数値になります。
ただ、「リカバリファクター」の列と比較すれば分かるように、「結果」の列の数値は小数が四捨五入されています。
これだと分かりにくいので、私は「結果」は見ず、見たい指標で順番を並べ替えしています。
例えば損益なら「損益」のところでクリックを繰り返すと、損益の基準に基づいて昇順になったり、降順になったりして、並べ替えることができます。
右端のほうは「SlowPeriod」、「FastPeriod」となっていますが、これはそれぞれ長期期間、短期期間のことです。
それぞれの列の数値を見ることで、どのパラメータが使われたかが分かります。
では各指標で1位となったもののパフォーマンスやパラメータを見てみましょう。
損益1位
損益:3351232
取引数:673
プロフィットファクター:1.44
期待利得:4979.54
ドローダウン %:7.18
リカバリファクター:8.02
シャープレシオ:0.73
SlowPeriod:3
FastPeriod:3
プロフィットファクター1位
損益:1552800
取引数:198
プロフィットファクター:1.51
期待利得:7842.42
ドローダウン %:9.72
リカバリファクター:3.60
シャープレシオ:0.81
SlowPeriod:19
FastPeriod:4
期待利得1位
損益:1348112
取引数:158
プロフィットファクター:1.43
期待利得:8532.35
ドローダウン %:11.52
リカバリファクター:2.78
シャープレシオ:0.56
SlowPeriod:19
FastPeriod:19
ドローダウン %1位
ドローダウン %は他の指標と違って最小のものを選びます。
しかし、トレードが行われず、ドローダウン %が0となったものは除外しました。
損益:2809514
取引数:572
プロフィットファクター:1.43
期待利得:4911.74
ドローダウン %:7.17
リカバリファクター:6.88
シャープレシオ:0.72
SlowPeriod:4
FastPeriod:3
リカバリファクター1位
損益:3077869
取引数:854
プロフィットファクター:1.39
期待利得:3604.06
ドローダウン %:7.26
リカバリファクター:9.96
シャープレシオ:0.79
SlowPeriod:3
FastPeriod:2
シャープレシオ1位
損益:1348609
取引数:285
プロフィットファクター:1.46
期待利得:4731.96
ドローダウン %:7.38
リカバリファクター:5.00
シャープレシオ:0.95
SlowPeriod:19
FastPeriod:2
パラメータの比較
各指標で最適なパラメータを長期期間、短期期間の順に書いてみます。
損益:3, 3
プロフィットファクター:19, 4
期待利得:19, 19
ドローダウン %:4, 3
リカバリファクター:3, 2
シャープレシオ:19, 2
各指標のパラメータの長短で4つに分類すると
長期期間が長い+短期期間が長い:期待利得
長期期間が長い+短期期間が短い:プロフィットファクター、シャープレシオ
長期期間が短い+短期期間が長い:なし
長期期間が短い+短期期間が短い:損益、ドローダウン %、リカバリファクター
とできるでしょう。
「長期期間が短い+短期期間が長い」グループだけ該当する指標がありませんが、元々、コードで短期期間>長期期間となるようなパラメータの組み合わせはスキップしていたので当然ではあります。
「長期期間が長い+短期期間が長い」グループは慎重にエントリーし、ポジションを長く保有して利益を伸ばす特徴がありそうです。
また、「長期期間が長い+短期期間が短い」グループは慎重にエントリーし、ポジションは早めに利食いする特徴がありそうです。
そして、「長期期間が短い+短期期間が短い」グループは積極的にエントリーし、ポジションは早めに利食いする特徴がありそうです。
ところで、例えば損益を基準に最適化すると「長期期間が短い+短期期間が短い」グループとなる傾向があるでしょうか。
一概には言えませんが、私が期間を変えながらいろいろ検証したところ、
長期期間が長い+短期期間が長い:なし
長期期間が長い+短期期間が短い:プロフィットファクター、期待利得、ドローダウン %?、シャープレシオ
長期期間が短い+短期期間が長い:なし
長期期間が短い+短期期間が短い:損益、ドローダウン %?、リカバリファクター
となる傾向がある印象です。
ドローダウン %は長期期間が長いときもあれば、短いときもあり、傾向がはっきりしません。
期待利得は短期期間が短いとしましたが、他の指標と比べるとやや長いようです。
あくまでも印象なので、参考程度に見て下さい。
ところで、長期期間、短期期間は最大で19というのがありました。
ストップ20では少し小さいかもしれません。
ただ、あまり大きくすると、エントリーが慎重になったり、ポジションの保有時間が長くなって、取引数が減ります。
例えば長期期間、短期期間の両方が19だった期待利得では取引数は158回でした。
取引頻度は年に16回、月に1回程度と少なく、仮によりよいパラメータがあったとしても、これより取引機会の少ないトレードをしたいとは思わないので、ここではストップを20のままにしておきます。
興味のある人はより大きなストップで最適化してみて下さい。