当ページは、アフィリエイト広告を含みます。

プログラムを短くする関数化 MT4EA作成編第22回

同じ動作をするEAでも作り手により、プログラムの内容はかなり違ってきます。無駄の無い短くてわかりやすいプログラムが組めるようになると、後日加工するときも楽です。今回は、プログラムを短くわかりやすくするテクニックである関数化について書かせていただきます。

変更対象4箇所

前回、「変更箇所を考えてみてください」とお願いしました。今回その続きをやらせていただきます。

 

私が変更対象とした部分は以下の4点です。

 

*その1 エントリー関数部分 22行目

 

// エントリー関数
extern int HLPeriod = 20;  // HLバンドの期間...1

 

*その2 HLバンドの計算 29行目

 

// HLバンドの計算
double HH2 = iCustom(NULL, 0, "HLBand", HLPeriod, 1, 2);
double LL2 = iCustom(NULL, 0, "HLBand", HLPeriod, 2, 2);

 

*その3 売買シグナル部分 33行目

 

int ret = 0;
// 買いシグナル
if(pos <= 0 && Close[2] <= HH2 && Close[1] > HH2) ret = 1;
// 売りシグナル
if(pos >= 0 && Close[2] >= LL2 && Close[1] < LL2) ret = -1;

 

*その4 マジックナンバー 12行目

 

// マジックナンバー
#define MAGIC 20094071

 

いかがでしたでしょうか。

 

前回「Breakout_Exp.mq4」を変更したときには5箇所だったのですが今回は4箇所だけです。しかも、最後のマジックナンバー部分はダブリがなければ変更不要ですので必ず変更しないといけないのは3箇所ということになります。

 

プログラムもこの間よりかなり短いですよね。前回のRSIEAは105行くらいあったのですが今回のRSIEAは78行です。かなりスッキリしている気がします。

 

プログラム文が少なくて済んでいるのは、豊嶋先生の関数化というテクニックによるものです。この関数化の考え方は、EAをちょっと加工したいときにとても便利なテクニックですので、少し説明させていただきます。

関数化の効果

豊嶋先生の「FXメタトレーダー実践プログラミング」の219ページに「トレード関数のライブラリー化」がまとめられています。簡単な加工になれてきたら、この部分をじっくり読み込むことをおすすめします。

 

今回使うEAは、豊嶋先生の独自関数を使うことでプログラム全体が短く、そしてわかりやすくなっています。このEAを動かすには豊嶋先生のEAをダウンロードした際に一緒に入っている「MyLib.mq4」をコンパイルして作成される「MyLib.ex4」が必要になります。

 

参考:コンパイルの仕方

 

既に質問頂いているのですが、EA単独では動かないのでご注意ください。

 

よく使うプログラム文は関数化しておくと便利です。どのプログラムでも簡単に取り入れていけるようになるからです。私もよく使うプログラムは関数化してあります。

 

  • 連敗防止フィルター
  • 休みフィルター
  • EMAでトレイリングストップ決済
  • 一目均衡表でのトレイリングストップ決済

 

どれも一見有効に機能しているように見えるのですが、たまにバグがみつかります。こういう応用系のプログラムを公開するのは、私の技術がもっと向上してからということになりそうです。この関数化にはEAの運用成績を向上させる効果もあります。

 

EA作りをしていくと「このEAはこうしたら成績が良くなるんじゃないの?」ということが必ず出てきます。

 

例えば、2勝8敗のパターンで利益が出るEAがあったとします。

 

バックテストの結果、連勝することはほとんどないことがわかったら、皆さんならどう考えるでしょうか?

 

「勝ちトレードの後は少し休ませたらいいんじゃない?」

 

こういう発想で作ったのが「連敗防止フィルター」です。この関数は、連敗が多いタイプのEAにくっつけてみることで運用成績が大幅に向上させることもあります。こういうアイオデアを関数化しておくことで、その後のEA作りのバリュエーションも大きく拡がります。

 

皆さんも、こういうちょっと変更したくなったときにその部分だけ関数化しておくと他のEAでも使い回しができるようになります。

 

ちなみに、連敗防止フィルターに限らず、作ったけど効果が微妙なものもかなりあります。こういうのも一般の商品開発と似たようなところがあります。一つのヒット作品をつくるためにいろんな商品開発を行い市場に投入して効果を図るようなものです。

 

EA作りも沢山の駄作を作っていくなかで良い物ができていくのだろうと思っています。有効でなければすぐに外せるのも関数化のメリットでもあります。

MT4EA作成編目次

EAを手軽につくるやり方をまとめました。

 

MT4 自動売買関連記事まとめページへ戻る

2014/06/16


記事がお気に召しましたら、共有・拡散お願いします。

このエントリーをはてなブックマークに追加   
TOPへ