因子特征工程:基于pandas和talib(代码)

原创文章第97篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。

昨天有同学留言,说能否更加成体系的梳理AI量化的相关知识体系,这个建议非常中肯,其实上周开始,在星球里已经这么做了。

公众号是主题文章的形式,一般是想到哪就写到哪了,都是独立成篇,但确实难以成体系。

后面按照:数据准备、特征工程 , 投资组合优化,模型训练与调优,回测与实盘来展开AI量化的一个完整的工作流程。

在做实验阶段,我们倾向于使用hdf5来存储时间序列数据,更快,更小。而实盘部署阶段,我们会建立mongo+Arctic的方式。

01 从tushare到hdf5

需要安装tushare包,pip install tushare即可。申请一个tushare的token。

tushare的代码生成器,直接加载回dataframe格式的数据

对数据进行处理,规范列名,排序,转换日期格式:

扫描二维码关注公众号,回复: 15075249 查看本文章

写入hdf5备用,处理一次后的数据,就不需要再处理了。

02 特征工程 

symbol = '000300.SH'
with pd.HDFStore('../data/index.h5') as store:
    prices = store[symbol]
prices

outlier_cutoff = 0.01

lags = [1, 5, 22, 66, 132, 252]
data = pd.DataFrame()
for lag in lags:
    data[f'return_{lag}d'] = prices['close'].pct_change(lag)

data = data.apply(lambda x: x.clip(lower=x.quantile(outlier_cutoff),
                                   upper=x.quantile(1 - outlier_cutoff)))
data.dropna(inplace=True)
data

import seaborn as sns
sns.clustermap(data.corr('spearman'), annot=True, center=0, cmap='Blues');

03  技术指标-talib

计算布林带及MACD:

计算RSI及MACD:

macd_data = pd.DataFrame({'hs300': prices.close, 'MACD': macd, 'MACD Signal': macdsignal, 'MACD History': macdhist})

fig, axes= plt.subplots(nrows=2, figsize=(15, 8))
macd_data.hs300.plot(ax=axes[0])
macd_data.drop('hs300', axis=1).plot(ax=axes[1])
fig.tight_layout()
sns.despine();

fig, axes= plt.subplots(nrows=3, figsize=(15, 10), sharex=True)
data.drop(['RSI', 'MACD'], axis=1).plot(ax=axes[0], lw=1, title='Bollinger Bands')
data['RSI'].plot(ax=axes[1], lw=1, title='Relative Strength Index')
axes[1].axhline(70, lw=1, ls='--', c='k')
axes[1].axhline(30, lw=1, ls='--', c='k')
data.MACD.plot(ax=axes[2], lw=1, title='Moving Average Convergence/Divergence', rot=0)
axes[2].set_xlabel('')
fig.tight_layout()
sns.despine();

小结:

使用pandas的时间序列功能,计算一个滑动类的特征非常容易。

而涉及传统的技术指标时,talib可以省掉我们不少事情。

今天把这两项技术做了一个介绍:代码和数据都上传至星球,可以前往下载使用。

后续要引入“因子表达式”,就是使用MACD($close,12,26,9)这样的公式,直接给数据做标注,因为机器学习需要使用的因子会非常多,手动代码费事,而且容易出错。

近期文章:

hdf5:兼容pandas的dataframe合适量化的存储格式

AI量化投资系列课——numpy入门

知识星球

猜你喜欢

转载自blog.csdn.net/weixin_38175458/article/details/127734885