MQL4

MQL4でMACDの数値を扱うiMACD関数の使い方とコードサンプル

どうも、こっこです。

今回はMQLでのMACDを扱うためのiMACD関数の扱い方、またその関数をしようしてどうやってサインツールやEAを作成するのかを詳細に説明します。

 

私自身、最近は結構MACDを見ることが多く、バイナリーでのサインツール作成よりも裁量でのFX取引の判断材料として使うことがよくあります。MACD自体がとても良く使われるテクニカル指標ですので、是非MQLでの使い方をマスターしてください。

iMACD関数書式

double iMACD(
   string    symbol,          //通貨ペア
   int       timeFrame,       //時間軸(足)
   int       fastEMAperiod,   //ファストEMA期間
   int       slowEMAperiod,   //スロウEMA期間
   int       signalPeriod,    //シグナル線期間
   int       appliedPrice,    //適用価格
   int       mode,            //ラインインデックス
   int       shift            //バーシフト
);

 

iRSI関数引数

引数名 詳細
symbol string 対象とする通貨ペア名。
NULLを入力することで現在のチャートに表示されている通貨ペアを利用します。
timeframe int 対象とする時間軸を入力します。
0を入力することで現在のチャートに表示されている時間軸を利用します。
fastEMAperiod int ファストEMAの値を計算する期間を渡します。
(基本は12)
slowEMAperiod int スロウEMAの値を計算する期間を渡します。
(基本は26)
signalPeriod int シグナル線の値を計算する期間を渡します。
(基本は9)
applied_price int 適用価格をENUM(列挙)で値を指定します。
列挙体から選択するか番号を渡します。
mode int インジケータ上のどのラインの値を取得するか列挙、または番号で指定します。
0(MODE_MAIN):MACD線を取得
1(MODE_SIGNAL):シグナル線を取得
shift int バッファから取得するバーシフトの数字を渡します。
現在のバーを基準として、左(過去)には1ずつ増え、右(未来)には1ずつ減ります。最新で今動いているバーは0になります。

 

iMACD関数返り値

double型でMACDを計算した値を返します。

引数modeでの列挙を指定した線の値を取得します。

RSI値取得例

void OnCalculate()//引数省略
{

   double macdNow = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 0); //MACD線の値を取得

}

 

MACD値計算例

◯シグナル表示条件

・1本前がシグナル線の値よりMACD線の値が大きく、現在のシグナル線の値がMACD線の値を超えていたらLow(売り)のシグナルを表示
・1本前がシグナル線の値よりMACD線の値が小さく、現在のシグナル線の値がMACD線の値を下回ったらHigh(買い)のシグナルを表示

void OnCalculate()  //引数省略
{
 string signal = "";
 for(int i=0; i<Bars; i++)
 {
   double macdMainNow = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, i);
   double macdSignalNow = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, i);
   double macdMainPre = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, i+1); 
   double macdSignalPre = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, i+1);

   if(macdSignalPre < macdMainPre && macdMainNow < macdSignalNow)
   {
      signal = "Low";   //シグナル線がMACD線を突き抜けたらLow(売り)の処理
   }
   else if(macdMainPre < macdSignalPre && macdSignalNow < macdMainNow)
   {
      signal = "High";   //シグナル線がMACD線を下回ったらHigh(買い)の処理
   }
 }
 return(rates_total);
}

※結構省略している部分が多いので、あくまで参考程度に見てください。

まとめ

いかがだったでしょうか?

オシレーターとしてMACDは裁量取引でよく使われます。

しかし、MACDは上限、下限の値がないため裁量では取引することができても、プログラムに落とし込んで自動で取引をするサイン表示には使い方が難しいので、あまりMQLでは使われない印象です。

是非MACDをMQLで使いこなして、トレンド転換の判断のサインツールやEA作成をやってみてください!

ではまた!

【広告枠】初心者向けMQL4開発ができる格安パソコン
・Let’s note(CF-SZ5) 価格:39800円
https://amzn.to/3ktKsay
└中古品、軽量コンパクト、画面サイズ小さめ
・Think Pad(L580) 価格:37230円
https://amzn.to/3krdIip
└中古品、CPU第8世代i5とだいぶ新しい、画面サイズが15.6インチなのでちょっと大きめ
・NEC(VK26) 価格:42880円
https://amzn.to/3QN88mB
└中古品、CPUが第7世代i7なので心配無し、画面サイズが15.6インチなのでちょっと大きめ、ディスクドライブ付きなので分厚い
※各価格は掲載当時の価格になります。