🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

如何在 JoinQuant 中量化 K 线多空指标并构建多空因子?

joinquant | 发布时间: 2026/6/24
以下内容由 EasyQuant 生成。

问题描述

多空指标量化

多空指标如何量化:
在蜡烛图里,开盘价,最高价,收盘价,最低价可以比较好的呈现多空表征。但是这个表征有个什么方式可以量化了?即比较量化的输出多空的因子数。

用途:考虑使用该多空因子数和涨跌幅进行相关性学习。

解决方案

在量化交易中,将蜡烛图(K线)的开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)转化为具体的数值因子,是进行机器学习和相关性分析的常见且有效的方法。以下为您提供几种量化多空表征的方法,以及如何在 JoinQuant(聚宽)平台上实现它们。

一、 基于 OHLC 的基础多空特征构造

最直接的方法是通过计算 K 线各部分的比例来量化多空力量的博弈:

  1. 多空对比度 (Bull/Bear Ratio)
    公式:(Close - Open) / (High - Low)
    含义:衡量实体占整个价格波动区间的比例。值为正且接近1表示多头绝对控盘;值为负且接近-1表示空头绝对控盘。
  2. 多头反击力度 (Lower Shadow Ratio)
    公式:(Min(Close, Open) - Low) / (High - Low)
    含义:下影线占整体波动的比例,代表下跌后多头将价格推高的力量。
  3. 空头打压力度 (Upper Shadow Ratio)
    公式:(High - Max(Close, Open)) / (High - Low)
    含义:上影线占整体波动的比例,代表上涨后空头将价格压低的力量。

二、 经典多空技术指标量化

金融工程领域已有许多成熟的基于 OHLC 的多空指标,您可以直接将其作为因子:

  1. WVAD (威廉变异离散量)
    公式:(Close - Open) / (High - Low) * Volume
    含义:结合了多空对比度和成交量,量化了多空双方在当天的真实资金博弈结果。
  2. ARBR (人气意愿指标)
    • AR (人气指标) = Sum(High - Open, N) / Sum(Open - Low, N)
    • BR (意愿指标) = Sum(High - Ref(Close, 1), N) / Sum(Ref(Close, 1) - Low, N)
      含义:AR 衡量开盘后的多空动能,BR 衡量隔夜及盘中的多空意愿。
  3. Elder-Ray Index (多空力道)
    • Bull Power (多头力道) = High - EMA(Close, N)
    • Bear Power (空头力道) = Low - EMA(Close, N)

三、 在 JoinQuant 中的实现代码

在 JoinQuant 中,您可以通过两种方式获取这些多空因子:一是自己通过行情数据计算,二是直接调用聚宽的因子库。

方法1:自定义计算基础多空特征

import pandas as pd
from jqdata import *

def get_custom_long_short_factors(security, start_date, end_date):
    # 获取 OHLC 数据
    df = get_price(security, start_date=start_date, end_date=end_date, 
                   frequency='daily', fields=['open', 'close', 'high', 'low'])
    
    # 避免分母为0
    range_hl = df['high'] - df['low']
    range_hl[range_hl == 0] = 0.0001 
    
    # 1. 多空对比度
    df['ls_ratio'] = (df['close'] - df['open']) / range_hl
    
    # 2. 多头反击力度 (下影线比例)
    df['bull_force'] = (df[['close', 'open']].min(axis=1) - df['low']) / range_hl
    
    # 3. 空头打压力度 (上影线比例)
    df['bear_force'] = (df['high'] - df[['close', 'open']].max(axis=1)) / range_hl
    
    # 计算次日涨跌幅作为机器学习的 Label (Target)
    df['next_day_return'] = df['close'].pct_change().shift(-1)
    
    return df[['ls_ratio', 'bull_force', 'bear_force', 'next_day_return']].dropna()

# 示例调用
factors_df = get_custom_long_short_factors('000001.XSHE', '2023-01-01', '2023-10-01')
print(factors_df.head())

方法2:直接调用 JoinQuant 因子库

聚宽因子库 (jqfactor) 已经内置了大量多空情绪因子,您可以直接提取用于相关性学习。

from jqfactor import get_factor_values

def get_jq_long_short_factors(security_list, start_date, end_date):
    # 定义需要获取的多空因子
    # WVAD: 威廉变异离散量
    # ARBR: 人气意愿指标差值
    # bull_power: 多头力道
    # bear_power: 空头力道
    factors = ['WVAD', 'ARBR', 'bull_power', 'bear_power']
    
    # 获取因子值
    factor_data = get_factor_values(securities=security_list, 
                                    factors=factors, 
                                    start_date=start_date, 
                                    end_date=end_date)
    return factor_data

# 示例调用
factor_dict = get_jq_long_short_factors(['000001.XSHE'], '2023-01-01', '2023-10-01')
# 查看多头力道因子
print(factor_dict['bull_power'].head())

四、 机器学习应用建议

  1. 数据平滑与标准化:单日的 K 线多空因子可能噪音较大,建议在输入模型前,对其进行移动平均(如计算 5 日均值)或使用 jqfactor.standardlize 进行标准化处理。
  2. 结合成交量:单纯的价格多空表征如果不结合成交量,往往缺乏置信度。建议将上述因子与成交量(Volume)或换手率(Turnover)相乘,或者作为独立的特征一起输入模型。
  3. 相关性检验:在输入复杂模型前,可以使用 Pandas 的 corr() 函数或 Spearman 秩相关系数,初步检验这些多空因子与 next_day_return(次日涨跌幅)的线性或单调相关性。