问题描述
看一些比较古早的帖子,里面有些代码通过继承 Factor 类来自己定义因子,然后用 calc_factors 计算,不过搜了下目前的 api 文档好像没有说明,想问问这块有没有文档?
解决方案
在 JoinQuant 聚宽平台的 API 文档中,关于 jqfactor 里的 Factor 类以及 calc_factors 函数是有详细说明的。这部分内容主要集中在**“因子定义和计算”**章节。以下为您整理的详细文档和使用指南:
1. 因子定义 (继承 Factor 类)
用户需要实现一个自定义因子的类,继承 Factor 类,并实现 calc 方法。max_window 和 dependencies 定义了在 calc 中可以获取到的数据,calc 实现因子的算法。
各属性的含义:
name:因子的名称,不能与基础因子冲突。max_window:获取数据的最长时间窗口,返回的是日级别的数据。dependencies:依赖的基础因子名称(如价量信息、财务数据、行业因子等)。
calc 方法说明:
calc的返回值即每天的因子值。calc需要返回一个pandas.Series,index 是股票代码,value 是因子值。- 可以通过
data参数获取通过max_window和dependencies定义的数据。data是一个 dict,key 是dependencies中的因子名称,value 是pandas.DataFrame。
示例代码:
from jqfactor import Factor
import numpy as np
class MA5(Factor):
name = 'ma5'
# 每天获取过去五日的数据
max_window = 5
# 获取的数据是收盘价
dependencies = ['close']
def calc(self, data):
# data['close'] 是一个 DataFrame,包含过去5天的收盘价
return data['close'][-5:].mean()
2. 因子计算 (使用 calc_factors)
在回测以及研究中,可以通过调用 jqfactor 中的 calc_factors 函数来计算自定义的因子值。
API 接口:
calc_factors(securities, factors, start_date, end_date, use_real_price, skip_paused)
参数说明:
securities: 股票代码列表。factors: 因子(object)列表,即您实例化的自定义因子对象。start_date: 开始日期。end_date: 结束日期(在回测中使用时,注意应该保证截止日期小于context.current_dt)。use_real_price: 是否使用真实价格。默认为 False,表示使用后复权价格。skip_paused: 是否跳过停牌。默认为 False。
返回值:
返回一个 dict 对象, key 是各 factors 的 name,value 是一个 pandas.DataFrame,DataFrame 的 index 是日期,column 是股票代码。
3. 完整示例
结合自定义因子和计算函数,以下是一个完整的示例:
from jqfactor import Factor, calc_factors
import numpy as np
# 1. 定义因子
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()
# 2. 定义股票池
securities = ['600000.XSHG', '600016.XSHG']
# 3. 计算因子值
factors = calc_factors(
securities=securities,
factors=[ALPHA013()],
start_date='2017-01-01',
end_date='2017-02-01',
use_real_price=False,
skip_paused=False
)
# 4. 查看因子值
print(factors['alpha013_name'].head())
通过这种方式,您可以非常灵活地利用聚宽底层的数据(如财务、量价等)来构建复杂的自定义因子,并将其无缝接入到单因子分析或多因子选股策略中。