DeMarkerは、直近の高値と安値の変化から、
買われすぎ・売られすぎを測るオシレーターです。
MT4では`iDeMarker()`を使えば値を1行で取得できます。
しかし、現在の足を表す`shift=0`だけを見て「0.7を超えたから売り」
と判断すると、足が確定する前に値が戻り、シグナルが消えることがあります。
この記事では、iDeMarker関数の引数と、
確定足で0.7・0.3の境界をまたいだ瞬間だけを検知する方法を解説します。
DeMarkerとは
DeMarkerは0から1の範囲で推移する指標です。
一般に0.7より上は買われすぎ、0.3より下は売られすぎの目安として使われます。
ただし、0.7を超えたら必ず下落し、0.3を下回ったら必ず上昇するわけではありません。
強いトレンドでは過熱圏に長く張り付くため、境界への到達を単独の売買理由にせず、
クロスやトレンド条件と組み合わせます。
iDeMarker関数の書式
double iDeMarker( string symbol, // 通貨ペア。NULLで現在のチャート int timeframe, // 時間足。0で現在の時間足 int period, // 平均期間 int shift // 何本前の値か );
戻り値はDeMarkerの数値です。
公式リファレンスの例は`iDeMarker(NULL,0,13,1)`で、
現在の通貨ペア・時間足における期間13、1本前の値を取得します。
shift=0ではなく確定足を使う理由
`shift=0`は形成中のローソク足です。
新しい高値・安値が更新されるたびにDeMarkerも動くため、
一度0.7を超えても終値確定時には0.7未満へ戻る可能性があります。
EAの判定を再現しやすくするなら、直近の確定足`shift=1`と、
その1本前`shift=2`を比較します。
たとえば上から0.7を下抜けた瞬間は、次の条件です。
2本前のDeMarker >= 0.7 1本前のDeMarker < 0.7
単に「0.7より上」を判定するより、同じ過熱状態で毎ティック通知する問題も防げます。
0.7・0.3のクロスを判定するEAコード
#property strict
input int DeMarkerPeriod = 13;
input double Overbought = 0.7;
input double Oversold = 0.3;
datetime last_bar_time = 0;
void OnTick()
{
if(Time[0] == last_bar_time)
return;
last_bar_time = Time[0];
double demarker_1 = iDeMarker(NULL, 0, DeMarkerPeriod, 1);
double demarker_2 = iDeMarker(NULL, 0, DeMarkerPeriod, 2);
bool sell_signal = (demarker_2 >= Overbought &&
demarker_1 < Overbought);
bool buy_signal = (demarker_2 <= Oversold &&
demarker_1 > Oversold);
if(sell_signal)
Alert(Symbol(), " DeMarkerが買われすぎ圏から下抜け: ",
DoubleToString(demarker_1, 3));
if(buy_signal)
Alert(Symbol(), " DeMarkerが売られすぎ圏から上抜け: ",
DoubleToString(demarker_1, 3));
}
このコードは新しい足が始まったときだけ判定するため、
確定足1本につき最大1回しか通知しません。
売買注文はあえて入れていません。
指標単独で自動発注する前に、アラートでシグナルの出方を観察し、
時間足や銘柄ごとに検証するためです。
MetaEditorでの実行手順
MT4のMetaEditorで新しいEAを作成し、コード全体を貼り付けてコンパイルします。
MT4へ戻り、ナビゲータから任意のチャートへEAを適用してください。
視覚的に照合するには、同じチャートへ標準のDeMarkerも追加し、
期間をEAと同じ13にします。
DeMarkerが0.7を上から下へ、または0.3を下から上へ抜けた、
次の足でアラートが出ることを確認します。
よくある間違い
0.7より上なら毎回売る
過熱圏に滞在している間、何度も売り条件が成立します。
境界クロスとして判定するか、ポジションの有無を確認してください。
現在足shift=0でバックテスト結果を評価する
形成中の値は変動します。
確定足判定と現在足判定を混ぜると、実運用で再現しにくい結果になります。
過熱圏を反転保証と考える
DeMarkerは相場の状態を測る材料であり、未来を保証する信号ではありません。
移動平均の方向や損切りルールを別に用意してください。
まとめ
iDeMarkerは4つの引数で値を取得できるシンプルな関数です。
実務で重要なのは、関数の呼び方よりも、
形成中の`shift=0`を避けて確定足のクロスを判定することです。
まずは注文を出さないアラートEAで挙動を確認し、
その後に環境認識・資金管理・損切りを加えてください。
オシレーターを使った別の例として、
iCCI関数のapplied_priceの注意点も参考になります。
コメント