Skip to content

因子分析 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())