FrAMA与强力指数组合形态:从背离到交叉的基础识别逻辑(基础篇)
📉

FrAMA与强力指数组合形态:从背离到交叉的基础识别逻辑(基础篇)

(1/3)·用分形自适应均线与成交量动量捕捉EURUSD 4小时周期的10种经典转折信号

实战向进阶 第 1/3 篇
不少交易者把FrAMA当普通均线用,忽略它依据分形几何自适应的平滑周期,导致在震荡市被反复洗损。更常见的是只盯价格突破,不用强力指数验证成交量支撑,进场后趋势立刻熄火。外汇与贵金属杠杆高,这类误判会迅速放大亏损。

◍ FrAMA 配强力指数,向导里能直接拼信号

MQL5 向导里做形态类 EA,不一定要手写整套逻辑。把 FrAMA(分形自适应移动平均)和 Force Index(强力指数)两个标准指标拖进 wizard,就能在很少代码量下生成一套趋势+动能的双过滤骨架。 FrAMA 的特点是周期随价格波动率自适应,震荡市里斜率变平、信号延迟小;强力指数用「现价-前价」乘成交量,专门量度每根 K 线背后的推力。两者叠加,倾向过滤掉那种价格刚蹭一下均线就假突破的毛刺。 在 MT5 里新建 EA 选「Expert Advisor (generate)」,左侧指标树勾选 FrAMA 与 Force Index,向导会写出包含信号枚举的框架。下面这段是向导产出的信号判定函数雏形,可在此基础上改阈值。 外汇与贵金属杠杆高,这类形态只是概率优势,实盘前务必在策略测试器用至少 3 个月 Tick 数据回测。

MQL5 / C++
class="type">int SignalFrAMAForce(class="type">int &signal_info[])
  {
   class=class="str">"cmt">//--- 取 FrAMA 当前值与前值
   class="type">class="kw">double fr = iFRAMA(NULL,class="num">0,class="num">0,class="num">0);
   class="type">class="kw">double fr_prev = iFRAMA(NULL,class="num">0,class="num">0,class="num">1);
   class=class="str">"cmt">//--- 取强力指数柱子
   class="type">class="kw">double fi = iForce(NULL,class="num">0,class="num">13,VOLUME_TICK,class="num">0);
   class=class="str">"cmt">//--- 多头:FrAMA 上行且强力指数为正
   if(fr>fr_prev && fi>class="num">0) class="kw">return(class="num">1);
   class=class="str">"cmt">//--- 空头:FrAMA 下行且强力指数为负
   if(fr<fr_prev && fi<class="num">0) class="kw">return(-class="num">1);
   class="kw">return(class="num">0);
  }

FrAMA叠强力指数的形态实验设计

这一节把镜头从德马克加包络线挪开,转到 FrAMA 与强力指数(Force Index)的 combo。FrAMA 本质是自适应均线,负责把趋势方向从噪声里捞出来;强力指数用成交量给趋势称重,回答“这波动量是真金还是虚火”。两者叠一起,能过滤掉那些价动但量不跟的假突破。 我们挑 EURUSD 的 4 小时图做样本:先用 2023 全年数据跑参数训练,再把同一货币对 2024 年的数据拿来前向测试,看过拟合没有。外汇和贵金属这类高杠杆品种,样本外掉链子是常态,跨年验证这一步不能省。 全文会拆 10 种由这两个指标交叉生成的经典形态,每一种都给得出可复现的进出逻辑,你开 MT5 把周期切到 H4 就能照着对账。

「FrAMA与强力指数背离的捕捉逻辑」

第一种可量化的反转形态,来自FrAMA自适应均线同强力指数(价格变动×成交量)之间的背离。当FrAMA指向下降趋势、价格跌穿均线,而强力指数从低位抬出更高的低点且仍位于零轴下方,卖出压力可能正在退潮,这是看涨背离的核心判定。 看跌一侧刚好反过来:FrAMA确认上升、价格创新高,强力指数却打出更低的高点,意味着买盘动能倾向衰竭。我们把这类结构落进MT5,就是价格跌破/突破FrAMA,且强力指数前一柱与当前柱满足高低点反向关系,但仍未翻越零轴。 FrAMA靠分形几何动态调平滑周期,能在滤噪的同时咬住价格变化;强力指数用「价变×量」给波动称重。两者一搭,自适应趋势跟踪叠加成交量加权动量,本质是在抓波段拐点。 需要泼冷水的是:在指定的2024年一整年周期前向测试中,该形态表现不佳,外汇与贵金属品种更受点差与滑点挤压,实盘前务必自己跑一遍验证。 下面这段是看涨/看跌双向判定的MQL5实现,X()为当前偏移柱: // 函数入口:传入期望持仓方向T // 若T为买入:当根收盘<FrAMA且前根收盘>FrAMA(价格下破),且强力指数当前<0且大于前根(更低低位回升)→ 返回true // 若T为卖出:当根收盘>FrAMA且前根收盘<FrAMA(价格上破),且强力指数当前>0且小于前根(更高高位回落)→ 返回true // 其余情况一律返回false,不触发形态

MQL5 / C++
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Check for Pattern class="num">0.                                                              |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">bool CSignalFRM_FRC::IsPattern_0(class="type">ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Close(X()) < FRM(X()) && Close(X() + class="num">1) > FRM(X() + class="num">1) && class="num">0.0 > FRC(X()) && FRC(X()) > FRC(X() + class="num">1))
   {  class="kw">return(true);
   }
   else if(T == POSITION_TYPE_SELL && Close(X()) > FRM(X()) && Close(X() + class="num">1) < FRM(X() + class="num">1) && class="num">0.0 < FRC(X()) && FRC(X()) < FRC(X() + class="num">1))
   {  class="kw">return(true);
   }
   class="kw">return(false);
}

◍ FrAMA交叉叠强力指数过滤假突破

形态1的核心是把趋势转向和量能确认拆成两层:FrAMA快慢线(或价格与FrAMA)交叉负责抓转向,强力指数(Force Index)穿越零轴负责确认这次转向有成交量托底。看涨时价格上破FrAMA且强力指数同步上穿零轴;看跌则反向对称。这样在震荡市里能砍掉一批无量的毛刺信号。 实际写法上,交叉源可以选快速FrAMA上穿慢速FrAMA,不一定非要用价格碰线。原文示例给了14与50两个周期做快慢搭配,但当前未优化的版本里FrAMA和强力指数都直接用了14周期,属于偷懒基线。 回测现实不友好:该组合在训练期与测试期都跑过,前向测试没过。也就是说,在未针对品种调参前,它更像一个待打磨的过滤器,而不是能直接上线的信号。外汇与贵金属波动大、滑点高,这类未优化形态实盘误报概率偏高,开MT5验证前请先假设它会洗你几次。 下面这段MQL5是信号判定的裸逻辑,X()是当前柱索引,FRM是FrAMA值,FRC是强力指数值: //+------------------------------------------------------------------+

//Check for Pattern 1.

//+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_1(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > FRM(X()) && Close(X() + 1) < FRM(X() + 1) && 0.0 > FRC(X() + 1) && FRC(X()) > 0.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < FRM(X()) && Close(X() + 1) > FRM(X() + 1) && 0.0 < FRC(X() + 1) && FRC(X()) < 0.0) { return(true); } return(false); } 逐行拆解:函数接收持仓方向T;买权条件要求今收高于FrAMA、昨收低于FrAMA(价格上穿),且昨强力指数为负、今强力指数转正(量能翻多),满足才返true。卖权对称:价格下穿FrAMA,强力指数由正转负。都不符则返回false。注意它只看两根K线,未含止损与过滤层数。

MQL5 / C++
<span class="comment">class=class="str">"cmt">//+------------------------------------------------------------------+</span>
<span class="comment">class=class="str">"cmt">//| Check for Pattern class="num">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</span>
<span class="comment">class=class="str">"cmt">//+------------------------------------------------------------------+</span>
<span class="keyword">class="type">bool</span> CSignalFRM_FRC::IsPattern_1(<span class="macro">class="type">ENUM_POSITION_TYPE</span> T)
{&nbsp;&nbsp;<span class="keyword">if</span>(T == <span class="macro">POSITION_TYPE_BUY</span> &amp;&amp; Close(X()) &gt; FRM(X()) &amp;&amp; Close(X() + <span class="number">class="num">1</span>) &lt;&nbsp;&nbsp;FRM(X() + <span class="number">class="num">1</span>) &amp;&amp; <span class="number">class="num">0.0</span> &gt; FRC(X() + <span class="number">class="num">1</span>) &amp;&amp; FRC(X()) &gt; <span class="number">class="num">0.0</span>)
&nbsp;&nbsp; {&nbsp;&nbsp;<span class="keyword">class="kw">return</span>(<span class="macro">true</span>);
&nbsp;&nbsp; }
&nbsp;&nbsp; <span class="keyword">else</span> <span class="keyword">if</span>(T == <span class="macro">POSITION_TYPE_SELL</span> &amp;&amp; Close(X()) &lt; FRM(X()) &amp;&amp; Close(X() + <span class="number">class="num">1</span>) &gt;&nbsp;&nbsp;FRM(X() + <span class="number">class="num">1</span>) &amp;&amp; <span class="number">class="num">0.0</span> &lt; FRC(X() + <span class="number">class="num">1</span>) &amp;&amp; FRC(X()) &lt; <span class="number">class="num">0.0</span>)
&nbsp;&nbsp; {&nbsp;&nbsp;<span class="keyword">class="kw">return</span>(<span class="macro">true</span>);
&nbsp;&nbsp; }
&nbsp;&nbsp; <span class="keyword">class="kw">return</span>(<span class="macro">false</span>);
}

FrAMA叠强力指数的回调入场逻辑

这套形态二把FrAMA当趋势过滤器:价格站在FrAMA上方才看多,下方才看空;再用强力指数(FRC)的极值回摆找进场点。具体说,多头侧要求FRC刚从零轴下方往上勾、空头侧要求FRC从零轴上方往下压,属于在趋势里吃回调的均值回归思路。 代码里没写死超买超卖绝对值,因为不同品种价格单位差太大,固定阈值会失真。它直接用FRC与上一根的大小比较来抓「零轴附近的转向」:买条件是收价>FRM且FRC(X)在0以下却比前一根高,卖条件反之。 实测前向测试没过,说明裸信号直接上实盘外汇或贵金属大概率亏。想提高命中,得叠加关键支撑阻力或K线形态二次确认,并盯超买超卖区是否放量。1小时周期能跑,但必须和更高周期方向一致;强趋势里别逆着做,除非FRC出现极端背离。外汇贵金属杠杆高,这类信号失效时回撤会很快。

MQL5 / C++
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Check for Pattern class="num">2.                                              |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">bool CSignalFRM_FRC::IsPattern_2(class="type">ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Close(X()) > FRM(X())  && class="num">0.0 >= FRC(X()) && FRC(X()) > FRC(X() + class="num">1))
   {  class="kw">return(true);
   }
   else if(T == POSITION_TYPE_SELL && Close(X()) < FRM(X())  && class="num">0.0 <= FRC(X()) && FRC(X()) < FRC(X() + class="num">1))
   {  class="kw">return(true);
   }
   class="kw">return(false);
}
让小布替你跑这套形态扫描
小布盯盘已内置FrAMA与强力指数的背离及交叉诊断,打开EURUSD 4小时品种页即可看到实时形态标记,你只需在信号出现时做决策。

常见问题

FrAMA按分形几何自适应调整平滑周期,噪音多时拉长周期过滤波动,趋势明确时缩短周期提高灵敏,普通EMA周期固定。
它以价格变动乘成交量衡量买卖压力,用来确认FrAMA给出的趋势信号是否有真实成交量支撑,减少假突破。
可以,小布盯盘在对应品种页内置了该形态识别,当FrAMA与强力指数出现背离或交叉确认时会标注,省去手动盯盘。
单年度前向测试受特定行情影响,可能只是该年趋势结构不匹配,倾向结合多周期与多货币对验证而非直接弃用。
价格突破受单根K线影响大,双线交叉过滤了部分噪音,实战中可用14与50周期组合作为慢速确认。