joinquant单因素分析仪

jqfactor-analyzer的Python项目详细描述


jqfactor_analyzer

聚宽单因子分析工具开源版


聚宽单因子分析工具开源版是提供给用户进行因子分析的工具,提供了包括计算因子IC值,因子收益,因子换手率等各种详细指标,用户可以按照自己的需求查看因子详情。

欢迎加入jqfactor_analyzer交流群,QQ 群聊号码:779882614

安装

pip install jqfactor_analyzer

升级

pip install -U jqfactor_analyzer

具体使用方法

analyze_factor: 因子分析函数

使用示例

  • 示例:5日平均换手率因子分析

# 载入函数库importpandasaspdimportjqfactor_analyzerasja# 获取 jqdatasdk 授权,输入用户名、密码,申请地址:http://t.cn/EINDOxE# 聚宽官网及金融终端,使用方法参见:http://t.cn/EINcS4jimportjqdatasdkjqdatasdk.auth('username','password')# 获取5日平均换手率因子2018-01-01到2018-12-31之间的数据(示例用从库中直接调取)# 聚宽因子库数据获取方法在下方fromjqfactor_analyzer.sampleimportVOL5factor_data=VOL5# 对因子进行分析far=ja.analyze_factor(factor_data,# factor_data 为因子值的 pandas.DataFramequantiles=10,periods=(1,10),industry='jq_l1',weight_method='avg',max_loss=0.1)# 获取整理后的因子的IC值far.ic

结果展示:

1

# 生成统计图表far.create_full_tear_sheet(demeaned=False,group_adjust=False,by_group=False,turnover_periods=None,avgretplot=(5,15),std_bar=False)

结果展示:

2

获取聚宽因子库数据的方法

  1. 聚宽因子库包含数百个质量、情绪、风险等其他类目的因子

  2. 连接jqdatasdk获取数据包,数据接口需调用聚宽 ^{} 接口获取金融数据(试用注册地址)

    # 获取因子数据:以5日平均换手率为例,该数据可以直接用于因子分析# 具体使用方法可以参照jqdatasdk的API文档importjqdatasdkjqdatasdk.auth('username','password')# 获取聚宽因子库中的VOL5数据factor_data=jqdatasdk.get_factor_values(securities=jqdatasdk.get_index_stocks('000300.XSHG'),factors=['VOL5'],start_date='2018-01-01',end_date='2018-12-31')['VOL5']

将自有因子值转换成 DataFrame 格式的数据

  • index 为日期,格式为 pandas 日期通用的 DatetimeIndex

  • columns 为股票代码,格式要求符合聚宽的代码定义规则(如:平安银行的股票代码为 000001.XSHE)

    • 如果是深交所上市的股票,在股票代码后面需要加入.XSHE
    • 如果是上交所上市的股票,在股票代码后面需要加入.XSHG
  • 将 pandas.DataFrame 转换成满足格式要求数据格式

    首先要保证 index 为 DatetimeIndex 格式

    一般是通过 pandas 提供的 ^{} 函数进行转换, 在转换前应确保 index 中的值都为合理的日期格式, 如 '2018-01-01' / '20180101', 之后再调用 pandas.to_datetime 进行转换

    另外应确保 index 的日期是按照从小到大的顺序排列的, 可以通过 ^{} 进行排序

    最后请检查 columns 中的股票代码是否都满足聚宽的代码定义

    importpandasaspdsample_data=pd.DataFrame([[0.84,0.43,2.33,0.86,0.96],[1.06,0.51,2.60,0.90,1.09],[1.12,0.54,2.68,0.94,1.12],[1.07,0.64,2.65,1.33,1.15],[1.21,0.73,2.97,1.65,1.19]],index=['2018-01-02','2018-01-03','2018-01-04','2018-01-05','2018-01-08'],columns=['000001.XSHE','000002.XSHE','000063.XSHE','000069.XSHE','000100.XSHE'])print(sample_data)factor_data=sample_data.copy()# 将 index 转换为 DatetimeIndexfactor_data.index=pd.to_datetime(factor_data.index)# 将 DataFrame 按照日期顺序排列factor_data=factor_data.sort_index()# 检查 columns 是否满足聚宽股票代码格式ifnotsample_data.columns.astype(str).str.match('\d{6}\.XSH[EG]').all():print("有不满足聚宽股票代码格式的股票")print(sample_data.columns[~sample_data.columns.astype(str).str.match('\d{6}\.XSH[EG]')])print(factor_data)
  • 将键为日期, 值为各股票因子值的 Seriesdict 转换成 pandas.DataFrame

    可以直接利用 pandas.DataFrame 生成

    sample_data= \
    {'2018-01-02':pd.Seris([0.84,0.43,2.33,0.86,0.96],index=['000001.XSHE','000002.XSHE','000063.XSHE','000069.XSHE','000100.XSHE']),'2018-01-03':pd.Seris([1.06,0.51,2.60,0.90,1.09],index=['000001.XSHE','000002.XSHE','000063.XSHE','000069.XSHE','000100.XSHE']),'2018-01-04':pd.Seris([1.12,0.54,2.68,0.94,1.12],index=['000001.XSHE','000002.XSHE','000063.XSHE','000069.XSHE','000100.XSHE']),'2018-01-05':pd.Seris([1.07,0.64,2.65,1.33,1.15],index=['000001.XSHE','000002.XSHE','000063.XSHE','000069.XSHE','000100.XSHE']),'2018-01-08':pd.Seris([1.21,0.73,2.97,1.65,1.19],index=['000001.XSHE','000002.XSHE','000063.XSHE','000069.XSHE','000100.XSHE'])}importpandasaspd# 直接调用 pd.DataFrame 将 dict 转换为 DataFramefactor_data=pd.DataFrame(data).Tprint(factor_data)# 之后请按照 DataFrame 的方法转换成满足格式要求数据格式

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
具有x86javapath的x64机器上x86java上的java JNI未满足链接错误   java将Pixmap的一部分上传到GPU   图像Java位图RLE8格式   java Android studio谷歌广告崩溃应用程序   java如何创建包含未知数量对象的变量?   Java计算给定int数组的所有可能组合   java JDBC classnotfound异常   httpclient中的java将HttpEntity转换为字符串的最优雅/正确的方法是什么?   如何从Java程序运行nano?   java在安卓中调用自定义类/方法   调用方法和JOptionPane后,允许代码继续执行所需的java计时器或其他想法   关于侦听器的向量Java并发问题   线程池执行器Java线程池   java配置DTO上的Swagger javax验证约束   Java中用于按钮功能的swing操作命令   ServletOutputStream中的java设置状态代码   java打印输入数组的平均值