Alphalens和Jqfactor_analyzer单因子分析解读

Alphalens和Jqfactor_analyzer单因子分析解读

摘要:

Alphalens和Jqfactor_analyzer都是一款开源的Python 的工具包,Alphalens是Quantopian公司(成立9年的知名量化平台于今年10月正式宣告关门)旗下,是较早的开源回测框架,因其接口简单易用被广泛的量化分析师所青睐,不过alphalens 作为国外的开源量化模块,在使用时应该注意美股与A股的不同(比如A股是单向交易一般散户不能做空,采用的是T+1的交易制度等),同时考虑到Quantopian公司的倒闭之后的维护性也是一个问题。Jqfactor_analyzer是国内聚宽旗下的,最早的版本发布于2019年5月,提供的主要回测功能和Alphalens比较相似:因子收益、因子 IC、因子换手以及事件研究的基础上做了功能的完善,不过在框架上采用了面向对象的思想具有很好的封装性,在后续使用中也可以利用其继承特性进行个性化功能定制,同时由于其可以通过对象直接访问各个因子分析结果的值,所以具备更好的可理解性、可测试性和可修改性。在使用方式上和Alphalens也略有些不同,需要建立连接在线获取prices、行业、权重数据,耗费时间,整体上Jqfactor_analyzer性能劣于Alphalens,但是在单个功能尤其是数据清洗部分Jqfactor_analyzer较Alphalens有所提升。下面就围绕他们的主要回测功能进行介绍。

  • 在介绍之前,首先给出我对因子和单因子分析的理解:因子就是以交易对象(股票)和交易日期为自变量的二元函数,通过这个函数得到交易对象在某个交易日的因子值。聚宽上提供了一些经典单因子的类别、概念、回测等,详见经典因子分析

接口使用

  • 获取因子数据
    股票:[‘000001.XSHE’,‘000002.XSHE’,‘000004.XSHE’,‘000006.XSHE’]
    因子:Skewness60 (个股收益的60日偏度)
    时间:‘2020-09-01’ - ‘2020-10-01’
# 导入函数库
from jqdatasdk import get_factor_values
import jqdatasdk
import jqfactor_analyzer as ja
jqdatasdk.auth("username","password")


factor_data = get_factor_values(securities=['000001.XSHE','000002.XSHE','000004.XSHE','000006.XSHE'], factors=['Skewness60','DEGM','quick_ratio'], start_date='2020-09-01', end_date='2020-10-01')
# 将字典类型数据转换为DataFrame
factor_data = pd.DataFrame(factor_data['Skewness60'])
#
# 将 index 转换为 DatetimeIndex
factor_data.index = pd.to_datetime(factor_data.index)

print(factor_data)

在这里插入图片描述

  • 对因子进行分析
# 对因子进行分析,参数使用默认值
far = ja.analyze_factor(factor=factor_data,industry='jq_l1',weight_method='mktcap',quantiles=2,periods=(1,5))

# 展示全部分析
far.create_full_tear_sheet(demeaned=False, group_adjust=False, by_group=False, turnover_periods=None, 
                           avgretplot=(5, 15), std_bar=False)

主要功能解读

  • 1. 因子收益表
    因子收益表

  • 1.1收益计算
    以2020-09-01,000001.XSHE为例:
    股票交易数据
    1期收益率计算为:
    (2020-09-02 close - 2020-09-01 close)/ 2020-09-01 close
    =(15.32-15.14)÷15.14= 0.0118890357
    5期收益率计算为
    (2020-09-08 close - 2020-09-01 close)/ 2020-09-01 close
    (15.43-15.14)÷15.14=0.01915

  • 1.2 因子值
    factor为所选择因子Skewness60的值

  • 1.3分组
    group这里按照聚宽1类jq_l1分的

  • 1.4权重
    聚宽增加weights,本例选用的是市值权重mktcap,即根据同一quantile下市值进行权重分配(市值和权重成正比)
    另外也可以选择 'avg’等权重(默认);‘mktcap’: 按总市值加权;‘ln_mktcap’: 按总市值的对数加权;‘cmktcap’: 按流通市值加权; ‘ln_cmktcap’: 按流通市值的对数加权

  • 2.alpha、 beta计算

def factor_alpha_beta(factor_data, demeaned=True, group_adjust=False):
    """
    计算因子的alpha(超额收益),
    alpha t-统计量 (alpha 显著性)和 beta(市场暴露).
    使用每期平均远期收益作为自变量(视为市场组合收益)
    因子值加权平均的远期收益作为因变量(视为因子收益), 进行回归.

    Parameters
    ----------
    factor_data : pd.DataFrame - MultiIndex
        一个 DataFrame, index 为日期 (level 0) 和资产(level 1) 的 MultiIndex,
        values 包括因子的值, 各期因子远期收益, 因子分位数,
        因子分组(可选), 因子权重(可选)
    demeaned : bool
        因子分析是否基于一个多空组合? 如果是 True, 则计算权重时因子值需要去均值
    group_adjust : bool
        因子分析是否基于一个分组(行业)中性的组合?
        如果是 True, 则计算权重时因子值需要根据分组和日期去均值
    Returns
    -------
    alpha_beta : pd.Series
        一个包含 alpha, beta, a t-统计量(alpha) 的序列
    """

    returns = fa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值