プログラミング未経験者のMQL習得奮闘記③『簡単なEA作成』

こんにちは~。

MQLをマスターしたくて常に手の届くところに孫の手を置いているりょうです。

前回前々回に引き続き完全未経験の僕がMQLを学習している様をここに記す試みです。

目次

ゴールデンクロスとデッドクロス

前回、無事にインジケーターを作成することに成功しました。

なので今回はEAを作ってみることにしました。

ゴールデンクロスでロングポジションを取るというEAを作ってみようと思います。

ロングポジション・・・買いポジション 相場が上がると予測した時に取るポジション
ショートポジション・・・売りポジション 相場が下がると予測した時に取るポジション



ゴールデンクロスは2本の移動平均線を使います。

短期線が長期線を下から上に突き抜けた時の十字をゴールデンクロスと呼びます。

ちなみにその逆で、短期線が長期線を上から下に突き抜けた時の十字をデッドクロスと呼びます。

にゃんぽこ

ゴールデンクロスとデッドクロスはMACDやストキャスティクスなどのチャート分析にも用いられているんだよ

EAをつくってみた

今回作ったソースコードはこちらです。

//+------------------------------------------------------------------+
//|                                                  GoldenCloss.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() {
//---

//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
//---

}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() {
//---
   double MAShort0 = iMA( NULL, PERIOD_CURRENT, 7, 0, MODE_SMA, PRICE_CLOSE, 0 );
   double MALong0 = iMA( NULL, PERIOD_CURRENT, 21, 0, MODE_SMA, PRICE_CLOSE, 0 );
   double MAShort1 = iMA( NULL, PERIOD_CURRENT, 7, 0, MODE_SMA, PRICE_CLOSE, 1 );
   double MALong1 = iMA( NULL, PERIOD_CURRENT, 21, 0, MODE_SMA, PRICE_CLOSE, 1 );

   if(MAShort1 < MALong1 && MAShort0 > MALong0) {
      int result = OrderSend( Symbol(), OP_BUY, 0.01, Ask, 20, 0, 0 );
   }
}
//+------------------------------------------------------------------+


短期はローソク足7本分の移動平均線、長期は21本分の移動平均線の2本のゴールデンクロスでエントリーです。
テストした結果がこちらです↓。


ムゥ

なんかめちゃくちゃなエントリーしとるにゃ

りょう

とんでもないEAになっちまった


今回つくったソースコードは31~38行の部分です。

31~34行の部分では移動平均線の値を取得しています。

iMA()関数・・・移動平均の値を取得するテクニカル指標関数


iMA()関数の()内の引数はこのようになっています↓。



↑31行目の『MAShort0』を例に挙げました。
『7本のローソク足の単純移動平均線の最新足の値を取得する』関数です。

そのほかには『21本の最新足の値』『7本の1本前の値』『21本の1本前の値』を取得しています。



続いて判定の部分です。

   if(MAShort1 < MALong1 && MAShort0 > MALong0) {

↑こちらです。if文の中は、

  • MAShort1 < MALong1 ・・・ 1本前の移動平均線の値は短期より長期のほうが上
  • && ・・・・・・・・・・・・ かつ(and)
  • MAShort0 > MALong0 ・・・ 最新の移動平均線の値は短期のほうが長期より上


という意味です。
なので『短期線が長期線を下から上へ突き抜けている(=ゴールデンクロス)』となります。



この条件を満たしたら決済です。

      int result = OrderSend( Symbol(), OP_BUY, 0.01, Ask, 20, 0, 0 );

この部分で決済しています。

OrderSend関数・・・注文を送信する関数


OrderSend関数の中身は以下のようになっています↓。



以上が今回作った内容となります。

りょう

EAも作ることができたぞ!

ムゥ

やったにゃ~

まぁめちゃくちゃなEAなんですけどね(笑)

にゃんぽこ

決済してくれないしね

りょう

エントリーしっぱなし

まだまだ改良する余地ありですが、EAも作成も成功しました~。

りょう

やったぞ~!

目次