前言
近几年,深度学习算法在计算机视觉领域有着出色表现。我们也经常好奇,在量化投资领域,我们是否能够使用图像识别技术预测股价。要解决这个问题,首先要回答以下两个问题:
- 如何将股价序列转换为计算机图片?(X)
- 如何定义预测的目标?(Y)
以上两个问题,本质上就是如何定义训练样本及训练目标的问题。这是每个机器学习任务都会遇到的问题。对于这两个问题,很多人直观的回答就是:如果是图像识别的模式,是不是直接输入股价K线图,预测未来一段时间的涨跌就可以了。这种端到端的方式,大概率是不会有非常好的效果的。
今天分享的这篇文章,来自IEEE。本文从以下几个方面解答了以上两个问题:首先,通过Market Profile将股价序列转换为灰度的图像,然后定义预测的目标为趋势的反转。最后,使用CNN模型,预测未来是否会发生趋势反转。
Market Profile
市场轮廓指标,国内也称为四度空间指标。与传统的K线图相比,更能直观的展示当前市场的价格分布。假设,我们把一天时间分为5个时间段,以ABCDE五个字母表示。每个时间段都有高开低收的价格,我们只使用最高价和最低价,然后把对应的时间段(字母表示)标注在该时间段对应的价格区间。如下图Day1,A时间段最高价为3130,最低价为3100,那就在3130至3100的对应位置标上A;然后,B时间段最高价为3120,最低价为3090,那就在3120至3090的对应位置标上B;以此类推。
Market Profile到灰度图像
上述转换得到的Market Profile还不能直接作为CNN的输入,必须再转换成图像。在上述示例中,使用了日内的行情数据(把一天分成了5个时间段)。但在实证的模型中,作者只使用的日度的K线价格数据。作者使用了过去25天的价格数据,那么针对这25天的价格数据,转换为Market Profile就有多种方法。作者采用了以下几种作为对比:
- 把所有25天的K线数据转换为Market Profile
- 把25天,以5天周期分成5段,每一个5天转换为Market Profile
然后,又可以根据不同日期用不同的颜色表示,最终可以有以下几种定义样本数据的方式(具体参考以下图9和图10):
- EGA,基于所有25天生成Market Profile,每个日期用不同的颜色表示。
- EGB,基于5天一个时间段生成5个Market Profile,所有日期用相同颜色表示。
- EGC,基于5天一个时间段生成5个Market Profile,每个时间段用相同颜色表示,时间段之间颜色不一样。
- EGC,基于5天一个时间段生成5个Market Profile,每个时间段的第N天用一种颜色,比如所有时间段中的第1天为一个颜色。
作者使用标普500mini期货,过去20年的数据,并采用1日窗口,按下图所示,滚动将K线数据转为图像数据。
数据标注
上述个步骤,如何将K线转换为图像,解决了第一个问题。对于预测目标,也就是趋势反转,作者采用了以下定义,其中c表示收盘价,如果t-5日收盘价大于t-10日收盘价、t日收盘价大于t-5日收盘价且t 5日收盘价小于t日收盘价,侧为上升趋势反转;如果t-5日收盘价小于t-10日收盘价、t日收盘价小于t-5日收盘价且t 5日收盘价大于t日收盘价,侧为下降趋势反转。
模型结构
文中采用CNN模型,对输入的图像做训练与预测,具体模型结构如下:
实证结果
文中首先给出了模型的结果,如下表2表3所示。然后还给出了应用到具体交易策略中的测试结果,如表4表5所示。在其中表4为2%止损的结果,表5为5%止损的结果。具体交易策略逻辑如下:
- t日,当模型预测趋势下降反转时(预测0),买入,并计划t 5日后卖出:
- 期间如果触发止损,则卖出;
- 如果下一日还是预测0,则在t 6日后卖出;
- 如果下一日预测为1,则还是在t 5日卖出;
- 如果下一日预测为2,则卖出。
- t日,当模型预测趋势上升反转时(预测1),卖出,并计划t 5日后买入:
- 期间如果触发止损,则买入;
- 如果下一日还是预测1,则在t 6日后买入;
- 如果下一日预测为0,则还是在t 5日买入;
- 如果下一日预测为2,则买入。
如图14所示,在所有对比中,EGC获得了最高的平均单笔收益,2%止损的情况下,其年化收益率为50.5%,盈亏比为1.74。
总结
本文最大的创新是利用Market Profile将原本的时间序列预测问题,转换为图像识别的问题。这样就可以使用CNN进行趋势反转的预测。关于其他细节,请参考原文:
https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9693504