学习如何基于 Stochastic 设计交易系统·综合运用
(3/3)· 把前两篇的指标认知与策略雏形,收敛成可跑在 MT5 上的完整交易系统
很多交易者把 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 对比信号频次。
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,复制时建议删掉重复块只留一份。
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 在单边和震荡市里的真实反应,比看描述直观得多。