设想你是一家餐厅的大厨。每天后厨的食材都在变化——鱼新不新鲜、火候大小、客人的口味偏好。你要做的,就是根据眼前的情况,快速决定:这锅菜要不要加盐?要不要改小火?什么时候出锅? 在量化交易里,这个“调味决策”就是交易信号生成。一个信号就是一个明确的指令:买入、卖出、或者继续观望。只不过,大厨靠舌头和鼻子,量化交易员靠历史价格、成交量、新闻情绪等数据;大厨凭经验积累,量化系统靠算法和模型。 传统做法像老厨师的经验口诀:看颜色差不多了就出锅(均线交叉)、尝一口觉得咸了就少放盐(RSI 超买超卖)。而 AI 时代的做法更像一位“超级大厨”:他把过去十年所有菜的成功与失败都学了一遍,面对新食材时,综合所有线索给出一个概率判断——“这道菜有 78% 的把握会成功”。 当然,再厉害的大厨也要试菜。量化交易里,试菜叫“回测”。菜谱写得再好,灶台火力跟不上也会翻车,这就是实盘中的延迟和滑点。这篇文章,我们要从零到一,把整套“交易信号生成”的流程讲清楚。
学懂交易信号生成,是进入 AI+金融领域的关键一步:它连接了数据分析、模型构建、风险评估与实盘工程,是量化交易系统的“发动机”。
可视化演示
从行情数据到交易信号的完整流程:指标计算、信号触发与回测验证。切换模式可查看信号生成与回测对比。
本节配有交互动效(进入视口后自动加载,约 3KB)。
信号生成流程 行情数据经指标计算生成信号 阈值触发买卖点 S = sign(MA − PRICE) 信号强度反映置信度
信号生成基础
大厨每天开工前先想清楚三件事:今天有什么食材?客人想吃清淡还是重口?灶台火力能撑多久?交易信号生成也一样,回答的是三个问题:现在市场处于什么状态?我的目标是什么?我敢承担多大风险?这三个问题的答案汇总,就是一个“调味指令”——买、卖、还是观望。
在量化交易里,信号并不是玄学,它必须被严格定义。一个信号通常是一个函数:输入历史价格、成交量、情绪指标等数据,输出一个可执行的决策。信号分两类:一类是趋势信号,告诉大厨“火上来了,快炒”;一类是均值回归信号,告诉大厨“盐放多了,加点水补救”。无论哪类,都需要有明确的评估标准:比如胜率、平均盈亏比、最大回撤,这些就像客人对菜的评价——回头客多不多、差评多不多。
最朴素的信号模型可以写成一个阈值判断:当市场动量超过某个“咸淡标准”时,就发出买入信号。
1. 动量计算:momentum_t 表示 t 时刻的动量,也就是当前价格与 k 天前价格之差,代表近期涨跌的“冲劲”
2. 阈值设定:θ 是决策阈值,类似大厨心里的咸淡标准,低于它不动手,高于它才行动
3. 信号函数:I(·) 是示性函数,括号里条件成立就输出 1(买入),不成立输出 0(观望)
信号生成不是拍脑袋,而是把大厨的“第六感”翻译成机器可执行的规则。有了清晰的信号定义,后面的一切——技术指标、机器学习、回测、实盘——才有了地基。没有这把“调味尺子”,做出来的菜时咸时淡,长期下来客人(资金)一定会流失。
传统技术信号
老厨师不用仪器,炒菜靠看颜色、闻香气、听油声。技术指标就是交易世界的“老经验”,它们公式简单、解释直观,至今仍在量化系统里占据重要位置。最经典的是均线交叉:大厨看到锅边开始冒烟,就知道火候到了;交易员看到短期均线向上穿过长期均线,就知道趋势可能要启动。
均线的本质是“平均成本”的平滑线。短均线像灵敏的温度计,市场一有风吹草动就变化;长均线像沉稳的老汤锅底,反映长期趋势。当短均线从下方穿过长均线(金叉),说明短期买家力量压过长期持有者,是买入信号;反过来(死叉)则是卖出信号。
1. 收盘价序列:P_t 是第 t 天的收盘价,像每天菜品出锅时的“最终形态”
2. 求和平均:把最近 n 天的收盘价全部加起来,再除以 n,得到这段时间的平均成本
3. 均线数值:MA_n(t) 就是 t 时刻的 n 日移动平均线,历史价格越滚越多,这条线就越顺滑
除了均线,动量指标 RSI 负责测“咸淡”:RSI 高于 70 说明短期涨太多,像菜放多了盐,容易回调;低于 30 说明跌过头,可以期待反弹。波动率信号则提醒大厨“今天客人少,少做几道菜”——市场波动大时降低仓位,波动小时加大仓位。量价配合更直接:放量上涨比缩量上涨更可信,就像客人排队越多,越说明这锅菜真香。
技术信号最大的优点是“可解释”:每一个信号都能讲出道理,出问题也好排查。缺点是滞后——等大厨闻到糊味,菜已经烧过头了。但老经验仍然是宝贵的基础,AI 模型也常常把它们当作输入特征,就像超级大厨也要从师父那里继承基本功。
机器学习信号
如果说技术指标是师传口诀,那机器学习就是“超级大厨的养成记”。超级大厨不会只靠一条经验,他会同时观察食材成色、灶台火力和客人表情,把上百个线索综合起来,并且从过去一万次成功和失败中学习规律。机器学习信号生成,做的就是这件事:从历史数据中自动学习“什么特征组合下,上涨概率更高”。
整个流程分四步:特征工程、模型选型、训练验证、概率输出。特征工程是大厨选食材,除了价格和成交量,还可以加入新闻情绪、波动率、资金流向等;模型选型是定菜系,逻辑回归像家常菜稳妥易解释,梯度提升树像创意菜上限高,深度学习像分子料理调参复杂;训练验证是试菜环节,用过去的数据训练,再用没见过的数据验证;概率输出则是最终出品——模型给出“明天上涨的概率”。
1. 特征加权:w 是权重向量,x 是特征向量,wᵀx 对每个特征打分并求和,相当于大厨把食材新鲜度、火候、客人表情按重要性加权记总分
2. 偏置项:b 是偏置,代表大厨的“基础手感”——即使所有特征都是中性,也有一个默认判断倾向
3. 压缩映射:sigmoid 函数把 z 从负无穷到正无穷压缩到 0 到 1 之间,z 越大输出越接近 1,买入概率越高
4. 概率输出:模型最终输出 P(y=1|x),就是给定当前特征时上涨的概率,通常以 0.5 为阈值:大于 0.5 发买入信号,小于 0.5 发卖出信号
机器学习信号最大的魅力在于它捕捉的是“复杂互动”:单个特征看起来没用的组合,可能预测力极强——就像单独闻一种香料辨不出菜,但多种香料搭配时整道菜的味道就出来了。不过它也有代价:需要大量高质量数据,需要防过拟合,训练出来的模型有时像黑箱,厨师说不清为什么这道菜要这么调味。
信号评估优化
大厨研发新菜,绝不会只做一次就端上桌。他会反复试菜,记下每次的火候、调料和客人反馈,直到配方稳定。交易信号同样需要“试菜”——这就是回测。回测框架模拟历史行情,把信号一条条“回放”,观察如果当时照着交易,账户会变成什么样。
评估信号不能只看收益,还要看“性价比”。一个策略一年赚 50% 但过程中净值上蹿下跳,像坐过山车,大多数资金根本拿不住;另一个策略一年赚 25% 但曲线平稳,反而更受机构欢迎。衡量这种性价比最常用的指标是夏普比率,它描述的是“每承担一单位风险,能换来多少超额收益”。
1. 策略收益:E[R_p] 是策略在回测期间的平均收益率,相当于每次试菜的平均满意度
2. 无风险利率:R_f 是无风险资产收益率(比如国债),这是“不做菜也有收益”的保底水平
3. 收益波动率:σ_p 是策略收益的标准差,衡量收益忽高忽低的风险程度,相当于菜品质量的稳定性
4. 夏普比率:超额收益除以波动率,得到单位风险下的超额回报,是横跨不同策略的“评分卡”
回测中最危险的陷阱是过拟合:大厨为了让“试菜记录”好看,把配方调得只适合那几天特定的食材,换个季节就翻车。防范方法包括样本外验证(用没参与调参的数据测试)、参数敏感性测试(微调参数看结果是否稳健)、加入交易成本(把真实手续费和滑点算进去)。只有经过这些考验的信号,才配得上“量产”。
实盘部署适配
菜谱上写着“大火快炒 30 秒”,但家里的灶台火力不够,30 秒出锅的菜还是生的。交易信号也一样:回测里信号出现的那一刻,价格是理想的;实盘里,从信号产生到委托成交,中间隔着网络延迟、排队撮合和市场滑点。等你的单子真正成交,价格可能已经不是信号触发时的价格了。
这就是实盘与回测最大的区别:信号会“凉”。信号刚生成时置信度最高,随着时间推移,它反映的市场信息越来越过时,决策价值不断衰减。量化系统用置信度衰减模型来处理这个问题:新鲜信号全力执行,陈旧信号降低仓位甚至直接放弃。
1. 初始置信度:c₀ 是信号刚生成时的置信度,设为 1 表示完全信任,相当于菜刚出锅时香味最浓
2. 信号年龄:age 是信号产生后经过的时间,以秒或毫秒计,时间是食物的“天敌”
3. 衰减系数:λ 控制信号衰亡速度,高频行情里 λ 大(信号几秒就失效),低频策略里 λ 小(信号可以管一天)
4. 指数衰减:e 的负指数次方让置信度从 1 快速下降,越往后衰减越慢,模拟信息“先快速变旧,后缓慢遗忘”的规律
实盘适配的另一项工作是信号一致性保障:回测中用了未来数据,实盘就会“失灵”,这是数据泄露;必须确保回测逻辑和实盘逻辑完全一致。系统还要做好容错降级——数据源断了就暂停发信号,模型异常就切换备用规则,就像大厨发现盐罐空了,立刻换成备用的调料方案,绝不手忙脚乱。
全流程案例
一盘好菜从选材、切配、烹饪到装盘,环环相扣。交易信号生成也是一条完整流水线:数据管道 → 信号生成 → 回测评估 → 实盘交易 → 监控复盘。少了任何一环,系统都会出问题——数据没洗干净,信号就是空中楼阁;没有监控,模型悄悄失效也无人知晓。
一个典型的量化团队是这样协作的:数据工程师维护数据管道,保证行情数据准确、及时、无未来函数;量化研究员开发信号策略,不断尝试新特征和新模型;回测工程师搭建回测环境,扣掉手续费和滑点,输出夏普比率和最大回撤;实盘工程师负责部署监控,处理信号延迟和系统异常。每个人都在为同一个目标服务:让“调味决策”更准、更快、更稳。
衡量整个流程最终效果的指标是净收益——不是你账面赚了多少,而是扣掉所有成本后真正落入口袋的钱。
1. 价差收益:分子是卖出价减去买入价,代表这轮交易赚到的毛差价,像一盘菜卖出的毛利
2. 收益百分比:除以买入价,把利润换算成收益率,方便不同资金量之间对比
3. 手续费成本:cost 是佣金等固定交易费用,按成交金额比例收取,像餐厅的平台抽成
4. 滑点损失:slippage 是实际成交价与信号价格的偏差,市场流动性越差,这个值越大
策略上线后还要持续迭代:监控告警系统实时盯住信号频率、成交延迟和收益曲线,一旦异常立刻通知。每周复盘时,团队像大厨品鉴会一样,把本周的每一笔交易回放一遍,分析做对的、做错的,提炼改进项。如此循环往复,量化系统才能像一家成熟餐厅一样,持续端出稳定可口的“菜”。
AI 应用场景
智能投顾信号引擎
阶段:特征工程 + 机器学习建模
解决的问题:传统投顾依赖人工分析,面对海量数据来不及反应。AI 自动汇总行情、新闻、资金流向等特征,用梯度提升树输出次日涨跌概率,再结合用户风险偏好生成个性化买卖建议,让普通投资者也能拥有“专属大厨”。
具体案例:某互联网券商上线智能投顾功能,用户输入可承受的最大回撤后,系统每天盘后自动生成调仓信号:稳健型用户收到“减仓 10%”,激进型用户收到“加仓 5%”。上线半年,信号推荐组合的夏普比率稳定在 1.2 以上。
高频做市信号系统
阶段:实盘部署适配 + 信号衰减控制
解决的问题:做市商需要在毫秒级判断买卖价差方向。传统规则信号延迟高,难以适应微观结构变化。AI 模型直接吃订单簿快照特征,输出双边报价概率信号,并用指数衰减模型控制信号年龄,确保信号在几百毫秒内完成生命周期。
具体案例:一家自营做市团队用 LSTM 提取订单簿短暂模式,信号延迟从 50ms 降到 8ms,同时引入滑点惩罚后,日均收益提升 30%,且最大回撤下降了一半。
基金风控信号评估台
阶段:信号评估优化 + 过拟合防范
解决的问题:基金经理面对几十个候选策略,不知道哪个信号真正有效。AI 评估平台统一进行样本外回测、参数稳健性扫描、夏普比率和最大回撤对比,自动剔除可能过拟合的策略,把好菜端上桌。
具体案例:某公募基金建立策略评估中台,对 50 个历史信号策略统一做三折交叉验证和成本敏感性测试,最终仅 6 个通过筛选上线,上线后实盘与回测收益偏差控制在 15% 以内。
Python 演示
import numpy as np def generate_signal(prices, short=5, long=20): """Generate buy/sell signals by moving average crossover.""" ma_short = np.convolve(prices, np.ones(short) / short, mode='valid') ma_long = np.convolve(prices, np.ones(long) / long, mode='valid') offset = long - short signals = np.zeros(len(prices)) for i in range(1, len(ma_long)): s = i + offset price_idx = i + long - 1 if ma_short[s - 1] <= ma_long[i - 1] and ma_short[s] > ma_long[i]: signals[price_idx] = 1 elif ma_short[s - 1] >= ma_long[i - 1] and ma_short[s] < ma_long[i]: signals[price_idx] = -1 return signals def backtest(prices, signals, cost=0.001): """Simple backtest: 1 means buy, -1 means sell.""" cash = 10000.0 shares = 0.0 for i in range(len(signals)): if signals[i] == 1 and shares == 0: shares = cash / prices[i] * (1 - cost) cash = 0.0 elif signals[i] == -1 and shares > 0: cash = shares * prices[i] * (1 - cost) shares = 0.0 total = cash + shares * prices[-1] return total if __name__ == '__main__': rng = np.random.default_rng(42) price = 100 + np.cumsum(rng.normal(0, 1, 300)) sig = generate_signal(price) final = backtest(price, sig) print(f"Backtest final equity: {final:.2f}")
ma_short = np.convolve(prices, np.ones(short) / short, mode='valid')用滑窗平均实现短均线,等价于大厨的“快速测温”。offset = long - short两套均线长度不同,先算好索引偏移量,保证对齐同一时间点。signals = np.zeros(len(prices))预分配信号数组,默认值 0 表示观望。if ma_short[s - 1] <= ma_long[i - 1] and ma_short[s] > ma_long[i]:判断前一刻短均线在下方、此刻穿到上方,即金叉。signals[price_idx] = 1在金叉对应的价格位置记录买入信号。elif ma_short[s - 1] >= ma_long[i - 1] and ma_short[s] < ma_long[i]:死叉条件,短均线从上往下穿过长均线。shares = cash / prices[i] * (1 - cost)买入时先扣手续费再算可买入股数。cash = shares * prices[i] * (1 - cost)卖出时同样扣掉成本,避免“纸上富贵”。price = 100 + np.cumsum(rng.normal(0, 1, 300))用随机游走模拟 300 天的价格走势,方便快速验证信号逻辑。final = backtest(price, sig)跑完整条信号序列,输出最终资产。
常见误区
误区总觉得信号发得越多,赚钱机会就越多。系统每天发几十条买卖信号,看起来很活跃,结果账户没怎么赚钱。
正解信号越频繁,交易成本越高。每一次买卖都要付手续费和滑点,就像大厨每五分钟就往锅里加一次盐,最终客人只会觉得这菜没法吃。真正的好信号宁可少而精,要等“确定性足够高”再出手。用净收益公式一算就明白:频繁交易赚的毛差价,往往被 cost 和 slippage 两项抽干。
为何常见:因为大家天然把“忙碌”等同于“有产出”,忽略了每笔交易背后的固定成本。
误区回测把收益曲线做得漂亮,年化 80%,最大回撤只有 5%,就以为稳赚了,结果实盘一跑就亏损。
正解回测漂亮很可能是过拟合——策略被调参调得只适合那段历史行情,就像大厨为了某次试菜反复调整配方,换了食材就翻车。防范方法必须做样本外验证、参数敏感性测试、换不同市场环境复测,还要把手续费和滑点算进去。只有多种考验下依然稳健的信号,才可能实盘复现。
为何常见:因为回测结果看得见摸得着,让人产生“我已经验证过”的错觉,忽视了历史不会重演。
误区用了深度学习就一定比均线交叉强,模型越复杂越高级,赚得越多。
正解机器学习并非万能。它的上限取决于特征质量与数据量,也就是“好食材才能做出好菜”。数据噪声大、特征无预测力时,复杂的 transformer 也比不上一根简单均线。而且复杂模型过拟合风险更高,实盘维护成本更大。实践中往往是把传统指标作为特征喂给模型,再结合模型概率输出,效果才最好。
为何常见:因为媒体总在渲染 AI 的“神力”,让人误以为复杂度等于有效性。
误区信号显示 100 元买入,就以为一定能以 100 元成交,忽略了从信号到撮合之间的延迟。
正解真实市场中,信号触发到订单到达交易所需要时间,其间价格已经在动;再加上买卖价差和流动性不足,成交价往往比信号价差几个基点。高频场景里这种偏差会被放大。正确做法是回测时就加入滑点模型,实盘用衰减置信度控制“过了火候的菜”不下锅。
为何常见:因为回测数据是“事后视角”,天然没有成交延迟,初学者很容易把理想当现实。
面试题
Q1. 均线金叉通常被视为哪种信号?
- A.买入信号← 正确答案
- B.卖出信号
- C.观望信号
- D.清仓信号
答案:A。短期均线上穿长期均线形成金叉,代表短期买盘力量超过长期持有者,趋势可能向上,传统技术分析中视为买入信号。死叉才对应卖出,观望与清仓不是金叉的本意。
Q2. RSI 指标高于 70 通常说明什么?
- A.市场超买可能回调← 正确答案
- B.市场超卖可能反弹
- C.市场无趋势横盘
- D.成交量明显放大上行
答案:A。RSI 衡量近期涨跌幅的相对强度,高于 70 表示涨得过多,相当于菜放多了盐,短期回调概率大,称为“超买”;低于 30 才是超卖,可能反弹。
Q3. 技术指标中均线周期越大,信号通常?
- A.越平滑但越滞后← 正确答案
- B.越灵敏但越毛糙
- C.越准确且越及时
- D.越频繁且越稳定
答案:A。均线周期 n 越大,平均的天数越多,单日价格波动的影响被稀释,曲线自然更平滑;但正因为反应慢,信号也就越滞后。灵敏且毛糙是短周期均线的特征。
Q4. 下列哪项不属于信号生成的常见输入特征?
- A.历史收盘价序列
- B.成交量分布数据
- C.财报文本情感
- D.客户家庭住址← 正确答案
答案:D。信号生成的特征来自影响证券价格的信息,如价格、成交量、基本面文本情感等。客户家庭住址属于个人隐私数据,与证券价格预测无关,也不应作为交易特征输入模型。
Q5. 夏普比率反映的是策略的什么?
- A.单位风险的超额收益← 正确答案
- B.风险调整后的总收益
- C.策略交易频率高低
- D.信号产生数量多少
答案:A。夏普比率 =(策略平均收益 − 无风险利率)÷ 收益波动率,衡量的是每承担一单位波动风险能换取多少超额回报。它不直接表示总收益大小,也不反映交易频率或信号数量,而是两者的性价比。
Q6. 信号置信度随年龄衰减的模型主要模拟的是?
- A.信号时效性随时间流失← 正确答案
- B.模型参数逐渐增多的过程
- C.交易手续费的不断累积
- D.市场波动率的计算方法
答案:A。信号生成后,市场环境持续变化,信号反映的信息逐渐过时,置信度按指数衰减,模拟的就是“菜凉了不好吃”的时效性。它是实盘适配中控制下单规模的关键机制,与参数数量、手续费、波动率计算无关。
Q7. 逻辑回归输出概率作为信号时,正确做法是?
- A.设阈值并管理仓位← 正确答案
- B.概率接近零点五越放心
- C.忽略阈值直接交易
- D.概率越大必然越盈利
答案:A。逻辑回归输出的是上涨概率,需要设定阈值(如 0.5)将概率转为买/卖信号,并结合仓位管理控制风险。概率接近 0.5 表示模型“没把握”,应观望;忽略阈值或认为概率越大必然盈利都会忽略不确定性。
Q8. 下列哪项不是防范信号过拟合的有效措施?
- A.样本外数据验证
- B.参数敏感性测试
- C.交易成本后回测
- D.增加特征维度数量← 正确答案
答案:D。样本外验证、参数敏感性测试和扣除交易成本的回测都能检验信号是否真实有效。一味增加特征维度会让模型记住噪声,反而加剧过拟合,属于应当警惕的做法。
Q9. 实盘信号与回测信号产生偏差的原因有哪些?
- A.撮合延迟与网络抖动← 正确答案
- B.买卖价差造成滑点← 正确答案
- C.信号计算使用最新数据
- D.市场参与者结构变化← 正确答案
答案:ABD。撮合延迟、网络抖动和买卖价差滑点会让实际成交价偏离信号价;市场参与者结构变化会让历史规律失效,这些都会造成回测与实盘的偏差。信号计算使用最新数据是系统的正常工作方式,不属于偏差来源。
Q10. 用未来数据训练模型导致回测失真属于什么类型问题?以下说法正确的是?
- A.数据泄露会虚高回测收益← 正确答案
- B.样本外验证可发现问题← 正确答案
- C.实盘与回测偏差较大← 正确答案
- D.信号延迟越长越能缓解
答案:ABC。训练时混入未来信息就是数据泄露,它让回测“偷看了答案”,收益严重虚高;用样本外数据验证或实盘观察会发现实盘与回测偏差巨大。延迟越长信号越容易失效,与缓解数据泄露无关,反而让偏差更严重。