学习如何基于 Stochastic 设计交易系统·综合运用
📈

学习如何基于 Stochastic 设计交易系统·综合运用

(3/3)· 把前两篇的指标认知与策略雏形,收敛成可跑在 MT5 上的完整交易系统

偏理论进阶 第 3/3 篇

很多交易者把 Stochastic 当成单纯的超买超卖箭头,却没意识到它真正值钱的地方在于能和代码逻辑咬合。前两篇拆了定义和策略,这一篇我们直接收口到系统级实现。

◍ 用随机指标抓震荡市的 Buy 触发点

在 MT5 的震荡行情里,用慢速随机指标(Stochastic)的 K、D 线交叉做信号,是一种低延迟的裸逻辑。下面这段 OnTick 把参数设成 (5,3,3, SMA, LOWHIGH),也就是 %K 周期 5、慢速 3、%D 周期 3,对应当前品种与周期。 核心判定只有两条:当 K 和 D 最新值都低于 20,且本根 K 上穿 D、前一根 K 在下(K1<D1),就给 signal 赋 "BUY";当 K、D 都高于 80 且本根 K 下穿 D、前一根 K 在上,就赋 "Take Profit"。 把代码直接贴进 EA 的 OnTick,开 EURUSD 的 M15 回看最近三个月,能观察到信号多出现在 20 下方金叉,但外汇与贵金属杠杆高,信号只是概率倾向,实盘前务必用策略测试器跑一遍。 别把 20/80 当铁律 不同品种波动率不一样,黄金的 20 阈值常比欧美更常被刺穿,建议复制代码后把 20 改成 25 对比信号频次。

MQL5 / C++
class="type">void OnTick()
  {
   class="type">class="kw">string signal="";
   
   class="type">class="kw">double Karray[];
   class="type">class="kw">double Darray[];
   
   ArraySetAsSeries(Karray, true);
   ArraySetAsSeries(Darray, true);
   
   class="type">int StochDef = iStochastic(_Symbol,_Period,class="num">5,class="num">3,class="num">3,MODE_SMA,STO_LOWHIGH);
   
   CopyBuffer(StochDef,class="num">0,class="num">0,class="num">3,Karray);
   CopyBuffer(StochDef,class="num">1,class="num">0,class="num">3,Darray);
   
   class="type">class="kw">double KValue0 = Karray[class="num">0];
   class="type">class="kw">double DValue0 = Darray[class="num">0];
   
   class="type">class="kw">double KValue1 = Karray[class="num">1];
   class="type">class="kw">double DValue1 = Darray[class="num">1];
   
   if (KValue0<class="num">20&&DValue0<class="num">20)
      if ((KValue0>DValue0) && (KValue1<DValue1))
      {
         signal = "BUY";
      }        
      
   Comment("SSS - Sideways - Buy Strategy - Signal is ",signal);

      if (KValue0>class="num">80&&DValue0>class="num">80)
      if ((KValue0<DValue0) && (KValue1>DValue1))
      {
         signal = "Take Profit";
      }
      
   Comment("SSS - Sideways - Buy Strategy - Signal is ",signal);     
      
  }

「震荡市里用慢速随机做空的反转触发」

在横盘行情里,慢速随机指标(Stochastic)双线同时站上 80 或跌破 20,往往暗示价格短期过度延伸。这段代码用 5/3/3 的 SMA 慢随机,专门捕捉横盘偏空结构中的入场与离场节点。 先建 K、D 两条数组并把索引设为时间序列,这样 Karray[0] 就是当前柱、Karray[1] 是前一柱。iStochastic 参数里 5 是 %K 周期、3 是慢速平滑、3 是 %D 周期,STO_LOWHIGH 表示取最低/最高价计算。 信号逻辑很直接:当 K、D 都 >80 且本柱 K 下穿 D、前柱 K 上穿 D,倾向判为 SELL;当 K、D 都 <20 且本柱 K 上穿 D、前柱 K 下穿 D,标 TAKE PROFIT。外汇与贵金属波动剧烈,这种反转信号只是概率倾向,实盘须配合止损。 注意原文里 SELL 与 TAKE PROFIT 的判断被重复写了两次,MT5 里直接编译会冗余执行 Comment,复制时建议删掉重复块只留一份。

MQL5 / C++
  class="type">class="kw">string signal="";

  class="type">class="kw">double Karray[];
  class="type">class="kw">double Darray[];

  ArraySetAsSeries(Karray, true);
  ArraySetAsSeries(Darray, true);

  class="type">int StochDef = iStochastic(_Symbol,_Period,class="num">5,class="num">3,class="num">3,MODE_SMA,STO_LOWHIGH);

  CopyBuffer(StochDef,class="num">0,class="num">0,class="num">3,Karray);
  CopyBuffer(StochDef,class="num">1,class="num">0,class="num">3,Darray);

  class="type">class="kw">double KValue0 = Karray[class="num">0];
  class="type">class="kw">double DValue0 = Darray[class="num">0];

  class="type">class="kw">double KValue1 = Karray[class="num">1];
  class="type">class="kw">double DValue1 = Darray[class="num">1];

    if (KValue0>class="num">80&&DValue0>class="num">80)
      if ((KValue0<DValue0) && (KValue1>DValue1))
      {
        signal = "SELL";
      }

  Comment("SSS - Sideways - Sell Strategy - Signal is ",signal);

  if (KValue0<class="num">20&&DValue0<class="num">20)
      if ((KValue0>DValue0) && (KValue1<DValue1))
      {
        signal = "TAKE PROFIT";
      }
  Comment("SSS - Sideways - Sell Strategy - Signal is ",signal);
}
class=class="str">"cmt">//+------------------------------------------------------------------+
    if (KValue0>class="num">80&&DValue0>class="num">80)
      if ((KValue0<DValue0) && (KValue1>DValue1))
      {
        signal = "SELL";
      }
  Comment("SSS - Sideways - Sell Strategy - Signal is ",signal);
  if (KValue0<class="num">20&&DValue0<class="num">20)
      if ((KValue0>DValue0) && (KValue1<DValue1))
      {
        signal = "TAKE PROFIT";
      }
  Comment("SSS - Sideways - Sell Strategy - Signal is ",signal);

把五个脚本拖进 MT5 跑一遍

前面几节拆了 Stochastic 振荡器的算法和四类策略蓝图,落到执行层就是五个现成脚本:趋势线数值、上升势、下降势、横盘买、横盘卖,文件体积都在 1.3–1.5 KB 区间,直接丢进 MT5 的 EA 目录就能加载。 打开对应品种图表挂上脚本,先把 K 周期、D 周期和超买超卖阈值按原文默认跑一轮,观察信号在 EURUSD 小时图上的触发密度;外汇和贵金属杠杆高,信号只是概率倾向,实盘前务必用策略测试器过历史。 想验证指标计算没偏差,可以对照脚本里 iStochastic 的入参和前两节手算的 %K、%D 公式,数值对不上就说明周期或价格字段配错了。 这类开源脚本不担保收益,但能让你半小时内看清 Stochastic 在单边和震荡市里的真实反应,比看描述直观得多。

把回测巡检交给小布
这些多周期 Stochastic 信号的诊断,小布盯盘的 AIGC 已内置,打开对应品种页即可看到,你只管判断当下盘口概率。

常见问题

通过 iStochastic 获取句柄后,用 CopyBuffer 分别读主线和信号线缓冲区,注意填充第 1、2 号索引,周期参数要和图表一致。
贵金属与外汇波动结构不同,外汇高杠杆下随机振荡器的假信号概率可能偏高,建议按品种单独调 K、D 周期。
往往是柱线切换时的信号重算,未加新柱判断会导致历史重绘,实盘倾向产生重复开仓。
目前小布提供信号诊断和策略说明,完整 EA 编写仍需在 MT5 编辑器里落地,但可对照它的诊断结论反向校验你的系统逻辑。
增加了仓位与退出条件的耦合,不再孤立看交叉,而是把前篇策略按蓝图串成订单生命周期管理。