3. Factorset Usage

3.1. Module contents

In all listed functions, the self argument is implicitly the currently-executing BaseFactor instance.

class factorset.factors.BaseFactor(factor_name, tickers, factor_parameters, data_source, save_dir=None, mongolib=None)[source]

因子基类,用于因子的计算和存取 当创建新的因子时,需要继承此类,并实现prepare_data,和generate_factor方法。

clear_factor()[source]

对当天的因子进行清洗,主要有:

  1. 过滤掉无穷大和无穷小的值
  2. 过滤掉nan值

Todo

Survivor bias check

  1. 过滤掉未上市的股票(未上市可能已经有财报发布,导致会出现一些值)
  2. 过滤掉已经退市的股票
Returns:过滤后的因子值
generate_factor(trading_day)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
generate_factor_and_store(from_date, to_date)[source]

计算因子并录入数据库

Parameters:
  • from_date – (str)起始时间
  • to_date – (str)结束时间
Returns:

None

get_factor_name()[source]

获取因子唯一名称

Returns:(str)因子名
get_trading_days()[source]

获取计算因子的交易日历

Returns:(list)交易日历
prepare_data(from_date, to_date)[source]

Note

必须实现prepare_data方法,用于一次性获取需要的数据。

Parameters:
  • from_date – 原始数据起始日
  • to_date – 原始数据结束日
save()[source]

存入数据

3.2. Generate Factors

To use factorset in a project, we need to inherit the BaseFactor for the New Factor:

import os
import pandas as pd
import tushare as ts
from factorset.factors import BaseFactor
from factorset.data.OtherData import code_to_symbol, shift_date, market_value
from factorset.data import CSVParser as cp
from factorset.Util.finance import ttmContinues

class NewFactor(BaseFactor):
"""
:Name: NewFactor
:Cal_Alg: NewFactor = blablabla
:App: NewFactor can never blow up your account!

"""

def __init__(self, factor_name='NewFactor', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None):
    # Initialize super class.
    super(NewFactor, self).__init__(factor_name=factor_name, tickers=tickers,
                                 factor_parameters=factor_parameters,
                                 data_source=data_source, save_dir=save_dir)

def prepare_data(self, begin_date, end_date):

    self.data = cp.choose_a_dataset()

def generate_factor(self, trading_day):

    factor_at_trading_day = awesome_func(self.data)

    return factor_at_trading_day

if __name__ == '__main__':
    from_dt = '2017-07-15'
    to_dt = '2018-04-09'

    # 取沪深300
    hs300 = ts.get_hs300s()
    hs300.code = hs300.code.apply(code_to_symbol)

    NewFactor = NewFactor(
        factor_name='NewFactor',
        factor_parameters={},
        tickers=hs300.code.tolist(),
        save_dir='',
        data_source=os.path.abspath('.'),
    )

    NewFactor.generate_factor_and_store(from_dt, to_dt)
    print('因子构建完成,并已成功入库!')

Note

The data_source can be designated when using Arctic or MongoDB.

3.3. Factors Set

Accruals2price

class factorset.factors.Accruals2price.Accruals2price(factor_name='Accruals2price', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

Name:应计收入与价格比率(Accruals-to-price)
计算方法:应计收入与价格比率 =(净利润_TTM - 经营活动产生的现金流量金额_TTM) / 总市值
应用:若应计收入与价格比率较高,公司可能夸大销售额,未来可能产生亏损,损害股价。
注:O’Shaughnessy J P. What works on Wall Street: The classic guide to the best-performing investment strategies of all time[M]. McGraw Hill Professional, 2011.
generate_factor(trading_day)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
prepare_data(begin_date, end_date)[source]

Note

必须实现prepare_data方法,用于一次性获取需要的数据。

Parameters:
  • from_date – 原始数据起始日
  • to_date – 原始数据结束日

AssetTurnover

class factorset.factors.AssetTurnover.AssetTurnover(factor_name='AssetTurnover', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:资产周转率
计算方法:营业收入_TTM / 资产总计_TTM,营业收入_TTM为最近4个季度报告期的营业收入之和,资产总计_TTM为最近5个季度报告期总资产的平均值。
应用:资产周转率越高,表明企业总资产周转速度越快。销售能力越强,资产利用效率越高。
generate_factor(date_str)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
prepare_data(begin_date, end_date)[source]

Note

必须实现prepare_data方法,用于一次性获取需要的数据。

Parameters:
  • from_date – 原始数据起始日
  • to_date – 原始数据结束日

Beta

class factorset.factors.Beta.Beta(factor_name='Beta_60D', tickers='000016.SH', factor_parameters={'benchmark': '000300', 'lagTradeDays': 60}, data_source='', save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:Beta系数
计算方法:取最近样本区间,分别计算指定证券日普通收益率Xi和沪深300日普通收益率Yi,OLS回归计算Beta。
应用:Beta系数是用来衡量两个时间序列之间关系的统计指标。在金融数据的分析中,Beta用来衡量个股相对于市场的风险。
generate_factor(end_day)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
prepare_data(begin_date, end_date)[source]

数据预处理

CATurnover

class factorset.factors.CATurnover.CATurnover(factor_name='CATurnover', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:流动资产周转率
计算方法:流动资产周转率 = 营业收入_TTM / 流动资产总计_TTM,营业收入_TTM为最近4个季度报告期的营业收入之和,流动资产总计_TTM为最近5个季度报告期总资产的平均值。
应用:流动资产周转率越高,表明企业流动资产周转速度越快,利用越好。在较快的周转速度下,流动资产会相对节约,其意义相当于流动资产投入的扩大,在某种程度上增强了企业的创收能力。
generate_factor(end_day)[source]

逐日生成因子数据

Parameters:end_day – 因子生产的日期
Returns:ret – indx为ticker,value为因子值
Return type:pd.Series类型
prepare_data(begin_date, end_date)[source]

数据预处理

CurrentRatio

class factorset.factors.CurrentRatio.CurrentRatio(factor_name='CurrentRatio', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:流动比率(Current Ratio);营运资金比率(Working Capital Ratio);真实比率(Real Ratio)
计算方法:流动比率 = 流动资产合计_最新财报 / 流动负债合计_最新财报
应用:流动比率越高,说明资产的流动性越大,短期偿债能力越强。
generate_factor(date_str)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
prepare_data(begin_date, end_date)[source]

Note

必须实现prepare_data方法,用于一次性获取需要的数据。

Parameters:
  • from_date – 原始数据起始日
  • to_date – 原始数据结束日

EP_LYR

class factorset.factors.EP_LYR.EP_LYR(factor_name='EP_LYR', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:静态市盈率的倒数;最近年报的市盈率的倒数
计算方法:EP_LYR=净利润(不含少数股东权益)_最新年报/总市值
应用:市盈率越低,代表投资者能够以相对较低价格购入股票。
注:这里用的是市值,而不是价格,这种方法适合计算日度的数据,防止除权除息带来的价格扰动。
generate_factor(trading_day)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
prepare_data(begin_date, end_date)[source]

Note

必须实现prepare_data方法,用于一次性获取需要的数据。

Parameters:
  • from_date – 原始数据起始日
  • to_date – 原始数据结束日

EP_TTM

class factorset.factors.EP_TTM.EP_TTM(factor_name='EP_TTM', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:过去滚动4个季度(12月)市盈率的倒数
计算方法:EP_TTM = 净利润(不含少数股东权益)_TTM /总市值
应用:市盈率越低,代表投资者能够以相对较低价格购入股票。
generate_factor(trading_day)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
prepare_data(begin_date, end_date)[source]

数据预处理

GPOA

class factorset.factors.GPOA.GPOA(factor_name='GPOA', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:毛利率;毛利比总资产
计算方法:毛利率 = (营业收入 - 营业成本) / 总资产
应用:毛利率可以反应企业的盈利能力,是一个商品经过生产转换内部系统以后增值。
generate_factor(date_str)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
prepare_data(begin_date, end_date)[source]

Note

必须实现prepare_data方法,用于一次性获取需要的数据。

Parameters:
  • from_date – 原始数据起始日
  • to_date – 原始数据结束日

GrossMarginTTM

class factorset.factors.GrossMarginTTM.GrossMarginTTM(factor_name='GrossMarginTTM', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:毛利率;销售毛利率
计算方法:=(营业收入_TTM - 营业成本_TTM)/ 营业收入_TTM,营业收入_TTM为最近4个季度报告期的营业收入之和,营业成本_TTM为最近4个季度报告期的营业成本之和。
应用:毛利率越高表明企业的盈利能力越强,控制成本的能力越强。但是对于不同规模和行业的企业,毛利率的可比性不强。
generate_factor(date_str)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
prepare_data(begin_date, end_date)[source]

Note

必须实现prepare_data方法,用于一次性获取需要的数据。

Parameters:
  • from_date – 原始数据起始日
  • to_date – 原始数据结束日

InterestCover

class factorset.factors.InterestCover.InterestCover(factor_name='InterestCover', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:利息覆盖率;利息覆盖倍数(InterestCover)
计算方法:EBIT / 利息费用,其中 EBIT=利润总额+净利息费用;净利息费用=利息支出-利息收入,若未披露财务费用附注,则直接取财务费用值
应用:利息覆盖率可以衡量企业的偿债能力,特别是在公司经历业绩低谷,自由现金流脆弱的时期更为关键,它可以说明公司是否还有能力支付利息以避免偿债风险,以及是否还有融资能力来扭转困境。
generate_factor(date_str)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
prepare_data(begin_date, end_date)[source]

Note

必须实现prepare_data方法,用于一次性获取需要的数据。

Parameters:
  • from_date – 原始数据起始日
  • to_date – 原始数据结束日

LDebt2TA

class factorset.factors.LDebt2TA.LDebt2TA(factor_name='LDebt2TA', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:长期负债比率(Long-term liability rate)
计算方法:长期负债比 = 长期负债 / 资产总额
应用:长期负债比率越小,表明公司负债的资本化程度低,长期偿债压力小;反之,则表明公司负债的资本化程度高,长期偿债压力大。
generate_factor(end_day)[source]

逐日生成因子数据

Parameters:end_day – 因子生产的日期
Returns:ret – indx为ticker,value为因子值
Return type:pd.Series类型
prepare_data(begin_date, end_date)[source]

数据预处理

Momentum

class factorset.factors.Momentum.Momentum(factor_name='momentum_60D', tickers='000016.SH', factor_parameters={'lagTradeDays': 60}, data_source='', save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:动量因子,股票收益率
计算方法:该指标的值等于最近三个月的股票收益率,利用当日和之前第252个交易日的复权价计算收益率,公式如下: Momentum_3M=(dajclose_price(t)/ dajclose_price(t-63)-1)
generate_factor(end_day)[source]

计算增量因子数据 :param end_day: 因子生产的日期 :return: pd.series,index为ticker,value为因子值

prepare_data(begin_date, end_date)[source]

制作因子的数据准备 :param begin_date: :param end_date: :return:

NATurnover

class factorset.factors.NATurnover.NATurnover(factor_name='NATurnover', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:净资产周转率
计算方法:NATurnover = revenue_TTM / netAsset_TTM,净资产周转率 = 营业收入_TTM / 净资产总计_TTM,营业收入_TTM为最近4个季度报告期的营业收入之和,净资产总计_TTM为最近5个季度报告期总资产的平均值。
应用:资产周转率越高,表明企业总资产周转速度越快。销售能力越强,资产利用效率越高。
generate_factor(end_day)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
prepare_data(begin_date, end_date)[source]

数据预处理

QuickRatio

class factorset.factors.QuickRatio.QuickRatio(factor_name='QuickRatio', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:速动比率(Quick Ratio);酸性测验比率(Acid-test Ratio)
计算方法:速动比率 = 速动资产合计_最新财报 / 流动负债合计_最新财报;速动资产=流动资产-存货=流动资产-存货-预付账款-待摊费用
应用:速动比率是衡量企业流动资产中可以立即变现用于偿还流动负债的能力。速动资产包括货币资金、短期投资、应收票据、应收账款、其他应收款项等,可以在较短时间内变现。
generate_factor(date_str)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
prepare_data(begin_date, end_date)[source]

Note

必须实现prepare_data方法,用于一次性获取需要的数据。

Parameters:
  • from_date – 原始数据起始日
  • to_date – 原始数据结束日

ROIC

class factorset.factors.ROIC.ROIC(factor_name='ROIC', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:投资资本回报率
计算方法:投资资本回报率 = (净利润(不含少数股东权益)_TTM + 财务费用 _TTM)/ 投资资本_TTM,投资资本 = 资产总计 - 流动负债 + 应付票据 + 短期借款 + 一年内到期的长期负债,净利润_TTM为最近4个季度报告期的净利润之和,投资资本_TTM为最近5个季度报告期总资产的平均值。
应用:一般而言,资本回报率较高表明公司强健或者管理有方。但同时,也可能管理者过分强调营收,忽略成长机会,牺牲长期价值。
generate_factor(end_day)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
prepare_data(begin_date, end_date)[source]

Note

必须实现prepare_data方法,用于一次性获取需要的数据。

Parameters:
  • from_date – 原始数据起始日
  • to_date – 原始数据结束日

RoeGrowth1

class factorset.factors.RoeGrowth1.RoeGrowth1(factor_name='RoeGrowth1', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:ROE(TTM)增长(上一季度)
计算方法:ROE增长 = 本季度ROE(TTM) - 上一季度ROE(TTM)
generate_factor(end_day)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
prepare_data(begin_date, end_date)[source]

Note

必须实现prepare_data方法,用于一次性获取需要的数据。

Parameters:
  • from_date – 原始数据起始日
  • to_date – 原始数据结束日

RoeGrowth2

class factorset.factors.RoeGrowth2.RoeGrowth2(factor_name='RoeGrowth2', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:ROE(TTM)增长(去年同期)
计算方法:ROE增长 = 当期ROE(TTM) - 去年同期ROE(TTM)
generate_factor(end_day)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
prepare_data(begin_date, end_date)[source]

Note

必须实现prepare_data方法,用于一次性获取需要的数据。

Parameters:
  • from_date – 原始数据起始日
  • to_date – 原始数据结束日

TA2TL

class factorset.factors.TA2TL.TA2TL(factor_name='TA2TL', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:资产负债比(百度百科),资产负债率(Debt Assets ratio)的倒数
计算方法:资产负债比 = 资产总额 / 负债总额
应用:资产所占的比重越大,企业的经营风险就比较低,但相对来说,企业的资金利用就不是太有效率。
generate_factor(end_day)[source]

逐日生成因子数据

Parameters:end_day – 因子生产的日期
Returns:ret – indx为ticker,value为因子值
Return type:pd.Series类型
prepare_data(begin_date, end_date)[source]

数据预处理

UnleverBeta

class factorset.factors.UnleverBeta.UnleverBeta(factor_name='UnleverBeta_60D', tickers='000016.SH', factor_parameters={'benchmark': '000300', 'lagTradeDays': 60}, data_source='', save_dir=None)[source]

Bases: factorset.factors.BaseFactor

名称:UnleverBeta因子,剔除财务杠杆比率的Beta(账面价值比)
计算方法:UnleverBeta = Beta / (1 + 总负债 / 股东权益)
应用:Unlevered beta本意是作为一个实际beta估算的中间值,排除资本结构差异的影响。无财务杠杆的企业只有经营风险,没有财务风险,无财务杠杆的贝塔系数是企业经营风险的衡量,该贝塔系数越大,企业经营风险就越大,投资者要求的投资回报率就越大,市盈率就越低。
generate_factor(end_day)[source]

Note

必须实现generate_factor方法,用于计算因子并返回因子的值。

Parameters:trading_day – 循环交易日
prepare_data(begin_date, end_date)[source]

数据预处理