3. 交易信号定义
在Transformer交易信号预测项目中,模型真正要学习的并不是“价格会涨还是会跌”这样模糊的问题,而是一个被严格定义的信号标签体系。信号定义决定了模型输入与输出之间的映射关系,也决定了后续损失函数、评估指标和实盘执行逻辑。如果信号定义含糊,再强的注意力机制也无法产生稳定可用的预测结果。本节将围绕五类核心信号、多类别标签构造方法以及信号评估指标展开。
一、核心原理:从价格序列到可学习信号
交易信号本质上是把连续的价格、成交量、波动率等市场状态,映射为离散或连续的目标变量。Transformer擅长处理长序列依赖,但它的输出必须由明确的标签监督。常见的五类信号定义如下:
- 趋势信号:判断未来一段时间内价格是否延续当前方向,标签常为“上涨趋势/下跌趋势/无趋势”。
- 反转信号:判断当前趋势是否即将结束并反向运动,常用于捕捉顶部或底部区域。
- 突破信号:判断价格是否有效突破关键支撑、阻力或区间边界,强调“突破是否成立”。
- 波动率信号:预测未来波动率放大或收缩,不直接预测方向,常用于仓位管理和期权策略。
- 多类别标签:将上述信号合并为一个多分类目标,例如“强多、弱多、震荡、弱空、强空”。
这五类信号并非互斥。实际建模时,可以先分别构造二分类标签,再通过规则合成多类别标签。例如,趋势信号为多、突破信号为真、波动率信号为放大,则可合成“强多”类别。这样做的优势是每个子信号都可解释,便于复盘和风控。
二、方法流程:标签构造与信号生成
一个可落地的信号标签流程通常包含以下步骤:
- 确定预测周期,例如未来5根、20根或60根K线。
- 计算基准收益、波动率、区间高低点等中间变量。
- 按阈值规则生成各子信号标签。
- 将子信号合并为多类别标签,并处理样本不平衡。
- 划分训练集、验证集和测试集,严格避免未来函数。
下面是一个简化的多类别标签构造示例,使用未来收益率和波动率阈值生成五类信号:
import numpy as np
import pandas as pd
def build_signal_labels(df, horizon=20, vol_window=20):
future_ret = df['close'].shift(-horizon) / df['close'] - 1
vol = df['close'].pct_change().rolling(vol_window).std()
threshold = vol * np.sqrt(horizon)
labels = pd.Series(index=df.index, dtype='object')
labels[future_ret > threshold] = 'strong_long'
labels[(future_ret > 0) & (future_ret <= threshold)] = 'weak_long'
labels[(future_ret < 0) & (future_ret >= -threshold)] = 'weak_short'
labels[future_ret < -threshold] = 'strong_short'
labels[future_ret.isna()] = 'neutral'
return labels
该代码中,horizon控制预测周期,vol_window控制波动率估计窗口。阈值随波动率自适应变化,避免在低波动期产生过多噪声信号。实际项目中还应加入交易成本、滑点和涨跌停过滤。
三、信号评估指标与对比
信号预测不能只看准确率。类别不平衡时,准确率会被多数类主导。应结合精确率、召回率、F1、AUC以及交易层面的指标综合评估。下表给出常用指标及其适用场景:
| 指标 | 含义 | 适用信号 | 注意事项 |
|---|---|---|---|
| Precision | 预测为正的样本中真正为正的比例 | 突破、反转 | 高精确率可减少假信号 |
| Recall | 真正为正的样本中被召回的比例 | 趋势、波动率 | 高召回率可减少漏判 |
| F1 | 精确率与召回率的调和平均 | 多类别综合 | 适合不平衡标签 |
| AUC | 排序能力,正样本得分高于负样本的概率 | 二分类信号 | 不依赖阈值 |
| 信号胜率 | 按信号交易后的盈利次数占比 | 实盘执行 | 需扣除成本 |
| 盈亏比 | 平均盈利与平均亏损之比 | 趋势、突破 | 与胜率配合使用 |
四、案例场景与常见误区
假设我们使用某只股票过去60根K线的量价数据,预测未来20根K线的信号。趋势信号用均线斜率定义,突破信号用前高前低突破定义,波动率信号用ATR变化定义。模型输出五类概率后,取最大概率类别作为交易信号。回测时发现“强多”信号胜率较高,但“弱多”信号频繁亏损。复盘后发现,弱多标签的阈值过窄,导致大量震荡样本被误标为弱多。
常见误区包括:
- 未来函数:使用未来数据计算波动率阈值或标准化参数,导致离线指标虚高。
- 标签重叠:同一时间点同时满足趋势和反转条件,未定义优先级。
- 忽略交易成本:高频信号在扣除手续费和滑点后由盈转亏。
- 只看准确率:在类别极不平衡时,准确率无法反映真实预测能力。
- 阈值固定:不同市场波动状态下使用同一阈值,导致信号质量不稳定。
总结来看,交易信号定义是Transformer交易预测项目的“目标函数”。趋势、反转、突破、波动率四类子信号提供了可解释的中间层,多类别标签把它们统一为模型可学习的输出,而评估指标则负责检验信号是否真正具备交易价值。只有把标签定义、阈值规则和评估口径固定下来,后续的模型训练和回测才具有可比性和可复现性。