MQL4でiMACD関数を使用する基本的な方法を説明します。
目次
iMACD関数の基本構文
double iMACD(
string symbol, // 通貨ペア
int timeframe, // タイムフレーム
int fast_ema_period, // 短期EMA期間
int slow_ema_period, // 長期EMA期間
int signal_period, // シグナル線期間
int applied_price, // 適用価格
int mode, // ライン識別子
int shift // シフト
);
一般的な使用例
double macdMain = iMACD(Symbol(), PERIOD_CURRENT, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 0);
double macdSignal = iMACD(Symbol(), PERIOD_CURRENT, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 0);
以下は、パラメータの説明を表にまとめたものです。
パラメータ | 説明 |
---|---|
symbol | 通貨ペア (例: NULL または Symbol() で現在のチャートの通貨ペアを使用) |
timeframe | タイムフレーム (例: PERIOD_CURRENT で現在のチャートのタイムフレームを使用) |
fast_ema_period | 短期EMA期間 (一般的に12) |
slow_ema_period | 長期EMA期間 (一般的に26) |
signal_period | シグナル線期間 (一般的に9) |
applied_price | 適用価格 (例: PRICE_CLOSE) |
mode | ライン識別子 (MODE_MAIN: MACDライン, MODE_SIGNAL: シグナルライン) |
shift | シフト (0は現在のバー) |
MACDクロスオーバーの例
double macdMain = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1);
double macdSignal = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 1);
double macdMainPrev = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 2);
double macdSignalPrev = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 2);
if (macdMain > macdSignal && macdMainPrev <= macdSignalPrev) {
// MACDがシグナルラインを上から下へクロス(買いシグナル)
}
else if (macdMain < macdSignal && macdMainPrev >= macdSignalPrev) {
// MACDがシグナルラインを下から上へクロス(売りシグナル)
}
EAサンプルソース
MQL4でiMACD関数を使用してEAを作成する例を示します。このEAはMACDのクロスオーバーを使用して取引シグナルを生成します。
#property copyright "Copyright 2024, Your Name"
#property link "https://www.example.com"
#property version "1.00"
#property strict
input int FastEMA = 12;
input int SlowEMA = 26;
input int SignalSMA = 9;
input double Lots = 0.1;
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
double macdMain = iMACD(NULL, 0, FastEMA, SlowEMA, SignalSMA, PRICE_CLOSE, MODE_MAIN, 0);
double macdSignal = iMACD(NULL, 0, FastEMA, SlowEMA, SignalSMA, PRICE_CLOSE, MODE_SIGNAL, 0);
double macdMainPrev = iMACD(NULL, 0, FastEMA, SlowEMA, SignalSMA, PRICE_CLOSE, MODE_MAIN, 1);
double macdSignalPrev = iMACD(NULL, 0, FastEMA, SlowEMA, SignalSMA, PRICE_CLOSE, MODE_SIGNAL, 1);
if(!PositionSelect(Symbol()))
{
// 新規ポジションを開く
if(macdMain > macdSignal && macdMainPrev <= macdSignalPrev)
{
// 買いシグナル
OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "MACD Buy", 0, 0, clrGreen);
}
else if(macdMain < macdSignal && macdMainPrev >= macdSignalPrev)
{
// 売りシグナル
OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "MACD Sell", 0, 0, clrRed);
}
}
else
{
// 既存ポジションを管理
if(OrderType() == OP_BUY && macdMain < macdSignal)
{
// 買いポジションを閉じる
OrderClose(OrderTicket(), OrderLots(), Bid, 3, clrBlue);
}
else if(OrderType() == OP_SELL && macdMain > macdSignal)
{
// 売りポジションを閉じる
OrderClose(OrderTicket(), OrderLots(), Ask, 3, clrYellow);
}
}
}
このEAの動作は以下の通りです
- MACDのメインラインとシグナルラインの現在値と1つ前の値を計算します。
- オープンポジションがない場合:
- MACDメインラインがシグナルラインを下から上にクロスした場合、買いポジションを開きます。
- MACDメインラインがシグナルラインを上から下にクロスした場合、売りポジションを開きます。
- オープンポジションがある場合:
- 買いポジションを持っていて、MACDメインラインがシグナルラインを下回った場合、ポジションを閉じます。
- 売りポジションを持っていて、MACDメインラインがシグナルラインを上回った場合、ポジションを閉じます。
注意点
- このEAは基本的な例であり、実際のトレードには追加のリスク管理やフィルタリングが必要です。
- パラメータ(FastEMA, SlowEMA, SignalSMA, Lots)は、バックテストと最適化を通じて調整する必要があります。
- 実際の取引に使用する前に、デモ口座でテストし、パフォーマンスを評価することが重要です。
このEAは、MACDを使用した基本的なトレーディングアイデアを示していますが、実際のトレーディングに使用する前に、十分なテストと調整を行うことが重要です。