目次
MQL4におけるiMA関数とは
MQL4のiMA関数は、移動平均(Moving Average)を計算するための組み込み関数です。この関数は、指定されたパラメータに基づいて移動平均値を返します。以下にiMA関数の使い方と特徴を説明します。
iMA関数の基本構文
double iMA(
string symbol, // シンボル名
int timeframe, // タイムフレーム
int period, // 平均期間
int ma_shift, // 水平方向のシフト
int ma_method, // 平均化方法
int applied_price, // 適用価格
int shift // 時系列配列内のインデックス
);
iMA関数の使用例
以下は、現在のチャートで14期間の単純移動平均を計算する例です。
double ma = iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0);
Print("14期間SMAの現在の値: ", ma);
iMA関数のパラメータ説明
以下は、iMA関数のパラメータ説明を表にまとめたものです。
パラメータ | 説明 |
---|---|
symbol | 通貨ペア名。NULLを指定すると現在のチャートのシンボルが使用されます。 |
timeframe | タイムフレーム。0を指定すると現在のチャートのタイムフレームが使用されます。 |
period | 移動平均の期間。 |
ma_shift | チャート上での水平方向のシフト(ピクセル単位)。 |
ma_method | 移動平均の計算方法。以下のいずれかを指定します: |
– MODE_SMA: 単純移動平均 | |
– MODE_EMA: 指数移動平均 | |
– MODE_SMMA: 平滑化移動平均 | |
– MODE_LWMA: 線形加重移動平均 | |
applied_price | 計算に使用する価格。以下のいずれかを指定します: |
– PRICE_CLOSE: 終値 | |
– PRICE_OPEN: 始値 | |
– PRICE_HIGH: 高値 | |
– PRICE_LOW: 低値 | |
– PRICE_MEDIAN: 中央値 ((high + low) / 2) | |
– PRICE_TYPICAL: 代表値 ((high + low + close) / 3) | |
– PRICE_WEIGHTED: 加重終値 ((high + low + close + close) / 4) | |
shift | 取得するバーのインデックス。0は現在のバー、1は1つ前のバーを意味します。 |
注意点
- iMA関数は、指定されたシフト位置の移動平均値を返します。リアルタイムの値を取得するには、shift=0を使用します。
- 異なる期間や方法の移動平均を比較する場合は、それぞれのiMA関数呼び出しで適切なパラメータを設定してください。
- iMA関数は、指標やエキスパートアドバイザーの中で頻繁に使用されます。特に、クロスオーバー戦略やトレンド分析に役立ちます。
iMA関数を使いこなすことで、様々な移動平均ベースの戦略を実装できます。例えば、短期と長期の移動平均のクロスオーバーを検出したり、価格と移動平均の関係を分析したりすることが可能です。
iMA関数を使ったEAのサンプルコード
iMA関数を使った簡単なEAのサンプルコードを以下に示します。
// 外部パラメータ
extern int FastPeriod = 10; // 短期移動平均の期間
extern int SlowPeriod = 30; // 長期移動平均の期間
extern double Lots = 0.1; // 取引ロット数
// グローバル変数
int ticket = 0;
void OnTick()
{
// 現在の移動平均値を取得
double fastMA = iMA(NULL, 0, FastPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
double slowMA = iMA(NULL, 0, SlowPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
// 1本前の移動平均値を取得
double fastMA_prev = iMA(NULL, 0, FastPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
double slowMA_prev = iMA(NULL, 0, SlowPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
// ゴールデンクロス(短期が長期を上抜け)で買い
if(fastMA_prev <= slowMA_prev && fastMA > slowMA) {
if(ticket <= 0) { // ポジションがない場合
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "Buy", 0, 0, clrGreen);
}
}
// デッドクロス(短期が長期を下抜け)で売り
if(fastMA_prev >= slowMA_prev && fastMA < slowMA) {
if(ticket <= 0) { // ポジションがない場合
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "Sell", 0, 0, clrRed);
}
}
// ポジションを持っている場合、反対シグナルで決済
if(ticket > 0) {
if(OrderSelect(ticket, SELECT_BY_TICKET)) {
if(OrderType() == OP_BUY && fastMA < slowMA) {
OrderClose(ticket, OrderLots(), Bid, 3, clrRed);
ticket = 0;
}
else if(OrderType() == OP_SELL && fastMA > slowMA) {
OrderClose(ticket, OrderLots(), Ask, 3, clrGreen);
ticket = 0;
}
}
}
}
このEAは以下のように動作します。
- 短期と長期の移動平均線を計算します。
- ゴールデンクロス(短期MAが長期MAを上抜け)で買いポジションを取ります。
- デッドクロス(短期MAが長期MAを下抜け)で売りポジションを取ります。
- 既にポジションを持っている場合、反対のシグナルが出たら決済します。
- 一度に1つのポジションのみを保有します。
このコードは基本的な移動平均線クロスオーバー戦略を実装しています。実際の運用では、適切なリスク管理やその他の条件を追加することをお勧めします。また、バックテストを行い、パラメータを最適化することも重要です。