DeMarkerのサブウィンドウを開いて、

0.7や0.3の線をにらみながら「今クロスしたかどうか」を目で判断するのは、

意外と疲れる作業です。

この記事では、DeMarkerの値そのものを毎回確認する代わりに、

0.3/0.7の境界を上下にクロスした瞬間だけを、

メインチャートに矢印で知らせるインジケーターの作り方を解説します。

この記事で分かること
・iDeMarker()関数の書式と戻り値の読み方
・0.3/0.7クロスの瞬間だけを矢印で検知する実装
・既刊のiDeMarker関数解説・フィルターEA記事との役割の違い
・チャタリングを減らす工夫
  1. なぜクロスの”瞬間”だけを知りたいのか
    1. サブウィンドウの数値監視は疲れる
    2. 矢印表示なら見落としが減る
    3. この記事で作るインジケーターの概要
  2. iDeMarker()関数の基本
    1. 関数の書式
    2. 0.3/0.7という閾値の目安
    3. 既刊iDeMarker関数解説記事との違い
  3. 実際に動くコード全体
    1. 設計のポイント(前回値と今回値の比較)
    2. コード全文
    3. MetaEditorでのコンパイル・適用手順
  4. クロス判定ロジックの詳細
    1. 前回値と今回値を保持する理由
    2. 上抜け/下抜けの矢印分岐
    3. 閾値をinputパラメーターにした理由
  5. 既刊記事との役割の違い・組み合わせ方
    1. 既刊idemarker.mdとの違い(視覚化か、EA内部判定か)
    2. 既刊demarker-filter-ea.mdとの違い(発注フィルターか、シグナル表示か)
    3. 2つの既刊記事と組み合わせる使い方
  6. よくある注意点
    1. チャタリング対策
    2. 強いトレンド中は矢印が出にくい
    3. MQL5版は未着手(今後の課題)
  7. MQL4とMQL5の違い
    1. MQL4は値を直接返す方式
    2. MQL5はハンドル方式に変わる
    3. 本記事の判定ロジックはMQL5でも応用可能
  8. よくある質問
    1. DeMarkerは何を計算していますか?
    2. 既刊のiDeMarker関数解説記事と何が違いますか?
    3. サブウィンドウの数値は不要になりますか?
    4. EAの発注条件にそのまま組み込めますか?
  9. 【MQL4】DeMarkerの0.3/0.7クロスを矢印表示するインジケーターの作り方について解説してみた(既刊iDeMarker解説との違い):まとめ
    1. 関連記事

なぜクロスの”瞬間”だけを知りたいのか

まず、値そのものを見るのではなく瞬間を矢印で知らせる理由を整理します。

サブウィンドウの数値監視は疲れる

DeMarkerはサブウィンドウに表示される指標のため、

0.7や0.3の線をまたいだかどうかを確認するには、

チャートの下部に視線を移して数値を目で追う必要があります。

矢印表示なら見落としが減る

境界をまたいだ瞬間だけメインチャートに矢印を出す設計にすれば、

ローソク足を見ているだけでクロスのタイミングに気づけます。

この記事で作るインジケーターの概要

DeMarkerが0.3を下から上に抜けたら上向き矢印、

0.7を上から下に抜けたら下向き矢印をメインチャートに表示します。

iDeMarker()関数の基本

矢印表示の判定に使うiDeMarker()関数の書式を確認します。

関数の書式

double iDeMarker(
   string symbol,     // シンボル名。NULLで現在のチャート
   int    timeframe,  // 時間足。0で現在の時間足
   int    period,     // 平均化期間
   int    shift        // シフト(0が最新バー)
   );

公式リファレンスの例と同じく、戻り値はdouble型の1つの数値です。

0.3/0.7という閾値の目安

戻り値の読み方
・DeMarkerは0〜1の範囲で推移する
・0.7以上は一般に「買われすぎ」の目安
・0.3以下は一般に「売られすぎ」の目安

既刊iDeMarker関数解説記事との違い

既刊のiDeMarker関数の使い方の記事では、

確定足での境界クロスをEAのPrint出力で検知する方法を解説しました。

本記事は、同じクロス判定をメインチャート上の矢印として視覚化する、

別の実装形態として差別化しています。

実際に動くコード全体

0.3/0.7クロスの瞬間だけを矢印で表示するインジケーターです。

設計のポイント(前回値と今回値の比較)

既刊のMACD・Stochastic・Momentum・OsMAの矢印表示記事と同じく、

「前回値と今回値を比較して境界をまたいだ瞬間だけ描画する」、

という設計を踏襲しています。

コード全文

//+------------------------------------------------------------------+
//|                                  DeMarkerCrossArrowIndicator.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    DeMarkerPeriod = 14;
input double UpperLevel     = 0.7;
input double LowerLevel     = 0.3;

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 demNow  = iDeMarker(NULL, 0, DeMarkerPeriod, shift);
      double demPrev = iDeMarker(NULL, 0, DeMarkerPeriod, shift + 1);

      UpArrowBuffer[i] = EMPTY_VALUE;
      DownArrowBuffer[i] = EMPTY_VALUE;

      if(demPrev <= LowerLevel && demNow > LowerLevel)
        {
         UpArrowBuffer[i] = low[i] - 10 * _Point;
        }
      else if(demPrev >= UpperLevel && demNow < UpperLevel)
        {
         DownArrowBuffer[i] = high[i] + 10 * _Point;
        }
     }

   return(rates_total);
  }

MetaEditorでのコンパイル・適用手順

MetaEditorに貼り付けて保存・コンパイルし、

エラーが0件であることを確認したうえで、

デモ口座のチャートに適用し、0.3/0.7をまたいだタイミングで矢印が出るか確認します。

クロス判定ロジックの詳細

矢印を描画する条件の組み方を詳しく見ていきます。

前回値と今回値を保持する理由

demPrevとdemNowという2つの値を比較し、

境界を挟んで値が入れ替わった瞬間だけを検出します。

値が0.7以上であり続ける間は、何度も矢印を描画しません。

上抜け/下抜けの矢印分岐

demPrevが0.3以下でdemNowが0.3超なら上抜け(買われすぎ圏から離脱)、

demPrevが0.7以上でdemNowが0.7未満なら下抜け、

(売られすぎ圏から離脱)と判定します。

閾値をinputパラメーターにした理由

UpperLevel・LowerLevelをinputにすることで、

通貨ペアや時間足ごとに閾値を調整し、

再コンパイルせずに最適化できるようにしています。

既刊記事との役割の違い・組み合わせ方

既刊のDeMarker関連記事2本との役割の違いを整理します。

既刊idemarker.mdとの違い(視覚化か、EA内部判定か)

既刊のiDeMarker関数解説記事は、

確定足でのクロスをEAのPrint出力で検知する方法でした。

本記事のインジケーターは、裁量トレードで使えるよう、

チャート上での矢印表示に特化しています。

既刊demarker-filter-ea.mdとの違い(発注フィルターか、シグナル表示か)

既刊のDeMarkerフィルターEAは、

過熱局面で新規エントリーを止める「ブレーキ」として使いました。

本記事は発注判断を持たず、クロスの発生だけを知らせる「シグナル表示」専用です。

2つの既刊記事と組み合わせる使い方

本記事の矢印で視覚的にクロスを把握しつつ、

実際の発注判断には既刊のDeMarkerフィルターEAのような、

明確なルールを別途用意することを推奨します。

よくある注意点

実装時につまずきやすい点をまとめます。

注意
・0.3/0.7付近で値動きが小さいと矢印が頻発しやすい
・強いトレンド中は過熱圏に長く張り付き、矢印が出にくくなる
・単独のシグナルとして売買に使わない

チャタリング対策

境界付近で値が細かく上下すると、矢印が短時間に連続して出ることがあります。

DeMarkerPeriodを長めにすると、チャタリングが減る傾向があります。

強いトレンド中は矢印が出にくい

強いトレンドでは、DeMarkerが0.7以上(または0.3以下)に長く張り付き、

クロスの矢印自体が出にくくなる点に注意してください。

MQL5版は未着手(今後の課題)

本記事はMQL4版のみを扱いました。

MQL5版のiDeMarker相当(ハンドル方式)は、今後の記事化候補として扱います。

MQL4とMQL5の違い

DeMarkerの扱い方に関する2言語の違いを確認します。

MQL4は値を直接返す方式

MQL4のiDeMarker()は、呼び出すたびに1つのdouble値を直接返します。

MQL5はハンドル方式に変わる

MQL5では、iDeMarker相当の関数はハンドルを返す方式になり、

値の取得にはCopyBufferを使う設計に変わります。

本記事の判定ロジックはMQL5でも応用可能

「前回値と今回値を比較して境界をまたいだ瞬間だけ描画する」という考え方自体は、

MQL5にハンドル方式で移植する場合でも、そのまま応用できます。

よくある質問

DeMarkerの矢印表示について、よくある疑問に回答します。

実践アドバイス
・矢印は裁量トレードの気づきに使い、単独で発注判断しない
・閾値はinputで調整できるようにしておく
・強いトレンド中は矢印が出にくい点を理解しておく

DeMarkerは何を計算していますか?

直近の高値・安値の変化から、買われすぎ・売られすぎの度合いを測る指標です。

0から1の範囲で推移します。

既刊のiDeMarker関数解説記事と何が違いますか?

既刊記事は確定足でのクロスをEAのPrint出力で検知する方法を扱いました。

本記事は、同じ考え方をチャート上の矢印表示として視覚化しています。

サブウィンドウの数値は不要になりますか?

矢印はクロスの発生だけを知らせる補助であり、

実際の値の高さ・勢いを確認したい場合はサブウィンドウも併用することをおすすめします。

EAの発注条件にそのまま組み込めますか?

矢印の判定ロジック(demPrevとdemNowの比較)自体は、

既刊のDeMarkerフィルターEAのように、EAの条件式にそのまま転用できます。

【MQL4】DeMarkerの0.3/0.7クロスを矢印表示するインジケーターの作り方について解説してみた(既刊iDeMarker解説との違い):まとめ

DeMarkerの値をサブウィンドウで監視する代わりに、

0.3/0.7の境界をまたいだ瞬間だけを矢印で表示することで、

裁量トレードでの見落としを減らせます。

既刊のiDeMarker関数解説記事・DeMarkerフィルターEA記事とは、

視覚化か、EA内部の判定・フィルターかという役割の違いがあります。

矢印単独での売買判断は避け、他の指標や明確なルールと組み合わせて使ってください。

関連記事