본문 바로가기
Paper review

[논문 리뷰] A Deep Reinforcement Learning Library for Automated Stock Trading in Quantitative Finance

by mssong92 2022. 9. 24.

https://paperswithcode.com/ 에서 Finance를 검색했을 때, FinRL이 가장 상위에 있어, 호기심을 갖게 되었고 해당 논문을 리뷰하기로 함.

Finance 검색 결과

 

1. Introduction

 

최근에 Deep Reinforcement Learning이 점점 더 많이 사용되고 있는데, 주식 거래에 있어서 실용적인 Deep Reinforcement Learning 에이전트를 학습 및 개발시키려면 많은 시간과 비용이 발생하며, 오류가 나기도 쉬움.

 

이를 위해 SOTADRL 알고리즘들(DQN, DDPG, PPO, SAC, A2C, TD3, etc)fine-tuning 하여 라이브러리 형태로 제공하여 사용자들이 오랜 시간 힘든 개발 과정을 거치지 않고 쉽고 빠르게 DRL 알고리즘을 통해 자신만의 Stock-Traning을 할 수 있게 하는 것을 목표로 함.

 

FinRL 라이브러리는 single stock trading, multiple stock trading, and portfolio allocation등의 프로그램을 통합하여 기능을 제공하며, NASDAQ-100, DJIA, S&P 500, HIS, SSE 50, CSI 300을 포함한 다양한 주식 시장의 거래 환경을 시뮬레이션 할 수 있고, 이는 모듈로 구성되어 있어 손쉽게 바꿔가며 테스트를 진행해볼 수 있음.

 

FinRL 라이브러리는 총 세가지 특성을 갖고 있음.

1. Completeness : 기본 요구 사항인 DRL 프레임워크의 구성 요소를 완전히 다룸.

2. Hands-on tutorials : 자세한 설명 및 튜토리얼을 통해 사용자가 라이브러리 기능을 잘 확인할 수 있게 함.

3. Reproducibility : 투명성을 보장하고, 사용자가 수행한 작업에 대한 확신을 제공하기 위해 재현성을 보장함.

 

2. Related Work

 

최근 Deep Reinforcement Learning 작업은 세 가지 접근 방식으로 분류할 수 있음.

1. Value based algorithm : Value function 만을 학습하고, policy 는 암묵적으로만 갖고 있는 알고리즘

2. Policy based algorithm : value function 없이 policy 만을 학습하는 알고리즘

3. Actor-critic based algorithm : 위 두 알고리즘의 장점을 합친 value function Policy를 모두 갖고 있는 알고리즘

 

FinRL은 금융 DRL 모델을 구축하기 위해 위와 같은 알고리즘들을 정교화 했으며,

FinRL 라이브러리와 유사한 기능을 공유하는 아래와 같은 많은 강화 학습 라이브러리들이 있음.

 

OpenAI Gym : 강화학습을 도와주고, 좀 더 일반적인 상황에서 강화학습을 할 수 있게 해주는 라이브러리

Google Dopamine : Google Research에서 만든 강화학습 알고리즘 개발에 치중할 수 있도록 환경과 설정을 제공하는 Framework

Rllib : Ray에서 제공하는 강화학습 라이브러리로 분산처리를 이용한 강화학습에 장점

 

 

3. FinRL Architecture

Three-layer architecture : FinRL은 아래 그림1과 같이 Applications, Financial Environments, DRL Agents & RL Agent의 세가지 계층으로 구성되어 있고, 에이전트 계층에서는 이전 작업을 반복하거나 더 큰 보상을 받기 위해 새로운 작업을 수행하든지를 탐색하기 위해 Environments 계층과 상호 작용함.

Modularity : 각 계층은 여러 모듈을 포함하고 각 모듈은 별도의 기능을 정의하며 모든 계층에서 특정 모듈을 선택하여 Stock Trading 작업을 구현할 수 있음.

 

그림1

 

DRL Model : 아래 표1에 있는 DRL 모델 중에 원하는 모델을 선택하여 Agent를 학습시킬 수 있음.

표1

 

호기심에 DRL algorithms 에 있는 모델 중에 DDPG를 Colab에서 돌려봤고, 아래 그림2와 같다.

그림2

 

4. Datasets

DRL 라이브러리는 아래 표2와 같은 다양한 데이터를 제공하고 있으며 암호화폐 관련 데이터도 제공하고 있다.

표2

 

5. Experiment

Model : TD3, DDPG, TD3

Train : 2009-01-01 ~ 2019-01-01

Test : 2019-01-01 ~ 2020-09-23

데이터 소스 : yahoofinance

시간 간격 : 1D

기술 지표 : macd, boll_ib, rsi_boll, close_30_sma, close_60_sma

초기 자본금 : 백만 , 거래 비용 : 1e-3

대상 : DJI 상장 30 종목

그림3

 

논문에서는 위와 같은 백테스팅 외에도, 여러가지 실험을 진행했는데 모두 성능이 괜찮았다. 이유가 궁금하여 찾아보던 도중 Risk 지표로 vix를 사용하는 것 외에도 turbulence를 활용한다는 것을 보고 turbulence index는 생소하여 찾아보았다. 

 

Turbulence 지수는 시장이 얼마나 정상적인 상황에서 벗어나 있는가를 측정한다.

금융시장이 비정상이라는 것은 자산들이 과거의 평균과 상관관계로 예상할 수 있는 정상적인 움직임에서 떨어져 있다는 것을 의미한다. Turbulence 지수는 극단적인 가격 변화, 상관도가 낮은 자산의 커플링 등의 움직임을 반영할 수 있다는 장점이 있다.

 

자료 : 한국투자증권

 

해당 라이브러리에서는 turbulence threshold 를 지정할 수 있게 되어 있으며, threshold 를 넘어가면 에이전트는

구매 조치를 중단하고 보유 주식을 점진적으로 판매하기 시작한다.

해당 실험에서의 turbulence 지수는 아래와 같이 threshold 70으로 지정하고 측정했다.

예시 코드는 아래와 같다.

turbulence_threshold example

 

실제로 논문처럼 백테스팅 결과가 잘 나오는지 확인하기 위해 Colab으로 해당 FinRL 라이브러리를 설치하여 테스트를 진행해보았다.

 

Model : DDPG

Train : 2009-01-01 ~ 2020-07-01

Test : 2020-07-01 ~ 2021-10-31

데이터 소스 : yahoofinance

시간 간격 : 1D

기술 지표 : macd, boll_ub, boll_lb, rsi_30, cci_30, dx_30, close_30_sma, close_60_sma, vix, turbulence

초기 자본금 : 백만 , 거래 비용 : 1e-3

대상 : DJI(다우존스) 상장 30 종목

FinRL 라이브러리 Colab 실험 진행

 

2020-07-01 부터 2021-10-28일까지 백테스팅해본 결과는 아래 그림4와 같으며, 수익률이 괜찮았지만

논문에서 나온 만큼은 아니었다. 그 이유는 논문에서는 2020년 2월~4월 (코로나 기간)이 있었고 해당 기간에 시장은 엄청나게 하락하는 반면 FinRL 라이브러리의 모델은 Turbulence를 활용하여 하락기간에 잘 버틴게 좋았던 것 같다.

그림4

 

6. Conclusions

이 논문에서는 교육 및 실증 목적으로 설계된 자동 주식 거래를 위해 만들어진 DRL 라이브러리인 FinRL 라이브러리를 제시한다.

FinRL은 확장성, 기본 이상의 시장 환경, 투자자 및 전략 수립자를 위한 광범위한 성과 평과 도구가 특징이다.

사용자는 시장 환경 조성에서 부터 학습 알고리즘, 수익성 있는 전략까지 모든 레이어에서 쉽게 접근할 수 있으며,

거래 전략 설계에서 FinRLtrain, validation, test의 흐름을 거치며 벤치마크 테스트는 물론 자동화된 백테스팅을 제공한다.

Jupyter 노트북 형식으로 FinRL을 사용하여 다양한 시나리오에서 쉽게 재현 가능한 수익성 있는 전략을 보여준다.

최근 강화 학습이 보다 더 떠오르고 있는 만큼, 주식시장에서의 강화 학습을 보다 쉽게 사용할 수 있게 도와주는 라이브러리로서 괜찮은 것 같고 이 라이브러리를 시작으로 강화 학습을 모델을 많이 테스트해서 적합한 모델을 선택하고 튜닝해보면 괜찮을 것 같다.

댓글