以前紹介した「FXメタトレーダープログラミング入門」、「EA実践プログラミング」では、本の著者が作成した共通ライブラリーLibEA.mqhを使用していました。
「FXメタトレーダープログラミング入門」、「EA実践プログラミング」の本の感想はこちら
この本の他にも初心者向けで評価が高いけど、2011年発行で古いバージョンのBuild対応である「iCustomで変幻自在のメタトレーダー」を読むことにしました。
古くても普通にEAが作成できますし、この構文がどのような動きなのかが日本語でも記載されているので読んでて分かりやすいです。
むしろ初心者がまっさきに読むべき本だと思いました。
参考としてボリンジャーバンドの逆張りのEAの中身をサンプルとして記載します。
基本的に定型文をコピペして売買ロジックだけ考えれば良いので、大まかな構成としては1度作ればあとは簡単に増やしていけます。
売買ロジックに関わる変更部分については、EAサンプル内で太字にしてみました。
iCustomで変幻自在のメタトレーダー Modern Alchemists Series
EAサンプル(ボリバンの逆張り)
#property strict
#property description “ボリバンで標準偏差2の逆張り”
// EA識別用
#define MAGIC_NO 20200202//日付
//パラメーターの設定
input double Lots = 0.1; //売買ロット数
input int Slip = 10; // 許容スリッページ数
input int BBPeriod = 20; //ボリンジャーバンドの期間
input double BBDev1 = 2.0; //標準偏差の倍率
// 変数の設定
int Ticket_L = 0;
int Ticket_S = 0;
int Exit_L = 0;
int Exit_S = 0;
//ボリンジャーバンドの設定
double BBMiddle1 = 0;
double BBUpper1 = 0;
double BBLower1 = 0;
double BBUpper2 = 0;
double BBLower2 = 0;
//実行
int start(){
//1本前のボリバンと2本前のボリバン
BBMiddle1 = iBands(_Symbol, 0, BBPeriod, BBDev1, 0, PRICE_CLOSE, MODE_MAIN, 1);
BBUpper1 = iBands(_Symbol, 0, BBPeriod, BBDev1, 0, PRICE_CLOSE, MODE_UPPER, 1);
BBLower1 = iBands(_Symbol, 0, BBPeriod, BBDev1, 0, PRICE_CLOSE, MODE_LOWER, 1);
BBUpper2 = iBands(_Symbol, 0, BBPeriod, BBDev1, 0, PRICE_CLOSE, MODE_UPPER, 2);
BBLower2 = iBands(_Symbol, 0, BBPeriod, BBDev1, 0, PRICE_CLOSE, MODE_LOWER, 2);
// 買いエグジット
if((BBMiddle1 < Close[1])&&(Ticket_L != 0 && Ticket_L != -1 ))
{
Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Blue);
if(Exit_L == 1) {Ticket_L = 0;}}
// 売りエグジット
if((BBMiddle1 > Close[1])&&(Ticket_S != 0 && Ticket_S != -1 ))
{
Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue);
if( Exit_S == 1 ) {Ticket_S = 0;}}
// 買いエントリー
if((BBLower1<Close[1] && BBLower2>=Close[2])
&&(Ticket_S == 0 || Ticket_S == -1 )&&(Ticket_L == 0 || Ticket_L == -1 ))
{Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,NULL,MAGIC_NO,0,Blue);}
// 売りエントリー
if((BBUpper1>Close[1] && BBUpper2<=Close[2])
&&(Ticket_S == 0 || Ticket_S == -1 )&&(Ticket_L == 0 || Ticket_L == -1 ))
{Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,NULL,MAGIC_NO,0,Red);}
return(0);}
結果
2019年の1年間でバックテストをしたところ、エントリー回数が8回しかありませんでした。
ロジックはシンプルで、ボリバンの2σを超えて戻ったところでエントリー、ミドルラインを抜けたらエグジットだけです。
利益はでたもののあまり良い結果ではないことや、時間軸を落とすと連続注文になったりしますので、あくまでサンプルです。
まとめ
この本はプログラミング初心者向けで説明がとても分かりやすいため、初めの1冊として購入することをおすすめします。
プログラム中の英語を見てやる気をなくしかけても、次のページで日本語訳で説明文が出てきており、構成を1から覚えるにはとても勉強になりました。
この本の後に「FXメタトレーダープログラミング入門」、「EA実践プログラミング」を読んでみるとより理解が深まります。
またこの本で出てくるiCustom関数は、MQL4で組み込まれていないインジケーターも売買ロジックとして使用できるため、EAの幅が広がること間違いなしです。