价格时序预测-LSTM

  • LSTM原理
  • LSTM基本使用原理
  • Pseudo Trading
  • Keras LSTM Layer使用结果
  • In-Sample结果
  • Out-of-Sample结果


LSTM原理

LSTM是一种有监督神经网络。在普通的RNN模块里增加一个“短期记忆”模块,使得神经网络能够对基于“很久之前”曾经看到过并重复出现的“时域特征片段”作出预测上的修正。一个简单的应用是利用文本里的相距比较远的“上下文”作更好的文本分析。

LSTM是最新的受到广泛应用的有监督神经网络之一。

LSTM基本使用原理

(以下的表述基于Keras里的LSTM layer)

  • 一个Episode里的收敛性&Overfitting(Underfitting)可以用Valiation Data Set来检查。在fit时,指定一个1/3的validation_split。
  • 网络的 表达能力 (层数&每层节点数)需要和 数据量 匹配,否则非常容易出现Overfitting。LSTM的“表达能力”非常出众。同时还要用Dropout来控制LSTM疯狂的表达能力。

Pseudo Trading

回测中需要有个交易规则。我使用的是相邻两个Candle的Close Price,p0, p1,其中p1是预测的未来价格。如果p1>p0,则buy@p0,并且在下一个时刻sell@p1*,其中p1*是真实价格。反之如是。

忽略所有滑点和手续费。

Keras LSTM Layer使用结果

单层LSTM,128个节点,使用MinMaxScaler, Early-exit, Dropout。模型越简单越好。 数据 为5分钟BTC/USD交易历史数据,提取OHLCV以及ATR等一共9个Features作为LSTM输入,输出为价格。注意,Deep Learning (DL)本身是随机算法,所以即使是in-sample回测,也是有随机性。但是,In-sample的 Agg. Returns明显是too good to be true,不可能是真实交易。

从Out-of-Sample结果看,LSTM训练的模型是有能力beat the market的。在统计套利方面,还是有很强的实用性。LSTM很适合小资金投资者使用,因为成本很低,结果不错。

为LSTM提供数据时,要考虑Feature的选择,比如BTC这样几乎就是没有基本面,完全是动量交易驱动,那么选择的Feature可以很简单,比如ATR,EMA等等常用的指标都很有效。但是,如果交易 APPL或者GOOG,那就需要其他Reference数据,因为这些大公司的股价对基本面数据是有很强的依赖。

同时,数据的时间尺度也要考虑。5分钟的波动有可能无法cover taker手续费,所以可以考虑小时级别的交易,或者等待波动大的时候开启交易。

In-Sample结果

lstm单步预测python lstm预测原理_神经网络

lstm单步预测python lstm预测原理_lstm单步预测python_02

Out-of-Sample结果

只展示两个时间段作为示范。其中第一个时间段跑了两次回测,展示出算法的随机性。使用时需要考虑是否要voting algo的“加持”。

lstm单步预测python lstm预测原理_lstm_03

lstm单步预测python lstm预测原理_神经网络_04


lstm单步预测python lstm预测原理_lstm_05

lstm单步预测python lstm预测原理_神经网络_06

lstm单步预测python lstm预测原理_lstm_07



java怎么做等幂 java等号和equals

==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系呢? 首先,==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值。int x=6; int y=6; String s1=new String("aaa"); String s2=new String("aaa"); Syste