Skip to main content

JoinQuant single factor analyzer

Project description

jqfactor_analyzer

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


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

安装

pip install jqfactor_analyzer

升级

pip install -U jqfactor_analyzer

具体使用方法

analyze_factor: 因子分析函数

使用示例

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

# 载入函数库

import pandas as pd

import jqfactor_analyzer as ja



# 获取 jqdatasdk 授权,输入用户名、密码,申请地址:http://t.cn/EINDOxE

# 聚宽官网,使用方法参见:http://t.cn/EINcS4j

import jqdatasdk

jqdatasdk.auth('username', 'password')



# 获取5日平均换手率因子2018-01-01到2018-12-31之间的数据(示例用从库中直接调取)

# 聚宽因子库数据获取方法在下方

from jqfactor_analyzer.sample import VOL5

factor_data = VOL5



# 对因子进行分析

far = ja.analyze_factor(

    factor_data,  # factor_data 为因子值的 pandas.DataFrame

    quantiles=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获取数据包,数据接口需调用聚宽 jqdatasdk 接口获取金融数据(试用注册地址)

    # 获取因子数据:以5日平均换手率为例,该数据可以直接用于因子分析
    
    # 具体使用方法可以参照jqdatasdk的API文档
    
    import jqdatasdk
    
    jqdatasdk.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 提供的 pandas.to_datetime 函数进行转换, 在转换前应确保 index 中的值都为合理的日期格式, 如 '2018-01-01' / '20180101', 之后再调用 pandas.to_datetime 进行转换

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

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

    import pandas as pd
    
    
    
    sample_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 转换为 DatetimeIndex
    
    factor_data.index = pd.to_datetime(factor_data.index)
    
    # 将 DataFrame 按照日期顺序排列
    
    factor_data = factor_data.sort_index()
    
    # 检查 columns 是否满足聚宽股票代码格式
    
    if not sample_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'])}
    
    
    
    import pandas as pd
    
    # 直接调用 pd.DataFrame 将 dict 转换为 DataFrame
    
    factor_data = pd.DataFrame(data).T
    
    
    
    print(factor_data)
    
    
    
    # 之后请按照 DataFrame 的方法转换成满足格式要求数据格式
    

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jqfactor_analyzer-1.0.11.tar.gz (266.8 kB view details)

Uploaded Source

Built Distribution

jqfactor_analyzer-1.0.11-py2.py3-none-any.whl (265.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file jqfactor_analyzer-1.0.11.tar.gz.

File metadata

  • Download URL: jqfactor_analyzer-1.0.11.tar.gz
  • Upload date:
  • Size: 266.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for jqfactor_analyzer-1.0.11.tar.gz
Algorithm Hash digest
SHA256 f008873897fef1621b202da97016b9702359fd4dcbe67acb80cd1887d866682b
MD5 8144682cc5b84f4115dfda264d119719
BLAKE2b-256 0dcd1800779fb67a068d46515ab65a190575afd0f920b1b7007f9ebe8cc13086

See more details on using hashes here.

File details

Details for the file jqfactor_analyzer-1.0.11-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for jqfactor_analyzer-1.0.11-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 02cd787e3d033ff1238e13338df93321a8560c059ad963126a45e86b036ac84e
MD5 8f5e3fad419aa4a00c1d43f40a0a174c
BLAKE2b-256 51904d5737459ffce0b7c26efcf6ec1ec13ed1b03bb7dc14fd8660d8e5389f8c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page