MQL言語入門|オリジナルEAの超簡単な自作方法

 

せっかくMT4(MetaTrader4)を利用するなら、オリジナルのEA(Expert Advisor)やインジケーターを自作してみませんか。

 

この記事では、初心者向けのMQL言語入門として、オリジナルEA(Expert Advisor)の超簡単な自作方法を解説します。

なぜ超簡単にできるのかというと、すでに出来上がっているサンプルEAのソースコードの一部を書き換えるだけだからです。

 

ホントに超簡単ですので、ぜひ挑戦してみてください。

 

MetaEditor の起動

MT4の「メタクォーツ言語エディタ」をクリックします。

 

MeTaEditorが立ち上がったら、画面左側の「Navigater」内のツリーから「Experts」をダブルクリックします。

「Experts」のツリーから「MACD Sample.mq4」をダブルクリックすると、ソースコードが開きます。

 

「MACD Sample.mq4」の内容

ソースコードは150行以上もあり難しそうに見えますが、書いている内容は以下のようなシンプルなものです。

  • 買い条件(移動平均線が上向きのときに、MACDがマイナスの低い位置でゴールデンクロス)を満たしたら買い注文をだす
  • 売り条件(移動平均線が下向きのときに、MACDがプラスの高い位置でデッドクロス)を満たしたら売り注文をだす
  • 買いポジションの決済は、MACDがプラスの高い位置でデッドクロスしたとき、またはトレーリングストップにひっかかったとき
  • 売りポジションの決済は、MACDがマイナスの低い位置でゴールデンクロスしたとき、またはトレーリングストップにひっかかったとき

 

変更内容

このソースコードの一部を書き換えて、以下のような内容に変更します。

  • サンプルEAは、ストップロスオーダー(損切注文、逆指値注文)を設定していないので、新たに設定する。
  • MACDのだましを回避するためのフィルターとして、サンプルEAでは移動平均線の向きによるトレンド判断を使っているが、MACDと相性がいいと言われるスローストキャスティックスの売られすぎ(買われすぎ)の判断に変更する。

 

オリジナル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行を記述しました。

MQL4言語には多くのテクニカルインジケーター関数があり、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が完成したのですから、バックテストしてみましょう。

バックテストのやり方は別記事にまとめています。

MT4のはじめ方②~ヒストリカルデータ取得からバックテストのやり方~
MT4の初心者の方を対象に、「最大バー数の設定」と「ヒストリカルデータの取得」を行ってから、サンプルEAを走らせて「バックテスト」をする、という流れです。難しそうに見えるかもしれませんが、ものすごく簡単ですから、ぜひ挑戦してみてください。

 

後日、実際にバックテストを行ったので、その結果も別記事にまとめました。

MT4のはじめ方③「コントロールポイント」でバックテストをやってはダメ
今回わかったことは、「全ティック」以外の方法で行ったバックテストは信頼できない、ということです。少なくとも、ティック単位で条件分岐して命令を出すようなEAでは、「コントロールポイント」では何の確認もできません。バックテストは「全ティック」をおすすめします。

 

まとめ

MQL言語入門として、オリジナルEAを自作して、コンパイルし、バックテストするまでを解説しました。

変更箇所も少ないし、思った以上に簡単だったでしょ。

 

また、今回の作業を応用すれば、さまざまなテクニカルインジケーターを自由自在に組み合わせて、オリジナルのEAを作ることができます。

しかも、MT4のインジケーター数は無数にあります。デフォルトで50種類以上あり、ネットで配布しているものを拾ってくることもできるし、自作することもできます。

アイディア次第では、ものすごいEAが自作できるかもしれませんよ。

 

☆MQL言語入門まとめ☆

【保存版】MQL言語入門まとめ~EA自作への道~
せっかくMT4を使うなら、オリジナルのEAやインジケーターを自作してみませんか。「プログラミングなんて自分にはとても無理だ」と思うかもしれませんが、そんなことありません。最低限知っておくべきことさえ押さえておけば、簡単にできますから。

 

もし、あなたが本格的にMQL言語を使いこなしたいと考えているなら、以下の書籍がおすすめです。

FXメタトレーダー実践プログラミング (現代の錬金術師シリーズ)

もしあなたが、MT4をリアル口座で稼働しようと考えているなら、XMTradingがおすすめです。
XMは、海外FX業者の中で、日本人による口座開設数No.1、豊富な入出金方法、24時間対応の日本語サポートなどにより、日本人でも安心して利用できます。

XMの口座開設はこちらから

MT4でシストレ

●免責及び注意事項●
当サイトの全てのコンテンツは管理人自身による情報の提供を目的としており、決して投資行動を勧誘・助言するものではありません。
投資商品、売買価格決定等の投資行動につきましては、ご自身の判断と責任に基づいて行われるようお願いいたします。
また、個々の取引において生じたいかなる損失についても、本ブログサイトおよびその管理者は一切の責任を負いかねます。

Startup!

コメント