非线性指标·进阶篇
◍ 用中位数的中位数造平滑窗口
三角形窗口的思路可以平移到中位数上。先以周期为 3 的简单移动平均线打底,再取三条移动平均线各自向右偏移一根柱子的数值,得到三个偏移序列。 对这三个偏移值求平均,就是普通三角形 MA 的做法;换成中位数逻辑,则先算每个位置上的三个中位数值,再对这些中位数取一次中位数作为指标输出。 这样得到的曲线比单层中位数更平滑,却又保留了中位数对极端值的钝感。在 MT5 里加载后,肉眼能看到它在毛刺行情里少跳变,适合做贵金属 1H 以上周期的趋势过滤,但外汇高杠杆下假突破仍可能造成连续止损,属高风险用法。
「伪中位数怎么从极值里挤出来」
伪中位数的算法和中位数近似,但每一步不再取子序列的中位数,而是分别抓出该子序列的最高价与最低价。 对一组子序列得到的高点集合取最小,对低点集合取最大,两者求平均,就是伪中位数。和正统中位数相比,它更抗单根极端 K 线扰动。 在 MT5 自定义指标里,伪中位数可当作中位数或区间中值的替代来画线。外汇与贵金属波动剧烈、滑点常见,用它做参考须清醒:它只是概率倾向,不是方向保证,实盘前务必用历史数据回看拟合效果。
非线性指标经不起二次改造
以周期为 5 的线性加权均线(LWMA)为例,把同批价格分别按升序排成 p[]、降序排成 P[],再套用 LWMA 权重,能得到两条边界值。指标实际值越贴近下边界或上边界,对应的看跌或看涨趋势越强;上下边界的间距拉开越远,往往意味着市场波动越高。这套边界映射只依赖原序列的重排,没有动指标内核。 RSI 由 J. Welles Wilder 在 1978 年 6 月《Commodities》杂志提出,本身就已经是非线性结构。原版用 U、D 区分涨跌后再做指数平滑。有人尝试把价格差值换成‘该差值在历史中发生次数 n 除以总观测数 N’的概率值,相当于拿一种非线性替换另一种非线性。小样本测试显示,大偏差的出现频率确实低于小偏差,直觉没骗人,但指标响应形态已偏离 Wilder 原始定义。 Ichimoku 由 Goichi Hosoda 开发,Tenkan、Kijun、Senkou B 都取区间中值。若用更抗噪的加权中位数重算 Senkou A,云图轮廓会变得更平滑,但本质逻辑未被破坏。反过来,对 RSI 这类非线性做概率化改写,就属于用非线性破坏非线性——读者在 MT5 里自定义指标时,应优先保留原算法,外汇与贵金属品种波动剧烈,任意改写可能放大误判概率。
◍ 用有序统计给蜡烛形态编唯一身份证
传统蜡烛形态识别靠肉眼或固定组合规则,换个周期就乱。这里换条路:把连续 4 根蜡烛的 Open、Low、High 共 10 个价格点抽出来,按数值升序排,保留它们在原序列里的索引位置,就能把一种空间排列压成一个数字特征。 以上面 EURUSD 片段为例,排序后索引串是 8956073241,这就是该形态的指纹。若分析点超过 10 个,拼数字时得换对应进制基数,否则会进位冲突。 价格相等时要消歧义:把较小索引挪到数组前面,比如示例里 (3,2) 和 (6,0) 两对互换,保证同一形态永远映射到同一个数。算法硬伤是对垂直缩放不敏感——把蜡烛拉扁或拉长,特征码不变,三种振幅不同的走法会被判成同一种。 别把伸缩盲区当漏洞。正因如此,可顺手做个带弱预测性的指标:对每个历史形态累加 (High-Open) 与 (Open-Low) 的差值和,再现时比大小倾向出方向。外汇与贵金属波动剧烈,这类概率信号仅作参考,实盘需自担高风险。
class="type">int array[class="num">10][class="num">2];class=class="str">"cmt">//array for writing values and indices class=class="str">"cmt">/*fill the array*/ array[class="num">0][class="num">0]=(class="type">int)MathRound(iOpen(_Symbol,PERIOD_CURRENT,class="num">1)/_Point); array[class="num">0][class="num">1]=class="num">0; for(class="type">int j=class="num">0;j<class="num">3;j++) { array[class="num">3*j+class="num">1][class="num">0]=(class="type">int)MathRound(iLow(_Symbol,PERIOD_CURRENT,j)/_Point); array[class="num">3*j+class="num">1][class="num">1]=class="num">3*j+class="num">1; array[class="num">3*j+class="num">2][class="num">0]=(class="type">int)MathRound(iHigh(_Symbol,PERIOD_CURRENT,j)/_Point); array[class="num">3*j+class="num">2][class="num">1]=class="num">3*j+class="num">2; array[class="num">3*j+class="num">3][class="num">0]=(class="type">int)MathRound(iOpen(_Symbol,PERIOD_CURRENT,j)/_Point); array[class="num">3*j+class="num">3][class="num">1]=class="num">3*j+class="num">3; } ArraySort(array); class=class="str">"cmt">/*eliminate possible ambiguities when prices match*/ for(class="type">int j=class="num">1; j<class="num">10; j++) if(array[j-class="num">1][class="num">0]==array[j][class="num">0] && array[j-class="num">1][class="num">1]>array[j][class="num">1]) { class="type">int v=array[j-class="num">1][class="num">1]; array[j-class="num">1][class="num">1]=array[j][class="num">1]; array[j][class="num">1]=v; j=class="num">1; } class=class="str">"cmt">/*gather the number*/ class="type">class="kw">ulong number=class="num">0; for(class="type">int j=class="num">0; j<class="num">10; j++) number=number+array[j][class="num">1]*(class="type">class="kw">ulong)MathRound(MathPow(class="num">10,j));class=class="str">"cmt">//class="num">10 - number system base
「顺沿与跨越两种形态信号思路」
把前一篇得到的形态算法直接搬进交易系统,可以拆成两条路线。顺沿更常见:信号只看指标当前值;但若拿最近 N 个历史值(比如最后 10 个开盘价)去拼形态,并把预测窗口拉长到前 5 根柱线,形态就描述了指标随时间的演变轨迹,EA 据此触发交易。 跨越则换一组指标互相定位:取 10 条移动平均线,周期设为 2*n+1(n=0…9),形态表达的是均线间的相对顺序,顺序变化即信号。实盘里两类做法都要控住形态总量——太少则系统分不清市况,太多则几乎每个状态都当成唯一,EA 直接不反应。 第二条路线还有个坑:指标之间必须差异够大。只用周期差很小的简单均线堆叠,属于开发者的明显失误;当然,折腾这套实验本身的尝试值得肯定。外汇与贵金属杠杆高,这类形态 EA 仅作方法验证,实盘概率性失效常见。
别急着下结论
非线性处理价格的方法早就在指标和策略里跑过,现在重新拿出来用,大概率能让你看到和线性工具不一样的走势纹理。本文给的一整套 mq5 程序就是现成的验证入口:Base LogIndicator 里 InpCoefficient 权重之和不能等于零,MMMM 的 iPeriod 不能小于 2,EA Along Across 的 Percent 参数必须卡在 51–99 之间,这些边界条件直接决定了信号会不会崩。 把 ZIP 里的 11 个 mq5 拖进 MT5 的 Indicators 和 Experts 目录,先加载 nRSI 和 nIchimoku 看传统工具被概率化改写后的曲线偏移,再用 Script Pattern 把形态统计写进 Files 文件夹,跑一轮就知道哪些非线性信号在你的品种上有重复优势。外汇和贵金属杠杆高,非线性模型只是换了个视角,不代表胜率必然提升,参数没调稳前别上实盘。 讨论区里有人拿前向三次多项式系数 {4979,3264,1904,864,109,-396,-686,-796,-761,-616,-396,-136,129,364,534,604,539,304,-136,-816}/8855 说能消滞后,原作者也承认重绘和伴随的新问题没完。工具清单摆在这儿,先开终端逐项点一遍,比急着信哪种「终极平滑」更实在。