学习如何基于 DeMarker 设计交易系统·综合运用
(3/3)· 把 DeMarker 的振荡逻辑落进 MetaTrader 5 策略面板,系列收尾一篇讲透
用 DeMarker 抓超买超卖与背离
DeMarker 以 14 周期默认参数在 0~1 区间摆动,低于 0.30 倾向视为超卖,高于 0.70 倾向视为超买,中间段不提示特殊状态。这套阈值在 MT5 里直接可调,外汇与贵金属波动剧烈,阈值误判概率不低,实盘需结合其他信号过滤。 下面这段 OnTick 逻辑先把 DeMarker 数组和价格数组都设成时间序列,取最近 14 根 K 线。currentHigh>prevHigh 而 deMarkerVal<deMarkerPrevVal 时,价格新高但指标走低,属于看跌背离,可能暗示上行动能衰减。 别把 0.30/0.70 当死规矩 不同品种波幅差异大,黄金常比欧美对更快触碰极值。建议开 MT5 用策略测试器跑一段历史,看自己盯的品类在哪些阈值区间反转频率更高,再改常数。
class="type">void OnTick() { class="type">class="kw">double deMarkerArray[]; class="type">MqlRates pArray[]; ArraySetAsSeries(deMarkerArray,true); ArraySetAsSeries(pArray,true); class="type">int deMarkerDef = iDeMarker(_Symbol,_Period,class="num">14); class="type">int pData = CopyRates(_Symbol,_Period,class="num">0,class="num">14,pArray); CopyBuffer(deMarkerDef,class="num">0,class="num">0,class="num">14,deMarkerArray); class="type">class="kw">double deMarkerVal = NormalizeDouble(deMarkerArray[class="num">0],class="num">4); class="type">class="kw">double deMarkerPrevVal = NormalizeDouble(deMarkerArray[class="num">1],class="num">4); class="type">class="kw">double currentHigh = NormalizeDouble(pArray[class="num">0].high,class="num">6); class="type">class="kw">double currentLow = NormalizeDouble(pArray[class="num">0].low,class="num">6); class="type">class="kw">double prevHigh = NormalizeDouble(pArray[class="num">1].high,class="num">6); class="type">class="kw">double prevLow = NormalizeDouble(pArray[class="num">1].low,class="num">6); if(currentHigh>prevHigh && deMarkerVal<deMarkerPrevVal) { Comment("Bearish divergence","\n", "Current High is ",currentHigh,"\n", "Prev. High Value is ",prevHigh,"\n", "Current DeMarker Value is ",deMarkerVal,"\n", "Prev. DeMarker Value is ",deMarkerPrevVal); }
◍ 用 DeMarker 抓价格背离的裸写逻辑
在 MT5 里做背离预警,不一定要上图形对象,直接读指标缓冲区和 K 线速率数组就能在图表上打印信号。下面这段把 DeMarker 周期设为 14、取最近 14 根 K 线,是这类脚本最常见的参数组合。 先声明两个序列数组:deMarkerArray 装指标值,pArray 装 OHLC 速率数据,都用 ArraySetAsSeries 倒序排列,保证 [0] 是最新一根。iDeMarker 拿句柄,CopyRates 取 0~13 共 14 根,CopyBuffer 把指标主缓冲填进数组。 价格与指标的背离判定很直白:若 currentHigh 大于 prevHigh 而 deMarkerVal 小于 deMarkerPrevVal,倾向空头背离;若 currentLow 小于 prevLow 而 deMarkerVal 大于 deMarkerPrevVal,倾向多头背离。两者都用 Comment 把关键数值刷在左上角,方便肉眼核对。 外汇与贵金属波动受杠杆和消息面影响大,背离只是概率信号,实盘前请在策略测试器里用历史数据跑一遍,确认误报率你能接受再上真仓。
class="type">class="kw">double deMarkerArray[]; class="type">MqlRates pArray[]; ArraySetAsSeries(deMarkerArray,true); ArraySetAsSeries(pArray,true); class="type">int deMarkerDef = iDeMarker(_Symbol,_Period,class="num">14); class="type">int pData = CopyRates(_Symbol,_Period,class="num">0,class="num">14,pArray); CopyBuffer(deMarkerDef,class="num">0,class="num">0,class="num">14,deMarkerArray); class="type">class="kw">double deMarkerVal = NormalizeDouble(deMarkerArray[class="num">0],class="num">4); class="type">class="kw">double deMarkerPrevVal = NormalizeDouble(deMarkerArray[class="num">1],class="num">4); class="type">class="kw">double currentHigh = NormalizeDouble(pArray[class="num">0].high,class="num">6); class="type">class="kw">double currentLow = NormalizeDouble(pArray[class="num">0].low,class="num">6); class="type">class="kw">double prevHigh = NormalizeDouble(pArray[class="num">1].high,class="num">6); class="type">class="kw">double prevLow = NormalizeDouble(pArray[class="num">1].low,class="num">6); if(currentHigh>prevHigh && deMarkerVal<deMarkerPrevVal) { Comment("Bearish divergence","\n", "Current High is ",currentHigh,"\n", "Prev. High Value is ",prevHigh,"\n", "Current DeMarker Value is ",deMarkerVal,"\n", "Prev. DeMarker Value is ",deMarkerPrevVal); } if(currentLow<prevLow && deMarkerVal>deMarkerPrevVal) { Comment("Bullish divergence","\n", "Current Low is ",currentLow,"\n", "Prev. Low Value is ",prevLow,"\n", "Current DeMarker Value is ",deMarkerVal,"\n", "Prev. DeMarker Value is ",deMarkerPrevVal); }
「把 DeMarker 三套打法接进 MT5 验证」
前面拆过的三套 DeMarker 用法,落到实盘前都得先在 MT5 里跑一遍:强度看当前值与近 5 周期均值的差,超买超卖看 0–1 区间位置,背离比的是当期/前一期指标值和高点位移。附带的四个 mq5 文件(DeMarker_Strength 1.7KB、DeMarker_OB_-_OS 1.25KB、DeMarker_Divergence 1.95KB、Simple_DeMarker_System 0.94KB)直接拖进指标目录就能加载。 外汇和贵金属杠杆高、滑点跳空频繁,任何信号都只是概率倾向,没有哪套逻辑能适配所有人。开 MT5 把历史数据回放一遍,确认信号延迟和你的执行速度匹配,再考虑上模拟盘。 作者给的蓝图只是骨架,参数周期和阈值留给你按品种波动率调。调完别急着真金白银,先记录一百根 K 线内的信号命中比,再决定要不要减仓试。