MetaTrader5
Boomインデックススパイクパターン - MetaTrader 5用インディケーター
強気スパイクパターンの検出 3本のローソク足パターン: 1本目のローソク足: 大きな実体の緑色(強気スパイク)。 2本目のローソク足: 赤色(反発)。 3本目のローソク足: 大きな実体の緑色(再度の強気スパイク)。 このパターンが現れると、ゾーンが形成されます。 ゾーンの作成 3本のローソク足の高値/安値範囲から青い矩形が描画されます。 ライムグリーンの水平エントリーラインが2本目のローソク足の始値に描画されます。 そのラインは、価格が戻ってくるまで未来に延びます。 入力パラメータの説明 mq5
color BoxColor = clrBlue; // 3本のローソク足パターンボックスの色
color EntryLineColor = clrLime; // エントリーラインの色
ENUM_LINE_STYLE EntryLineStyle = STYLE_SOLID; // エントリーラインのスタイル
int BoxWidth = 2; // ボックスの境界の幅
int EntryLineWidth = 2; // エントリーラインの幅
int EntryLineLength = 200; // 緩和ラインの延長距離 これらの入力により、ボックスとエントリーラインのスタイルを完全にコントロールできます。 コアアイデア 3本のローソク足の強気パターンを探します。 1. 最初のローソク足– 強い強気(スパイク) 2. 2本目のローソク足 – 強気の調整 3. 3本目のローソク足– 再度の強気スパイク このパターンが出現すると、次のことを描きます: - パターンの周りにボックスを描く - 2本目のローソク足の始値に水平ラインを描く(エントリーポイント) 価格がそのラインに戻ると(「緩和」)、ラインを短くして再描画を避けます。 データ構造 struct PatternInfo {
datetime time; // パターンの時間
double entry; // エントリープライス(2本目のローソク足の始値)
double high; // 3本のローソク足の最高値
double low; // 3本のローソク足の最低値
bool mitigated; // 価格がエントリーレベルに戻ったか?
};
CArrayObj activePatterns; これにより、各有効なパターンを追跡し、配列に保存します。これにより、繰り返し処理を避けることができます。 初期化関数 int OnInit() {
IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
ArrayInitialize(activePatterns, 0);
return INIT_SUCCEEDED;
} インディケーターの精度を設定し、配列を準備します。 パターン検出(各ティックで) for (int i = limit - 3; i >= 0; i--) {
ローソク足をループして3本前を見ます。 if (isBullish(i+2) && isBearish(i+1) && isBullish(i)) 最後の3本のローソク足がスパイクパターンに合致するかチェックします:緑-赤-緑。 double high = MathMax(MathMax(High[i], High[i+1]), High[i+2]);
double low = MathMin(MathMin(Low[i], Low[i+1]), Low[i+2]);
double entry = Open[i+1]; ボックスの高値/安値と、2本目のローソク足からエントリーレベルを抽出します。 PatternInfo *pattern = new PatternInfo;
pattern.time = Time[i];
pattern.entry = entry;
pattern.high = high;
pattern.low = low;
pattern.mitigated = false; このパターンを作成してリストに追加します。 ボックスとラインを描画 string boxName = "Box_" + IntegerToString(Time[i]);
ObjectCreate(0, boxName, OBJ_RECTANGLE, 0, Time[i+2], high, Time[i], low); 3本のローソク足パターンから矩形(ボックス)を描画します。 string lineName = "EntryLine_" + IntegerToString(Time[i]);
ObjectCreate(0, lineName, OBJ_TREND, 0, Time[i], entry, Time[i] + PeriodSeconds() * EntryLineLength, entry); 2本目のローソク足の始値から未来に向けてエントリーラインを描画します。 緩和チェック(各ティックで) for (int p = 0; p < activePatterns.Total(); p++) {
PatternInfo *pt = (PatternInfo*)activePatterns.At(p);
すべてのパターンをループします: if (!pt.mitigated && Low[0] <= pt.entry) 現在の価格がエントリーレベルに達した場合: pt.mitigated = true;
ObjectDelete("EntryLine_" + IntegerToString(pt.time)); 元のロングラインを削除します。 ObjectCreate(0, "MitigatedLine_" + IntegerToString(pt.time), OBJ_TREND, 0, pt.time, pt.entry, Time[0], pt.entry); 緩和が起こった場所を示すショートラインを作成します。 // ヘルパー関数
// 強気/弱気のチェック:
bool isBullish(int i) {
return Close[i] > Open[i];
}
bool isBearish(int i) {
return Close[i] < Open[i];
} このインディケーターはシンプルですが強力です: 実際のスパイクの動きを検出 スマートマネーのエントリーを視覚化 自動で緩和を検出 これにより、Boom 500やBoom 1000でライブテストが可能になります。 質問やシェアしたいことがあればコメントしてください。
2025.07.21