您应该了解的MQL5向导技巧(第六十五部分):使用FrAMA与强力指数的交易形态·综合运用
FrAMA斜率配强力指数背离的过滤逻辑
形态8把FrAMA的趋势运行强度与强力指数背离结合起来做信号确认。看涨一侧要求FrAMA以陡峭斜率上行,且强力指数未出现看跌背离,这才算趋势有效;看跌一侧反过来,FrAMA强势下行且强力指数无看涨背离。关键落点在于:价格要明显站在FrAMA上方才看多,明显下方才看空。 这种组合的价值是用成交量维度的强力指数去筛掉假突破。FrAMA负责认趋势强度,强力指数负责过滤,能在趋势行情里压低无效信号比例,也让持仓更偏向强势段,动量一弱就别进场。 代码里阈值写得很硬:多头判定要求 FRM(X()) - FRM(X()+1) >= 2.0 * FRM(X()+1),也就是FrAMA当期比上期多出一倍的上期值;空头则是 <= -2.0 倍。Close与FRC的升降方向还要同步,三者同时满足才返回 true。 实盘前建议把趋势阈值从固定倍数改成基于FrAMA斜率或价格变动百分比,并跨周期盯强力指数的隐性背离——若多周期持续背离就退。该形态前向测试未通过,但逻辑可直接拷进MT5改参数回测。
class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Check for Pattern class="num">8. | class=class="str">"cmt">//+------------------------------------------------------------------+ class="type">bool CSignalFRM_FRC::IsPattern_8(class="type">ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > Close(X() + class="num">1) && FRC(X()) > FRC(X() + class="num">1) && FRM(X()) - FRM(X() + class="num">1) >= class="num">2.0 * FRM(X() + class="num">1)) { class="kw">return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < Close(X() + class="num">1) && FRC(X()) < FRC(X() + class="num">1) && FRM(X()) - FRM(X() + class="num">1) <= -class="num">2.0 * FRM(X() + class="num">1)) { class="kw">return(true); } class="kw">return(false); }
「双周期FrAMA叠强力指数的共振写法」
把 FrAMA 和强力指数(Force Index)拉到两个周期上同时看方向,是这组形态里过滤噪音最狠的一招。具体说,主周期用 4 小时、大周期用日线:两个周期的 FrAMA 都向上且强力指数都在零轴上方,才认看涨;都向下且都在零轴下方,才认看跌。2023 年做训练优化、2024 年做前向测试,10 种形态里只有 2 种过了前向关,这一组排在第二位。 代码里把共振逻辑直接写死在 IsPattern_9 里,但注意它只比了主周期相邻两根 K 线的 Close、FRC、FRM 大小,并没有显式去读日线数据——实际多周期接入时你得把大周期句柄单独传进来补上。下方逐行拆一下现有片段在干什么。 //+------------------------------------------------------------------+ 与注释行:标记这是 Pattern 9 的检查函数入口 bool CSignalFRM_FRC::IsPattern_9(ENUM_POSITION_TYPE T):定义返回布尔值的成员函数,入参是持仓方向枚举 if(T == POSITION_TYPE_BUY && Close(X()) > Close(X()+1) && FRC(X()) > FRC(X()+1) && FRM(X()) > FRM(X()+1) && ...):买权条件下,当前收盘价、强力指数、FrAMA 均高于前一根,且重复写了两次同条件 return(true):满足上述全部则判为形态成立 else if(T == POSITION_TYPE_SELL && Close(X()) < Close(X()+1) && ...):卖权对称,当前值均低于前一根 return(true) / return(false):对称返回或默认不成立 这套写法在外汇和贵金属上属于高波动品种里的波段思路,杠杆风险极高,共振也只代表概率倾斜而非确定性。想更稳,可追一条“强力指数自身也处上升/下降趋势”的附加条件,FrAMA 周期先锁 14,后续按品种大规模测再放开自定义。 只用一年窗口训出来的参数,下一年前向能过本就是小概率;多数资产趋势能拖过一年,所以真要拿来跑实盘,至少跨三五个年度去优化才谈得上均衡。这组指标在前向里表现偏弱,底层逻辑是否适配短周期量价结构,值得你开 MT5 把日线句柄接进代码自己验一遍。
class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Check for Pattern class="num">9. | class=class="str">"cmt">//+------------------------------------------------------------------+ class="type">bool CSignalFRM_FRC::IsPattern_9(class="type">ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > Close(X() + class="num">1) && FRC(X()) > FRC(X() + class="num">1) && FRM(X()) > FRM(X() + class="num">1) && FRC(X()) > FRC(X() + class="num">1) && FRM(X()) > FRM(X() + class="num">1)) { class="kw">return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < Close(X() + class="num">1) && FRC(X()) < FRC(X() + class="num">1) && FRM(X()) < FRM(X() + class="num">1) && FRC(X()) < FRC(X() + class="num">1) && FRM(X()) < FRM(X() + class="num">1)) { class="kw">return(true); } class="kw">return(false); }
◍ FrAMA叠强力指数为何总发同频噪音
FrAMA靠分形维度自适应调平滑,属于低滞后趋势跟踪;强力指数=价格变动×成交量,骨架仍是价格变化。两者都被价格趋势主导,信号容易重叠成冗余,而不是互补。 金融序列预测要靠多样化输入去抓趋势、动量、波动率、成交量等不同维度。若FrAMA与强力指数同时喊涨,往往只是在放大噪音——比如两者同向时,模型可用信息量反而被压缩,跨市况泛化能力受限。 另一个坑是成交量代理:真实成交流量拿不到,MT5里只能用tick逐笔变动量顶替,强力指数可靠性直接打折。再加FrAMA自适应平滑偏稳,强力指数对价量反应偏快,高波动期两者常互掐出矛盾信号。 真要换搭档,选正交信息源更实在:布林带管支撑阻力、RSI管动量,这类组合给模型喂的是不同角度。两者本质都不是为预测未来价位设计的,只适合认当前趋势与量能状态,硬拿来预测本就勉强。
画得少,看得清
FrAMA 叠强力指数这一组合,盈利表现弱于前几篇里的部分方案,但别急着把它踢出候选池。关键约束只有一条:上实盘前,必须用目标券商的真实分笔数据跨多个年度回测,否则任何结论都站不住。 两个向导文件值得留着用——wz_65.mq5(7.82 KB)管组装,SignalWZ_65.mqh(20.1 KB)管信号逻辑,直接丢进 MT5 向导就能跑。外汇与贵金属杠杆高、滑点诡异,回测不覆盖极端行情就可能亏穿预期。 下一篇会碰机器学习能不能给这套组合提效。先把手里这份回测跑顺,再谈优化不迟。