LSTM预测股票涨跌--结合技术分析视角(一)

一. 近期,网上看到些用LSTM通过价量数据预测股票未来收益的文章,通过历史价量对未来走势进行分类和预测,这是技术分析师过去100年都在干的事儿,用什么样的分析周期,将价量数据加工成什么技术指标,指标之间以及不同交易周期的图表之间如何配合使用,也都是技术分析师需要回答的问题,是否能够通过这些业务知识的理解,利用LSTM模型得到更好的效果,这是本文要探讨的问题,作为本系列工作的起点,先列一下之前看过的工作:

  1. LSTM Neural Network for Time Series Prediction,作者是:Jakob Aungiers 现就职于汇丰银行伦敦总部,担任全球资产管理的开发副总裁。擅长机器学习,神经网络等领域。这一工作的github地址:https://github.com/jaungiers/LSTM-Neural-Network-for-Time-Series-Prediction;方法介绍:http://www.jakob-aungiers.com/articles/a/LSTM-Neural-Network-for-Time-Series-Prediction;这一工作有中文译文:https://www.jianshu.com/p/61b87628b737,但英文的内容更全面些;

2.BigQuant上面通过LSTM使用30天的高、开、低、收、成交量、成交额等六个特征预测未来五天收益率的工作,网络结构比较简单:一层LSTM+三层Dense, 地址:https://community.bigquant.com/t/LSTMNetworks%E5%BA%94%E7%94%A8%E4%BA%8E%E8%82%A1%E7%A5%A8%E5%B8%82%E5%9C%BA%E6%8E%A2%E7%A9%B6/317;

  1. https://www.jianshu.com/p/8122f866436b,BigQuant工作中数据来源为tushare的版本,我这个系列的实践以这一工作为起点,为一工作也作为我未来工作的baseline,下面的背景介绍中,也会用到文中的部分内容,在此对作者表示感谢;

  2. 至于LSTM的背景知识,以及编程实现,我也是个小白,而网上的好资料很多,在此只推荐一本我觉得不错的书《deep learning with python with python》


    LSTM预测股票涨跌--结合技术分析视角(一)_第1张图片
    deep-learning-with-python.jpg

二. 工作的基本思路:
(一)在先工作简介:

  1. LSTM处理股票数据的一般流程:


    LSTM预测股票涨跌--结合技术分析视角(一)_第2张图片
    image.png

    2.在先工作的基本思路:
    (1).为利用沪深300前100天的收盘价预测下一天的收盘价。从结果来看,LSTM对未来20天的预测基本上是对过去100天收盘价变化的趋势的总括,因此最终的预测结果以及回测结果都不是很理想。 之后尝试增加了features(每日Open,High,Low,Close,Amount,Volume),效果依然不是很好。
    通过对结果进行分析以及阅读研究一些研报,得到的初步结论为:一是input时间跨度太长(100天的价格走势对未来一天的价格变化影响很小),而待预测数据时间跨度太短;二是收盘价(Close)是非平稳数据,LSTM对于非平稳数据的预测效果没有平稳数据好。
    (2)LSTM对沪深300未来五日收益率预测
    综合以上两点,本文所使用的输入和输出为利用过去30天的数据预测将来五天的收益。
    测试对象:沪深300
    数据选择和处理:
    input的时间跨度为30天,每天的features为['close','open','high','low','amount','volume']共6个,因此每个input为30×6的二维向量。
    output为未来5日收益future_return_5(future_return_5>0.2,取0.2;future_return_5<-0.2,取-0.2),为使训练效果更加明显,output=future_return_5×10; features均经过标准化处理(在每个样本内每个feature标准化处理一次)。
    训练数据:沪深300 2005-01-01至2014-12-31时间段的数据;测试数据:沪深300 2015-01-01至2017-05-01时间段数据。
    模型构建:鉴于数据较少(训练数据约2500个,预测数据约500个),因此模型构建的相对简单。模型共四层,为一层LSTM层+三层Dense层。


    LSTM预测股票涨跌--结合技术分析视角(一)_第3张图片
    image.png

    (3)回测(待续):得到LSTM预测结果后,若LSTM预测值小于0,则记为-1,若大于0,记为1。
    (二)进一步实验的初步思路(假设问好):

    (1) 在先工作并未进行回测,仅为回测进行了最基础的数据准备,bigquant的工作是将回归结果按未来5天收益率>0作为买入信号,进行回测。下一步工作中,仅用回归的mse,以及混淆矩阵:


    LSTM预测股票涨跌--结合技术分析视角(一)_第4张图片
    image.png

    此处真阳性即预测上涨实际也上涨,真阴性即预测下跌实际也下跌。如果简单实验的结果支持进一步实验,再结合资金管理及风控手段,形成交易策略并进行回测。
    (2)在先工作中,在时间周期的选择上,用前30天的价量数据预测未来5天的涨跌幅,并根据预测结果进行操作决策,操作的最小周期为5天,即一周,根据技术分析的Factor of Five原则,其上一级分析周期应该为25天,再结合笔者自己的交易习惯,在时间周期上相关的过去周期为5天、20天、30天和60天,具体如何使用这些天数的组合,在实验过程中再行调整。
    (3).在先工作中,选用【高、开、低、收、成交量、成交额】等六个特征,在传统技术分析中, 这六个特征中,最常用的是收盘价和成交量,在价格形态和趋势线等工具中,上升趋势线还用到高、低。本次实验中,先采用:[close],[close,volume],[close,high,low,volume]等三个组合,与在先工作中的六个特征结果进行比较。完成后,拟加入笔者最常用的技术指标,包括:ROC、sma,ema,macd、roc等;前不久看过一个挪威同行的工作,工作中称将技术信号(如超买、超卖、是否金叉)作为机器学习算法的输入对股价的预测有帮助,在本次工作中也拟试试这一思路;
    (4).技术分析的践行者中,严肃交易者通常只针对2-3个特定的技术形态进行操作,甚至有些交易者只操作某一个特定形态,即使是技术分析师,在不启动忽悠模式的时候,对很多股票的走势也无从判断,因此,对于任何股票的走势预测的严肃预测,应该是【涨、跌、不知道】,这一思路在未来的实际中也要体现,这一思路部分源于听锐信(racing)资本管大宇的相关工作,特此向管总表示感谢;
    (5). 在技术分析,通常应用综合多个交易周期形成交易决策,用大周期定势,用本周期和次周期分析决定进出,这部分工作的经典代表,我知道的有:《交易为生》作者埃尔德的三重滤网系统、缠论的区间套分析法,这两种方法,也是笔者现在最为常用的技术分析体系,未来如有机会将另行讨论。如果前述4个工作在实证中有效,笔者将讨论不同周期数据预测的组合使用,以及LSTM结果与技术交易系统结合使用的可能性。
    以上种种只是初步的设想,未来的走向还是要在实证中不停的完善和修订,实证的结果也会放在后续文章中。
    (6). 今天一位好友提到只用LSTM不用Dense会得到更好的效果,过几天一并证实。

你可能感兴趣的:(LSTM预测股票涨跌--结合技术分析视角(一))