前言

在上一篇《WorldQuant 量化因子库深度解析:101 Alphas 经典量价因子原理与 Python 实现》中,我们完整拆解了 WorldQuant 101 Alphas 中经典的量价背离因子,从底层逻辑到 Python 实现做了全流程讲解。而在量化实战中,单一基础因子往往很难适配复杂多变的市场环境,对基础因子做合理的扩展与优化,才是提升策略收益、降低回撤的核心关键

本篇我们书接上回,针对基础量价相关因子,分享 2 个在 A 股实战中验证有效、行业内高频使用的因子扩展方案,从公式思路、底层逻辑到 Python 代码实现、实战价值做全维度拆解,帮助大家掌握量价因子的进阶优化方法,快速搭建属于自己的 Alpha 因子体系。

本文适合人群:

  • 已入门量化投资,想要进阶因子优化的开发者
  • 对 WorldQuant 101 Alphas 因子库感兴趣的从业者
  • 专注 A 股量价策略、短线交易的投资者
  • 想要丰富多因子模型 Alpha 来源的量化爱好者

注:本文代码复用了上篇实现的correlation滚动相关系数核心函数,未看过上篇的读者可先回顾基础函数实现,保证本文代码可直接复用运行。

一、量价因子的扩展核心逻辑

基础的量价因子-correlation(open, volume, 10),核心是通过单时间窗口的开盘价与成交量相关性,捕捉量价背离的拐点信号。但在 A 股实战中,这个基础版本存在两个可优化的核心方向:

  1. 周期维度:仅用单一 10 日窗口,无法捕捉市场中「短期异动、中期趋势分化」的结构性机会,而这恰恰是 A 股题材轮动、事件驱动行情中的核心盈利来源。
  2. 价格维度:仅用开盘价计算相关性,无法反映价格的真实涨跌动能 —— 真正推动趋势形成的,不是开盘价的绝对高低,而是标的连续的收益累积效应。

本文分享的两个进阶扩展因子,正是分别从多周期结构差异收益动能匹配两个核心维度,对基础因子做升级优化,大幅提升因子在 A 股市场的实战有效性。

二、扩展 1:短中期量价结构差因子(短强长弱型)

这是量化实战中最常用的因子升级方法,通过长短期两个时间窗口的相关性差值,精准捕捉市场中「短期资金异动」的机会点,尤其适配 A 股节奏快、题材轮动频繁的市场特征。

2.1 因子公式与核心思路

因子核心公式如下:

Alpha=correlation(open,volume,5)−correlation(open,volume,20)

公式参数说明:

  • correlation(open, volume, 5):短期 5 日窗口,开盘价与成交量的滚动皮尔逊相关系数
  • correlation(open, volume, 20):中期 20 日窗口,开盘价与成交量的滚动皮尔逊相关系数
  • 核心逻辑:通过短期与中期的相关性差值,刻画量价结构的周期分化

2.2 因子的直观含义与底层逻辑

这个因子的核心是捕捉 **「短期量价共振,中期量价背离 / 弱相关」** 的特殊量价结构,这种结构通常对应三类典型的市场场景:

  1. 题材刺激、事件驱动:标的突发利好消息,短期资金集中进场,形成短期量价共振,但中期趋势尚未形成统一预期;
  2. 情绪加速阶段:标的进入主升浪前的资金预热,短期成交量快速放大,价格与成交量形成强同步;
  3. 资金短期集中介入:主力资金短期建仓,形成短期量价同步,但中期持仓结构尚未发生根本变化。

这种短长周期的量价结构分化,往往预示着标的即将迎来短期趋势性行情,是短线策略中非常有效的先行信号。

2.3 因子的 Python 完整实现

基于上篇的基础函数,我们可以极简实现这个短中期量价结构差因子,代码具备完善的兼容性,可直接接入各类行情数据源:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 中文显示设置
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams["axes.unicode_minus"] = False

# 复用上篇的滚动相关系数核心函数
def correlation(x, y, d):
    """
    计算两个时间序列的滚动皮尔逊相关系数(rolling correlation)
    参数:
        x: pd.Series 或 np.array,第一个时间序列
        y: pd.Series 或 np.array,第二个时间序列
        d: int,滚动计算的时间窗口大小,单位:天
    返回:
        pd.Series,每一天对应的过去d天的相关系数
    """
    x_series = pd.Series(x)
    y_series = pd.Series(y)
    if len(x_series) != len(y_series):
        raise ValueError("输入的两个时间序列x和y长度必须相同!")
    return x_series.rolling(window=d).corr(y_series)

# 短中期量价结构差因子实现
def correlation_short_long(df, short_window=5, long_window=20):
    """
    计算短中期量价结构差因子
    参数:
        df: pd.DataFrame,必须包含open(开盘价)、volume(成交量)列
        short_window: int,短期滚动窗口,默认5天
        long_window: int,中期滚动窗口,默认20天
    返回:
        pd.Series,短中期量价结构差因子值
    """
    df = df.copy()
    # 计算短期、中期量价相关系数
    corr_short = correlation(df['open'], df['volume'], short_window)
    corr_long = correlation(df['open'], df['volume'], long_window)
    # 计算差值得到最终因子
    return corr_short - corr_long

2.4 因子使用示例与可视化解读

我们通过模拟行情数据,演示因子的调用与可视化效果,实际使用时替换为真实行情数据即可:

# ---------------------- 1. 模拟生成行情数据(替换为你的真实数据源即可) ----------------------
date_range = pd.date_range(start='2025-01-01', end='2025-10-31', freq='B')
np.random.seed(888)

# 模拟开盘价和成交量数据
open_price = np.cumsum(np.random.randn(len(date_range)) * 0.6) + 25
volume = np.random.randint(low=20000, high=800000, size=len(date_range))

# 构建行情DataFrame
df = pd.DataFrame({
    'open': open_price,
    'volume': volume
}, index=date_range)

# ---------------------- 2. 计算短中期量价结构差因子 ----------------------
df['alpha_short_long'] = correlation_short_long(df, short_window=5, long_window=20)

# ---------------------- 3. 因子与股价可视化 ----------------------
fig, ax1 = plt.subplots(figsize=(16, 8), dpi=100)

# 左轴:股票开盘价走势
ax1.set_xlabel('日期', fontsize=12)
ax1.set_ylabel('股票开盘价', fontsize=12, color='#d62728')
line1 = ax1.plot(df.index, df['open'], color='#d62728', linewidth=2, label='开盘价')
ax1.tick_params(axis='y', labelcolor='#d62728')
ax1.grid(True, alpha=0.3)

# 右轴:短中期量价结构差因子
ax2 = ax1.twinx()
ax2.set_ylabel('短中期量价结构差因子', fontsize=12, color='#2ca02c')
line2 = ax2.plot(df.index, df['alpha_short_long'], color='#2ca02c', linewidth=1.5, linestyle='--', label='Alpha因子')
ax2.axhline(y=0, color='black', linestyle='-', alpha=0.5)
ax2.tick_params(axis='y', labelcolor='#2ca02c')

# 合并图例与图表设置
lines = line1 + line2
labels = [l.get_label() for l in lines]
ax1.legend(lines, labels, loc='upper left', fontsize=12)
plt.title('短中期量价结构差因子与股价走势对比', fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()

从因子可视化结果中可以清晰看到:当因子值出现显著正向峰值时,意味着标的短期量价共振显著强于中期,往往对应着短期资金集中介入,后续股价大概率会出现阶段性的趋势行情,完美适配 A 股短线题材交易的核心需求。

三、扩展 2:基于收益的量价动能因子

如果说第一个扩展是从「周期维度」优化,那第二个扩展就是从「价格本质」升级 —— 把基础公式中的开盘价,替换为标的的涨跌幅收益率,直接升级为行业内高频使用的量价动能因子,能更敏锐地判断趋势的健康度与可持续性。

3.1 因子公式与核心升级思路

因子核心公式如下:

Alpha=correlation(returns,volume,10)

公式核心升级点:

  • 将基础公式中的open开盘价,替换为returns标的日涨跌幅收益率
  • 保留 10 日核心计算窗口,无需取反,因子值的正负直接对应趋势的健康度
  • 核心逻辑:通过收益率与成交量的相关性,直接刻画价格涨跌动能与成交量的匹配度

3.2 因子的直观含义与趋势解读

这个因子的核心是判断趋势的质量与可持续性,通过量能与涨跌的匹配度,区分「健康趋势」与「虚假趋势」:

  1. 因子值为正(正相关):当标的「上涨的时候放量、下跌的时候缩量」,收益率与成交量呈现正相关。这种结构说明:上涨有成交量配合,资金做多意愿强烈;下跌时成交量萎缩,抛压不足,是健康的上涨趋势,后续延续性极强。
  2. 因子值为负(负相关):当标的「上涨不放量、下跌却放量」,收益率与成交量呈现负相关。这种结构说明:上涨没有资金认可,量能无法支撑价格涨幅;下跌时恐慌盘涌出,抛压极大,是质量极差的趋势,极易出现反转和大幅回撤。

3.3 因子的 Python 完整实现

该因子的实现同样极简,基于基础相关系数函数,仅需新增收益率计算环节,即可完成因子开发:

def correlation_return_volume(df, window=10):
    """
    计算基于收益的量价动能因子
    参数:
        df: pd.DataFrame,必须包含close(收盘价)、volume(成交量)列
        window: int,滚动计算的时间窗口,默认10天
    返回:
        pd.Series,量价动能因子值
    """
    df = df.copy()
    # 计算标的日涨跌幅收益率
    daily_return = df['close'].pct_change()
    # 计算收益率与成交量的滚动相关系数,得到最终动能因子
    return correlation(daily_return, df['volume'], window)

3.4 因子使用示例与可视化解读

同样通过模拟行情数据,演示因子的调用与可视化效果:

# ---------------------- 1. 模拟生成行情数据(替换为你的真实数据源即可) ----------------------
date_range = pd.date_range(start='2025-01-01', end='2025-10-31', freq='B')
np.random.seed(999)

# 模拟收盘价和成交量数据
close_price = np.cumsum(np.random.randn(len(date_range)) * 0.4) + 30
volume = np.random.randint(low=50000, high=1000000, size=len(date_range))

# 构建行情DataFrame
df = pd.DataFrame({
    'close': close_price,
    'volume': volume
}, index=date_range)

# ---------------------- 2. 计算基于收益的量价动能因子 ----------------------
df['alpha_return'] = correlation_return_volume(df, window=10)

# ---------------------- 3. 因子与股价可视化 ----------------------
fig, ax1 = plt.subplots(figsize=(16, 8), dpi=100)

# 左轴:股票收盘价走势
ax1.set_xlabel('日期', fontsize=12)
ax1.set_ylabel('股票收盘价', fontsize=12, color='#ff7f0e')
line1 = ax1.plot(df.index, df['close'], color='#ff7f0e', linewidth=2, label='收盘价')
ax1.tick_params(axis='y', labelcolor='#ff7f0e')
ax1.grid(True, alpha=0.3)

# 右轴:量价动能因子
ax2 = ax1.twinx()
ax2.set_ylabel('量价动能因子', fontsize=12, color='#9467bd')
line2 = ax2.plot(df.index, df['alpha_return'], color='#9467bd', linewidth=1.5, linestyle='--', label='Alpha因子')
ax2.axhline(y=0, color='black', linestyle='-', alpha=0.5)
ax2.tick_params(axis='y', labelcolor='#9467bd')

# 合并图例与图表设置
lines = line1 + line2
labels = [l.get_label() for l in lines]
ax1.legend(lines, labels, loc='upper left', fontsize=12)
plt.title('基于收益的量价动能因子与股价走势对比', fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()

相比于基础的开盘价版本,这个扩展因子的核心优势在于:它直接锚定了价格涨跌的核心动能,而非价格的绝对数值,能更敏锐地捕捉到趋势的内在质量变化,提前预判趋势的延续与反转,是行业内趋势跟踪策略、动量策略中使用频次极高的核心因子。

四、两大进阶因子的适用场景与组合使用技巧

4.1 两个进阶因子核心差异对比

为了方便大家根据自己的策略风格选择,我们通过表格清晰对比两个因子的核心差异:

因子名称 核心逻辑 适用策略风格 核心优势
短中期量价结构差因子 捕捉短长周期量价结构分化,定位短期资金异动 短线交易、题材轮动、事件驱动策略 适配 A 股快节奏市场,精准抓短期行情启动点
基于收益的量价动能因子 刻画涨跌动能与量能的匹配度,判断趋势健康度 趋势跟踪、动量策略、中长线波段交易 精准识别趋势真假,提前预判趋势反转,稳定性更强

4.2 实盘组合使用技巧

在实战中,两个因子并非二选一,组合使用能实现更好的策略效果,分享 2 个经过实战验证的组合用法:

  1. 趋势 + 短线共振选股:先用「量价动能因子」筛选出因子值为正、趋势健康的标的,缩小选股范围;再用「短中期量价结构差因子」筛选出短期资金异动的标的,作为最终的买入标的,兼顾趋势的安全性与短线的爆发力。
  2. 多因子模型权重分配:在多因子模型中,给「量价动能因子」分配更高的核心权重,作为 Alpha 的主要来源;给「短中期量价结构差因子」分配辅助权重,作为短期增强因子,既能保证模型的长期稳定性,又能提升短期收益表现。

五、总结与风险提示

本文核心总结

  1. 基础量价因子的核心优化方向,主要来自周期维度的多周期分化价格维度的动能本质两大方向,本文的两个进阶扩展因子,正是这两个方向的经典实战方案。
  2. 短中期量价结构差因子,通过长短期窗口的相关性差值,精准捕捉 A 股题材驱动、资金异动的短线机会,完美适配 A 股的市场节奏特征。
  3. 基于收益的量价动能因子,锚定价格涨跌的核心动能,能更精准地判断趋势的健康度与可持续性,是行业内高频使用的经典量价因子版本,稳定性与实战性远超基础版本。
  4. 两个因子可单独使用,也可组合构建多因子体系,新手可直接复用本文代码,替换真实行情数据即可完成回测与优化。

风险提示

  1. 历史因子表现不代表未来收益,量化因子存在策略失效、市场环境变化导致逻辑失灵的风险,实盘使用前需经过充分的样本外验证与参数敏感性测试。
  2. 本文内容仅为量化技术分享,不构成任何投资建议,股市有风险,入市需谨慎。
  3. 因子回测效果需充分考虑交易手续费、滑点、标的流动性等实盘摩擦成本,避免回测与实盘出现大幅偏差。

后续我会持续更新 WorldQuant 101 Alphas 系列因子的原理拆解与 Python 实战实现,包括更多行业内常用的因子优化方案、因子中性化处理、多因子模型构建等核心内容,欢迎大家关注、点赞、收藏,一起交流量化投资心得!

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐