loader image

MACDを用いたEA(Expert Advisor)の作成方法(MQL4)

MACD(Moving Average Convergence Divergence) は、短期移動平均線と長期移動平均線の差を利用し、売買のタイミングを判断するテクニカル指標です。
ここでは、MACDを使ったEA(自動売買プログラム)MQL4 で作成する方法を解説します。


📌 EAの仕様

  1. エントリー条件

    • MACDのシグナルラインをMACDヒストグラムが上抜けたら 買いエントリー
    • MACDのシグナルラインをMACDヒストグラムが下抜けたら 売りエントリー
  2. エグジット条件

    • 逆のシグナルが出たら決済
    • または、固定のストップロス(SL)とテイクプロフィット(TP)を設定

📌 MACDを取得する方法

MQL4では、組み込み関数 iMACD() を使うと、簡単にMACDの値を取得できます。

mql4
double macdValue = iMACD(Symbol(), 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 0);
double signalValue = iMACD(Symbol(), 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 0);
  • MODE_MAIN → MACDのメインライン(ヒストグラム)
  • MODE_SIGNAL → シグナルライン
  • 0 → 現在の足(最新のローソク足のインデックス)

📌 MACDを使ったEAのコード

実際に動作するEAを作成します。

mql4
//+------------------------------------------------------------------+
//| MACDを用いたシンプルなEA |
//+------------------------------------------------------------------+
#property strict

// 設定パラメータ
input int FastEMA = 12; // MACDの短期EMA
input int SlowEMA = 26; // MACDの長期EMA
input int SignalSMA = 9; // シグナル線のSMA
input double LotSize = 0.1; // 取引ロットサイズ
input double TakeProfit = 50; // テイクプロフィット(pips)
input double StopLoss = 30; // ストップロス(pips)

//+------------------------------------------------------------------+
//| エントリー関数 |
//+------------------------------------------------------------------+
void CheckTrade() {
// MACD値の取得
double macdCurrent = iMACD(Symbol(), 0, FastEMA, SlowEMA, SignalSMA, PRICE_CLOSE, MODE_MAIN, 0);
double signalCurrent = iMACD(Symbol(), 0, FastEMA, SlowEMA, SignalSMA, PRICE_CLOSE, MODE_SIGNAL, 0);
double macdPrevious = iMACD(Symbol(), 0, FastEMA, SlowEMA, SignalSMA, PRICE_CLOSE, MODE_MAIN, 1);
double signalPrevious = iMACD(Symbol(), 0, FastEMA, SlowEMA, SignalSMA, PRICE_CLOSE, MODE_SIGNAL, 1);

// 既存ポジションがない場合のみエントリー
if (OrdersTotal() == 0) {
// 買いシグナル: MACDがシグナルを上抜け
if (macdPrevious < signalPrevious && macdCurrent > signalCurrent) {
OpenOrder(OP_BUY);
}
// 売りシグナル: MACDがシグナルを下抜け
else if (macdPrevious > signalPrevious && macdCurrent < signalCurrent) {
OpenOrder(OP_SELL);
}
}
}

//+------------------------------------------------------------------+
//| エントリー実行関数 |
//+------------------------------------------------------------------+
void OpenOrder(int type) {
double sl, tp;
double price = (type == OP_BUY) ? Ask : Bid;

if (type == OP_BUY) {
sl = price - StopLoss * Point * 10;
tp = price + TakeProfit * Point * 10;
} else {
sl = price + StopLoss * Point * 10;
tp = price - TakeProfit * Point * 10;
}

// オーダーを発注
OrderSend(Symbol(), type, LotSize, price, 3, sl, tp, "MACD Trade", 0, 0, clrBlue);
}

//+------------------------------------------------------------------+
//| メイン関数 |
//+------------------------------------------------------------------+
void OnTick() {
CheckTrade();
}


📌 コードの解説

1. CheckTrade()

  • iMACD() を使い、現在のMACDとシグナルラインの値を取得。
  • 前回の足(1)のMACDとシグナルラインの値と比較。
  • クロスを検出したらエントリーを実行。

2. OpenOrder()

  • OrderSend() を使って、BUY/SELLのエントリーを実行。
  • StopLossTakeProfit を設定。

3. OnTick()

  • 毎回新しいティックデータが来るたびに CheckTrade() を実行。

📌 EAの導入方法

  1. MT4を開く
  2. 「ファイル」 → 「データフォルダを開く」
  3. MQL4Experts フォルダに .mq4 ファイルを保存
  4. MT4のナビゲーターで「エキスパートアドバイザー」を更新
  5. 作成したEAをドラッグ&ドロップしてチャートに適用
  6. 「Algo Trading」をONにして動作確認

📌 改良のアイデア

  • フィルターの追加
    • RSI や ボリンジャーバンド を組み合わせて ダマシを減らす
  • トレンド判定
    • EMA(200)を使用し、上昇トレンドなら 買いのみエントリー
  • 資金管理
    • ロットサイズを口座残高に応じて自動調整
  • トレーリングストップ
    • 利益が出たら、ストップロスを引き上げる

📌 まとめ

MACDを使ったシンプルなEA を作成し、売買ルールを実装
iMACD() を使用 して、MACDのメインラインとシグナルラインを比較
クロスが発生したらエントリー、逆のシグナルで決済
改良点を加えるとより精度の高いEAが作れる


このEAをバックテストして、パフォーマンスを確認しながら調整すると、より安定した運用が可能になります!

Blogs
What's New Trending

Related Blogs