因子分析 API
用户小需要实现一根自定义的类,继承 Factor 类,实现 calc 方法:
python
class MA5(Factor):
name = 'ma5'
max_window = 5
dependencies = ['close']
def calc(self, data):
return data['close'][-5].mean()上述代码中的变量含义为:
- name 因子名称,命名不能与基础因子冲突
- max_windows 获取数据的最长时间窗口,返回的是日级别的数据
- dependencies 依赖的基础因子名称
在 dependencies 中,我们可以使用的基础因子有这些:
- get_price 中可以获取到的价量信息:open, close, high, low, volume, money
- 财务指标因子:当日可以看到的最新单季财务指标,包含了 fundamentals 的全部指标,详细指标在股票财务数据中
- 前 N 季度的财务数据:通过在因子后面加 "_1" 的方式,获取前几季度的财务指标,如 operation_revenue_1,N 的取 值范围是 1~7,operation_revenue 获取的是最新报告期的上一期数据。
- 行业因子:包含证监会行业分类、聚宽一、二级行业分类、申万一、二、三级行业分类,返回时是一个 bool 型变量, 如果某个股票属于某个行业,则返回 1,否则返回 0
- 概念因子:类似于行业因子,返回一个 bool 型变量,如果某只股票属于某个概念,则返回 1,否则返回 0
- 指数因子:类似于行业因子,返回一个 bool 型变量,如果某只股票属于某个指数,则返回 1,否则返回 0
- 资金流因子:通过 get_money_flow API 查询到的数据。
在 calc 中,通过 data 参数来获取 max_window 和 dependencies 定义的数据。data 是一个 dictionary 变量,key 是 dependencies 中的因子名称,其值是 pandas.DataFrame 类型的数据。
示例:计算营业收入的 ttm 因子
这是一个因子分析的示例
python
from jqfactor import Factor
class OR_TM(Factor):
# 设置因子名称
name = 'operating_revenue_ttm'
# 设置获取数据的时间窗口长度
max_window = 1
# 设置依赖的数据
dependencies = ['operating_revenue',
'operating_revenue_1',
'operating_revenue_2',
'operating_revenue_3']
# 计算因子的函数,返回一个pandas.Serirs类型
def calc(self, data):
# 计算ttm,前四季度相加
ttm = data['operating_revenue'] +
data['operating_revenue_1'] +
data['operating_revenue_2'] +
data['operating_revenue_3']
# 将ttm转换成series
return ttm.mean()因子在回测中的使用
在回测中,可以直接调用 calc_factor 函数来计算单因子分析中定义的因子值:
python
calc_factors(securities, factors, start_data, end_data)其中,securities 是股票代码列表,factors 表示因子列表,start_data 表示开始日期,end_data 表示截止日期。
calc_factor 返回值是一个 dict 对象,其关键字是 factors 的 name,value 是一个 pandas.DataFrame。
示例:
python
from jqfactor import Factor, calc_factors
# 定义ALPHA013因子
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()
# 定义GROSSPROFITABILITY因子
class GROSSPROFITABILITY(Factor):
name = 'gross_profitability'
max_window = 1
dependencies = ['total_operating_revenue', 'total_operating_cost', 'total_assets']
def calc(self, data):
total_operating_revenue = data['total_operating_revenue']
total_operating_cost = data['total_operating_cost']
total_assets = data['total_assets']
gross_profitability = (total_operating_revenue - total_operating_cost)/total_assets
return gross_profitability.mean()
# 股票池
securities = ['600000.SXHG', '600016.XSHG']
# 运行calc_factors()函数
factors = calc_factors(securities,
[ALPHA013(), GROSSPROFITABILIT()],
start_data = '2017-01-01', end_data = '2017-02-01')
# 打印
print(factors['alpha013_name'].head())