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
结果展示:
# 生成统计图表
far.create_full_tear_sheet(
demeaned=False, group_adjust=False, by_group=False,
turnover_periods=None, avgretplot=(5, 15), std_bar=False
)
结果展示:
获取聚宽因子库数据的方法
-
聚宽因子库包含数百个质量、情绪、风险等其他类目的因子
-
连接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)
-
将键为日期, 值为各股票因子值的
Series
的dict
转换成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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file jqfactor_analyzer-1.0.7-py2.py3-none-any.whl
.
File metadata
- Download URL: jqfactor_analyzer-1.0.7-py2.py3-none-any.whl
- Upload date:
- Size: 256.0 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 64641f8441ca445acba3a83beb621628bf8867baa82fd7b05f41a25916387ce3 |
|
MD5 | 94be25b73718882e50a728c6664193dc |
|
BLAKE2b-256 | 1a7ce0144b144f46aec2a1f6d2211c35d0f0163f5b9c3ee77494efbfc92877b5 |