過去にインジケータの最適化をするEAを作りました。

読者さんから問い合わせがあったので、やっぱりもう少し詳しく書くことにします。

とりあえず過去の記事とダウンロードはこちらにあります。

基本的な事は上記を読んで下さい。

このインジケータの目的

星の数ほどあるインジケーターの中にはパラメーターの設定次第では大化けするかもしれない宝物が埋もれているかもしれません。

そういうインジケーターを拾い出せたら良いなと思ってこのEAを作ったような気がします。

最適化することによって、使いもになるインジケーターが見つかればラッキーです。

このEAの具体的な使い方

コードの書き換え

まずは上記リンクの記事からダウンロードして下さい。

下記コードは書き換え必須な部分だけ抜粋したものです。

<br />
/*▼インジケーターのパラメータ▼*/<br />
input bool AlertsEnabled=false;<br />
input double Step = 0.009;//was .01<br />
input double Maximum = 0.2;<br />
input int Precision = 7;<br />
input int TimeFrame=0;<br />
/*▲インジケーターのパラメータ▲*/</p>
<p>/*▼最適化したいインジケータからデータを取得▼*/<br />
double out0_0 = iCustom(NULL,0,&quot;Parabolic_trendchaser&quot;,AlertsEnabled,Step,Maximum,Precision,TimeFrame,0,1);<br />
double out0_1 = iCustom(NULL,0,&quot;Parabolic_trendchaser&quot;,AlertsEnabled,Step,Maximum,Precision,TimeFrame,0,2);<br />
double out1_0 = iCustom(NULL,0,&quot;Parabolic_trendchaser&quot;,AlertsEnabled,Step,Maximum,Precision,TimeFrame,1,1);<br />
double out1_1 = iCustom(NULL,0,&quot;Parabolic_trendchaser&quot;,AlertsEnabled,Step,Maximum,Precision,TimeFrame,1,2);<br />
/*▲最適化したいインジケータからデータを取得▲*/<br />

コレを最適化したいインジケーターに書き換えます。

<br />
/*▼インジケーターのパラメータ▼*/<br />
extern int TimeFrame=PERIOD_H1;<br />
extern int period=14;<br />
extern int applied_price=PRICE_TYPICAL;<br />
/*▲インジケーターのパラメータ▲*/</p>
<p>/*▼最適化したいインジケータからデータを取得▼*/<br />
extern int fastInpCCIPeriod=14;<br />
extern int slowInpCCIPeriod=200;<br />
/*▲最適化したいインジケータからデータを取得▲*/<br />

このインジケーターは標準で付属しているCCIですが、ここでは最適化したいインジケーターの内容で書き換えて下さい。

最適化したいインジケータからデータを取得で、iCustomに対して与えるパラメータの数が減っているのは、CCIのパラメータ数がコレだけだからです。

今回はCCIの長期足と短期足とのクロスで売買する方法で最適化をしてみようと思います。

ですので、長期足のPeriodと短期足のPeriodを用意しています。

ここまでが前段階で、次に売買ロジックもラインのクロスで判断させるように書き換えます。

<br />
/*買いエントリー*/<br />
if(out0_0&lt;out1_0 &amp;&amp; out0_1&gt;out1_1)<br />
{<br />
  EntryL();<br />
}</p>
<p>/*売りエントリー*/<br />
if(out0_0&gt;out1_0 &amp;&amp; out0_1&lt;out1_1)<br />
{<br />
  EntryS();<br />
}<br />

最適化実施

テストするパラメータはこんな感じにしました。

チェックボックスが入っている項目について最適化を行います。

スタートが開始値で、ステップが増分値、ストップが終了値となり、開始値から始まり増分値分加算した内容で終了値までの間繰り返して、最適な値をはじき出してくれます。

その結果がこうなりました。

実装は特に何も考えず最低限動くレベルで実装しているので、実用レベルではありませんが、一応プラスとなる結果で追われるパラメータが出てきましたね。

インジケーターの最適化を行う方法はこんな感じになりますが、いかがでしょうか?

もちろんインジケーターの種類と性質によっては最適化できない物もありますので、魔法のようなパラメータをお探しの方は一度ご自身で探って見るのも面白いでしょう。

MQLの練習にもなりますしねw