プログラムを短くする関数化 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を手軽につくるやり方をまとめました。
- 第1回MT4EA作成編 RSIEAの簡単な作り方
- 第2回手順その2 EAの売買ロジックを考える
- 第3回手順その3:EA加工前の準備 EAコピーの仕方
- 第4回基本EAの変更箇所確認
- 第5回30分でできるRSI MT4EA作成編
- 第6回MT4組み込みテクニカル指標関数の使い方
- 第7回MT4でRSIEAを作る 売買シグナル部分
- 第8回決済注文プログラムはたった1行
- 第9回マジックナンバーとRSIEA検証行
- 第10回パラメーターと変数化の効果
- 第11回RSI設定使い方 3つのパターン
- 第12回RSIエグジット戦略とは
- 第13回RSIスキャルピングにも使えるこの応用形
- 第14回RSI20 RSI80の検証
- 第15回RSIの使い方 3つのポイント
- 第16回過剰最適化(カーブフィッティング)の話
- 第17回最適化はカミソリ 大怪我しないためのポイント
- 第18回RSIEA無料配布と留意点
- 第19回決済を値幅指定
- 第20回ブレイクアウトMT4無料EA検証
- 第21回EA作成早期習得のための2つのポイント
- 第22回プログラムを短くする関数化
- 第23回「Breakout1SL1.mq4」をRSI値幅決済EAへ書換え
- 第24回コメントアウト MT4でも大切な理由
- 第25回EA解説後半 EA作成上達のコツ
- 第26回RSI値幅決済EA 短期売買向
- 第27回改造EAの面白いところ
- 第28回Breakout1TS1.mq4 1粒で三度おいしい無料EA
- 第29回大量売買防止方法
- 第30回MT4運用失敗の必然性に気づく
- 第31回最適化して最高成績を選ぶ愚
- 第32回MT4 PF(プロフィットファクター)
- 第33回MT4バックテスト 私の使い方
- 第34回MT4ファンのMT4口座比較方法
- 第35回裁量トレードの方が優秀に見える理由
- 第36回MT4最初の壁「夢の過剰最適化」
- 第37回MT4で儲からないことで目覚めた