RSIやMACDは多くの記事で紹介されていますが、
Momentum(モメンタム)という指標は、
存在は知っていても使ったことがない人が多いかもしれません。
計算がシンプルな分、値動きの勢いの変化にすばやく反応する指標です。
この記事では、iMomentum()関数の使い方と、
基準線100の読み方、
100をクロスした瞬間だけを矢印で知らせるインジケーターの作り方を解説します。
・iMomentum()関数の書式と戻り値の読み方
・基準線100が持つ意味
・100クロスの瞬間だけを矢印表示する実装
・RSI/MACDとの違いと組み合わせ方
なぜMomentumを使うのか
まず、この指標を使う意義について整理します。
RSI/MACDとの違い(計算の単純さ)
RSIは上昇/下落の比率を計算し、
MACDは2本の移動平均線の差を計算します。
Momentumは、現在の価格と、
計算期間前の価格を比べるだけの単純な指標です。
基準線100の意味
Momentumは、計算期間前の価格を100として、
現在の価格がその何%の水準にあるかを表します。
100より上なら価格が上昇、100より下なら下落したことを意味します。
この記事で作るインジケーターの概要
Momentumの値そのものを見るだけでなく、
基準線100を上下にクロスした瞬間だけを、
矢印で知らせるインジケーターを作ります。
iMomentum()関数の基本
関数の書式と、戻り値の読み方を確認します。
関数の書式
double iMomentum( string symbol, // シンボル名 int timeframe, // 時間枠 int period, // Momentumの計算期間 int applied_price, // 適用価格 int shift // シフト(0が最新バー) );
CopyRates等とは異なり、
MQL4のiMomentum()は配列ではなく、
1つの値を直接返す方式の関数です。
戻り値の読み方(100を基準に上下)
・100より上 → 計算期間前より価格が上昇
・100より下 → 計算期間前より価格が下落
・100に近い → 値動きが小さく勢いが弱い
期間(period)の決め方
期間を短くするほど、
直近の価格変化に敏感に反応しますが、
ノイズのような小さな変化にも反応しやすくなります。
一般的には14前後から試すのがよいでしょう。
実際に動くコード全体
100クロスの瞬間だけを矢印で表示するインジケーターです。
設計のポイント(値そのものでなくクロスの瞬間を検知)
Momentumの値を毎回表示すると、
サブウィンドウが必要になり見づらくなります。
100をまたいだ瞬間だけをメインチャートに矢印で示すことで、
一目で勢いの転換点が分かる設計にします。
コード全文
//+------------------------------------------------------------------+
//| MomentumCrossArrowIndicator.mq4 |
//| Copyright 2026, FX-EA System Project Creator |
//| https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, FX-EA System Project Creator"
#property link "https://creator.fx-ea-system-project.com/"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
input int MomentumPeriod = 14;
double UpArrowBuffer[];
double DownArrowBuffer[];
int OnInit()
{
SetIndexBuffer(0, UpArrowBuffer);
SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 2, clrBlue);
SetIndexArrow(0, 233);
SetIndexBuffer(1, DownArrowBuffer);
SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 2, clrRed);
SetIndexArrow(1, 234);
return(INIT_SUCCEEDED);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
int start = (prev_calculated > 0) ? prev_calculated - 1 : 1;
for(int i = start; i < rates_total; i++)
{
int shift = rates_total - 1 - i;
double momNow = iMomentum(NULL, 0, MomentumPeriod, PRICE_CLOSE, shift);
double momPrev = iMomentum(NULL, 0, MomentumPeriod, PRICE_CLOSE, shift + 1);
UpArrowBuffer[i] = EMPTY_VALUE;
DownArrowBuffer[i] = EMPTY_VALUE;
if(momPrev <= 100 && momNow > 100)
{
UpArrowBuffer[i] = low[i] - 10 * _Point;
}
else if(momPrev >= 100 && momNow < 100)
{
DownArrowBuffer[i] = high[i] + 10 * _Point;
}
}
return(rates_total);
}
既刊記事と同じ設計を踏襲した理由
既刊のOsMA・iForceの矢印表示記事と同じく、
「前回値と今回値を比較して基準線をまたいだ瞬間だけ描画する」、
という設計を踏襲しています。
同じ考え方を複数の指標に応用できることが分かります。
基準線100クロスの判定ロジック
矢印を描画する条件の組み方を詳しく見ていきます。
前回値と今回値を比較する理由
momPrevとmomNowという2つの値を保持し、
100を挟んで値が入れ替わった瞬間だけを検出します。
値が100以上であり続ける間は、何度も矢印を描画しません。
上抜け/下抜けの矢印分岐
momPrevが100以下でmomNowが100超なら上抜け、
momPrevが100以上でmomNowが100未満なら下抜けと判定します。
チャタリングを減らす工夫
・100付近で値動きが小さいと矢印が頻発しやすい
・期間(period)を長めにするとチャタリングが減る
・用途に応じて期間を調整する必要がある
既存インジケーターとの違い・組み合わせ方
他の指標や既刊記事との役割の違いを整理します。
既刊perfect-order-ea.mdなどとの組み合わせ
Momentumの100クロスは、
トレンドの転換点を早期にとらえやすい反面、
単独では誤検知も増えます。
既刊の複数指標多数決EAのような設計に、
1つの判断材料として組み込む使い方が実用的です。
RSIとの違い
RSIは0〜100の範囲に収まるよう正規化されていますが、
Momentumは上下に制限がなく、
値動きの大きさがそのまま反映されます。
単独で使う場合の注意
Momentum単独でのエントリー判断は、
誤検知が多くなりやすいため、
環境認識(トレンド/レンジ判定)等と組み合わせることを推奨します。
よくある注意点
実装時につまずきやすい点をまとめます。
applied_price引数の意味を誤解しやすい
PRICE_CLOSE以外の価格を指定すると、
一般的な「終値ベースのMomentum」とは、
異なる値になる点に注意してください。
期間を極端に短くするとノイズが増える
periodを極端に短くすると、
小さな値動きにも反応しやすくなり、
矢印が密集して読みにくくなります。
MQL5版は未着手(今後の課題)
MQL5のiMomentum()は、
ハンドルを返す方式に変わっており、
本記事ではMQL4版のみを扱いました。
MQL5版は今後の記事化候補として扱います。
よくある質問
Momentumについて、よくある疑問に回答します。
Momentumは何の略ですか?
英語で「勢い」を意味する単語がそのまま指標名になっています。
価格の勢い(変化の速さ)を数値化する指標です。
RSIと同時に使う意味はありますか?
計算方法が異なるため、
両方が同じ方向を示したときはシグナルの信頼度が上がる、
という使い方ができます。
サブウィンドウで値そのものも見たいです
本記事のコードはメインチャートに矢印だけを表示する設計です。
値そのものをグラフで見たい場合は、
indicator_separate_windowへ変更し、
バッファをDRAW_LINEで描画するよう改修してください。
【MQL4】Momentum(モメンタム)の基準線100クロスを矢印表示するインジケーターの作り方について解説してみた:まとめ
Momentumは、RSIやMACDに比べて影が薄い指標ですが、
計算がシンプルな分、値動きの勢いの変化にすばやく反応します。
値そのものを見る代わりに、
基準線100をまたいだ瞬間だけを矢印で表示することで、
勢いの転換点を一目で把握できるようになります。
単独でのエントリー判断には誤検知が伴うため、
環境認識や他の指標と組み合わせて使うことをおすすめします。
コメント