利用迪纳波利 (DiNapoli) 等级进行交易·综合运用
📘

利用迪纳波利 (DiNapoli) 等级进行交易·综合运用

第 3/3 篇

双均线加随机指标的开仓触发骨架

这段逻辑把 Stochastic 与双周期均线(蓝线短周期、红线多周期)作为方向过滤器,只有两者同向才允许进场。Stochastic 返回 1 表示动能偏上行、返回 2 偏下行;MA 函数同步回填 ma_blue_line 与 ma_red_line 的实际数值,供后续价格区间计算使用。 实际发单前还嵌套了 Fractals 与 Price_for_order:前者取最近分形高低点,后者根据方向参数(1 买 / 2 卖)算出 price_enter_min、price_enter_max 以及 tp/sl。买侧要求 price_ask 小于 enter_min 且大于 enter_max,卖侧则要求 price_bid 反向夹在区间内,属于“回踩确认”而非追价。 仓位控制上只用 PositionsTotal()==0 做裸锁,意味着同一符号不允许加仓或反向共存。外汇与贵金属杠杆高,这种单仓逻辑可能降低回撤但也会错过趋势延续,建议先在 MT5 策略测试器用 2023 年 XAUUSD 的 M15 跑一遍验证信号密度。

MQL5 / C++
class="type">class="kw">double price_tp=class="num">0; class=class="str">"cmt">// 止盈位
class="type">class="kw">double price_sl=class="num">0; class=class="str">"cmt">// 止损位
class="type">class="kw">double price_ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK); class=class="str">"cmt">// 买入价格请求
class="type">class="kw">double price_bid=SymbolInfoDouble(_Symbol,SYMBOL_BID); class=class="str">"cmt">// 卖出价格请求
class="type">class="kw">double ma_blue_line=class="num">0; class=class="str">"cmt">// 较低周期的蓝色均线值
class="type">class="kw">double ma_red_line=class="num">0; class=class="str">"cmt">// 多周期的红色均线值
Stochastic(answer_stochastic);
MA(answer_ma,ma_blue_line,ma_red_line,price_ask,price_bid);
if(answer_stochastic==class="num">1) class=class="str">"cmt">// 预计上行
  {
   if(answer_ma==class="num">1) class=class="str">"cmt">// 我们处于买入范围 
     {
     Fractals(price_high,price_low);
     Price_for_order(price_high,price_low,price_enter_min,price_enter_max,price_tp,price_sl,class="num">1,ma_blue_line,ma_red_line);
     if(price_ask<price_enter_min && price_ask>price_enter_max)
       {
        if(PositionsTotal()==class="num">0)
          {
           trade.Buy(order_volume,_Symbol,price_ask,price_sl,price_tp,"Buy");
          }
       }
     }
  }
if(answer_stochastic==class="num">2) class=class="str">"cmt">// 我们处于卖出区间
  {
   if(answer_ma==class="num">2) class=class="str">"cmt">// 预计下行
     {
     Fractals(price_high,price_low);
     Price_for_order(price_high,price_low,price_enter_min,price_enter_max,price_tp,price_sl,class="num">2,ma_blue_line,ma_red_line);
     if(price_bid>price_enter_min && price_bid<price_enter_max)
       if(PositionsTotal()==class="num">0)
         {
          trade.Sell(order_volume,_Symbol,price_bid,price_sl,price_tp,"Sell");
         }
     }
  }

◍ 持仓时如何触发移动止损模块

当当前交易品种没有挂单且存在已开持仓时,EA 才会进入持仓管理分支。这里用 PositionsTotal()!=0 做判断,意味着只要账户里该符号有至少 1 个市价单,就调用 Position_mod 去处理追踪止损与利润保护。 具体触发逻辑写在如下片段里:先确认无挂单,再确认有持仓,两个条件同时满足才执行修改。这样能避免在没有头寸时空跑修改函数,也算一种基础的风控过滤。外汇与贵金属杠杆高,追踪止损只能降低回撤概率,无法消除爆仓风险。

MQL5 / C++
   }
      }
   }
   if(PositionsTotal()!=class="num">0)
   {
      Position_mod(price_ask,price_bid,trailing_sl,trailing_profit,answer_stochastic);
   }
}

「H4 多品种回测暴露的入场稳定性问题」

Dinapoli_v1.01 在 H4 周期跑了 2017.01.01 至 2017.11.12 的历史,覆盖 EURUSD、GBPUSD、NZDUSD、USDCAD、USDCHF、USDJPY、AUDUSD 七大直盘以及 XAUUSD。除 USDCHF 外,其余货币对净值曲线都接近水平直线,根源在于策略把止损压得极近以控回撤,代价是信号门槛抬高、触发次数骤减。 信号质量与入场频率呈反向关系:USDCHF 的 stochastic_k=13、ma_blue_period=12,参数偏钝化,反而让价格上涨段更连贯;而 EURUSD 的 stochastic_k=8、ma_blue_period=7 更敏感,却几乎不开仓。实战中若想在多震荡行情里少亏,优化时应优先看长周期下入场次数更多的参数组,而不是盲目追低回撤。 黄金 XAUUSD 这组有点反差:order_volume=0.2、stochastic_down_level=10,回测盈利交易占比 83.3%,利润 461%,回撤不超 40%,利润约为回撤的 10 倍。但样本仅 18 笔,外汇与贵金属均为高杠杆高风险品种,这种倍数关系可能只是小样本幸运,不能直接外推到实盘。

离场过早与横盘消极是这套EA的硬伤

通道行情里这套系统表现还算平稳,但图例 12(NZDUSD H4)暴露了第一个毛病:平仓太早。价格往往后续还有一段趋势空间,单子却已经在前段被甩下车,吃掉的利润有限。 横盘才是真正的瓶颈。图例 13(EURUSD H4)显示,在无方向震荡里系统入场计算经常偏位,整体利润摊得很薄,多数时间处于消极等待状态。 回测数据把差异摆得很直白:USDJPY 跑 210 笔只有 21.4% 盈利,最大余额回撤 52.3%,盈利因子仅 1.35;而 XAUUSD 18 笔里 83.3% 盈利,预期收益 25.67 美元,恢复因子 9.88。同参数下品种分化极大。 外汇与贵金属均属高风险品种,上述回测为历史表现,不代表未来。想抬利润,较实在的做法是针对每个货币对单独重做参数优化,而不是一套设置通吃。

◍ EA 在横盘里的软肋与现成配置

迪纳波利等级策略的底层逻辑经得起推敲,但落到自动化执行上仍有明显短板:横盘阶段智能交易系统表现相当糟糕,价格也并非总能触达 COP 线,多数时候靠随机指标信号平仓反而更实用。 激进入场是这套 EA 的显性优势,图例里能直观看到它敢在分形突破后追单;但它严格按算法过滤,手工觉得该进的场它往往不动,回测结果却是小回撤换来了正收益。 随文给了 9 个文件:Dinapoli_v1.01.mq5 是主程序,另附 AUDUSD、EURUSD、GBPUSD、NZDUSD、USDCAD、USDCHF、USDJPY、XAUUSD 共 8 个 H4 周期的 .set 配置。外汇与贵金属杠杆高、滑点跳空频繁,直接挂实盘前务必用 MT5 策略测试器按对应品种回测。 有读者反馈同期结果对不上,作者回应称 MT5 历史数据可能没加载全,且 EA 用的都是标准指标无需外挂;社区里也有人加了 Delta 过滤参数(如设 1000 点门槛)来砍掉窄幅区间的无效信号,这类改法值得自己开 MT5 试。

常见问题

用快线穿慢线作方向过滤,随机指标从超卖超买区拐头才发信号,两者同日共振才开仓,能明显减少噪音单。
在EA里挂一个跟踪模块,每根新K线刷新止损到近N根极值外固定点差,参数调小则锁利早、调大则回撤深。
小布可同时扫描多个周期品种,把符合开仓骨架的触发点推到看板,你只需复核随机指标状态即可。
趋势强且波幅规则的品种命中率高,消息驱动型或跳空多的品种容易连续止损,选品种比调参数更关键。
把横盘识别阈值写进配置,区间振幅低于均值时暂停加仓并放宽离场缓冲,现成配置里已有对应开关可直用。