用信号指标搭交易系统:从 ASCtrend 到 MQL5 向导信号模块
信号指标是交易者的老朋友:它们在图表上用箭头/标签标出“这里该买、那里该卖”。但标签只是提示,真正下单要靠 EA。本文给出从信号指标到可运行交易系统的完整链路:先用最朴素的方式把指标信号接进 OnTick,再升级成 MQL5 向导的标准信号模块,让同一套逻辑能被不同 EA 复用、还能在策略测试器里优化参数。
一、信号指标与信号趋势指标
代码库里信号指标很多,分两类。纯信号指标(BykovTrend、ASCtrend、BrainTrend1Sig、SilverTrend_Signal、Stalin、WPRSI signal、StepMA_NRTR、Sidus 等)只在出现信号时打标签。信号趋势指标(FiboCandles、Parabolic SAR、X2MA、SuperTrend、Heiken Ashi Smoothed、NonLagDot 等)自带趋势着色,EA 读取“当前柱颜色/方向”作为信号。两类读取代码略有不同,但 EA 主框架几乎一样——这正是“通用化”的价值。
二、交易系统的基础数据:输入参数清单
把信号指标变成 EA,要定义两组输入。信号指标侧:指标句柄、取信号的柱指数、买卖开关。交易侧:每笔交易的入金份额(MM,负值常表示按公式计算手数)、止损点数、止盈点数(为 0 时不挂止盈)、最大允许滑点、是否允许开买/卖仓、是否允许按信号平买/卖仓。把这些做成 input 参数,使用者不用改代码就能调策略。
- MM(入金份额):负值常代表按公式计算下单量,而非固定手数
- StopLoss_ / TakeProfit_:止损/止盈点数,0 表示不下对应挂单
- Deviation_:最大价格滑点,保护成交价不过分离谱
- SignalBar / BuyPosOpen / SellPosOpen / BuyPosClose / SellPosClose:信号柱与四类开关
三、EA 主体:OnTick 里检测信号
EA 的核心是 OnTick:先检查指标句柄算出的柱数够不够(BarsCalculated < min_rates_total 就 return),再判断是否到了“新 K 线”(用 CIsNewBar 或 SignalBar 标志)。到了信号柱,就读指标缓冲区当前值,置位 BUY_Open / SELL_Open 等静态标志,随后在交易函数里按标志和开关下单。静态变量保证“一根 K 线只交易一次”,避免同根 K 线重复开仓。
// EA 的 OnTick 核心骨架(节选)
void OnTick()
{
if(BarsCalculated(InpInd_Handle) < min_rates_total) return; // 数据不足
static bool BUY_Open=false, SELL_Open=false;
static CIsNewBar NB;
if(!SignalBar || NB.IsNewBar(Symbol(), InpInd_Timeframe) || Recount)
{
BUY_Open=false; SELL_Open=false; // 信号清零
double val[2];
CopyBuffer(InpInd_Handle, 0, 0, 2, val); // 读指标缓冲
if(val[0]>0) BUY_Open=true; // 出现买入信号
if(val[1]<0) SELL_Open=true; // 出现卖出信号
}
// 随后按 BUY_Open/SELL_Open 与开关执行下单
}
四、把交易逻辑打包成通用函数库
原文强调:与其在每个 EA 里复制粘贴下单代码,不如把通用交易函数(开仓、平仓、挂止损止盈、检查占用)打包成一个独立库,让应用层尽量薄。这样换信号指标时只改“信号读取”那几行,下单逻辑一字不改。这是把“信号”和“执行”解耦的标准做法,也利于在测试器里稳定回测。
五、进阶:封装成 MQL5 向导信号模块
想让信号被多个 EA 复用、还能在向导里可视化配置?把它封装成 CExpertSignal 派生类。模块文件头部要写一段“向导描述”:标题(向导里显示的名字)、类型(固定 SignalAdvanced)、名称、短名(生成 EA 时参数前缀)、类、页,以及若干“参数=函数名,类型,默认值,描述”行。写好这段后,MQL5 向导就能把它当标准信号模块选入、自动生成带参数的 EA。
// 向导描述(节选,基于 BykovTrend) //+------------------------------------------------------------------ //| 标题=两条移动平均线交叉信号 //| 类型=SignalAdvanced //| 名称=My_MA_Cross //| 短名=MaCross //| 类=MA_Cross //| 参数=RISK,int,3,RISK //| 参数=SSP,int,9,SSP //+------------------------------------------------------------------
六、小结
从信号指标到交易系统有两条路:朴素路是把指标句柄接进 OnTick,按新 K 线读缓冲、按开关下单,适合快速验证想法;进阶路是把信号封装成 CExpertSignal 向导模块,参数化、可复用、可优化,适合长期维护。无论哪条,都把“信号读取”和“交易执行”解耦,并务必避开未收盘 K 线的重绘陷阱。把本文当模板,你对接下一个信号指标会快很多。