多因子模型之因子(信号)测试平台----alphalens(一)

来源:互联网 发布:红外图谱数据库 编辑:程序博客网 时间:2024/06/04 18:01

        之前,我们计算了revs10这个因子,并且对其进行了去极值、标准化、和行业中性。

计算因子,并合理处理是单因子测试的第一步,我们必须有正确、合理的因子值,才会有有意义的结果,否则就是garbage in, garbage out。

        对于单因子测试,quantopian有一个很好的开源的python工具,就是alphalens,当然,如果我们想做一个让自己满意的单因子回测平台的话,必然是需要对原生的alphalens做一些修改的。

        这一部分,我们先将我们的数据处理成alphalens可以接受的数据格式,然后做一个简单的测试,看看一切是否都正常。

1.数据处理

        如果我们想使用alphalens,那么就要遵守alphalens的规矩。而alphalens的规矩,就是我们传入的数据要符合alphalens的要求。
import pandas as pdimport alphalensimport matplotlib.pyplot as pltind_dict = { u'000156.SZ': u'6122010000000000',             u'000157.SZ': u'6107000000000000',             u'000166.SZ': u'1000012613000000',             u'000333.SZ': u'6111000000000000',             u'000338.SZ': u'1000012588000000',             u'000402.SZ': u'6118000000000000',             u'000413.SZ': u'6108000000000000',             u'000415.SZ': u'1000012613000000',             u'000423.SZ': u'6115000000000000',             u'000425.SZ': u'6107000000000000',             u'000503.SZ': u'6115000000000000',             u'000538.SZ': u'6115000000000000',             u'000540.SZ': u'6118000000000000',             u'000555.SZ': u'1000012601000000',             u'000559.SZ': u'1000012588000000',             u'000568.SZ': u'6112000000000000',             u'000623.SZ': u'6115000000000000',             u'000625.SZ': u'1000012588000000',             u'000627.SZ': u'1000012613000000',             u'000630.SZ': u'6105000000000000',             u'000651.SZ': u'6111000000000000',             u'000671.SZ': u'6118000000000000',             u'000686.SZ': u'1000012613000000',             u'000709.SZ': u'6104000000000000',             u'000712.SZ': u'1000012613000000',             u'000718.SZ': u'6118000000000000',             u'000725.SZ': u'6108000000000000',             u'000728.SZ': u'1000012613000000',             u'000738.SZ': u'1000012579000000',             u'000750.SZ': u'1000012613000000',             u'000768.SZ': u'1000012579000000',             u'000776.SZ': u'1000012613000000',             u'000778.SZ': u'6104000000000000',             u'000783.SZ': u'1000012613000000',             u'000792.SZ': u'6103000000000000',             u'000793.SZ': u'6122010000000000',             u'000800.SZ': u'1000012588000000',             u'000826.SZ': u'6116000000000000',             u'000839.SZ': u'6123000000000000',             u'000858.SZ': u'6112000000000000',             u'000876.SZ': u'6101000000000000',             u'000895.SZ': u'6112000000000000',             u'000917.SZ': u'6122010000000000',             u'000938.SZ': u'1000012601000000',             u'000963.SZ': u'6115000000000000',             u'000977.SZ': u'1000012601000000',             u'000983.SZ': u'6102000000000000',             u'001979.SZ': u'6118000000000000',             u'002007.SZ': u'6115000000000000',             u'002008.SZ': u'6108000000000000'}data = pd.read_csv('total_data.csv', index_col=0)data['date'] = pd.to_datetime(data['date'])factor_df = data[['date', 'sec_id', 'neuted_score']]factor_df = factor_df.set_index(['date', 'sec_id']) # 因子值的数据price_df = data[['date', 'sec_id', 'close']]price_df = price_df.pivot(index='date', columns='sec_id', values='close') #股票价格的数据factor_data = alphalens.utils.get_clean_factor_and_forward_returns( \    factor_df, price_df, quantiles=5, groupby=ind_dict    ) # 利用alphalens自带的工具,生成alphalens可以接受的数据。
        具体,每一个部分,factor_df,price_df的具体结构是怎么样的,可以查看之前笔者关于alphalens的教程。
http://blog.csdn.net/qtlyx/article/details/73693129

2. 测试一下我们的数据

        我可以尝试使用一下上面的数据:
alphalens.tears.create_summary_tear_sheet(factor_data)# price_df = price_df.pivot(index='tradeDate', columns='secID', values='closePrice')plt.show()
        然后大家就可以看到相应的效果了。
       具体每一个部分意义,包括图片的含义,是我们接下来的重点,也是单因子测试的核心点。


阅读全文
0 0
原创粉丝点击