3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant 聚宽平台中,calc_factors 函数仅仅用于计算因子值,并没有内置中性化、标准化或去极值等数据处理操作。如果您需要对因子数据进行这些处理,需要额外调用聚宽提供的专用数据处理函数(如 neutralize、standardlize、winsorize 等)。
calc_factors 函数使用说明在回测以及研究中,可以通过调用 jqfactor 中的 calc_factors 函数来计算单因子分析中定义的因子值。
calc_factors(securities, factors, start_date, end_date, use_real_price, skip_paused)
['600000.XSHG', '000001.XSHE'])。Factor 类的自定义因子实例列表。context.current_dt。False,表示使用后复权价格。False。注意:当 dependencies 使用的因子为价量信息,且 skip_paused = True 时,返回的 DataFrame 的索引由 datetime 变为 int,值越大表示离『当前』日期越近。其他情况下,返回的 DataFrame 的索引为 datetime。返回一个 dict 对象:
name 属性。pandas.DataFrame,DataFrame 的 index 是日期,column 是股票代码,value 是计算出的因子值。from jqfactor import Factor, calc_factors
import numpy as np
# 自定义一个因子
class ALPHA013(Factor):
name = 'alpha013_name'
max_window = 1
dependencies = ['high','low','volume','money']
def calc(self, data):
high = data['high']
low = data['low']
vwap = data['money']/data['volume']
return (np.power(high*low,0.5) - vwap).mean()
# 定义股票池
securities = ['600000.XSHG','600016.XSHG']
# 计算因子值
factors = calc_factors(securities, [ALPHA013()], start_date='2017-01-01', end_date='2017-02-01', use_real_price=False, skip_paused=False)
# 查看因子值
print(factors['alpha013_name'].head())
既然 calc_factors 返回的是原始因子值,您可以使用聚宽提供的以下函数对返回的 DataFrame 进行后续处理:
neutralize)from jqfactor import neutralize
# 对因子数据进行行业和市值中性化
neutralize(factor_df, how=['jq_l1', 'market_cap'], date='2018-05-02', axis=1)
standardlize)from jqfactor import standardlize
# 对因子数据进行 Z-score 标准化
standardlize(factor_df, inf2nan=True, axis=1)
winsorize / winsorize_med)from jqfactor import winsorize, winsorize_med
# MAD 中位数去极值
winsorize_med(factor_df, scale=3, inclusive=True, inf2nan=True, axis=1)
# 分位数去极值
winsorize(factor_df, qrange=[0.05, 0.95], inclusive=True, inf2nan=True, axis=1)
总结:在多因子策略模板中,通常的流程是先通过 calc_factors(或 get_factor_values)获取原始因子值,然后再依次调用去极值、标准化、中性化函数对数据进行清洗,最后再用于打分或回归模型训练。