3. 交易信号定义

在Transformer交易信号预测项目中,模型真正要学习的并不是“价格会涨还是会跌”这样模糊的问题,而是一个被严格定义的信号标签体系。信号定义决定了模型输入与输出之间的映射关系,也决定了后续损失函数、评估指标和实盘执行逻辑。如果信号定义含糊,再强的注意力机制也无法产生稳定可用的预测结果。本节将围绕五类核心信号、多类别标签构造方法以及信号评估指标展开。

一、核心原理:从价格序列到可学习信号

交易信号本质上是把连续的价格、成交量、波动率等市场状态,映射为离散或连续的目标变量。Transformer擅长处理长序列依赖,但它的输出必须由明确的标签监督。常见的五类信号定义如下:

  • 趋势信号:判断未来一段时间内价格是否延续当前方向,标签常为“上涨趋势/下跌趋势/无趋势”。
  • 反转信号:判断当前趋势是否即将结束并反向运动,常用于捕捉顶部或底部区域。
  • 突破信号:判断价格是否有效突破关键支撑、阻力或区间边界,强调“突破是否成立”。
  • 波动率信号:预测未来波动率放大或收缩,不直接预测方向,常用于仓位管理和期权策略。
  • 多类别标签:将上述信号合并为一个多分类目标,例如“强多、弱多、震荡、弱空、强空”。

这五类信号并非互斥。实际建模时,可以先分别构造二分类标签,再通过规则合成多类别标签。例如,趋势信号为多、突破信号为真、波动率信号为放大,则可合成“强多”类别。这样做的优势是每个子信号都可解释,便于复盘和风控。

二、方法流程:标签构造与信号生成

一个可落地的信号标签流程通常包含以下步骤:

  1. 确定预测周期,例如未来5根、20根或60根K线。
  2. 计算基准收益、波动率、区间高低点等中间变量。
  3. 按阈值规则生成各子信号标签。
  4. 将子信号合并为多类别标签,并处理样本不平衡。
  5. 划分训练集、验证集和测试集,严格避免未来函数。

下面是一个简化的多类别标签构造示例,使用未来收益率和波动率阈值生成五类信号:

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 排序能力,正样本得分高于负样本的概率 二分类信号 不依赖阈值
信号胜率 按信号交易后的盈利次数占比 实盘执行 需扣除成本
盈亏比 平均盈利与平均亏损之比 趋势、突破 与胜率配合使用
建议在验证集上同时观察F1和信号胜率。若F1高但胜率低,可能是标签阈值与交易成本不匹配;若胜率高但召回低,则可能错过大量机会。

四、案例场景与常见误区

假设我们使用某只股票过去60根K线的量价数据,预测未来20根K线的信号。趋势信号用均线斜率定义,突破信号用前高前低突破定义,波动率信号用ATR变化定义。模型输出五类概率后,取最大概率类别作为交易信号。回测时发现“强多”信号胜率较高,但“弱多”信号频繁亏损。复盘后发现,弱多标签的阈值过窄,导致大量震荡样本被误标为弱多。

常见误区包括:

  • 未来函数:使用未来数据计算波动率阈值或标准化参数,导致离线指标虚高。
  • 标签重叠:同一时间点同时满足趋势和反转条件,未定义优先级。
  • 忽略交易成本:高频信号在扣除手续费和滑点后由盈转亏。
  • 只看准确率:在类别极不平衡时,准确率无法反映真实预测能力。
  • 阈值固定:不同市场波动状态下使用同一阈值,导致信号质量不稳定。
信号定义一旦确定,训练集、验证集和测试集必须使用完全相同的定义和阈值计算方式。任何在测试集上单独调参的行为都会造成数据泄露。
交易信号标签体系与评估闭环 趋势信号 方向延续判断 反转信号 趋势结束判断 突破信号 关键位突破 波动率信号 放大或收缩 多类别标签合成 强多 / 弱多 / 震荡 / 弱空 / 强空 评估指标:Precision / Recall / F1 / AUC / 胜率 / 盈亏比 按信号类型分别评估,避免单一准确率误导

总结来看,交易信号定义是Transformer交易预测项目的“目标函数”。趋势、反转、突破、波动率四类子信号提供了可解释的中间层,多类别标签把它们统一为模型可学习的输出,而评估指标则负责检验信号是否真正具备交易价值。只有把标签定义、阈值规则和评估口径固定下来,后续的模型训练和回测才具有可比性和可复现性。