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

オリジナルEA自作

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

 

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

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

 

最後あたりでEAの完成品を無料ダウンロードできます。ぜひ読んで行ってください。

 

MetaEditor の起動

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

メタエディター起動

 

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

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

MACDサンプル起動

 

「MACD Sample.mq4」の内容

ソースコードは150行以上もあり、難しそうに見えます。

しかし、書いている内容はシンプルなルールで、以下のとおりです。

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

 

変更内容|Dr.田平の手法

このソースコードの一部を書き換えて、MACDとスローストキャスティックスを組み合わせたストラテジー(戦略)に変更します。

この手法は、有名トレーダー「Dr.田平」の書籍の中で、実際のトレードで100万円超の利益をあげた手法として紹介されていたものです。

 

ソースコードの内容を以下のように変更します。

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

 

オリジナルEA「MAC-STOC.mq4」の自作

最初に、名前をつけてファイルを保存します。

「MACD Sample.mq4」が開いている状態で、「File」→「Save As...」 をクリックします。

MAC-STOC保存

 

ファイル名を「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)」と表示されます。

MAC-STOCのコンパイル

 

コンパイルとは、プログラムのソースコードをコンピューターが実行可能な機械語に翻訳することです。

ソースコードに記述ミスがあった場合は、エラーとなります。

エラーがでた場合は、記述を修正して再びコンパイルしましょう。

 

以下は、よくあるエラーの例です。気を付けましょう。

  • 全角で記述している(ソースコードはすべて半角で記述します)
  • 変数の型("int"や"double"など)が違う
  • カッコ(” { ” や ” } “)が足りない(多い)
  • ” ; ” が抜けている

 

バックテスト

せっかくオリジナルEAが完成したのですから、バックテストしてみましょう。

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

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

 

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

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

 

まとめ|自作EA無料配布

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

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

 

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

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

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

 

完成品はこちらからダウンロードできます。

本EAは、あくまでMQL言語の学習用に無料配布するものです。なので、再配布はやめてください。

もし、当サイトを宣伝して頂けたり、下のバナーから『XMTrading』の口座を開設していただけると、みなさんに役立つサイト作りをもっともっと頑張れます(*^▽^*)

コメント

  1. より:

    自作してみました。ろうそく足一本の中で、何本もエントリーになります。なぜでしょうか

    • 吉様、
      当サイトにご訪問いただきありがとうございます。
      自分でも改めてバックテストしてみましたが、特にそのようなことはありませんでした。
      どこかで打ち間違いをされているかもしれません。
      記事の後半に完成品を置いていますので、ダウンロードして見比べてみてもらえればハッキリすると思います。

  2. より:

    鈴木様 
    早速のご回答、ありがとうございます。
    ダウンロードして比べてみましたところ、何点か相違点が見つかりました。
    実装してみます。デモ口座です。
    こんなに早く返信していただけるとは、思っておりませんでした。
    大変ありがとうございます。

タイトルとURLをコピーしました