強気スパイクパターンの検出
-
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でライブテストが可能になります。
質問やシェアしたいことがあればコメントしてください。
コメント 0