Skip to content

Howeng98/DSAI_HW2

Repository files navigation

DSAI_HW2 Stock Forcasting

本作業所使用的 time series 模型為 LSTM ,並以前五天的資料來當作每次預測的依據,去預測接下來後一天的資料。

Environment

  • Python 3.8.3
  • Ubuntu 20.04.2 LTS

Requirement

  • pandas == 1.2.3
  • keras == 2.4.3
  • matplotlib == 3.2.2
  • numpy == 1.19.5
  • sklearn == 0.24.1
  • pydot == 1.4.2
  • graphviz == 0.16

Build

Install requirement.txt

pip3 install -r requirements.txt

執行 trader.py。 Input 和 Output path 已經有一份default定義在trader.py里了.

python3 trader.py dataset/training.csv dataset/testing.csv output.csv

建議直接執行ipynb檔案來直接看我們在各個區塊的輸出結果。

Input data

Input的data為來自NASDAQ:IBM。在這份資料中有共有1476entries4features。而本模型只使用的features為 close,而testing data則為20entries

image image

Scaling

為了加快模型收斂找到最佳參數組合,這裡使用MinMaxScaler把資料重新scaling成 -11 之間。

Model Structure

image

Training

epochs設定為100,最後loss約位於0.0014左右:

image

image

Prediction Result

以此模型進行往後20天的股票之預測結果。

image

Action Decision

由於題目規定允許買空與賣空之動作,基於準確的預測結果,在決定買賣動作時,我們會觀察兩天後與三天後的曲線變化的預測,並分為以下情形:

  • 當目前持有股票時: 若曲線向下,則賣,反之則不做動作
  • 當目前無股票時: 若曲線向下,則賣空,反之則買
  • 當目前賣空時: 若曲線向上,則買,反之則不做動作

觀察兩天後而不是一天後的目的在於當股票在持續漲跌時,可以利用買空與賣空動作獲得更大的利潤,由於一天只能買賣一張股票,故提早兩天預測。

最後產出之Actoin Table:

image

預測獲利經由test_calculator計算後可得約為8.87

image

Keywords

  • Stock
  • Forecasting
  • LSTM
  • RNN
  • Multivariables