您应当知道的 MQL5 向导技术(第 40 部分):抛物线止损和反转(PSAR)(基础篇)
📘

您应当知道的 MQL5 向导技术(第 40 部分):抛物线止损和反转(PSAR)(基础篇)

第 1/3 篇

「向导里直接生成 PSAR 交易系统」

MT5 的 MQL5 向导支持在新建 EA 时勾选「Parabolic SAR」信号模块,无需手写指标调用即可产出一个带止损反转逻辑的基础策略骨架。对于想快速验证 PSAR 拐点价值的交易者,这比从零写 OnTick 省掉至少一半样板代码。 PSAR 的核心参数是加速因子(af)和最大加速(maxaf),默认 0.02 与 0.2。点在价格外侧翻越即触发趋势反转判定,外汇与贵金属品种因杠杆高、跳空频繁,反转信号出现后实际滑点可能吃掉部分预期空间,属典型高风险场景。 用向导生成后,EA 默认在 SAR 由价上翻至价下时做多、反之做空。你可以在 MT5 策略测试器里用 2023.01–2024.12 的 XAUUSD 五分钟数据跑一遍,观察 af=0.02 时反转频率与最大回撤,再决定是否手动调参。

沿用向导格式啃透抛物线 SAR

本篇延续前几篇的实战路线:用 MQL5 向导快速搭智能系统,先把单个指标形态拆开测,再叠加混测。上两篇我们拿 IDE 向导自带的基础指标和振荡器练手,每种形态独立回测、再调多选参数,最后横向比对着看独立形态和优化组合谁更扛揍。 这一节先把抛物线 SAR 单独拎出来。它几乎每根新柱都重算一遍,因为公式里部分参数要随价格滚动修正,这个机制让它对趋势转折极其敏感——也正是我们把它塞进自定义信号类的理由。 全文会遍历该指标的 10 种独立形态,逐个跑测试,末尾再像前篇那样把形态集总混测。文末附的源码可直接进 MQL5 向导编译 EA;新读者若不会挂向导,官网有两篇新手操作帖可查。外汇与贵金属杠杆高,任何形态测试都只是概率参考,实盘前务必在 MT5 策略测试器自跑一遍。

◍ SAR 怎么跟着趋势跑

抛物线 SAR 本质上是一串数值缓冲,每个值都是当前趋势极值加减一个步长偏移量,直到撞上预设阈值。它用一种动态办法标出趋势方向,并给可能的逆转点提供参照,而不是靠固定均线滞后确认。 具体公式分多空两套。看涨时下一期 SAR = 当前 SAR + α×(EP − 当前 SAR),其中 EP 是趋势启动以来最高高点,α 是加速系数,默认从 0.02 起,每触新 EP 加 0.02,封顶 0.20。SAR 随趋势推进递增,一直贴着价格下方走。 看跌镜像处理:SAR = 当前 SAR − α×(当前 SAR − EP),EP 取趋势内最低低点,SAR 随时间递减压在价格上方。因为 α 会放大,SAR 递增量或递减量逐渐把点线朝价格本体压缩,折返或转向的概率就越来越近。 在 MT5 里不用手搓这套数学,内置 iSAR 指标和标准库 CSeries 类已经封装好。开 MT5 调出 SAR,把 AF 起始 0.02、最大 0.20 改成 0.01 / 0.10,能直接看出点线压缩节奏变慢,外汇与贵金属波动大,参数误用会频繁假突破,属高风险品种。

「SAR 跳空翻转的第一类穿插信号」

抛物线 SAR 的止损点若从价格上方直接跳到下方(多头反转视角),或从下方跳到上方(空头反转视角),就构成一种基础穿插形态。跳空幅度本身有信息量:牛势里看跌豁口取低位、熊势里看涨豁口取高位,这个缺口越宽,新方向启动的概率倾向越高。 但高波动行情会反复制造这类穿插,假信号密度明显上升。实测中若只靠形态 0 做进出,频繁止损几乎不可避免,所以更稳妥的做法是在波动率偏低的时段才采信它。 若你已用 SAR trailing 止损,穿插点不该直接平仓,而是把止损拉近 SAR;真正离场或反手留给别的确认信号。下面这段来自自定义信号类的判定函数,可直接拷进 MT5 看逻辑: 函数先按持仓方向分叉:买仓时要求上一根 SAR 在 High 之上、当前根 SAR 在 Low 之下;卖仓反之。两条件齐备才返回 true,否则 false。StartIndex() 指向当前形成中的柱,+1 是已闭合的前一根。 向导仅用形态 0 汇编 EA 跑测试,结果会暴露一个事实——孤立使用它,样本内也可能被高频波动洗掉不少手续费,验证时建议切到 M15 低波动货币对先跑。

MQL5 / C++
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Check for Pattern class="num">0.                                                        |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">bool CSignalSAR::IsPattern_0(class="type">ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Base(StartIndex() + class="num">1) > High(StartIndex() + class="num">1) && Base(StartIndex()) < Low(StartIndex()))
   {  class="kw">return(true);
   }
   else if(T == POSITION_TYPE_SELL && Base(StartIndex() + class="num">1) < Low(StartIndex() + class="num">1) && Base(StartIndex()) > High(StartIndex()))
   {  class="kw">return(true);
   }
   class="kw">return(class="kw">false);
}

SAR 压缩区的低波动折返逻辑

压缩区可以看作趋势折返形态的前置过滤:在 SAR 翻面之前,先要求上一波趋势的波动性被压扁。SAR 本身只示意当前多空倾向,若此前趋势对价格的牵引微不足道,便判定为压缩。 量化的办法不是另加参数堆砌,而是用压缩函数量度前段趋势幅度。若初始 SAR 与价格的间距,按步长折算后的分数,大于 SAR 相对前趋势的平均变化,就视为压缩成立;触发后沿用趋势折返条件开仓。 EURJPY 2023 年日线回测中,形态输入取 2,以步长输入作分数限制整体趋势幅度,故信号稀疏、不会频繁下单。外汇与贵金属属高风险品种,该结果仅代表历史样本,实盘概率可能偏移。 下方函数即压缩判定核心:买入分支要求 SAR 在压缩段持续高于高点,卖出分支反之;循环受 __COMPRESSION_LIMIT 约束,输出平均单根折返距离。

MQL5 / C++
class="type">bool                Compression(class="type">ENUM_POSITION_TYPE T, class="type">class="kw">double &Out)
  {                 Out = class="num">0.0;
                  class="type">int _i = StartIndex() + class="num">1, _c = class="num">0;
                  class="type">class="kw">double _last = Base(StartIndex() + class="num">1);
                  class="type">class="kw">double _first = class="num">0.0;
                  if
                  (
                   T == POSITION_TYPE_BUY &&
                   Base(StartIndex()) < Low(StartIndex()) &&
                   Base(_i) < Close(StartIndex()) &&
                   Base(_i) > High(_i)
                  )
                  {  class="kw">while(Base(_i) > High(_i) && _c < __COMPRESSION_LIMIT)
                     {  _first = Base(_i);
                        _i++;
                        _c++;
                     }
                     if(_c > class="num">0)
                     {  Out = fabs(_first - _last)/_c;
                        class="kw">return(true);
                     }
                  }
                  else if
                  (
                   T == POSITION_TYPE_SELL &&
                   Base(StartIndex()) > High(StartIndex()) &&
                   Base(_i) > Close(StartIndex()) &&
                   Base(_i) < Low(_i)
                  )
                  {  class="kw">while(Base(_i) < Low(_i) && _c < __COMPRESSION_LIMIT)
                     {  _first = Base(_i);

常见问题

可以,用内置向导逐步选指标和信号就能生成基础PSAR系统,生成后打开源码看结构就行。
SAR点沿趋势方向按加速因子递进,价格反向突破当前SAR点时才翻转到另一侧,趋势延续时点越靠越近。
小布可实时标注SAR跳空翻转和压缩区折返,打开对应品种页就能直接看AI提示,不用自己盯盘。
这是第一类穿插信号,往往意味着原趋势中断、反转概率上升,可结合收盘价确认再动手。
这是低波动压缩区,价格易折返,建议降低仓位或等区间突破后再按SAR方向跟,外汇贵金属风险高。