Forecasting Stock Market Indices Using Wavelet Transform, LSTM, and Bi-LSTM

  • ปิยศรัณย์ ลิขิตาภรณ์ มหาวิทยาลัยหอการค้าไทย
  • สมพร ปั่นโภชา
  • บำรุง พ่วงเกิด
Keywords: Wavelet Transform, LSTM, Bi-LSTM, Stock Market Indices

Abstract

This study aims to study the efficiency of forecasting stock market indices using LSTM and Bi-LSTM neural networks and to construct models for effective forecasting outcomes. Also, it aims to study the noise attenuation of wavelet transforms (Wavelet) affecting the speed of learning process of both neural networks. The used data was daily which included open price, close price, high price, low price, and trading volume. It was 32 years 8 months from January 1, 1985 to August 31, 2018 for the S&P 500, Nikkei 225, and NASDAQ Composite. Another, the Hang Seng Index, was 30 years 8 months from January 1, 1987 to August 31, 2018.

These studies have shown that Bi-LSTM neural networks provide better forecasting performance than LSTM neural networks whether the data undergoes Wavelet or not. The root-mean-square error (RMSE) of Wavelet's S&P 500, Nikkei 225, NASDAQ Composite, and Hang Seng Index (LSTM : Bi-LSTM) were obtained as 0.01646 : 0.01585, 0.00539 : 0.00517, 0.01596 : 0.01351, and 0.01011 : 0.00873, respectively. For Non-wavelet, the RMSE were 0.01348 : 0.01347, 0.00551 : 0.00518, 0.01211 : 0.00937, and 0.01033 : 0.01016, respectively. In addition, using the Wavelet to filter the data before constructing both neural network models can enable neural networks to learn information faster than usual.

However, when considering the efficiency of neural networks via the Wavelet data, the results were moderate: the Nikkei 225 and Hang Seng Index performed better on the Wavelet data, the RMSE of Bi-LSTM were 0.00518 : 0.00517 and 0.01016 : 0.00873 (Non-wavelet : Wavelet), respectively. The S&P 500 and NASDAQ Composite performed better on Non-wavelet data, Bi-LSTM’s RMSE were 0.01347 : 0.01585 and 0.00937 : 0.01351, respectively.

Published
2021-08-29

Most read articles by the same author(s)

<< < 1 2 3 4 5 6