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


    原创文章第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)这样的公式,直接给数据做标注,因为机器学习需要使用的因子会非常多,手动代码费事,而且容易出错。

    近期文章:

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

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

    知识星球

  • 相关阅读:
    基于JavaWeb的物流管理系统的设计与实现
    bootstrap-table+Django: 服务端分页(包括搜索查询功能)
    Docker 学习---Docker下载与安装、Docker概念与原理
    C 练习实例75-输入一个整数,并将其反转后输出
    OpenCV图像特征提取学习三,LBP图像特征检测算法
    GO语言篇之CGO
    Linux 管道命令使用
    多线程核心API和Lock锁的使用
    麒麟KYLINOS上使用开始菜单图标开启或关闭vnc
    c++ virtual base class
  • 原文地址:https://blog.csdn.net/weixin_38175458/article/details/127734885