본문 바로가기
공부기록

[Stock Forecasting]BackTesting in LSTM Stock Forecasting (공부기록 10일차, 240421)

by RiverWon 2024. 4. 22.

어제 완전 가족 대잔치가 있어서 공부를 못했다. 오늘은 미뤄뒀던 주가예측모델+백테스팅을 적용해 보고, 실험한 글에 대한 내용이다.

 

https://colab.research.google.com/drive/1wAKfZMaxPvACqjUunWVNMGsSrj7hdrCU#scrollTo=ooL4Edh2FPyU

사용한 코랩

 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com

Architecture

논문들 Figure 멋지길래 따라해봤는데,, 별로다

 

Experiment

 

Backtesting library를 사용하려면 반드시 dataframe에 Open, High, Low, Close value들이 있어야 한다.

기존 LSTM 모델에서는 Close값으로 Close만 예측했어서, 각각 항목에 대해 모델을 돌려 dataframe을 합쳤다.

값이 소수점인 이유는 액면분할, 주식 병합 등의 이유로 액면가가 달라서, MinMaxScaler을 통해 (-1, 1)사이의 값으로 Scaling을 진행해서 그런 것이다.

DataFrame 예시

처음 만들었던 모델에 들어간 csv데이터는 Google의 최근 5개년 데이터여서, 결측치를 제거하고 예측값을 뽑아 내면 데이터 개수가 61개 밖에 되지 않아 예측이 에측이 아닌 꼴이 되었다.

Trades는 거래 횟수인데, 거래 횟수도 적고 SMA(Simple Moving Average)값도 영향을 미칠 정도로 역할을 하지 못했다.

일단 데이터 개수를 늘리기로 하여 구글의 상장 이후부터 최근까지의 주가데이터를 다운받았다.

Batch size를 12로 키우고, SMA값도(hyperparameter) 각각 50, 100으로 설정하였다.

데이터 증가를 한 이후의 결과이다.

거래 횟수도 늘어났고, 전체적인 수치가 예측 모델에 대한 백테스팅을 한다는 정도는 나왔다.

 

Backtesting라이브러리는 원하는 항목에 대해 최적화를 수행할 수 있다.

나의 경우 Return [%]에 대해 최적화를 수행했다.

최적화를 수행하면, simple moving average의 값을 설정한 stride로 건너다니며 최적의 SMA값을 찾아 설정해 가장 높은 Return [%]이 나오는 SMA 2개를 찾아준다.

Return [%]값이 17%가량 상승한 것을 알 수 있다.

 

최적화 수행 전, SMA는 각각 50과 100으로 설정해 두었다.

 

최적화 수행 이후, 그 값이 30,80으로 바뀌었다,

 

SMA

n1, n2로 값이 두 개인데, 이런 SMA(이동평균선)을 활용하는 이유는 아래와 같다.

단기 이동평균선이 장기 이동평균선을 교차해서 지나갈 때(골든크로스) 매수타이밍

장기 이동평균선이 단기 이동평균선을 교차해서 지나갈 때(데드크로스) 매도타이밍

 

출처 : https://m.upbitcare.com/academy/education/common/190

 

 

Duration을 500 day로 설정했을 때

우측 그림이 Return [%]에 대한 최적화 결과

 

Duration을 1년으로 했을 때

Duration을 1년으로 했을 때의 결과. 우측이 최적화

Conclusion & Future Work

  LSTM으로 주가 예측 모델을 만들었다. 강의영상 보고 따라한 거지만 사실상 처음으로 실습해 보고 싶은 모델을 만들고 예측까지 해 보았다. 이후 백테스팅이라는걸 알게 되었고, 라이브러리를 통해 에측한 모델을 백테스팅해 보았다. Open, High, Low, Close의 4가지로만 예측을 한 모델을 믿고 실제 돈을 사용할 수 있을 수는 없지만, 가격적인 측면으로만 예측을 수행했을 때, 기대보다 괜찮은 결과가 나왔고, 적당한 수익률도 기대할 수 있어 신기했다.

  TA(technical Analysis)의 관점으로 분석했지만, 주식은 장기적으로 볼 땐 거시경제의 흐름을 알아야 돈을 벌 수 있다고 생각한다. 이쪽 공부를 계속 진행하게 된다면, LLM을 통해 시장경제의 흐름을 수치화해 LSTM forecasting모델과 연계해 TA와 FA(Fundamental Analysis)를 동시해 수행하는 모델을 만들어 볼 것이다.