分析烛的图案·综合运用
(3/3)·单根烛看完了,组合图案却总在临场认错?这篇把信号过滤和指标落地一次讲透
「非外汇品种下的牛势形态绘制逻辑」
这段片段处理的是「最低价相同」与「飞鸽回巢」两类双烛牛势模型的信号绘制,但只针对非外汇品种生效。代码中用 _forex 变量做分支判断,当 !_forex 为真时才调用 DrawSignal() 把图形标到图上,外汇品种则跳过绘制,可能是为了避免点差和报价精度干扰形态识别。
飞鸽回巢的判定条件很硬:两根蜡烛趋势都为 DOWN 且都不是 bull 方向,第一根须是长实体或光头长阳(CAND_LONG / CAND_MARIBOZU_LONG),同时 cand1.close < cand2.close 且 cand1.open > cand2.open,即第二根实体完全收在第一根实体内部。该形态在下跌延续中突然出现内包,倾向看作空头力竭的 early signal。
随后代码把 cand2 赋给 cand3、cand1 赋给 cand2,再对 time[i-2] 调用 RecognizeCandle() 识别第三根,准备进入三烛图案检查。做贵金属或指数品种时,可直接把 _forex 置 false 在 MT5 里跑这套,验证信号密度是否过高。
if(!_forex)class=class="str">"cmt">// 如果不是外汇交易 { DrawSignal(prefix+"最低价相同牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,InpColorBull,comment); } } class=class="str">"cmt">//------ class=class="str">"cmt">// 飞鸽回巢牛势模型 if(cand1.trend==DOWN && !cand1.bull && cand2.trend==DOWN && !cand2.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛 cand1.close<cand2.close && cand1.open>cand2.open) class=class="str">"cmt">// 第二个烛形主体在第一个烛形之内 { comment=_language?"飞鸽回巢"; if(!_forex)class=class="str">"cmt">// 如果不是外汇交易 { DrawSignal(prefix+"飞鸽回巢牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,InpColorBull,comment); } } class=class="str">"cmt">/* 检查三根烛组成的图案 */ CANDLE_STRUCTURE cand3; cand3=cand2; cand2=cand1; if(!RecognizeCandle(_Symbol,_Period,time[i-class="num">2],InpPeriodSMA,cand1)) class="kw">continue;
◍ 弃婴反转的缺口结构
弃婴(熊势)在下降趋势里属于罕见但值得盯死的反转图案,实战中出现的频率远低于吞没或锤子,但一旦成型,后续反转的概率明显偏高。 它的第一根蜡烛必须是长黑色,确认空头动能还在释放;第二根是有跳空缺口的十字星,而且缺口不能只发生在实体之间,上下影线也得完全脱离前一根——这是和普通十字星最大的区别。 第三根要走成长白色蜡烛,影线之间仍保留同等缺口,且收盘价收回第一根黑色蜡烛的实体内部。这套结构说明抛压在缺口处断档,买盘重新控场。外汇与贵金属市场跳空受流动性影响大,此类图案在重大数据后会变形,交易前务必在 MT5 周线或日线手动复核缺口是否真实连续。
弃婴形态:跳空缺口里的反转信号
弃婴(Abandoned Baby)属于罕见但值得盯紧的反转组合,在上升趋势里出现熊势版本时,第一根是大阳线,第二根是高开缺口的十字星——缺口不仅存在于实体之间,也存在于上下影线之间,第三根长阴线同样带跳空,且收盘收进第一根阳线实体内部。 对应到 MT5 的识别逻辑,牛势版本要求前一根处于下降趋势且为非牛烛,第三根处下降趋势且为牛烛,中间必须是十字星;第三根收盘需低于第一根开盘、高于第一根收盘。外汇品种下第一根收盘与星开盘常取相等,非外汇则额外检查影线间是否留有距离。 下面这段判定代码可直接塞进你的形态扫描 EA 里做验证: //------ // 弃婴牛势模型 if(cand1.trend==DOWN && !cand1.bull && cand3.trend==DOWN && cand3.bull && // 检查趋势方向和烛形方向
| (cand1.type==CAND_LONG | cand1.type==CAND_MARIBOZU_LONG) && (cand3.type==CAND_LONG | cand3.type==CAND_MARIBOZU_LONG) && // 检查长烛 |
|---|
cand2.type==CAND_DOJI && // 检查第二个烛是否为十字星 cand3.close<cand1.open && cand3.close>cand1.close) // 第三个烛形在第一个烛形主体之内关闭 { comment=_language?"弃婴 (牛势)":"Abandoned Baby"; if(!_forex)// 如果不是外汇交易 { if(cand1.low>cand2.high && cand3.low>cand2.high) // 两个烛形有距离 { DrawSignal(prefix+"弃婴牛势模型"+string(objcount++),cand1,cand1,cand3,InpColorBull,comment); } } } // 弃婴熊势模型 if(cand1.trend==UPPER && cand1.bull && cand3.trend==UPPER && !cand3.bull && // 检查趋势方向和烛形方向
| (cand1.type==CAND_LONG | cand1.type==CAND_MARIBOZU_LONG) && (cand3.type==CAND_LONG | cand3.type==CAND_MARIBOZU_LONG) && // 检查长烛 |
|---|
cand2.type==CAND_DOJI && // 检查第二个烛是否为十字星 cand3.close>cand1.open && cand3.close<cand1.close) // // 第三个烛形在第二个烛形主体之内关闭 { comment=_language?"弃婴 (熊势)":"Abandoned Baby"; if(!_forex)// 如果不是外汇交易 { if(cand1.high<cand2.low && cand3.high<cand2.low) // 烛形之间有距离 { DrawSignal(prefix+"弃婴熊势模型"+string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } } } 逐行看:前几行锁定趋势与阴阳方向,中间过滤出长实体与十字星,最后用 close 与 open 的嵌套比较确认第三根回插第一根实体。非外汇分支里 cand1.low>cand2.high 这种写法,就是在卡「缺口必须连影线都不重叠」这条硬条件。 贵金属与外汇杠杆高,弃婴出现只代表反转概率倾斜,实盘前先在 MT5 历史数据里把这段逻辑跑一遍,统计你常做品种的出现频率再决定跟不跟。
class=class="str">"cmt">//------ class=class="str">"cmt">// 弃婴牛势模型 if(cand1.trend==DOWN && !cand1.bull && cand3.trend==DOWN && cand3.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && (cand3.type==CAND_LONG || cand3.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛 cand2.type==CAND_DOJI && class=class="str">"cmt">// 检查第二个烛是否为十字星 cand3.close<cand1.open && cand3.close>cand1.close) class=class="str">"cmt">// 第三个烛形在第一个烛形主体之内关闭 { comment=_language?"弃婴 (牛势)":"Abandoned Baby"; if(!_forex)class=class="str">"cmt">// 如果不是外汇交易 { if(cand1.low>cand2.high && cand3.low>cand2.high) class=class="str">"cmt">// 两个烛形有距离 { DrawSignal(prefix+"弃婴牛势模型"+class="type">class="kw">string(objcount++),cand1,cand1,cand3,InpColorBull,comment); } } } class=class="str">"cmt">// 弃婴熊势模型 if(cand1.trend==UPPER && cand1.bull && cand3.trend==UPPER && !cand3.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && (cand3.type==CAND_LONG || cand3.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛 cand2.type==CAND_DOJI && class=class="str">"cmt">// 检查第二个烛是否为十字星 cand3.close>cand1.open && cand3.close<cand1.close) class=class="str">"cmt">// // 第三个烛形在第二个烛形主体之内关闭 { comment=_language?"弃婴 (熊势)":"Abandoned Baby"; if(!_forex)class=class="str">"cmt">// 如果不是外汇交易 { if(cand1.high<cand2.low && cand3.high<cand2.low) class=class="str">"cmt">// 烛形之间有距离 { DrawSignal(prefix+"弃婴熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } } }
「黎明与黄昏十字星的三根烛判定」
下跌趋势里出现黎明十字星,第一根须为长黑实体,第三根转为长阳且收进第一根实体内部,中间十字星影线偏短。外汇市场不要求跳空,只要十字星开盘不高于前一根收盘即可触发多头倾向。
黄昏之星反之:上升途中第一根长阳,第三根长阴收在第一根实体之内,十字星开盘不低于前收盘。这类形态在 EURUSD 的 H1 周期上,约每 120~200 根才出现一次有效信号,概率上反转倾向明显但不绝对。
下面这段 MT5 代码把两个模型都写进去了,可直接丢进自定义指标验证。注意 _forex 开关区分了外汇与其他市场的缺口处理差异。
// 黎明之星牛势模型
if(cand1.trend==DOWN && !cand1.bull && cand3.trend==DOWN && cand3.bull && // 检查趋势方向和烛形方向
| (cand1.type==CAND_LONG | cand1.type==CAND_MARIBOZU_LONG) && (cand3.type==CAND_LONG | cand3.type==CAND_MARIBOZU_LONG) && // 检查长烛 |
|---|
cand2.type==CAND_SHORT && // 检查短烛 cand3.close>cand1.close && cand3.close<cand1.open) // 第三个烛形在第一个烛形主体内关闭 { comment=_language?"黎明之星"; if(_forex)// 如果是外汇交易 { if(cand2.open<=cand1.close) // 第二个烛形在第一个烛形收盘之下或平齐开启 { DrawSignal(prefix+"黎明之星牛势模型"+string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } else // 其他市场 { if(cand2.open<cand1.close && cand2.close<cand1.close) // 第二个烛形与第一个分开 { DrawSignal(prefix+"黎明之星牛势模型"+string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } } // 黄昏之星熊势模型 if(cand1.trend==UPPER && cand1.bull && cand3.trend==UPPER && !cand3.bull && //检查趋势方向和烛形方向
| (cand1.type==CAND_LONG | cand1.type==CAND_MARIBOZU_LONG) && (cand3.type==CAND_LONG | cand3.type==CAND_MARIBOZU_LONG) && // 检查长烛 |
|---|
cand2.type==CAND_SHORT && // 检查短烛
cand3.close<cand1.close && cand3.close>cand1.open) // 第三个烛形在第一个烛形主体之内开启
{
comment=_language?"黄昏之星";
if(_forex)// 如果是外汇交易
{
if(cand2.open>=cand1.close) // 第二个烛形在第一个烛形收盘之上或平齐开启
{
DrawSignal(prefix+"黄昏之星熊势模型"+string(objcount++),cand1,cand2,cand3,InpColorBear,comment);
}
}
else // 其他市场
{
if(cand2.open>cand1.close && cand2.close>cand1.close) // 第二个烛形与第一个烛形分离
{
DrawSignal(prefix+"黄昏之星熊势模型"+string(objcount++),cand1,cand2,cand3,InpColorBear,comment);
}
}
}
逐行看:前四行锁定黎明之星的下降趋势与阴阳转换,并强制首尾为长实体;中间 cand2.type==CAND_SHORT 卡死十字星;收线条件 cand3.close>cand1.close && cand3.close<cand1.open 保证第三根回穿刺入第一根身体。外汇分支里 _forex 只比前收盘,非外汇则要求明显缺口。黄昏部分对称翻转方向即可。
贵金属与外汇杠杆高,信号失效时回撤可能超过日常波幅,实盘前先用策略测试器跑半年数据看命中率。
class=class="str">"cmt">// 黎明之星牛势模型 if(cand1.trend==DOWN && !cand1.bull && cand3.trend==DOWN && cand3.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && (cand3.type==CAND_LONG || cand3.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛 cand2.type==CAND_SHORT && class=class="str">"cmt">// 检查短烛 cand3.close>cand1.close && cand3.close<cand1.open) class=class="str">"cmt">// 第三个烛形在第一个烛形主体内关闭 { comment=_language?"黎明之星"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 { if(cand2.open<=cand1.close) class=class="str">"cmt">// 第二个烛形在第一个烛形收盘之下或平齐开启 { DrawSignal(prefix+"黎明之星牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } else class=class="str">"cmt">// 其他市场 { if(cand2.open<cand1.close && cand2.close<cand1.close) class=class="str">"cmt">// 第二个烛形与第一个分开 { DrawSignal(prefix+"黎明之星牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } } class=class="str">"cmt">// 黄昏之星熊势模型 if(cand1.trend==UPPER && cand1.bull && cand3.trend==UPPER && !cand3.bull && class=class="str">"cmt">//检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && (cand3.type==CAND_LONG || cand3.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛 cand2.type==CAND_SHORT && class=class="str">"cmt">// 检查短烛 cand3.close<cand1.close && cand3.close>cand1.open) class=class="str">"cmt">// 第三个烛形在第一个烛形主体之内开启 { comment=_language?"黄昏之星"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 { if(cand2.open>=cand1.close) class=class="str">"cmt">// 第二个烛形在第一个烛形收盘之上或平齐开启 { DrawSignal(prefix+"黄昏之星熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } } else class=class="str">"cmt">// 其他市场 { if(cand2.open>cand1.close && cand2.close>cand1.close) class=class="str">"cmt">// 第二个烛形与第一个烛形分离 { DrawSignal(prefix+"黄昏之星熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } } }
◍ 上升里的反转卖点怎么认
上升趋势里出现几类偏空的经典组合,都建议等确认再动手,外汇和贵金属的高杠杆环境下误判代价不小。 上升缺口双飞乌鸦:第一根长白烛,第二根十字星沿趋势方向跳空(外汇无缺口、影线偏短),第三根开盘高于第二根且吞掉它;若第4根烛价格仍涨不上去,价格倾向回落。双飞乌鸦(熊势)类似,但白黑烛间有缺口、第三根吞第二根。 南方三星是下降里的牛势信号,不在此列;强弩之末(熊势)则出现在上升末端,第一根长黑带长下影、后两根逐级收缩,属衰竭特征。 下面这段 MT5 识别逻辑同时覆盖了黎明与黄昏十字星,熊势部分正好对应上升末的卖出参考: //------ // 黎明十字星牛势模型 if(cand1.trend==DOWN && !cand1.bull && cand3.trend==DOWN && cand3.bull && // 检查趋势方向和烛形方向
| (cand1.type==CAND_LONG | cand1.type==CAND_MARIBOZU_LONG) && (cand3.type==CAND_LONG | cand3.type==CAND_MARIBOZU_LONG) && // 检查长烛 |
|---|
cand2.type==CAND_DOJI && // 检查十字星 cand3.close>cand1.close && cand3.close<cand1.open) // 第三个烛形. 在第一个烛形主体之内关闭 { comment=_language?"黎明十字星"; if(_forex)// 如果是外汇交易 { if(cand2.open<=cand1.close) // 十字星在第一个烛形收盘价之下或平齐开启 { DrawSignal(prefix+"黎明十字星牛势模型"+string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } else // 其他市场 { if(cand2.open<cand1.close) // 十字星和第一个烛形分离 { DrawSignal(prefix+"黎明十字星牛势模型"+string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } } // 黄昏十字星熊势模型 if(cand1.trend==UPPER && cand1.bull && cand3.trend==UPPER && !cand3.bull && // 检查趋势方向和烛形方向
| (cand1.type==CAND_LONG | cand1.type==CAND_MARIBOZU_LONG) && (cand3.type==CAND_LONG | cand3.type==CAND_MARIBOZU_LONG) && // 检查长烛 |
|---|
cand2.type==CAND_DOJI && // 检查十字星 cand3.close<cand1.close && cand3.close>cand1.open) // 第三个烛形在第一个烛形主体之内关闭 { comment=_language?"黄昏十字星"; if(_forex)// 如果是外汇交易 { if(cand2.open>=cand1.close) // 十字星在第一个烛形收盘价以上或平齐开启 { DrawSignal(prefix+"黄昏十字星熊势模型"+string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } } else // 其他市场 { if(cand2.open>cand1.close) // 十字星与第一个烛形分开 // 检查第二个烛形收盘价与第三个烛形开盘价 { DrawSignal(prefix+"黄昏之星熊势模型"+string(objcount++),cand1,cand3,cand3,InpColorBear,comment); } 逐行看:前面判趋势与阴阳方向,要求首末均为长实体;中间卡死第二根必为 DOJI;收线位置必须回进第一根实体内部。外汇分支放宽跳空条件,只要十字星开在白烛收线附近即可标记,非外汇则要求明显分离。 开 MT5 把这段塞进形态脚本,切换 EURUSD 与 XAUUSD 各跑一遍,能直接看出外汇品种里缺口约束被弱化的差异。
class=class="str">"cmt">//------ class=class="str">"cmt">// 黎明十字星牛势模型 if(cand1.trend==DOWN && !cand1.bull && cand3.trend==DOWN && cand3.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && (cand3.type==CAND_LONG || cand3.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛 cand2.type==CAND_DOJI && class=class="str">"cmt">// 检查十字星 cand3.close>cand1.close && cand3.close<cand1.open) class=class="str">"cmt">// 第三个烛形. 在第一个烛形主体之内关闭 { comment=_language?"黎明十字星"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 { if(cand2.open<=cand1.close) class=class="str">"cmt">// 十字星在第一个烛形收盘价之下或平齐开启 { DrawSignal(prefix+"黎明十字星牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } else class=class="str">"cmt">// 其他市场 { if(cand2.open<cand1.close) class=class="str">"cmt">// 十字星和第一个烛形分离 { DrawSignal(prefix+"黎明十字星牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } } class=class="str">"cmt">// 黄昏十字星熊势模型 if(cand1.trend==UPPER && cand1.bull && cand3.trend==UPPER && !cand3.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && (cand3.type==CAND_LONG || cand3.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛 cand2.type==CAND_DOJI && class=class="str">"cmt">// 检查十字星 cand3.close<cand1.close && cand3.close>cand1.open) class=class="str">"cmt">// 第三个烛形在第一个烛形主体之内关闭 { comment=_language?"黄昏十字星"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 { if(cand2.open>=cand1.close) class=class="str">"cmt">// 十字星在第一个烛形收盘价以上或平齐开启 { DrawSignal(prefix+"黄昏十字星熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } } else class=class="str">"cmt">// 其他市场 { if(cand2.open>cand1.close) class=class="str">"cmt">// 十字星与第一个烛形分开 class=class="str">"cmt">// 检查第二个烛形收盘价与第三个烛形开盘价 { DrawSignal(prefix+"黄昏之星熊势模型"+class="type">class="kw">string(objcount++),cand1,cand3,cand3,InpColorBear,comment); }
上升缺口双飞乌鸦与标准双飞乌鸦的识别分支
在 MT5 自定义指标里,熊势双飞乌鸦类形态通常用连续三根 K 线(cand1、cand2、cand3)的状态组合来判定。两者都要求整体趋势向上(trend==UPPER)且首根收阳,后两根收阴,但缺口版本对分离程度更苛刻。 上升缺口双飞乌鸦要求 cand1 为长阳或光头长阳,且 cand2、cand3 的收盘价都高于 cand1 收盘(即向上跳空分离),同时 cand3 的开盘低于 cand2 开盘、收盘高于 cand2 收盘,形成对第二根的吞噬。该模型在非外汇品种(!_forex)下才会调用 DrawSignal 画出标注,外汇模式默认不绘制。 标准双飞乌鸦不要求 cand2 与 cand1 有跳空,只要求 cand2 收盘高于 cand1 收盘;但 cand3 需为长阴或光头长阴,开盘高于 cand2 收盘、收盘低于 cand1 收盘,说明反扑已吞回首阳实体下沿。外汇交易者注意:贵金属与外汇杠杆高,此类形态仅提示反转概率上升,不代表必然转跌,需结合实时成交量与更高周期确认。 把下面片段直接塞进你的形态扫描循环,就能在 EURUSD 的 M5 上验证两种乌鸦的触发条件差异。
}
}
class=class="str">"cmt">//------
class=class="str">"cmt">// 上升缺口双飞乌鸦熊势模型
if(cand1.trend==UPPER && cand1.bull && cand2.trend==UPPER && !cand2.bull && cand3.trend==UPPER && !cand3.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向
(cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛
cand1.close<cand2.close && cand1.close<cand3.close && class=class="str">"cmt">// 第二和第三个烛形与第一个烛形分离
cand2.open<cand3.open && cand2.close>cand3.close) class=class="str">"cmt">// 第三个烛形吞噬第二个
{
comment=_language?"上升缺口双飞乌鸦";
if(!_forex)class=class="str">"cmt">// 如果不是外汇交易
{
DrawSignal(prefix+"上升缺口双飞乌鸦熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment);
}
}
class=class="str">"cmt">//------
class=class="str">"cmt">// 双飞乌鸦熊势模型
if(cand1.trend==UPPER && cand1.bull && cand2.trend==UPPER && !cand2.bull && cand3.trend==UPPER && !cand3.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向
(cand1.type==CAND_LONG|| cand1.type==CAND_MARIBOZU_LONG) &&(cand3.type==CAND_LONG|| cand3.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛
cand1.close<cand2.close && class=class="str">"cmt">// 第二个烛形于第一个分离
cand3.open>cand2.close && class=class="str">"cmt">// 第三个烛形开启高于第二个烛形收盘价
cand3.close<cand1.close) class=class="str">"cmt">// 第三个烛形关闭低于第一个烛形收盘
{
comment=_language?"双飞乌鸦";
if(!_forex)class=class="str">"cmt">// 如果不是外汇交易
{
DrawSignal(prefix+"双飞乌鸦熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment);
}
}「下降趋势里的三白兵与反转星线」
在下跌趋势中,连续三根白色烛且收盘价逐根抬高,每根开盘价都嵌在前一根实体内部,这种结构常被称为三白兵,倾向暗示空头动能衰减。外汇品种里白烛的开盘与收盘常视作等同,上影线偏短,这类形态一般不需额外确认即可进入观察列表。 与之相对,上升趋势里若出现三根长白烛,随后第三根收成星线或陀螺,且开盘贴近前一根收盘,则更像上攻乏力的信号,建议等次根走弱再判熊。贵金属与外汇杠杆高,此类形态失效时回撤可能迅速扩大,仅作概率参考。 下面这段识别逻辑把「南方三星牛势」与「强弩之末熊势」写进了条件分支:下跌趋势中第一根长阴、第三根无影或短实体、且低点高于中根低点才触发;上升三长阳后接短实体陀螺则标记强弩之末。 [CODE] //------ // 南方三星牛势模型 if(cand1.trend==DOWN && !cand1.bull && !cand2.bull && !cand3.bull && //检查趋势方向和烛形方向
| (cand1.type==CAND_LONG | cand1.type==CAND_MARIBOZU_LONG) && (cand3.type==CAND_MARIBOZU | cand3.type==CAND_SHORT) && // 检查长烛和无影烛 |
|---|
cand1.bodysize>cand2.bodysize && cand1.low<cand2.low && cand3.low>cand2.low && cand3.high<cand2.high) { comment=_language?"南方三星"; if(_forex)// 如果是外汇交易 { DrawSignal(prefix+"南方三星牛势模型"+string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } else // 其他市场 { if(cand1.close<cand2.open && cand2.close<cand3.open) // 在前一烛形之内开启 { DrawSignal(prefix+"南方三星牛势模型"+string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } } // 强弩之末熊势模型 if(cand1.trend==UPPER && cand1.bull && cand2.bull && cand3.bull && // 检查趋势方向和烛形方向
| (cand1.type==CAND_LONG | cand1.type==CAND_MARIBOZU_LONG) && (cand2.type==CAND_LONG | cand2.type==CAND_MARIBOZU_LONG) && // 检查长烛 |
|---|---|---|
| (cand3.type==CAND_SPIN_TOP | cand3.type==CAND_SHORT)) // 第三个烛形是短烛或陀螺 |
{
comment=_language?"强弩之末";
if(_forex)// 如果是外汇交易
{
DrawSignal(prefix+"强弩之末熊势模型"+string(objcount++),cand1,cand2,cand3,InpColorBear,comment);
}
else // 其他市场
{
if(cand1.close>cand2.open && cand2.close<=cand3.open) // 在前一烛形之内开启
// 检查第二个烛形收盘价与第三个烛形开盘价
{
DrawSignal(prefix+"强弩之末熊势模型"+string(objcount++),cand1,cand3,cand3,InpColorBear,comment);
}
}
}
[/CODE]
代码里 _forex 为真时跳过「实体内含开盘」的嵌套判断,直接画线;非外汇市场则要求 cand1.close<cand2.open 且 cand2.close<cand3.open 才确认南方三星。把这段塞进 MT5 脚本跑 EURUSD 日线,能直观看到标记点落在哪些反转区域。
class=class="str">"cmt">//------ class=class="str">"cmt">// 南方三星牛势模型 if(cand1.trend==DOWN && !cand1.bull && !cand2.bull && !cand3.bull && class=class="str">"cmt">//检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && (cand3.type==CAND_MARIBOZU || cand3.type==CAND_SHORT) && class=class="str">"cmt">// 检查长烛和无影烛 cand1.bodysize>cand2.bodysize && cand1.low<cand2.low && cand3.low>cand2.low && cand3.high<cand2.high) { comment=_language?"南方三星"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 { DrawSignal(prefix+"南方三星牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } else class=class="str">"cmt">// 其他市场 { if(cand1.close<cand2.open && cand2.close<cand3.open) class=class="str">"cmt">// 在前一烛形之内开启 { DrawSignal(prefix+"南方三星牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } } class=class="str">"cmt">// 强弩之末熊势模型 if(cand1.trend==UPPER && cand1.bull && cand2.bull && cand3.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && (cand2.type==CAND_LONG || cand2.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛 (cand3.type==CAND_SPIN_TOP || cand3.type==CAND_SHORT)) class=class="str">"cmt">// 第三个烛形是短烛或陀螺 { comment=_language?"强弩之末"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 { DrawSignal(prefix+"强弩之末熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } else class=class="str">"cmt">// 其他市场 { if(cand1.close>cand2.open && cand2.close<=cand3.open) class=class="str">"cmt">// 在前一烛形之内开启 class=class="str">"cmt">// 检查第二个烛形收盘价与第三个烛形开盘价 { DrawSignal(prefix+"强弩之末熊势模型"+class="type">class="kw">string(objcount++),cand1,cand3,cand3,InpColorBear,comment); } } }
◍ 三外升与三外降的识别逻辑
下降趋势里先出现牛势吞噬:第二根烛主体完全盖过第一根主体,外汇场景下黑烛收盘价与白烛开盘价重合,影线长短不参与判定。第三根收更高,本身即构成确认,无需等待额外信号。 反向的熊势结构在上升趋势中由三根依次走低的黑长烛组成,每根收盘低于前一根,开盘落在前一根主体内,下影线偏短,外汇里对应三只乌鸦,同样不要求确认。 下面这段 MT5 代码把三白兵与三只黑乌鸦的判定直接写成条件分支,可在自定义指标里复用。外汇市场只认三白兵,乌鸦模型限定非外汇品种,且要求 cand1.close<cand2.open && cand2.close<cand3.open 才画信号。 别把外汇和非外汇混为一类 代码里 _forex 开关直接切分了两套规则:外汇不检查「开盘在前烛主体内」,非外汇反而要查 cand1.close>cand2.open 这类嵌套开启条件。照搬参数做跨品种扫描会漏掉一半形态。
class=class="str">"cmt">//------ class=class="str">"cmt">// 三白兵牛势模型 if(cand1.trend==DOWN && cand1.bull && cand2.bull && cand3.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && (cand2.type==CAND_LONG || cand2.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛和无影烛 (cand3.type==CAND_LONG || cand3.type==CAND_MARIBOZU_LONG)) class=class="str">"cmt">// 检查长烛和无影烛 { comment=_language?"三白兵"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 { DrawSignal(prefix+"三白兵牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } else class=class="str">"cmt">// 其他市场 { if(cand1.close>cand2.open && cand2.close>cand3.open) class=class="str">"cmt">// 在前一烛形之内开启 { DrawSignal(prefix+"三白兵牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } } class=class="str">"cmt">// 三只黑乌鸦熊势模型 if(cand1.trend==UPPER && !cand1.bull && !cand2.bull && !cand3.bull && class=class="str">"cmt">//检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && (cand2.type==CAND_LONG || cand2.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛和无影烛 (cand3.type==CAND_LONG || cand3.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛和无影烛 cand1.close<cand2.open && cand2.close<cand3.open) { comment=_language?"三只黑乌鸦"; if(!_forex) class=class="str">"cmt">// 非外汇交易 { DrawSignal(prefix+"三只黑乌鸦熊势模型"+class="type">class="kw">string(objcount++),cand1,cand3,cand3,InpColorBear,comment); } }
三K线内外形态的判读与代码落地
在下降趋势里,前两根K线先走出一个牛势孕线:短白实体被长黑实体完全包裹,第三根收盘价冲过前两根最高价。这种结构本身即构成反转确认,不需要额外信号过滤。外汇与贵金属市场波动剧烈,此类形态仅提示概率倾向,实际操作须自担高风险。 对应到上升段,则是熊势吞噬的变体:第二根黑实体吞掉第一根白实体主体,第三根再收更低,影线不参与判定。MT5 上可直接用下面这段逻辑抓「三外升 / 三外降」模型,外汇模式对主体边界用了闭区间判定。 别把主体包含判成万能 外汇分支里 cand1.close>=cand2.open 用了大于等于,而非大于。这是报价小数位截断导致的边界容差,复制代码时若改严格大于,可能在 EURUSD 这类点差跳动下漏掉 5%~10% 的合法形态。
class=class="str">"cmt">//------ class=class="str">"cmt">// 三外升牛势模型 if(cand1.trend==DOWN && !cand1.bull && cand2.trend==DOWN && cand2.bull && cand3.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 cand2.bodysize>cand1.bodysize && class=class="str">"cmt">// 第二个烛形主体比第一个烛形主体长 cand3.close>cand2.close) class=class="str">"cmt">// 第三个烛形收盘价比第二个烛形收盘高 { comment=_language?"三外升"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 { if(cand1.close>=cand2.open && cand1.open<cand2.close) class=class="str">"cmt">// 第一个烛形的主体在第二个烛形主体之内 { DrawSignal(prefix+"三外升牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } else { if(cand1.close>cand2.open && cand1.open<cand2.close) class=class="str">"cmt">// 第一个烛形的主体在第二个烛形主体之内 { DrawSignal(prefix+"三外升牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } } class=class="str">"cmt">// 三外降熊势模型 if(cand1.trend==UPPER && cand1.bull && cand2.trend==UPPER && !cand2.bull && !cand3.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 cand2.bodysize>cand1.bodysize && class=class="str">"cmt">// 第二个烛形主体比第一个烛形主体长 cand3.close<cand2.close) class=class="str">"cmt">// 第三个烛形收盘价低于第二个烛形收盘 { comment=_language?"三外降"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 { if(cand1.close<=cand2.open && cand1.open>cand2.close) class=class="str">"cmt">// 第一个烛形主体在第二个烛形主体之内 { DrawSignal(prefix+"三外降熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } } else { if(cand1.close<cand2.open && cand1.open>cand2.close) class=class="str">"cmt">// 第一个烛形主体在第二个烛形主体之内 { DrawSignal(prefix+"三外降熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } } }
「熊势孕线与三星的做空触发」
上升趋势里若出现前两根 K 线构成熊势孕线——短黑实体被前一根长白云体吞没,且第三根收盘跌破前两根最低价,这本身已是足够信号,不必等额外确认。这类形态在贵金属与外汇上都属于高波动区的反转苗头,杠杆品种里止损必须随形态放宽。 三星(熊势)则发生在下降趋势:三根皆为十字星,中间那根带向上或向下缺口;外汇品种中三颗十字星常落在同一价位,此时建议等一根实体阴线或动量指标转弱再做空,别提前押注。 下面这段 MQL5 逻辑同时覆盖了三内升与三内降的判定,熊势部分从 cand1.trend==UPPER 起步,适合直接丢进 MT5 脚本里跑 EURUSD 的 M15 回测验证。 //------ // 三内升牛势模型 if(cand1.trend==DOWN && !cand1.bull && cand2.bull && cand3.bull && //检查趋势方向和烛形方向
| (cand1.type==CAND_LONG | cand1.type==CAND_MARIBOZU_LONG) && //检查长烛 |
|---|
cand1.bodysize>cand2.bodysize && // 第一个烛形主体比第二个烛形主体长 cand3.close>cand2.close) // 第三个烛形收盘价高于第二个烛形收盘 { comment=_language?"三内升"; if(_forex)// 如果是外汇交易 { if(cand1.close<=cand2.open && cand1.close<=cand2.close && cand1.open>cand2.close) // 第二个烛形主体在第一个烛形主体之内 { DrawSignal(prefix+"三内升牛势模型"+string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } else { if(cand1.close<cand2.open && cand1.close<cand2.close && cand1.open>cand2.close) // 第二个烛形主体在第一个烛形主体之内 { DrawSignal(prefix+"三内升牛势模型"+string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } } // 三内降熊势模型 if(cand1.trend==UPPER && cand1.bull && !cand2.bull && !cand3.bull &&//检查趋势方向和烛形方向
| (cand1.type==CAND_LONG | cand1.type==CAND_MARIBOZU_LONG) && // 检查长烛 |
|---|
cand1.bodysize>cand2.bodysize && // 第一个烛形主体比第二个烛形主体长 cand3.close<cand2.close) // 第三个烛形收盘价比第二个烛形收盘价低 { comment=_language?"三内降"; if(_forex)// 如果是外汇交易 { if(cand1.close>=cand2.open && cand1.close>=cand2.close && cand1.close>=cand2.close) // 在第一个烛形主体之内 { DrawSignal(prefix+"三内降熊势模型"+string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } } else { if(cand1.close>cand2.open && cand1.close>cand2.close && cand1.open<cand2.close) // 在第一个烛形主体之内 { DrawSignal(prefix+"三内降熊势模型"+string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } } } 逐行看:cand1.trend==UPPER 限定仅在上行趋势找反转;cand1.bull 为真说明首根阳线,后两根 !cand2.bull && !cand3.bull 确保转阴。cand1.bodysize>cand2.bodysize 要求长阳包短阴,cand3.close<cand2.close 是第三根收更低确认弱势。外汇分支里 cand1.close>=cand2.open 等条件把第二根实体锁在首根内部,非外汇则放宽到严格内含。 外汇与贵金属均为高风险品种,上述形态只提示概率倾向,实盘前先在策略测试器用 2020—2023 年数据跑一遍,观察信号密度再决定手数。
class=class="str">"cmt">//------ class=class="str">"cmt">// 三内升牛势模型 if(cand1.trend==DOWN && !cand1.bull && cand2.bull && cand3.bull && class=class="str">"cmt">//检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">//检查长烛 cand1.bodysize>cand2.bodysize && class=class="str">"cmt">// 第一个烛形主体比第二个烛形主体长 cand3.close>cand2.close) class=class="str">"cmt">// 第三个烛形收盘价高于第二个烛形收盘 { comment=_language?"三内升"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 { if(cand1.close<=cand2.open && cand1.close<=cand2.close && cand1.open>cand2.close) class=class="str">"cmt">// 第二个烛形主体在第一个烛形主体之内 { DrawSignal(prefix+"三内升牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } else { if(cand1.close<cand2.open && cand1.close<cand2.close && cand1.open>cand2.close) class=class="str">"cmt">// 第二个烛形主体在第一个烛形主体之内 { DrawSignal(prefix+"三内升牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } } class=class="str">"cmt">// 三内降熊势模型 if(cand1.trend==UPPER && cand1.bull && !cand2.bull && !cand3.bull &&class=class="str">"cmt">//检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛 cand1.bodysize>cand2.bodysize && class=class="str">"cmt">// 第一个烛形主体比第二个烛形主体长 cand3.close<cand2.close) class=class="str">"cmt">// 第三个烛形收盘价比第二个烛形收盘价低 { comment=_language?"三内降"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 { if(cand1.close>=cand2.open && cand1.close>=cand2.close && cand1.close>=cand2.close) class=class="str">"cmt">// 在第一个烛形主体之内 { DrawSignal(prefix+"三内降熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } } else { if(cand1.close>cand2.open && cand1.close>cand2.close && cand1.open<cand2.close) class=class="str">"cmt">// 在第一个烛形主体之内 { DrawSignal(prefix+"三内降熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } } }
◍ 十字星与三鸦的卖出识别逻辑
上升趋势里若出现三颗十字星,中间那颗带向上或向下缺口,在外汇品种上三根需处于同一价格水平,这种三星熊势形态倾向暗示反转可能,但建议等一根确认烛再动手。 三只相同乌鸦则是另一套:上升途中连续三根长黑烛,每根收盘低于前一根,开盘近似上一根收盘,下影线短。该形态在 MT5 图案识别里标为熊势、无需确认,价格延续下行的概率偏高。 外汇与贵金属杠杆高,上述形态仅作概率参考,实盘须自设止损。下面这段 MQL5 片段直接给出了三星与三鸦的机器判定分支,复制进 EA 可跑。
class=class="str">"cmt">//------ class=class="str">"cmt">// 三星牛势模型 if(cand1.trend==DOWN && class=class="str">"cmt">// 检查趋势方向 cand1.type==CAND_DOJI && cand2.type==CAND_DOJI && cand3.type==CAND_DOJI) class=class="str">"cmt">// 检查十字星 { comment=_language?"牛势三星"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 { DrawSignal(prefix+"三星牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } else { if(cand2.open!=cand1.close && cand2.close!=cand3.open) class=class="str">"cmt">// 第二个烛形在不同水平上 { DrawSignal(prefix+"三星牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } } class=class="str">"cmt">// 三星熊势模型 if(cand1.trend==UPPER && class=class="str">"cmt">// 检查趋势方向 cand1.type==CAND_DOJI && cand2.type==CAND_DOJI && cand3.type==CAND_DOJI) class=class="str">"cmt">// 检查十字星 { comment=_language?"熊势三星"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 { DrawSignal(prefix+"三星熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } else { if(cand2.open!=cand1.close && cand2.close!=cand3.open) class=class="str">"cmt">// 第二个烛形在不同水平上 { DrawSignal(prefix+"三星熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } } } class=class="str">"cmt">// 三只相同乌鸦熊势模型 if(cand1.trend==UPPER && !cand1.bull && !cand2.bull && !cand3.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && (cand2.type==CAND_LONG || cand2.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛或无影烛 (cand3.type==CAND_LONG || cand3.type==CAND_MARIBOZU_LONG)) class=class="str">"cmt">// 检查长烛或无影烛 { comment=_language?"三只相同乌鸦"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 { DrawSignal(prefix+"三只相同乌鸦熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } else class=class="str">"cmt">// 不同市场
三河底与小燕子模型的判定分支
这段代码在烛形识别循环里补了三类少见的反转形态:三只相同乌鸦熊势、独特三河底牛势、隐藏的小燕子牛势。前两个用三根烛形结构判定,后一个需要四根烛形,且全部依赖前面 RecognizeCandle 填好的 CANDLE_STRUCTURE 字段。 三只相同乌鸦的触发条件写得很直白:cand1.close>=cand2.open 且 cand2.close>=cand3.open,即后一根开盘不高于前一根收盘,连续下移。满足就调 DrawSignal 画熊势标记,注释里把「开盘价小于等于前一烛形收盘价」直接标在判断行上。 独特三河底要求趋势为 DOWN,前两根为跌烛、第三根为涨烛;第一根须是长实体或无影跌烛,第三根是短实体,且第二根实体被第一根包裹、最低价更低,第三根收盘低于第二根收盘。注意它只在 !_forex(非外汇)时绘制——外汇品种上这套条件被刻意跳过。 隐藏的小燕子要四根跌烛打底:前两根为无影长跌烛,第三根短跌烛与第两根有向下缺口但高点未破其收盘,第四根完全吞掉第三根。同样仅非外汇市场出信号。下方把 cand4 到 cand1 整体左移一位,再读入新一根去跑五烛形判定。
{
if(cand1.close>=cand2.open && cand2.close>=cand3.open) class=class="str">"cmt">// 开盘价小于等于前一烛形的收盘价
{
DrawSignal(prefix+"三只相同乌鸦熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment);
}
}
class=class="str">"cmt">// 独特三河底牛势模型
if(cand1.trend==DOWN && !cand1.bull && !cand2.bull && cand3.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向
(cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && cand3.type==CAND_SHORT && class=class="str">"cmt">// 检查长烛或无影烛以及第三个短烛
cand2.open<cand1.open && cand2.close>cand1.close && cand2.low<cand1.low && class=class="str">"cmt">// 第二个烛形主体在第一个之内, 最低价低于第一个烛形
cand3.close<cand2.close) class=class="str">"cmt">// 第三个烛形收盘价低于第二个烛形
{
comment=_language?"":"独特三河底";
if(!_forex)class=class="str">"cmt">// 非外汇交易
{
DrawSignal(prefix+"独特三河底牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment);
}
}
class=class="str">"cmt">/* 检查四个烛形的图案 */
CANDLE_STRUCTURE cand4;
cand4=cand3;
cand3=cand2;
cand2=cand1;
if(!RecognizeCandle(_Symbol,_Period,time[i-class="num">3],InpPeriodSMA,cand1))
class="kw">continue;
class=class="str">"cmt">//------
class=class="str">"cmt">// 隐藏的小燕子牛势模型
if(cand1.trend==DOWN && !cand1.bull && !cand2.bull && !cand3.bull && !cand4.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向
cand1.type==CAND_MARIBOZU_LONG && cand2.type==CAND_MARIBOZU_LONG && cand3.type==CAND_SHORT && class=class="str">"cmt">// 检查无影烛
cand3.open<cand2.close && cand3.high>cand2.close && class=class="str">"cmt">// 第三个烛形与第二个有向下的距离,最高价在第二个烛形之内
cand4.open>cand3.high && cand4.close<cand3.low) class=class="str">"cmt">// 第四个烛形完全吞噬第三个
{
comment=_language?"":"隐藏的小燕子";
if(!_forex)class=class="str">"cmt">// 非外汇交易
{
DrawSignal(prefix+"隐藏的小燕子牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand4,InpColorBull,comment);
}
}
class=class="str">"cmt">/* 检查五根烛形的图案 */
CANDLE_STRUCTURE cand5;
cand5=cand4;
cand4=cand3;
cand3=cand2;
cand2=cand1;
if(!RecognizeCandle(_Symbol,_Period,time[i-class="num">4],InpPeriodSMA,cand1))
class="kw">continue; 「五烛突破形态的判定与代码拆解」
上升趋势里出现一种五根烛组成的卖出结构:前两根是白色长烛加带缺口的白色短烛,第三根短烛颜色不限,第四根白色短烛,第五根黑色长烛且收盘回补至缺口内部。该形态原文标注未实装,仅作识别参考,实战中建议等额外确认信号再动手,外汇与贵金属杠杆高,假突破概率不低。 持续形态反映市场盘整休眠,无论识别到哪种模型,先厘清自己当前持仓状态,哪怕仓位不动也得有这个结论。单根烛里有一类经典反转:黑色无影烛接白色无影烛、两实体间存在缺口,属牛市反转买入结构,无需确认;对应的熊市反转则是反向无影烛缺口组合。 下面这段 MQL5 逻辑同时覆盖了牛势与熊势的突破判定,注意它只在非外汇品种上绘图: //------ // 突破牛势模型 if(cand1.trend==DOWN && !cand1.bull && !cand2.bull && !cand4.bull && cand5.bull && // 检查趋势方向和烛形方向
| (cand1.type==CAND_LONG | cand1.type==CAND_MARIBOZU_LONG) && //检查第一个长烛 |
|---|
cand2.type==CAND_SHORT && cand2.open<cand1.close && // 第二个是短烛,与第一个分开 cand3.type==CAND_SHORT && cand4.type==CAND_SHORT && // 第三第四个是短烛
| (cand5.type==CAND_LONG | cand5.type==CAND_MARIBOZU_LONG) && cand5.close<cand1.close && cand5.close>cand2.open) // 第五个是长烛且收盘于缝隙之内 |
|---|
{ comment=_language?"牛势突破"; if(!_forex)// 非外汇交易 { DrawSignal(prefix+"突破牛势模型"+string(objcount++),cand1,cand2,cand5,InpColorBull,comment); } } // 突破熊势模型 if(cand1.trend==UPPER && cand1.bull && cand2.bull && cand4.bull && !cand5.bull && // 检查趋势方向和烛形方向
| (cand1.type==CAND_LONG | cand1.type==CAND_MARIBOZU_LONG) && // 第一个是长烛 |
|---|
cand2.type==CAND_SHORT && cand2.open<cand1.close && // 第二个是短烛,与第一个分开 cand3.type==CAND_SHORT && cand4.type==CAND_SHORT && // 第三第四个是短烛
| (cand5.type==CAND_LONG | cand5.type==CAND_MARIBOZU_LONG) && cand5.close>cand1.close && cand5.close<cand2.open) // 第五个是长烛且收盘价在缝隙之内 |
|---|
{ comment=_language?"熊势突破"; if(!_forex)// 非外汇交易 { DrawSignal(prefix+"突破熊势模型"+string(objcount++),cand1,cand2,cand5,InpColorBear,comment); } } 逐行看:牛势分支要求 cand1 趋势向下且前四烛皆非多头,第五烛转多;首烛须为长实体或光头长实体,二三四是短烛,第五长烛收盘介于 cand1.close 与 cand2.open 之间,即缺口被部分回补。熊势分支对称翻转趋势与多空标记。 在 MT5 里把 _forex 置 false 才能看到 DrawSignal 画的形态标记;若做外汇品种回测,这段不会输出图形,只能靠 comment 字符串做日志追踪。
<b> </b> <span class="comment">class=class="str">"cmt">//------ </span> <span class="comment">class=class="str">"cmt">// 突破牛势模型</span> <span class="keyword">if</span>(cand1.trend==DOWN && !cand1.bull && !cand2.bull && !cand4.bull && cand5.bull && <span class="comment">class=class="str">"cmt">// 检查趋势方向和烛形方向</span> (cand1.type==CAND_LONG|| cand1.type==CAND_MARIBOZU_LONG) && <span class="comment">class=class="str">"cmt">//检查第一个长烛</span> cand2.type==CAND_SHORT && cand2.open<cand1.close && <span class="comment">class=class="str">"cmt">// 第二个是短烛,与第一个分开</span> cand3.type==CAND_SHORT && cand4.type==CAND_SHORT && <span class="comment">class=class="str">"cmt">// 第三第四个是短烛</span> (cand5.type==CAND_LONG || cand5.type==CAND_MARIBOZU_LONG) && cand5.close<cand1.close && cand5.close>cand2.open) <span class="comment">class=class="str">"cmt">// 第五个是长烛且收盘于缝隙之内</span> { comment=_language?<span class="class="type">class="kw">string"></span><span class="class="type">class="kw">string">"牛势突破"</span>; <span class="keyword">if</span>(!_forex)<span class="comment">class=class="str">"cmt">// 非外汇交易</span> { DrawSignal(prefix+<span class="class="type">class="kw">string">"突破牛势模型"</span>+<span class="built_in">class="type">class="kw">string</span>(objcount++),cand1,cand2,cand5,InpColorBull,comment); } } <span class="comment">class=class="str">"cmt">// 突破熊势模型</span> <span class="keyword">if</span>(cand1.trend==UPPER && cand1.bull && cand2.bull && cand4.bull && !cand5.bull && <span class="comment">class=class="str">"cmt">// 检查趋势方向和烛形方向</span> (cand1.type==CAND_LONG|| cand1.type==CAND_MARIBOZU_LONG) && <span class="comment">class=class="str">"cmt">// 第一个是长烛</span> cand2.type==CAND_SHORT && cand2.open<cand1.close && <span class="comment">class=class="str">"cmt">// 第二个是短烛,与第一个分开</span> cand3.type==CAND_SHORT && cand4.type==CAND_SHORT && <span class="comment">class=class="str">"cmt">// 第三第四个是短烛</span> (cand5.type==CAND_LONG || cand5.type==CAND_MARIBOZU_LONG) && cand5.close>cand1.close && cand5.close<cand2.open) <span class="comment">class=class="str">"cmt">// 第五个是长烛且收盘价在缝隙之内</span> { comment=_language?<span class="class="type">class="kw">string"></span><span class="class="type">class="kw">string">"熊势突破"</span>; <span class="keyword">if</span>(!_forex)<span class="comment">class=class="str">"cmt">// 非外汇交易</span> { DrawSignal(prefix+<span class="class="type">class="kw">string">"突破熊势模型"</span>+<span class="built_in">class="type">class="kw">string</span>(objcount++),cand1,cand2,cand5,InpColorBear,comment); } <b> </b> }
◍ 两根烛的熊势逆转识别逻辑
在下降趋势里,几类由两根烛构成的形态常被用来提示卖出倾向。典型如牛势颈上线:第一根是长黑烛,随后白烛开盘低于黑烛最低价、收盘贴近黑烛最低价,白烛不要求长身,但需要后续确认来过滤假信号。
颈内线(熊势)与插入线(熊势)结构相近:白烛开盘低于黑烛最低价,但收盘分别略高于黑烛收盘价、或主体明显短于黑烛且上影很短。二者都建议在信号出现后用一根确认烛辅助判断,外汇与贵金属品种波动跳空频繁,直接进场风险偏高。
下面这段 MT5 代码给出了双无影烛逆转的机器识别思路,注意它只在非外汇模式下画图,外汇品种默认不绘制信号。
//------ 逆转牛势模型
if(!cand1.bull && cand2.bull && // 检查趋势方向和烛形方向:前一根非牛(黑)、后一根牛(白)
cand1.type==CAND_MARIBOZU_LONG && cand2.type==CAND_MARIBOZU_LONG && // 两个无影烛(marubozu)
cand1.open<cand2.open) // 之间有距离:白烛开盘高于黑烛开盘
{
comment=_language?"牛势逆转"; // 语言开关下的标注文字
if(!_forex)// 非外汇交易才继续
{
DrawSignal(prefix+"逆转牛势模型"+string(objcount++),cand1,cand2,InpColorBull,comment); // 画牛势信号
}
}
// 逆转熊势模型
if(cand1.bull && !cand2.bull && // 前白后黑
cand1.type==CAND_MARIBOZU_LONG && cand2.type==CAND_MARIBOZU_LONG && // 两个无影烛
cand1.open>cand2.open) // 黑烛开盘低于白烛开盘
{
comment=_language?"熊势逆转";
if(!_forex)// 非外汇不画
{
DrawSignal(prefix+"逆转熊势模型"+string(objcount++),cand1,cand2,InpColorBear,comment);
}
}
把 _forex 改成 false 并在黄金 M5 上跑一遍,能直观看到双无影烛缺口被标出的位置;若保留 true,则外汇图表上不会输出任何图形,这是原逻辑刻意留的开关。
class=class="str">"cmt">//------ class=class="str">"cmt">// 逆转牛势模型 if(!cand1.bull && cand2.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 cand1.type==CAND_MARIBOZU_LONG && cand2.type==CAND_MARIBOZU_LONG && class=class="str">"cmt">// 两个无影烛 cand1.open<cand2.open) class=class="str">"cmt">// 之间有距离 { comment=_language?"牛势逆转"; if(!_forex)class=class="str">"cmt">// 非外汇交易 { DrawSignal(prefix+"逆转牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,InpColorBull,comment); } } class=class="str">"cmt">// 逆转熊势模型 if(cand1.bull && !cand2.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 cand1.type==CAND_MARIBOZU_LONG && cand2.type==CAND_MARIBOZU_LONG && class=class="str">"cmt">// 两个无影烛 cand1.open>cand2.open) class=class="str">"cmt">// 之间有距离 { comment=_language?"熊势逆转"; if(!_forex)class=class="str">"cmt">// 非外汇交易 { DrawSignal(prefix+"逆转熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,InpColorBear,comment); } }
熊势三烛与四烛缺口模型的识别边界
下降趋势里,下缺口三方法要求前两根长黑烛之间留有跳空缺口,第三根白烛开盘落在第二根黑烛实体内部并回补缺口,但原文标注该图案未实施,实盘只能作为确认信号而非直接触发。下肩带缺口与之类似,两根相邻黑烛带缺口,第三根白烛开盘进第二根实体、收盘停在缺口内却不填平,同样建议等后续K线确认。 四烛结构里三线打击(熊势)描述三根短影线长黑烛延续跌势,类似三只黑乌鸦;第四根向下跳空开盘,收盘却高于第一根黑烛开盘价。外汇品种下黑烛开收相同,且第三根收盘与第四根开盘价一致,这种反常回拉容易让模型在MT5上误判,需手动核对跳空幅度。 颈内线与插入线的代码判定给出了量化阈值:插入线熊势要求第二白烛收盘高于第一黑烛收盘但低于(cand1.open+cand1.close)/2,也就是第一根实体的中点。颈内线则额外限制cand2.bodysize小于cand1.bodysize,且收盘不低于第一根收盘。外汇贵金属波动剧烈,这类形态失败概率不低,开MT5加载脚本时应先把_forex开关与趋势过滤cand1.trend==DOWN对齐再回测。
class=class="str">"cmt">//------ 检查颈上线图案 if(cand1.trend==DOWN && !cand1.bull && cand2.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG)) class=class="str">"cmt">// 第一个烛形为长烛 { class=class="str">"cmt">// 颈上线熊势模型 if(cand2.open<cand1.low && cand2.close==cand1.low) class=class="str">"cmt">// 第二个烛形开启于第一个烛形之下并且收盘价低于第一个烛形最低价 { comment=_language?"颈上线熊势"; if(!_forex)class=class="str">"cmt">// 如果不是外汇交易 { DrawSignal(prefix+"颈上线熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,InpColorBear,comment); } } else { class=class="str">"cmt">// 颈内线熊势模型 if(cand1.trend==DOWN && !cand1.bull && cand2.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 第一个烛形为长烛 cand1.bodysize>cand2.bodysize && class=class="str">"cmt">// 第二个烛形主体比第一个烛形短 cand2.open<cand1.low && cand2.close>=cand1.close && cand2.close<(cand1.close+cand1.bodysize*class="num">0.01)) class=class="str">"cmt">// 第二个烛形开启比第一个烛形低并且收盘比第一个烛形收盘高 { comment=_language?"颈内线熊势"; if(!_forex)class=class="str">"cmt">// 非外汇交易 { DrawSignal(prefix+"颈内线熊势模型"+class="type">class="kw">string(objcount++),cand1,cand2,InpColorBear,comment); } } else { class=class="str">"cmt">// 插入线熊势模型 if(cand1.trend==DOWN && !cand1.bull && cand2.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 第一个烛形为长烛 cand2.open<cand1.low && cand2.close>cand1.close && cand2.close<(cand1.open+cand1.close)/class="num">2) class=class="str">"cmt">// 第二个烛形开启比第一个烛形低并且收盘高于第一个烛形收盘但低于中间 { comment=_language?"插入线熊势";
「缺口三方法与肩带缺口的判定分支」
在 MT5 自定义指标里,缺口类三方法模型靠连续三根烛形的趋势字段与多空标记来过滤。上缺口三方法牛势要求前两根为长阳(CAND_LONG 或 CAND_MARIBOZU_LONG),且第二根开盘高于第一根收盘形成向上跳空,第三根回补缺口但未吞没第一根实体,概率上倾向视为中继续涨结构。
下缺口三方法牛势则反转了方向字段:前两根为长阴,第二根开盘低于第一根收盘,第三根向上插入第二根实体并收过第一根收盘,这类形态在下跌趋势末端可能出现止跌信号。外汇与贵金属杠杆高,跳空缺口常由数据或休市造成,实盘触发前需在历史回放里核对缺口是否被流动性快速填平。
上肩带缺口牛势多了十字星排除:cand1、cand2 不能是 CAND_DOJI,第三根收盘卡在第二根开盘下方、第一根收盘上方,属于带缺口的弱势回调。代码里统一用 _forex 开关,非外汇品种才调用 DrawSignal 画线,说明外汇品种默认不绘制此类信号层。
if(cand1.trend==UPPER && cand1.bull && cand2.bull && !cand3.bull && (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && (cand2.type==CAND_LONG || cand2.type==CAND_MARIBOZU_LONG) && cand2.open>cand1.close && cand3.open>cand2.open && cand3.open<cand2.close && cand3.close<cand1.close) { comment=_language?"上缺口三方法"; if(!_forex) { DrawSignal(prefix+"上缺口三方法牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } } if(cand1.trend==DOWN && !cand1.bull && !cand2.bull && cand3.bull && (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && (cand2.type==CAND_LONG || cand2.type==CAND_MARIBOZU_LONG) && cand2.open<cand1.close && cand3.open<cand2.open && cand3.open>cand2.close && cand3.close>cand1.close) { comment=_language?"下缺口三方法"; if(!_forex) { DrawSignal(prefix+"下缺口三方法牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } } if(cand1.trend==UPPER && cand1.bull && cand2.bull && !cand3.bull && cand1.type!=CAND_DOJI && cand2.type!=CAND_DOJI && cand2.open>cand1.close && cand3.open>cand2.open && cand3.open<cand2.close && cand3.close<cand2.open && cand3.close>cand1.close) { comment=_language?"上肩带缺口"; if(!_forex) { DrawSignal(prefix+"上肩带缺口牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBull,comment); } }
◍ 缺口肩带与三线打击的判定逻辑
下肩带缺口牛势模型要求前两根为下跌趋势中的阴线且非十字星,中间留跳空缝隙,第三根阳线开在二根实体内部、收在缝隙中但未吞没第一根收盘。代码中 cand2.open<cand1.close 保证一、二根间有距离,cand3.open>cand2.close 且 cand3.close<cand1.close 锁定收价区间,这类形态在 EURUSD 日线出现后,后续 3~5 根 K 线回补缺口的概率偏高,但外汇杠杆品种波动无序,需警惕假突破。 三线打击分牛熊两向,牛势要求趋势向上且前三根均为长阳或光头长阳,收盘逐根抬高,第四根阴线收盘跌破第一根开盘价。外汇品种额外卡一道 cand4.open>=cand3.close,非外汇则放宽为 cand4.open>cand3.close,这种市场差异处理值得在 MT5 里切换 _forex 参数对照验证。 熊势三线打击镜像对称:前三根长阴收盘递降,第四根阳线收高于第一根开盘。DrawSignal 只在条件全满足时绘制,说明模型本身不做过滤优化,实盘使用前建议自己加成交量或 ATR 阈值,贵金属和外汇均为高风险标的,信号仅作参考。
if(cand1.trend==DOWN && !cand1.bull && !cand2.bull && cand3.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 cand1.type!=CAND_DOJI && cand2.type!=CAND_DOJI && class=class="str">"cmt">// 前两个烛形不是十字星 cand2.open<cand1.close && class=class="str">"cmt">// 第一和第二个烛形间有距离 cand3.open<cand2.open && cand3.open>cand2.close && cand3.close>cand2.open && cand3.close<cand1.close) class=class="str">"cmt">// 第三个烛形开启于第二个烛形主体之内且在缝隙中关闭 { comment=_language?"下肩带缺口"; if(!_forex)class=class="str">"cmt">// 非外汇交易 { DrawSignal(prefix+"下肩带缺口牛势模型"+class="type">class="kw">string(objcount++),cand1,cand2,cand3,InpColorBear,comment); } } class=class="str">"cmt">//------ class=class="str">"cmt">// 三线打击牛势模型 if(cand1.trend==UPPER && cand1.bull && cand2.bull && cand3.bull && !cand4.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && (cand2.type==CAND_LONG || cand2.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛或无影烛 (cand3.type==CAND_LONG || cand3.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛或无影烛 cand2.close>cand1.close && cand3.close>cand2.close && cand4.close<cand1.open) class=class="str">"cmt">// 第二个烛形收盘比第一个烛形高,第三个烛形比第二个高,第四个烛形收盘低于第一个 { comment=_language?"三线打击"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 { if(cand4.open>=cand3.close) class=class="str">"cmt">// 第四个烛形开盘比第三个收盘高 { DrawSignal(prefix+"三线打击牛势模型"+class="type">class="kw">string(objcount++),cand1,cand3,cand4,InpColorBull,comment); } } else class=class="str">"cmt">// 不同市场 { if(cand4.open>cand3.close) class=class="str">"cmt">// 第四个烛形开盘比第三个烛形收盘高 { DrawSignal(prefix+"三线打击牛势模型"+class="type">class="kw">string(objcount++),cand1,cand3,cand4,InpColorBull,comment); } } } class=class="str">"cmt">//------ class=class="str">"cmt">// 三线打击熊势模型 if(cand1.trend==DOWN && !cand1.bull && !cand2.bull && !cand3.bull && cand4.bull && class=class="str">"cmt">// 检查趋势方向和烛形方向 (cand1.type==CAND_LONG || cand1.type==CAND_MARIBOZU_LONG) && (cand2.type==CAND_LONG || cand2.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛或无影烛 (cand3.type==CAND_LONG || cand3.type==CAND_MARIBOZU_LONG) && class=class="str">"cmt">// 检查长烛或无影烛 cand2.close<cand1.close && cand3.close<cand2.close && cand4.close>cand1.open) class=class="str">"cmt">// 第二个烛形收盘低于第一个烛形,第三个烛形收盘低于第二个烛形,第四个烛形收盘高于第一个烛形 { comment=_language?"三线打击"; if(_forex)class=class="str">"cmt">// 如果是外汇交易 {
熊势三线打击的两种触发分叉
上面这段逻辑处理的是「三线打击」熊势模型的最后一道判定:前三根烛形走完下跌三连,第四根如何开盘才把信号画出来。 在外汇或贵金属这种连续交易市场上,判定写的是 cand4.open <= cand3.close,也就是第四根开盘只要不高于第三根收盘,就满足模型,倾向触发做空信号。这类品种波动连续,跳空极少,阈值放宽到等于更不容易漏掉形态。 到了非连续交易的市场(比如某些有固定休市的品种),代码改成 cand4.open < cand3.close,必须严格低于前收才画信号,避免跳空高开假突破被误认成打击延续。两种写法差异只有一个等号,但实盘里可能直接决定信号数量多三成还是少三成。 开 MT5 把这段塞进你已有的形态脚本,分别用 EURUSD 和带跳空的品种回看 2023 年数据,对比 objcount 的计数差,就能确认你当前市场该用哪条分支。外汇贵金属杠杆高,信号只代表概率倾向,别当成确定性入口。
if(cand4.open<=cand3.close) class=class="str">"cmt">// 第四个烛形开盘低于或等于第三个烛形 { DrawSignal(prefix+"三线打击熊势模型"+class="type">class="kw">string(objcount++),cand1,cand3,cand4,InpColorBear,comment); } } else class=class="str">"cmt">// 不同市场 { if(cand4.open<cand3.close) class=class="str">"cmt">// 第四个烛形开盘低于第三个烛形 { DrawSignal(prefix+"三线打击熊势模型"+class="type">class="kw">string(objcount++),cand1,cand3,cand4,InpColorBear,comment); } } }
「烛图案指标的输入参数与绘制逻辑」
指标落地时先定输入项:Averaging period 用来判趋势方向,区分长烛与短烛;Enable signal 控制新图案出现时是否弹信号;Number of bars for calculation 若设 ≤0 就在全部历史里搜图案,填了具体柱数就只扫最近 N 根,能明显减轻 MT5 实时计算负担。 备注类参数里,Enable comments 管是否在图上标图案名,Font size 调备注字号,纯视觉项,不影响信号判定。 核心循环前有个细节:新柱未生成时直接 return 跳过,避免重复算。初始 limit 的算法分两种——首跑时若 InpCountBars≤0 或超总量,limit 取 InpPeriodSMA*2;否则从 rates_total-InpCountBars 起算;后续刷新只回看 prev_calculated-1。 绘制按组合长度分流:单烛画箭头+名;双烛画窄矩形+首烛上方名牌;三烛及以上画宽矩形+末烛名牌。DrawSignal 靠函数重载实现,同名不同参,分别接 1/2/3 根 CANDLE_STRUCTURE,调用时按图案长度选对应版本。外汇与贵金属波动大,这类图案信号仅作概率参考,实盘前请在 MT5 用历史数据自验。
class=class="str">"cmt">//--- 等待新柱 if(rates_total==prev_calculated) { class="kw">return(rates_total); } class="type">int limit; if(prev_calculated==class="num">0) { if(InpCountBars<=class="num">0 || InpCountBars>=rates_total) limit=InpPeriodSMA*class="num">2; else limit=rates_total-InpCountBars; } else limit=prev_calculated-class="num">1; class="type">void DrawSignal(class="type">class="kw">string objname,CANDLE_STRUCTURE &cand,class="type">class="kw">color Col,class="type">class="kw">string comment) class="type">void DrawSignal(class="type">class="kw">string objname,CANDLE_STRUCTURE &cand1,CANDLE_STRUCTURE &cand2,class="type">class="kw">color Col,class="type">class="kw">string comment) class="type">void DrawSignal(class="type">class="kw">string objname,CANDLE_STRUCTURE &cand1,CANDLE_STRUCTURE &cand2,CANDLE_STRUCTURE &cand3,class="type">class="kw">color Col,class="type">class="kw">string comment)
◍ 把工具请下神坛
这套烛形识别方案落地的关键动作很直接:把 candlestick_patterns.mq5 与 candlestick_type_color.mq5 丢进 \Indicators,candlesticktype.mqh 放进 \Include,编译后就能在 MT5 图表上跑起来。附件里三个文件体积都不大,mqh 头文件仅 4.32 KB,说明封装层很薄,方便你改着色逻辑或加过滤条件。 外汇与贵金属市场高杠杆、波动剧烈,任何形态识别都只是概率优势,别把指标当圣杯。下一步值得做的是按形态写 EA 自动交易,但那属于另一篇的坑,这里先把手上的指标调顺再说。