せっかくMT4(MetaTrader4)を使うのなら、オリジナルのEA(Expert Advisor)やインジケーターを自作してみませんか。
今回は、初心者向けのMQL4言語入門として、オリジナルEA(Expert Advisor)の超簡単な自作方法を解説します。
なぜ超簡単にできるのかというと、すでに出来上がっているサンプルEAのソースコードの一部を書き換えるだけだからです。
最後あたりでEAの完成品を無料ダウンロードできます。ぜひ読んで行ってください。
MetaEditor の起動
MT4の「メタクォーツ言語エディタ」をクリックします。
MeTaEditorが立ち上がったら、画面左側の「Navigater」内のツリーから「Experts」をダブルクリックします。
「Experts」のツリーから「MACD Sample.mq4」をダブルクリックすると、ソースコードが開きます。
「MACD Sample.mq4」の内容
ソースコードは150行以上もあり、一見、難しそうです。
しかし、書いている内容はシンプルなルールで、以下のとおりです。
- 買い条件(移動平均線が上向きのときに、MACDがマイナスの低い位置でゴールデンクロス)を満たしたら買い注文をだす。
- 売り条件(移動平均線が下向きのときに、MACDがプラスの高い位置でデッドクロス)を満たしたら売り注文をだす。
- 買いポジションの決済は、MACDがプラスの高い位置でデッドクロスしたとき、またはトレーリングストップにひっかかったとき。
- 売りポジションの決済は、MACDがマイナスの低い位置でゴールデンクロスしたとき、またはトレーリングストップにひっかかったとき。
ソースコードの変更内容|Dr.田平の手法
このソースコードの一部を書き換えて、MACDとスローストキャスティックスを組み合わせたストラテジー(戦略)に変更します。
これは、有名トレーダー「Dr.田平」の書籍に登場する手法で、NZDJPYのリアルトレードで100万円超の利益をあげた手法だそうです。
ソースコードの内容を以下のように変更します。
- サンプルEAは、ストップロスオーダー(損切注文、逆指値注文)を設定していないので、新たに設定する。
- MACDのだましを回避するためのフィルターとして、サンプルEAでは移動平均線の向きによるトレンド判断を使っているが、MACDと相性がいいと言われるスローストキャスティックスの売られすぎ(買われすぎ)の判断に変更する。(有名トレーダーであるDr田平の手法)
オリジナルEA「MAC-STOC.mq4」の自作
最初に、名前をつけてファイルを保存します。
「MACD Sample.mq4」が開いている状態で、「File」→「Save As…」 をクリックします。
ファイル名を「MAC-STOC.mq4」と打ち込んで保存します。
それでは、いよいよソースコードを書き換えていきます。
パラメーターの追加
カーソルを10行目に持って行きます。
ここでは、売買ロットやテクニカルインジケーターに関するパラメーターが記述されています。パラメーター値は、MT4上でユーザーが自由に変更できます。
【変更前】
input double TakeProfit =50;
input double Lots =0.1;
input double TrailingStop =30;
input double MACDOpenLevel =3;
input double MACDCloseLevel=2;
input int MATrendPeriod =26;
【変更後】
input double TakeProfit =50;
input double StopLoss =30;
input double Lots =0.1;
input double TrailingStop =30;
input double MACDOpenLevel =3;
input double MACDCloseLevel=2;
新たにストップロスを設定(変数として宣言)し、値を30ポイントにする旨を記述しました。
「変数」については、とりあえず、値を入れておく箱のことであり、あらかじめ宣言する必要がある、とだけ理解しておいてください。
あと、不要な移動平均線のパラメーターを削除しました。
テクニカルインジケーター変数の宣言の変更
カーソルを下に移動させます。
ここでは、テクニカルインジケーターの変数の宣言が記述されています。
【変更前】
double MacdCurrent,MacdPrevious;
double SignalCurrent,SignalPrevious;
double MaCurrent,MaPrevious;
int cnt,ticket,total;
【変更後】
double MacdCurrent,MacdPrevious;
double SignalCurrent,SignalPrevious;
double Stoc;
int cnt,ticket,total;
移動平均線の変数(MaCurrent,MaPrevious)の宣言を削除し、代わりにストキャスティックスの変数(Stoc)の宣言を記述しました。
テクニカルインジケーター関数の変更
カーソルを下に移動させます。
ここでは、先ほど宣言した変数に、テクニカルインジケーター関数の値を代入する式が記述されています。
【変更前】
//--- to simplify the coding and speed up access data are put into internal variables
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
【変更後】
//--- to simplify the coding and speed up access data are put into internal variables
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
Stoc=iStochastic(NULL,0,42,3,3,MODE_SMA,0,MODE_SIGNAL,1);
移動平均線の式2行を削除し、代わりにストキャスティックスの式1行を記述しました。
MQL44言語には多くのテクニカルインジケーター関数があり、iStochastic関数はストキャスティクスの値を取得するために使用します。
ストキャスティクスとは、一定期間において、価格レンジの中で今の価格が相対的にどのレベルに位置するかを示す指標です。
ここで記述したiStochastic関数のカッコ内の数字や記号の意味は、以下のとおりです。
iStochastic(通貨ペアは指定しない,%K期間は「42」,%D期間は「3」,スローイング期間は「3」,シグナルラインは単純移動平均で算出する,高値・安値を基に値を計算する,シグナルラインの値を取得する,1本前のバーの値を取得する);
買い条件の変更
カーソルを下に移動させます。
ここでは、買い条件を満たしているか否かを判定しています。if文(条件分岐)の最後を、以下のように書き換えます。
【変更前】
//--- check for long position (BUY) possibility
if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)
【変更後】
//--- check for long position (BUY) possibility
if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && Stoc<15)
買い条件のうち、移動平均線の向きが上向きか否かの記述を削除し、代わりにスローストキャスティックスの値が15以下か否かの記述に変更しました。
一般に、スローストキャスティックスは、値が15以下のときは「売られすぎ」と判断されます。
売り条件の変更
カーソルを下に移動させます。
ここでは、売り条件を満たしているか否かを判定しています。このif文(条件分岐)の最後を、以下のように書き換えます。
【変更前】
//--- check for short position (SELL) possibility
if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)
【変更後】
//--- check for short position (SELL) possibility
if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDOpenLevel*Point) && Stoc>85)
売り条件のうち、移動平均線の向きが下向きか否かの記述を削除し、代わりにスローストキャスティックスの値が85以上か否かの記述に変更しました。
一般に、スローストキャスティックスは、値が85以上のときは「買われすぎ」と判断されます。
ソースコードの書き換えは以上です。
一応、記事の最後あたりに、完成品をダウンロードできるよう置いておきます。
ソースコードをコンパイルする
記述し終わったら、「Compile」をクリックします。
記述ミスがなければ、Destrictionに、「0 error(s), 0 warning(s)」と表示されます。
コンパイルとは、プログラムのソースコードをコンピューターが実行可能な機械語に翻訳することです。
ソースコードに記述ミスがあった場合は、エラーとなります。
エラーがでた場合は、記述を修正して再びコンパイルしましょう。
以下は、よくあるエラーの例です。気を付けましょう。
- 全角で記述している(ソースコードはすべて半角で記述します)
- 変数の型(”int”や”double”など)が違う
- カッコ(” { ” や ” } “)が足りない(多い)
- ” ; ” が抜けている
バックテスト
せっかくオリジナルEAが完成したのですから、バックテストしてみましょう。
バックテストのやり方は別記事にまとめています。
後日、実際にバックテストを行ったので、その結果も別記事にまとめました。
まとめ|自作EA無料配布
MQL4言語入門として、オリジナルEAを自作して、コンパイルし、バックテストするまでを解説しました。
変更箇所も少ないし、思った以上に簡単だったでしょ。
また、今回の作業を応用すれば、さまざまなテクニカルインジケーターを自由自在に組み合わせて、オリジナルのEAを作ることができます。
しかも、MT4のインジケーター数は無数にあります。デフォルトで50種類以上あり、ネットで配布しているものを拾ってくることもできるし、自作することもできます。
アイディア次第では、ものすごいEAが自作できるかもしれませんよ。
完成品(MAC-STOC.zip)はこちらからダウンロードできます。
・本EAは、あくまでMQL4言語の学習用に無料配布するものです。なので、再配布はやめてください。
・もし、当サイトを宣伝して頂けたり、下のバナーから『XMTrading』の口座を開設していただけると、みなさんに役立つサイト作りをもっともっと頑張れます(*^▽^*)