Projekti on tehty Tietotekniikan laboratoriokurssia varten. Projektin ideana on rakentaa LSTM-pohjainen neuroverkko, joka ennustaa S&P 500 -indeksin päivittäistä suuntaa teknisten indikaattorien avulla.
Malli hakee historiallisen S&P 500 -datan vuodesta 2010 alkaen ja laskee teknisiä indikaattoreita, kuten RSI, ATR, Bollingerin nauhat sekä liukuvien keskiarvojen suhteita. Näiden pohjalta LSTM-verkko ennustaa seuraavan päivän logaritmista tuottoa. Kohdemuuttujana käytetään logaritmista tuottoa raakojen hintojen sijaan, jotta datan stationaarisuus säilyy koko aika-alueella.
- Suoritusympäristö: Python 3.14
- Syväoppiminen: PyTorch (LSTM-arkkitehtuuri)
- Data: yfinance (S&P 500, tunnus
^GSPC) - Esikäsittely: NumPy, Pandas, scikit-learn
src/
dataProcess.py # Datan haku, piirteiden laskenta, skaalaus ja sekvenssien luonti
model.py # StockLSTM-arkkitehtuuri
train.py # Opetussilmukka, validointi ja oppimisnopeuden säätö
main.py # Pääohjelma: pipeline, opetus ja arviointi
test_model.pth # Tallennettu mallin tila
- Python 3.14
- pip
python -m venv venv
source venv/bin/activate
pip install torch numpy pandas scikit-learn yfinancecd src
python main.pyOhjelma hakee datan automaattisesti, opettaa mallin ja tulostaa tulokset.
| Parametri | Arvo |
|---|---|
| Malli | LSTM |
| Piirteet | 7 |
| Piilokerroksen koko | 64 |
| Kerroksia | 2 |
| Dropout | 0.2 |
| Sekvenssipituus | 60 päivää |
| Optimoija | Adam |
| Häviöfunktio | MSELoss |
| Piirre | Kuvaus |
|---|---|
RSI |
Suhteellinen voimaindeksi (0–100) |
ATR_pct |
Keskimääräinen todellinen vaihteluväli suhteessa hintaan |
BB_width |
Bollingerin nauhojen leveys suhteessa SMA_20:een |
BB_pct |
Hinnan sijainti Bollingerin nauhojen sisällä (0–1) |
EMA_ratio |
EMA_12 / SMA_20, lyhyen aikavälin momentumsignaali |
SMA_ratio |
SMA_20 / SMA_50, trendin suuntasignaali |
Volume_relative |
Päivän volyymi suhteessa 20 päivän keskivolyymiin |
| Mittari | Tulos |
|---|---|
| Suuntatarkkuus | 56.6% |
| MAE | 0.6456% (logaritminen tuotto) |
| Opetushäviö | ~0.0027 |
| Validointihäviö | ~0.0018 |