Quantopian是国外著名的量化交易平台,早期聚宽就是仿照这个网站开发的,算是这类平台的鼻祖了,可惜Quantopian最近刚宣布要停止运营了。Quantopian开发了许多优秀的开源项目,其中比较著名的有zipline、pyfolio和alphalens,zipline是事件驱动的回测引擎,Alphalens与Zipline开源回溯测试库以及Pyfolio配合使用,Pyfolio提供金融投资组合的绩效和风险分析。
Alphalens主要功能是alpha因子的相关性统计数据和图表展示,包括:
Returns Analysis
Information Coefficient Analysis
Turnover Analysis
Grouped Analysis
参考[2],并根据2修改后的例子
import numpy as np
import pandas as pd
import tushare as ts
from pyfinance import TSeries
ts.set_token('217696db052cdea3e43bec347ee55a8ebbcb501e0b6d57d816a7542f')
pro = ts.pro_api()
# 此接口获取的数据为未复权数据,回测建议使用后复权数据,这里为批量获取股票数据做了简化
df = pro.daily(ts_code='000001.SZ,600000.SH', start_date='20200101', end_date='20201231')
df.rename(columns={'trade_date':'date','ts_code':'asset'}, inplace=True)
df.index = pd.to_datetime(df['date'])
df.index.name = None
df.sort_index(inplace=True)
# MultiIndex,level0为日期,level1为股票代码,assets为get_clean_factor_and_forward_returns所需的因子数据格式
# column为股票代码,index为日期,值为股票收盘价
close = df.pivot_table(index='date',columns='asset',values='close')
close.index = pd.to_datetime(close.index)
df.index.name = 'date'
assets = df.set_index([df.index, df['asset']], drop=True)
单纯按照[2]的例子,可能会出现后面下面那段代码运行不出来。
from alphalens.utils import get_clean_factor_and_forward_returns
from alphalens.tears import create_full_tear_sheet
# 需要将pct_chg做shift处理,否则将使用未来数据
ret = get_clean_factor_and_forward_returns(assets[['pct_chg']].shift(2),close)
create_full_tear_sheet(ret, long_short=False)
重点
由于alphalens 是2020年的代码。但是pandas 好像进行了 修改不让下面这样的操作,所以需要修改alphalens.
mi = pd.MultiIndex.from_product([[1, 2], ["a", "b"]], names=["x", "y"])
mi.levels[0].name = "name via level"
需要修改 /alphalens/utils.py
进行如下修改。
#df.index.levels[0].name = "date"
#df.index.levels[1].name = "asset"
df.index.set_names("date",level=0)
df.index.set_names("asset",level=1)
[1] https://www.jianshu.com/p/78e101433ddf "Python 数据处理(二十九)—— MultiIndex 高级索引操作"
[2] https://blog.csdn.net/eryk86/article/details/109913768 "Quantopian单因子分析工具:Alphalens"