1. Introduction

Automated사람X low-frequency(사람과 같은, high는 비싸고 정보 적음) quantative stock (역사적 데이터와 규칙 기반)trading에 있어 사람과 비슷하게 행동하는 가장 적절한 DRL(Deep Reinforce Learning) 모델을 다룬다. 이때 처음부터 끝까지 DRL로 된 모델만을 확인하며 포토폴리오 구성과 관련된모델은 다른 방식을 사용하기 때문에 배제했다

이 논문의 목표는 AI의 금융 분야에서의 적용 가능성으로 이 목표에 대한 현재 시점에서의 문제로는 1) 각 논문에서 서로 다른 환경에서 실험이 됐던 것과 2) 만약 실제로 많은 이익을 얻었다면 논문으로 쓰지 않았을 것이라는 것이다. 이에 대해 여러가지 논문들을 종합하여 공통적으로 어떤 환경에서 진행을 해야하며, 이를 통해 이 목표를 달성할만한 모델을 만들기 위해 3가지 RL 접근법을 이용해 알아보고자 한다(1. Critic-only 2. Actor-only 3. Actor-Critic)

이 논문을 관통하는 2가지 핵심질문과 그에 대한 결론은 다음과 같다.

  1. DNN(Deep Neural Network)를 이용하여 인간 트레이더와 같은 수준의 수익을 얻는 모델을 만들 수 있을까? A: timeframe을 분에서 일일 데이터로 주어졌을 때 DRL을 이용한 트레이딩에 엄청난 잠재력이 있으며, 몇몇 프로토타입에서 특정 시장에 대해 성공을 거뒀다
  2. 그렇다면 DRL을 이용한다면 시장과 트레이더 전문가의 수준을 뛰어넘을 수 있을까? A: 엄선된 시장에서 timeframe을 15분에서 일일 데이터로 두었을 때 경쟁력이 있다고 추론한다.

Summary

AI 금융 분야에서의 DRL의 적용 가능성에 대해 탐구해보고 있으며 Automated low-frequency quantative stock에 한하여 트레이더와 같은 수준의 모델을 만들 수 있을지, 이를 능가할 수 있는 모델을 만들 수 있는지 알아보고 그 결과 몇몇 프로토타입에서 성공을 거뒀고 경쟁력이 있다는 결론을 얻었다

Thinking

일단 실제로 많은 이익을 얻은 모델이 있다면 논문으로 쓰지 않았을 것이라는 내용이 가장 마음에 꽂혔다. 결국 가장 최신의 기술에 대한 정보가 적고, 내가 직접 이를 알아내야한다는 뜻일 듯 싶다. 더불어 timeframe을 어떻게 잡을지, 어떤 논문을 가장 중점적으로 잡고 모델을 만들어나갈지를 고민해보며 정리해봐야할 듯 싶다

2. 배경지식

2-1. 강화학습

CS231n 14. Deep Reinforcement Learning action-value function Q를 이용해 기대되는 reward의 값을 근사하고 이것이 곧 critic이라고 불린다. 혹은 policy 자체를 직접적으로 최적화하는 PG(Policy Gradient)를 사용하여 가능한 action 중 가장 reward가 큰 것을 고르는 방법을 actor라고 부른다. RL은 크게 3가지 방법을 사용하는데 각각 critic-only, actor-only, actor-critic으로 나뉜다

  1. critic-only: action-value function Q 만을 이용하여 greedy하게 결정을 내리며 주로 DQN(Deep Q Network)를 사용한다
  2. actor-only: state의 확률 분포만을 모델하는 방법으로 agent의 직접적인 행동을 하게 한다
  3. actor가 주어진 state에서 action을 하게 되며 그것을 critic이 Q-value 값을 만들어내는 방법이다.

현재 가장 최신의 알고리즘에는 A2C(Advantage Actor Critic)과 DDPG(Deep Deterministic Policy Gradient), PPO(Proximal Policy Optimizatgion) 등이 있다.

2-2. 주식시장 용어 (기술적 분석)

DNN을 쓰더라도 주식시장의 규칙을 잡기란 사실상 불가능하다. (왜 불가능한지는 머신러닝을 이용한 주가예측을 참고,non-stationary & noise 많음 ) 따라서 주식시장의 규칙을 파악하고 시장의 행동을 쉽게 확인하기 위해 기술적 지표들을 이용한다. (경험적, 수학적 근거)

이때 기술적 지표의 한계(상관관계, 효과⬇️)들은 deep learning을 통해 데이터의 noise를 없앰으로써 해결이 가능하다. 그리고 이러한 기술적 지표를 어떻게 넣느냐에 따라 여러가지 모델이 가능하기 때문에 적절히 기술적 지표를 넣어 성능이 좋은 모델을 만들 필요가 있다.

Warning

논문을 리뷰하기 이전에 RL과 금융시장의 근본적인 3가지 문제가 존재한다는 것을 염두해둬야한다!

  1. 데이터의 질과 가용성: 좋은 질의 데이터들은 비싸거나 제한적으로 제공
  2. 금융시장의 부분만 확인가능
  3. exploration/exploitation dilemma(탐색/이용 딜레마): RL에 가장 흔히 존재하는 딜레마인데, 본래 RL은 많은 탐험을 진행해야하지만 금융 시장에서는 오히려 수수료 등의 이유로 한계가 생김. 이게 가장 큰 문제 중 하나인 것 같고 애초에 금융환경을 RL로 구현하는 것 자체가 그렇게 좋은 방법이 아니라는 것을 말해주는 것 같음. 근데 그렇다고 해서 RL을 대체할만한 좋은 방법이 없기 때문에 차선책으로 한다고 생각해야할듯

3-1. Critic-only

3가지 방법 중에 가장 널리 사용되는 방식으로 주식 예측 관련 학문에서 가장 활발히 연구된 방법이다. 주로 DQN 방식을 사용하는데, 이 알고리즘을 주가 예측을 하는데에 3가지 문제점이 존재한다.

  1. DQN은 주로 이산적인 action space에서 문제를 해결함 : 이 공간을 연속적인 공간으로 바꾸는데에 특정한 방식이 필요함
  2. DQN은 이산적인 state 표현에서 작동이 원활함: 모든 주식 데이터들은 연속적인 값 다양한 주식 데이터를 사용할 경우 action/state의 개수가 폭팔적으로 증가, 사용할 경우 데이터의 개수가 적어야할듯
  3. reward의 방식이 중요함 : 특히 critic-only 방법에서 reward 방식이 매우 민감함

❌ Application of Deep Reinforcement Learning on Automated Stock Trading

이 논문은 “이 논문의 내용을 따라가자~“라기 보다는 반면교사를 삼아 “사람들이 쉽게 잘못 설계할 수 있는 것들이 이런게 있고, 이것들의 한계를 극복하기 위해서 이것들을 하면 되겠구나~” 이런 방식으로 접근해야할 듯하다

  • 모델: DRQN
  • 데이터: S&P500, timeframe: daily, train: 5y, test: 14y
  • benchmark: buy & hold 전략 너무 간단함
  • state: 20일 간의 조정종가의 평균
  • action: 매수/ 매도/ 보유 단순함
  • reward: 일간 조정종가의 차이 다른 논문에서 거의 다 다루는 risk 관리를 다루지 않음

개선할 점!

  • 한가지 주식이 아닌 여러가지 주식의 데이터를 가지고 진행햐애함
  • reward 방식으로 Sharpe 비율과 같은 방법을 이용해야함
  • 더 다양한 action들이 가능해야함 근데 다른 논문에서는 너무 많은 action이 비효율적이라고 한 듯한데 좀 더 알아볼 필요가 있는듯 함
  • benchmark 방식이 너무 간단하여 실제 투자자들의 전략과 달라 비교가 어려움 실제 트레이더의 효과적인 투자 방식과의 비교가 중요한듯함

⭐️⭐️ Financial Trading as a Game: A Deep Reinforcement Learning Approach

  • [!] timeframe 15분, 수수료까지 구현했다는 점에서 실제 주식매매 프로그램에 매우 도움이 될 것이라고 예상함
  • benchmark에 있어 , 이 논문에서도 핵심적인 질문인 실제 트레이더와의 수익률 비교가 어려움을 시사(수익률을 알 수 없음 납득할만한 benchmark 필요 like turtle)

위의 논문과 매우 밀접한 연관을 가짐

  • 모델: DRQN (16개 feature + replay memory를 사용하여 -greedy 방식보다 탐험의 필요성을 줄여 성능을 높임 CS231n 14. Deep Reinforcement Learning)
  • 데이터: FX, timeframe: 15분 실제 단타와 가장 유사한 환경에서 수수료도 포함하여 실험했다는 점에서 의미가 있는 듯, 20122017
  • benchmark: 전문적인 트레이더의 수익률과 비교하려고 했지만 실제 트레이더의 수익률을 알지 못해 비교가 어려움
  • reward: log(returns) 일반화가 되었고 많이 쓰는 방법이지만 여전히 risk를 다루지 않음
  • action: 매수/ 매도/ 보유

결과: 최대 60%의 수익률, 평균적으로 10%의 수익률을 기록했고, 트레이더와 직접적인 비교가 어렵지만 실제 트레이더와 비슷한 결과를 낼 것이라고 기대

⭐️⭐️ Adaptive stock Trading strategies with deep reinforcement learning methods

  • [!] risk를 다룰 수 있는 reward 방식 사용 (SR)

  • [!] 주식 데이터의 패턴을 찾기 위해 timeframe 변화 대신 GRU 모델을 사용함으로써 극복하려고 함

  • [!] benchmark로 turtle strategy를 이용 buy &sell 보다는 나은듯 싶고 실제 트레이더와 유사한 방법도 알아보면 좋을듯

  • actor-critic에서 GDPG 방식으로 더 나은 결과 도출 가능(upgrade)

  • agent가 할 수 있는 것 + 수수료 구현하는 것 필수!

  • 모델: GRU(Gated Recurrent Units) with GDQN 주식 데이터에서 패턴을 찾을 수 없어 긴 timeframe 대신에 짧은 timeframe 쓰려고 하는데 이 논문에서는 reset gate와 update gate를 사용하여 해결하려고 함autoencoder 와 유사함

  • 데이터: 15개 미국,영국, 중국 주식 / 기술적 지표들 사용(MACD,MA..)/ training 8y, test 2y

  • benchmark: Turtle strategy 이용 나름 괜찮은 방법인듯

  • reward: Sortin ratio (SR) 이용 하락 위험을 중점적으로 평가를 하는 방식으로 변동성이 높은 시장에 알맞는 reward function이다

결과: 좋음! 15개 주식 중 2개만 수익률이 안좋았음

3-3 Actor-Critic 방법에서 GDQN이 아닌 GDPG(Gated Deterministic Policy Gradient) 을 사용했을 때 더 견고하고 나은 결과를 보여줬고 심지어 turtle strategy보다 좋은 모습을 보였다. 하지만 한계로는 agent가 가능한 것(거래 하나당 주식 하나만 거래 가능)과 수수료가 없는 것이다

⭐️ Deep Reinforcement Learning for trading

  • [!] risk를 고려하기 위한 방법으로 reward에 시장의 변동성을 추가 (SR말고 다르게도 추가 가능)
  • 높은 수수료인 환경에서 이익을 얻었다는 점에서 실제 트레이딩 상황에 잘 적용될 것이라고 기대됨

여기서는 간단하게 언급하며 후에 critic-actor에서 다시 나올 예정임(A2C 성능이 좋음)

  • 모델: LSTM based on Q-network (기술적 지표 추가 + 높은 수수료)
  • reward: 시장의 변동성 추가 (risk를 고려하기 위해!: 변동성이 높을 때 트레이드 포디션을 줄이고, 낮을 때 높임)
  • baseline: buy & hold

결과: 높은 수수료에도 불구하고 높은 수익률을 얻었다

3-2. Actor-only

이 방법으로는 policy가 바로 하급을 하기 때문에 action space가 연속적이고 주식 데이터가 모두 연속적이라는 것을 고려했을 때 이것이 바로 actor-only 방법의 가장 큰 장점이다. 하지만 한계로는 성공적으로 학습하기 위해 많은 시간을 걸린다는 것이 있다. 하드웨어이 좋은 환경에서는 이 방법이 좋을 수 있지만 나처럼 열악할 때는 좋지 않은 방법일 수 있음! 하지만 몇몇 경우에는 빠르게 수렴이 가능하다 .

⭐️⭐️ Deep Direct Reinforcement Learning for Financial Signal Representation and Trading

  • [!] 모델의 구조를 바꿔 실시간 트레이딩을 가능하게 만듦 (feature 학습, BPTT..)
  • raw data 사용 그래도 기술적 지표들의 장점이 많기 때문에 raw data보다는 기술적 지표를 넣는게 좋은 듯
  • [!] 여러 baseline들과의 비교 존재! SCOT: sparse coding이라는 머신러닝 기술에 영감 받아 최적의 거래 결정을 내리는데 사용, Buy & Hold
  • Sharpe Ratio 비율이 매우 높았으며 이 논문을 관통하는 2번째 질문인 기존의 트레이더보다 높은 수익률을 기록할 수 있느냐에 대해 그렇다고 답할 수 있는 모델이다

실제 트레이딩에 사용된 모델에 관한 논문으로 어떻게 보면 내가 가장 유의깊게 살펴봐야하는 논문일 것 같다!

  • 모델: Recurrent Deep Neural Network의 구조를 바꿔 실시간으로 환경을 감지하고 온라인 환경에서 결정을 내리도록 만듦
  • 모델 특징: 모호한 데이터 deep learning feature 학습 RL 트레이드에 이용 / task-aware BPTT(Backpropagation through time)을 이용해 vanishing problem 해결
  • 데이터 : raw data 이용 이에 대해 논문의 저자는 꼭 기술적 지표를 추가할 필요는 없지만, 기술적 지표의 장점을 언급함 / S&P 500 / train 8y, test 17y/ 수수료 index값의 0.1%
  • baseline: Buy & Hold, SCOT
  • reward: Sharpe ratio 사용

결과: 주가 지수와 선물시장 모두 DDR(Direct Deep Reinforcement )과 FDDR(fuzzy..) 모델에서 상당히 높은 수익을 얻음(baseline 모델들보다!)

한계: 실제 사람의 trading 성능과의 비교가 없음! 또한 초기자본에 대한 정보가 부족하여 Sharpe ratio만 가지고 성능을 비교해야함

보통의 시장은 0.20.3의 비율을 따라가고 1 이상이면 좋고 3이상이면 매우 좋다고 보는데 920의 결과를 냈다. (물론 매년 이런 비율을냈는지 확인 불가) 특정 상품에 대해서만 테스트를 진행했지만 실제 사람들의 포토폴리오가 그렇게 다양하지 않다는 것을 고려할 때 효과가 있으며 대부분의 트레이더보다 더 우수한 성과를 낸다고 볼 수 있다.

Quantitative Trading on Stock Market Based on Deep Learning

  • 딥러닝 + 올바른 기술적 지표는 모델의 성능을 높인다. 그냥 우리가 지금까지 기본적으로 생각했던 것들이 맞는구나라는 것을 한번 더 일깨워주는 논문인듯하다

  • 모델: LSTM

결론: 여러 모델을 비교했을 때 딥러닝을 이용하는 것이 더 성능이 좋았으며 올바를 기술적 지표를 골랐을 때 수익이 좋아진다고 한다.

Enhancing Time Series Momentum Strategies Using Deep Neural Networks

  • 이런 모델도 있다라는 것을 알아두면 될듯(포토폴리오 관리 중심)

  • 모델: offline batch gradient ascent 방법 사용

  • reward : Sharpe Ratio

최적의 policy를 학습하기 위해 기존의 state-action pair의 분포를 학습하는 방법 대신에 목표함수(objective function)을 직접적으로 최적화하는 것을 목표로 한다.

3-3. Actor-Critic

actor(에이전트가 주어진 state에서 어떻게 반응할지 학습)과 critic (그 action이 얼마 좋은지 측정)을 동시에 학습을 하며 PPO나 A2C와 같은 알고리즘을 주로 사용한다. 하지만 이 방법들이 트레이딩에 적용된 것이 많지 않으며 몇몇의 연구만 존재한다.

기존의 RL 문제점인 현재 polcy에 의존하는 것과 초기화와 hyperparameter에 매우 민감한 것보다는 PPO 같은 알고리즘이 더 낫다고는 한다.

⭐️Deep Reinforcement Learning for Automated Stock Trading: An Ensemble Strategy

  • [!] 포토폴리오 전략과 가까우며 이렇게 만든 것도 의의가 있음

  • [!] 새로운 action space(normalize 가능)

  • [!] 임계지점을 만들어 극단적으로 가격이 움직일 때 손절함 (오히려 이때 수익을 얻을 수도 있어서 좋은 전략인지는 모르겠지만 위험관리를 한다는 점에서 의의가 있음)

  • ensemble 모델을 사용

  • baseline: Min-Variance

  • 모델: ensemble(PPO,A2C,DDPG) 특정 기간동안 성능이 좋은 모델이 뽑혀 사용 (각 agent마다 성능이 좋은 경우가 다름)

  • 데이터: Dow Jones 30 stocks / 기술적 지표 사용

  • baseline: Dow Jones의 평균 index (min-variance portfolio allocation)

  • action : action space를 2k+1개의 정수로 놓아 매수/매도를 이 중에 하나로 함 normalize 새로운 action space 정의 방법인듯 & 포토폴리오 관리에서 주로

  • 임계점을 지정하여 너무 많이 하락할 경우 손절할 수 있게 만듦 하지만 오히려 변동성이 매우 높은 시장에서 이익을 얻을 수도 있어서 좋은 방법인지는 생각해봐야함

결과: 누적 reward 높았고(매년 15%) Sharpe ratio도 더 좋은 성과(1.3)

Practical Deep Reinforcement Learning Approach for Stock Trading

위의 논문과 매우 연관된 논문으로 위의 방식이 나쁘지 않다는 것을 다시 한번 입증하기 위해 넣은 듯하다

  • 모델 : DDPG
  • 데이터: training 6y,validation 1y, test 3y / 기술적 지표 사용X
  • baseline: Min-Variance

결과: 매년 25%의 수익과 1.79의 Sharpe ratios를 보이면 우수한 성과를 냄

⭐️Stock Trading Bot Using Deep Reinforcement Learning

  • [!] sentiment analysis(감정 분석)을 통해 주식 거래의 비밀을 파해치려고 노력! 위험 관리 차원에서 예방 가능(위에서 임계점을 설정한 것과 비슷한데 더 좋은 듯) + 중장기 매매에 유리할 수 있을 듯!

  • RCNN을 사용하여 sentiment에 따라 가격이 올라갈지 classification(분류)

  • reward 방식 3가지를 실험해봄 수익을 reward로 두는 방식은 학습을 하지 못했음 (심현방법)

  • 모델 : RCNN(classification sentiment analysis) + DDPG(RL)

  • 데이터 : 하나의 주식, timeframe: daily

  • RCNN 학습

  • reward: 3가지 방법을 시도했고 이 중 이익이 날 경우 reward를 주는 이분법적 방법을 사용 risk관리를 학습하지 못함

결과: 학습에 성공했고 성능도 나쁘지는 않지만 압도적이지는 못함

Actor-only Upgrade

  • [!] 기존의 actor-only의 방법을 actor-critic 방법으로 바꿨을 때 효과가 좋다는 것을 알 수 있고 그 뜻은 actor-critic의 발전가능성이 높다는 것을 의미한다고 생각한다

3-1에서 다룬 Adaptive stock Trading strategies with deep reinforcement learning methods 눈문에서 사용하는 모델을 GDQN이 아닌 Actor-Critic 방법을 이용한 GDPG 모델을 사용했을 때 turtle strategy를 뛰어 넘을 만큼 좋은 성능을 보였다

Deep Reinforcement Learning for trading에서 다른 방법들을 비교했을 때 A2C가 두번째로 높은 수익률을 얻었고 평균 회귀의 주식에서 수익을 많이 얻었다고 한다 코스피에 유리할듯?

4. 결론

DRL(Deep Reinforce Learning)은 Quantiative low-frequency trading에 강력한 도구가 되며 특정 시장에서 트레이더와 경쟁할만한 하지만 더욱 연구가 필요하다.

기존의 학술적 연구에 따르면 주식시장은 정보가 특정한 패턴이 없어 예측을 할 수 없다는 것이 정론이다. 머신러닝을 이용한 주가예측 그렇기 다음과 같은 한계가 존재하며 이를 극복할 수 있는 방법이 다음과 같다

  1. 대부분의 논문에서 하루단위의 데이터를 통해 몇년 간의 주식 예측을 진행 외부 요인 영향 ⬆️ 정량적 알고리즘 X => 1시간/ 1분 단위(규칙 발견)
  2. test 단계에 너무 오랜 시간을 투자 짧은 기간(2,3달)만을 test 단계를 진행하여 최대한 많은 시간을 데이터로
  3. backtesting이 아닌 실시간 트레이딩 플랫폼에서 진행해야함
  4. 실제 인간 트레이더보다 성능이 좋아야함 일반 트레이더보다 성능이 안좋으면 굳이 만들 필요가 없을 듯?
  5. 극단적인 상황 (대공황)에서 어떻게 대처할지 연구를 진행해야함 앞서 본걸로는 임계점(threshold)설정,..

하지만 이것말고도 간단하지 않고 더 알아봐야할 문제들이 존재하는데 바로 다음과 같다!!

  1. 학습과 예측을 진행할 timescale(시간의 규모)을 어떻게 할지! 초단기(수수료) VS 장기(외부요인): 중간 어딘가를 적절히 선택해야함
  2. Backtesting 환경과 실제 트레이딩 환경의 차이점 그리고 이 말이 진짜 뼈에 와닿았는데.. "실제 트레이딩 봇을 만들어 이익을 얻었다면 논문을 쓰지 않았을것!"=> 결국 내가 아예 처음부터 성공적인 봇을 만들어야한다는 것을 시사하는 듯..ㅠ
  3. 실제 트레이딩 환경에서의 한계점 존재 API 요청 제한, 딜레이 etc..