24、交易量与因子模型:交易量因子

多因子模型中的量价因子

做量化这些年,我越来越觉得交易量是个被低估的宝贝。很多人盯着价格K线看半天,却忽略了成交量里藏着的秘密。说白了,价格是结果,交易量是过程——没有量的配合,价格的变动往往不可持续。

我记得刚入行那会儿,带我的老交易员说过一句话:「量在价先」。当时不太理解,后来在实盘里摔了几次跟头才明白,这短短四个字背后是几十年的经验沉淀。

交易量因子的理论基础

为什么交易量能成为因子?核心逻辑其实很简单:

  • 信息流假说:交易量反映了信息进入市场的速度。量突然放大,说明有「聪明钱」在行动
  • 流动性溢价:交易量低的股票,买卖价差大,持有成本高,需要更高的预期收益来补偿
  • 分歧度指标:高交易量往往意味着市场参与者对价格走势存在较大分歧

我个人习惯把交易量因子分成两类:一类是「绝对量」,比如日均成交量;另一类是「相对量」,比如量比、换手率。实战中,相对量的预测能力往往更强。

核心观点:交易量因子不是独立存在的,它和价格因子是「孪生兄弟」。量价配合才是完整的信号系统。

常见的交易量因子构造方法

嗯,这里我直接上干货。以下是我在项目中常用的几种构造方式:

因子名称 计算公式 逻辑解释
换手率因子 成交量 / 流通股本 衡量股票的交易活跃度
量比因子 当前成交量 / 过去N日均量 捕捉成交量的异常变化
成交额因子 成交量 × 均价 考虑价格因素后的资金流量
Amihud非流动性因子 |日收益率| / 日成交额 衡量价格对交易量的敏感度

我曾经踩过一个坑:直接用原始成交量做因子。结果回测曲线漂亮得不行,一上实盘就崩。后来才发现,原始成交量受股本大小影响太大,必须做标准化处理。换手率才是更稳定的选择。

量价因子的组合策略

单独用交易量因子,效果其实一般。真正厉害的是把量和价结合起来。我常用的组合方式:

  • 量价背离:价格上涨但成交量萎缩,往往是趋势衰竭的信号
  • 量价齐升:价格和成交量同步放大,趋势延续的概率较高
  • 放量突破:价格突破关键位时伴随成交量放大,突破的有效性更强

实战技巧:我习惯用「量价相关系数」作为辅助因子。计算过去20天价格变动和成交量变动的相关性,负值越大,背离越明显,反转概率越高。

多因子模型中的权重分配

在多因子模型里,交易量因子通常不会单独占很大权重。我个人习惯给它10%-20%的权重,剩下的分配给动量、价值、质量等因子。为什么?因为交易量因子的稳定性不如基本面因子,但它能提供独特的「信息增量」。

举个例子:两个股票基本面一模一样,但一个交易量持续放大,另一个交易量萎缩。你选哪个?我肯定选前者——至少说明有人在关注它。

避坑指南:我曾经在2015年股灾期间吃过亏。那时候很多股票交易量异常放大,我以为是机会,结果是被套牢盘在出货。记住:交易量因子需要结合价格位置来判断,高位放量和低位放量完全是两回事。

交易量因子的知识体系

下面这张图是我自己整理的交易量因子知识框架,方便大家理解各个概念之间的关系:

交易量因子知识体系 交易量因子 绝对量因子 相对量因子 日均成交量 成交金额 换手率 量比 量价因子组合 多因子模型权重分配 | 趋势确认 | 反转信号 | 流动性筛选

代码实现示例

最后,分享一段我在项目中实际用过的Python代码,用来计算换手率因子和量比因子:

import pandas as pd
import numpy as np

def calc_volume_factors(df, window=20):
    """
    计算交易量因子
    df: 包含['volume', 'close', 'shares_outstanding']的DataFrame
    """
    # 换手率因子
    df['turnover'] = df['volume'] / df['shares_outstanding']
    
    # 量比因子(当前量 / 过去N日均量)
    df['volume_ma'] = df['volume'].rolling(window).mean()
    df['volume_ratio'] = df['volume'] / df['volume_ma']
    
    # Amihud非流动性因子
    df['return'] = df['close'].pct_change()
    df['dollar_volume'] = df['volume'] * df['close']
    df['amihud_illiq'] = abs(df['return']) / df['dollar_volume']
    
    # 标准化处理
    df['turnover_z'] = (df['turnover'] - df['turnover'].mean()) / df['turnover'].std()
    
    return df

小提示:代码里的标准化步骤千万别省。我见过太多人直接把原始因子扔进模型,结果被极端值带偏了。用Z-score或者分位数标准化都行,关键是让因子之间可比。

交易量因子这块,说白了就是「跟着聪明钱走」。但聪明钱不会举着牌子告诉你它在哪,你得从数据里自己找线索。多因子模型给了我们一个系统化的框架,但最终决策还是要靠你对市场的理解。

交易系统化学习资料 微信Strategy888888