本作業所使用的 time series
模型為 LSTM ,並以前五天的資料來當作每次預測的依據,去預測接下來後一天的資料。
- Python 3.8.3
- Ubuntu 20.04.2 LTS
- 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
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為來自NASDAQ:IBM。在這份資料中有共有1476個 entries
和 4 個 features
。而本模型只使用的features為 close
,而testing data則為20個entries
。
為了加快模型收斂找到最佳參數組合,這裡使用MinMaxScaler
把資料重新scaling成 -1 至 1 之間。
epochs
設定為100,最後loss
約位於0.0014左右:
以此模型進行往後20天的股票之預測結果。
由於題目規定允許買空與賣空之動作,基於準確的預測結果,在決定買賣動作時,我們會觀察兩天後與三天後的曲線變化的預測,並分為以下情形:
- 當目前持有股票時: 若曲線向下,則賣,反之則不做動作
- 當目前無股票時: 若曲線向下,則賣空,反之則買
- 當目前賣空時: 若曲線向上,則買,反之則不做動作
觀察兩天後而不是一天後的目的在於當股票在持續漲跌時,可以利用買空與賣空動作獲得更大的利潤,由於一天只能買賣一張股票,故提早兩天預測。
最後產出之Actoin Table:
預測獲利經由test_calculator計算後可得約為8.87
- Stock
- Forecasting
- LSTM
- RNN
- Multivariables