看涨尖峰模式检测
三条蜡烛模式:
第一根蜡烛:绿蜡烛,体量大(看涨尖峰)。
第二根蜡烛:红蜡烛(回调)。
第三根蜡烛:绿蜡烛,体量大(再次看涨尖峰)。
当这个模式出现时,就会形成一个区域。
区域的创建
从这三根蜡烛的高点和低点绘制一个蓝色矩形。
在第二根蜡烛的开盘价画一条青绿色水平入场线。
这条线会延伸到未来,直到价格回到这里。

输入参数解析
mq5 input color BoxColor = clrBlue; // 三蜡烛模式框的颜色 input color EntryLineColor = clrLime; // 入场线的颜色 input ENUM_LINE_STYLE EntryLineStyle = STYLE_SOLID; // 入场线的样式 input int BoxWidth = 2; // 矩形边框的宽度 input int EntryLineWidth = 2; // 入场线的宽度 input int EntryLineLength = 200; // 入场线延伸的长度 这些输入参数让你可以完全控制矩形和入场线的样式。
核心思想
我们寻找一个三蜡烛的看涨模式
1. 第一根蜡烛 – 强烈看涨(尖峰)
2. 第二根蜡烛 – 看跌回撤
3. 第三根蜡烛 – 再次强烈看涨尖峰
当这个模式出现时,我们绘制:
- 一个包围模式的矩形
- 在第二根蜡烛的开盘价处画一条水平线(入场点)
一旦价格回到这条线(“缓和”),我们就停止绘制它。
数据结构
struct PatternInfo {
datetime time; // 模式的时间
double entry; // 入场价格(第二根蜡烛的开盘价)
double high; // 三根蜡烛的最高点
double low; // 三根蜡烛的最低点
bool mitigated; // 价格是否回到了入场水平?
};
CArrayObj activePatterns;我们使用结构体 PatternInfo 来跟踪每一个有效模式,并存储在数组中。这有助于避免重复处理。
初始化函数
int OnInit() {
IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
ArrayInitialize(activePatterns, 0);
return INIT_SUCCEEDED;
}我们设置指标精度并准备我们的数组。
模式检测(每个价格波动时)
for (int i = limit - 3; i >= 0; i--) {
// 循环检查三根蜡烛if (isBullish(i + 2) && isBearish(i + 1) && isBullish(i))
// 检查最后三根蜡烛是否符合尖峰模式:绿-红-绿
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]; // 提取矩形的高低点和第二根蜡烛的开盘价
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); // 从三根蜡烛模式绘制矩形
string lineName = "EntryLine_" + IntegerToString(Time[i]); ObjectCreate(0, lineName, OBJ_TREND, 0, Time[i], entry, Time[i] + PeriodSeconds() * EntryLineLength, entry); // 从第二根蜡烛的开盘价向前绘制入场线
评论 0