EAで定数をパラメーター化する方法

定数をパラメーター化することの意義

「高確率ながら超簡単スキャルピング手法」のEA化
で作ったEAはMT4EAエディタで作成したものです。
ストキャスのK%、D%、Slowing、移動平均線のMAPeriod等、インジケーターのパラメーターはEA化する際にEAパラメーターとすることができます。

一方、例えば利食い幅や損切り幅等はMT4EAエディタでは定数としてしか扱うことができないので、これらの値をいろいろ変えてEAを検証するためには、その都度コードを保存してMT4のバックテストを実行する必要があります。

もし、これらをパラメータ化(変数化)することができれば、MT4のバックテストにおいて「最適化」を利用することができるので、例えば最も利益を生むパラメーターの組み合わせを探しだすことが格段に容易になります

定数をパラメーター化する方法

ということで、「高確率ながら超簡単スキャルピング手法」で使ったEA(以下スキャEA)の「利食い幅」と「損切り幅」をパラメーター化」する方法について書きたいと思います。

スキャEAでは「利食い幅」、「損切り幅」ともに6pipsに設定していました。
買いの損切り幅「6pips」は96行目の

if( OrderModify( iTicket,OrderOpenPrice(),OrderOpenPrice()-(dPoint*6),0,0,Red ) ){

売りの損切り幅「6pips」は123行目の

if( OrderModify( iTicket,OrderOpenPrice(),OrderOpenPrice()+(dPoint*6),0,0,Blue ) ){

買いの利食い幅は「6pips」は138行目の

if( dPipsAveBuy >= 6 ){

売りの利食い幅は「6pips」は160行目の

if( dPipsAveSell >= 6 ){

でそれぞれ設定されています。

ここで損切り幅を変数「SL」、利食い幅を変数「TP」とし、

それぞれを
if( OrderModify( iTicket,OrderOpenPrice(),OrderOpenPrice()-(dPoint*SL),0,0,Red ) ){

if( OrderModify( iTicket,OrderOpenPrice(),OrderOpenPrice()+(dPoint*SL),0,0,Blue ) ){

if( dPipsAveBuy >= TP ){

if( dPipsAveSell >= TP ){

に書き換えます。

そして5行目の
extern int Slippage = 4;

の後に
extern int SL = 6;
extern int TP = 6;

を追加します。

変更は以上です。

バックテストによるパラメーターの最適化

前述のとおり、スキャEAは「利食い幅」、「損切り幅」ともに6pipsの設定では惨憺たる結果だったわけですが、「利食い幅」、「損切り幅」いろいろ変えれば果たして利益がでるのか?どんな組み合わせが一番利益の幅が大きいのか、といったことを検証する場合、重宝するのがご存じ、MT4のバックテストの「最適化」ですね。

ということでスキャEAを使って実験してみました。

まず、MT4のテスターで「エキスパート設定」をクリックすると
このようなダイアログが表示され、SLとTPがパラメータ化されたことが確認できます。

ここでSLとTPをチェックし、それぞれのスタート、ステップ、ストップの値を6,1,15とします。

OKを押してダイアログを閉じ、テスターの最適化にチェックを入れ、スタートを押すと最適化の計算がはじまります。
今回は計算時間の短縮のため、期間は8/1~8/7としました。

計算が終了し、最適化の結果を損益で並べ替えてみるとSL=13,TP=14の組み合わせが最も利益が大きいことがわかりました。

結果はこんな感じ。

ちなみに利食い幅6、損切り幅6の結果はこんな感じです。

今回は利食い幅、損切り幅のみをパラメータ化しましたが、他のパラメーターをいろいろ変えて検証することで、もしかしたら爆発的に利益を生む組み合わせが見つかったりするかもしれませんね。
ロジックを考えるのも重要だけど最適なパラメーターを見つけるのもかなり重要だってことだと思います。

以上、EAで定数をパラメーター化する方法でした!


前へ( )次へ(
★ブログにはちょっと書けないEAの話はこちらで★
★プログラムに関する話も多分こちらで★
メルマガ購読・解除
 

コメントを残す

Time limit is exhausted. Please reload CAPTCHA.

このページの先頭へ