首页 / 交易学院 / 小布知识库 / 20 种经典交易信号函数库
20 种经典交易信号函数库
📡

20 种经典交易信号函数库

把 20 种技术信号写成可复用函数,任意组合过滤

交易策略 难度 · 进阶 2026-07-15 13 分钟阅读
#信号#MA交叉#通道#动量#超买超卖

本文把 20 种主流技术信号封装成 TradeSignal_XX() 函数,统一返回 1(买)/-1(卖)/0(无),塞进 SignalTrade.mqh 供任意程序调用。

一、把信号写成可复用函数

信号只是提示可能点位,不是必须执行;用多个信号组合过滤,比单信号裸跑稳健得多。

二、统一函数原型

三、信号分类

✦ 组合优于单信号
信号只是提示可能点位,不是必须执行;用多个信号组合过滤,比单信号裸跑稳健得多。

四、举几个典型

五、做成指标或 EA

指标:OnInit 建全部句柄,OnCalculate 调 20 个函数画箭头;EA:扩展版引入可变参数,用 IndicatorRelease 旧副本、重建新副本省内存。

⚠ 别用当前柱
所有判断都用已收盘的第 1、2 根而非当前柱——当前柱在变,用它会让信号在没走完的 K 上反复翻转。

六、把多个信号组合成过滤器

单信号裸跑噪声大,实战常用「与」过滤:例如快 MA 上穿慢 MA 且 RSI 从超卖区回升才给买。组合时给每个信号一个权重或要求 N 个中有 M 个同向,能显著压低假信号,代价是信号变少、可能错过早期启动。

⚠ 别过度堆叠
信号越多越「严格」,但也可能把真实机会全滤掉。先用历史数据看每个信号单独胜率,再决定组合阈值,而不是凭感觉堆条件。

七、统一函数原型设计

把每个信号写成函数,统一原型如 int SignalX(const double &price[], int shift, int period),返回固定语义:1 看多、负1 看空、0 无信号。统一原型后,信号能放进数组被循环调用,也能自由组合。

统一返回值语义比「返回价格」或「返回布尔」灵活:多个信号可加权求和、投票、取多数,策略层不必关心每个信号内部怎么算。这是信号库可扩展的根本。 进阶还能返回「强度」而非仅方向(如用 RSI 偏离度大小映射成浮点信号),策略层按强度加权,比简单的多空投票更细腻。

八、信号分类:趋势/震荡/突破/成交量

二十种经典信号可归四类:趋势类(均线、MACD)、震荡类(RSI、Stochastic)、突破类(通道、布林带)、成交量类(OBV、成交量突变)。分类后你清楚「当前市场该用哪类」,也方便按市况切换。

✦ 语义统一最值钱
返回 1/-1/0 的统一语义,让信号能数组化、可投票、可加权。比各自返回五花八门的值好维护十倍。

九、给信号函数写单元测试

信号函数最容易「看起来对、实测错」。拿一段已知历史(如明显顶部)喂进去,确认返回符合预期;再覆盖边界(数据不足、首根)。用历史片段做最小验证,比上线后亏了才发现强。

把这些用例存成注释或脚本,每次改信号逻辑都重跑一遍,能防止「修一个 bug 引入三个」。信号库越积越多,回归测试越重要。 当信号库膨胀到几十个,建议维护一个统一的「信号注册表」:新信号实现后登记名字、类别、默认参数,策略层从表加载,避免到处硬编码调用。

十、小结

✦ 小结
信号库的价值在「统一」:固定原型(返回 1/-1/0)、按趋势/震荡/突破/成交量分类、可数组化投票组合。每个信号配历史片段做单元测试,库越大会越稳,不会改一处崩一片。

常见问题

不用。把它们当信号积木库,按你的策略挑 2–3 个互补的(如趋势+动量)组合,比堆 20 个更有效。
解耦发现机会和执行交易,同一套信号既能在指标里画图,也能在 EA 里下单,复用性最高。
当前柱还没收盘,数值会跳动导致信号闪烁;用已收盘的前两根做判断,信号才稳。
最多 512 个;引用时把对应 .mq5 放到 Indicators 文件夹并编译好,否则句柄创建失败。
用与/或逻辑叠加:例如趋势信号=买 且 动量信号=买 才出手,相当于用一层信号过滤另一层噪声。