4. 特征工程基础:价格特征、成交量特征、订单簿不平衡、价差特征

各位同学,欢迎来到特征工程这一讲。说实话,在异常交易识别这个领域,特征工程做得好不好,直接决定了你模型的天花板。我见过太多人一上来就堆深度学习模型,结果特征全是垃圾,那模型再花哨也没用。今天咱们就聊聊那些真正经得起市场检验的基础特征。

4.1 价格特征:不只是收盘价

很多人做价格特征,就只会取个收盘价、开盘价。嗯,这远远不够。我个人习惯把价格特征分成三个层次:

  • 原始价格:开盘价、收盘价、最高价、最低价。这是基础,但别只用它们做原始输入。
  • 衍生价格:比如(收盘价 - 开盘价) / 开盘价,也就是日内收益率。我建议你多算几个时间窗口的收益率,比如1分钟、5分钟、30分钟。
  • 相对价格:当前价格相对于移动平均线的偏离度。说白了就是(当前价 - MA20) / MA20。这个在识别趋势突变时特别好用。

重点提醒:价格特征一定要做标准化处理。不同股票的价格区间差太远了,茅台500块,某ST股才2块,不标准化的话模型根本学不到东西。

我在项目中遇到过一件事:有个学员直接用原始价格训练模型,结果模型学到的全是「高价股波动大」这种伪规律。后来改成收益率特征,效果立竿见影。

4.2 成交量特征:量在价先

成交量是市场的「燃料」。我个人最常用的成交量特征有这几个:

特征名称 计算公式 用途
成交量变化率 (当前量 - 前N期均值) / 前N期均值 识别放量或缩量异常
成交量加权均价(VWAP) ∑(价格×成交量) / ∑成交量 判断当前价格是否偏离真实成交价
成交量标准差 滚动N期的成交量标准差 衡量成交量波动是否异常
量价相关性 价格与成交量的滚动相关系数 识别量价背离

你想想看,如果价格在涨但成交量在萎缩,这往往是个危险信号。我曾经用这个特征抓出过一起「对倒交易」的案例——价格拉得很漂亮,但成交量就是跟不上,后来一查果然是自买自卖。

小技巧:计算成交量变化率时,我建议用中位数代替均值。因为成交量偶尔会有极端值,均值容易被带偏,中位数更稳健。

4.3 订单簿不平衡:微观结构的核心

这个特征可能有些同学不太熟悉,但它在高频交易领域是必用的。订单簿不平衡,说白了就是看买单和卖单谁更强。

最基本的计算公式是:

# 订单簿不平衡指标
def order_imbalance(bid_volume, ask_volume):
    """
    bid_volume: 买一到买五的总挂单量
    ask_volume: 卖一到卖五的总挂单量
    """
    if bid_volume + ask_volume == 0:
        return 0
    return (bid_volume - ask_volume) / (bid_volume + ask_volume)

这个值在-1到1之间。正值表示买方力量强,负值表示卖方力量强。我习惯把它跟价格走势结合起来看——如果价格在涨但订单簿不平衡在下降,说明上涨可能不可持续。

避坑指南:我曾经犯过一个错误,只用了买一卖一的数据来计算不平衡。后来发现有些庄家会在买一挂大单诱多,但买二到买五全是小单。所以建议至少用买三到卖三的数据,甚至更深。

另外,我建议你计算多个时间点的订单簿不平衡,比如过去10秒的平均值、最大值、最小值。这样可以捕捉到挂单撤单的快速变化。

4.4 价差特征:流动性的温度计

价差,就是买卖报价之间的差距。它直接反映了市场的流动性状况。价差越小,流动性越好;价差突然扩大,往往意味着有大事发生。

常用的价差特征包括:

  • 绝对价差:卖一价 - 买一价。简单直接,但不同股票之间不好比较。
  • 相对价差:(卖一价 - 买一价) / 中间价。这个可以跨股票比较。
  • 价差变化率:当前价差相对于前N期均值的比例变化。
  • 有效价差:实际成交价与买卖中间价的差值。这个更能反映真实的交易成本。

我记得有一次做回测,发现某个股票在收盘前3分钟价差突然从0.01元扩大到0.05元。当时直觉告诉我这不对劲,后来发现是有人在收盘前故意撤单制造流动性枯竭,然后低价扫货。价差特征帮我提前预警了。

核心要点:价差特征不要只看绝对值。比如茅台价差0.1元可能很正常,但一个低价股价差0.1元就是异常了。一定要结合价格水平做归一化。

4.5 特征组合:1+1 > 2

单独用某个特征效果有限,但组合起来威力就大了。我常用的组合方式:

# 特征组合示例
def combined_features(df):
    # 量价背离指标
    df['price_return'] = df['close'].pct_change()
    df['volume_change'] = df['volume'].pct_change()
    df['divergence'] = df['price_return'] * df['volume_change']
    
    # 订单簿与价差联合
    df['spread_imbalance'] = df['spread'] * df['order_imbalance']
    
    # 价格压力指标
    df['price_pressure'] = df['order_imbalance'] / (df['spread'] + 1e-8)
    
    return df

你想想看,当订单簿不平衡很大但价差也很大的时候,说明虽然买方力量强,但流动性不足,这种状态下价格很容易被操纵。这个组合特征帮我识别过好几次「虚假拉升」。

4.6 本章知识体系

下面这张图总结了本章的核心逻辑,你可以对照着梳理一下思路:

异常交易特征工程知识体系 特征工程 价格特征 成交量特征 订单簿不平衡 价差特征 原始价格 衍生收益率 相对偏离度 变化率 VWAP 量价相关性 买卖力量对比 多档位深度 时序变化 绝对/相对价差 有效价差 价差变化率 特征组合:量价背离、订单簿-价差联合 核心原则:标准化、组合化、微观化 异常交易识别 · 特征工程基础

好了,这一讲的内容就到这里。特征工程是个细活,别指望一蹴而就。我建议你拿到数据后,先把这些基础特征都算一遍,然后看看它们的分布、相关性,慢慢就会找到感觉。记住,好的特征胜过复杂的模型。