3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易中,将蜡烛图(K线)的开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)转化为具体的数值因子,是进行机器学习和相关性分析的常见且有效的方法。以下为您提供几种量化多空表征的方法,以及如何在 JoinQuant(聚宽)平台上实现它们。
最直接的方法是通过计算 K 线各部分的比例来量化多空力量的博弈:
(Close - Open) / (High - Low)(Min(Close, Open) - Low) / (High - Low)(High - Max(Close, Open)) / (High - Low)金融工程领域已有许多成熟的基于 OHLC 的多空指标,您可以直接将其作为因子:
(Close - Open) / (High - Low) * VolumeSum(High - Open, N) / Sum(Open - Low, N)Sum(High - Ref(Close, 1), N) / Sum(Ref(Close, 1) - Low, N)High - EMA(Close, N)Low - EMA(Close, N)在 JoinQuant 中,您可以通过两种方式获取这些多空因子:一是自己通过行情数据计算,二是直接调用聚宽的因子库。
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())
聚宽因子库 (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())
jqfactor.standardlize 进行标准化处理。corr() 函数或 Spearman 秩相关系数,初步检验这些多空因子与 next_day_return(次日涨跌幅)的线性或单调相关性。