原创文章第97篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。
昨天有同学留言,说能否更加成体系的梳理AI量化的相关知识体系,这个建议非常中肯,其实上周开始,在星球里已经这么做了。
公众号是主题文章的形式,一般是想到哪就写到哪了,都是独立成篇,但确实难以成体系。
后面按照:数据准备、特征工程 , 投资组合优化,模型训练与调优,回测与实盘来展开AI量化的一个完整的工作流程。
在做实验阶段,我们倾向于使用hdf5来存储时间序列数据,更快,更小。而实盘部署阶段,我们会建立mongo+Arctic的方式。
01 从tushare到hdf5
需要安装tushare包,pip install tushare即可。申请一个tushare的token。
tushare的代码生成器,直接加载回dataframe格式的数据
对数据进行处理,规范列名,排序,转换日期格式:
写入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)这样的公式,直接给数据做标注,因为机器学习需要使用的因子会非常多,手动代码费事,而且容易出错。
近期文章: