篇策略 篇研究 个想法
回测

基于小波变化的时间序列预测

2020-01-03 02:29:22 分享了策略 998 4 6

前言

之前一篇文章介绍了静态的【时间序列分析】小波去噪,最后发现,对于价格的时间序列,基于db4小波函数分解到3层可以取得不错的效果

本文的主题是考察小波变换在预测方面的应用。

思路

将数据序列进行小波分解,每一层分解的结果是上次分解得到的低频信号再分解成低频和高频两个部分。

如此进过N层分解后源信号X被分解为:X = D1 + D2 + ... + DN + AN

其中D1,D2,...,DN分别为第一层、第二层到等N层分解得到的高频信号,AN为第N层分解得到的低频信号。

本文方案为对D1,D2...DN和AN分别进行预测,然后进行小波重构实现对源信号的预测。步骤如下:

(1)对原序列进行小波分解,得到各层小波系数;
(2)对各层小波系数分别建立 ARMA 模型,对各层小波系数进行预测;
(3)用得到的预测小波系数重构数据。

一、分解

选取数据Binance交易所BTC/USDT的2019-01-01到2019-12-20数据,最后10天数据用来预测。其余数据用于建模。

小波函数取db4,分解层数为2。对数据进行分解

二、对各层系数建立ARMA模型并重构

隐藏输出
隐藏输出

接着,目标为预测最后10个数据,我们得求出每个小波系数ARMA模型需要预测多少步。方法就是查看所有数据小波分解后的系数个数并求出差值,具体如下:

隐藏输出

三、预测的结果

隐藏输出

不妨把代码打包为函数,进行多次检验

隐藏输出
隐藏输出

四、结论

在价格较“平稳”的时候,基于预测模型在短期有着较高的预测精度 当价格处于快速变化时,模型预测精度下降;

另一方面,模型还有很大改进的潜力。比如在小波分解后对各层小波系数进行建模的时候,可以尝试其他方法如神经网络SVR等,也许能获得更好的效果

下面我们就针对较“平稳”的阶段,进行回测,时间从2019年后两个月2019-11-10至2019-12-31。

选择Binacne的BTC/USDT交易对,调仓频率为1天。

策略为:

根据预测3天后的价格,计算估计的3天总的涨跌(回测时间较长)

  1. 若预计上涨超过2%则买入0.5BTC;预计下跌超过1%则卖出1BTC。
  2. 如果预测未来3天都涨,买入0.3BTC;如果预测未来都跌,卖出0.6BTC。

当然,这只是个玩具策略,为了测试基于小波预测构建策略的效果。

隐藏输出
篇策略 篇研究 个想法