Dynamic Fee Mechanism Simulation with Reinforcement Learning

목차

Jeffrey Lim
DECON Simulation
19 min readSep 11, 2019

--

Introduction

Simulation step 1,2,3

Conclusion

Further works & Limitations

Appendix

거래소의 수수료는 trader 들의 의사결정 / 행동에 많은 영향을 끼친다고 알려져 있다. 수수료가 낮을 때는 이익이 얼마 되지 않는다고 생각될 때도 거래에 참여할 유인이 있으며 수수료가 높을 때는 그 반대이다.

바이낸스의 경우 현재는 모든 거래에 대해 0.1%의 수수료가 책정되어 있다. 하지만, 이 0.1%의 수수료가 반드시 0.1%여야 해서 0.1%로 정해진 것은 아니다. 우리는 이 수수료가 유동적으로 바뀔 수 있다면 어떻게 될지 생각해보았다. 거래가 일어나지 않을 때는 수수료가 낮아져 거래가 활성화되고 필요이상으로 시장이 과열된다면 수수료를 높여 거래를 안정화할 수 있을 것이란 기대가 들었고, 이를 시뮬레이션으로 확인하고자 한다.

To be specific, what we want to know is 여러가지 수수료 책정 메커니즘을 적용했을 때 네트워크에서 사용자들이 어떤 반응을 보일지이다. 시뮬레이션에는 machine learning agent 가 투입되며 강화학습 방법론에 따라 자신의 profit을 maximize 하고자 한다. 이 agent 들이 서로다른 수수료정책이 적용되는 환경에 노출되었을 때 각각 반응이 어떻게 달라지는 지 관찰하고 왜 그런지 분석해 거래소의 수수료 정책은 어떤 방향으로 책정되는 것이 좋은지 연구하는 것이 이 프로젝트의 목표다.

모든 소스코드는 https://github.com/deconlabs/Binanace_trading_simulation 에 공개되어 있다. 또한 https://youtu.be/kBjv4KmkEHU 에 프로젝트에 관한 2분 설명이 있다.

Introduction

이 simulation에서는 trading market 에서 이윤을 최대화하려는 전략을 학습하는 RL agent 들이 서로다른 수수료 메커니즘 환경에 노출되었을 때 각각 총 수수료와 총 거래량 수준이 어떻게 달라지는지 알아본다.

먼저 agent 들은 수수료가 없는 환경에서 가격과 거래량을 통해 어떤 시점에 토큰을 사고파는 것이 자신에게 최대의 수익을 return 하는지 학습한다. 그리고 이 agent 들은 각각 다른 수수료 정책이 적용되는 다른 환경에서 다시 500 episode 를 학습하며 전략을 수정할 수 있는 시간을 가진다.

그리고 각 환경별로 agent 들의 총 거래량은 어떻게 변화하는지, 그들이 납부한 총 수수료는 어떻게 되는지 살펴보고 왜 이러한 결과가 나오는지 분석한다.

시뮬레이션은 3가지 단계를 거쳐 진행되는데, 이 포스팅은 각 과정이 어떻게 이뤄지는가에 대해 논한다.

  1. 기본수수료 환경에서 RL 을 활용해 agent 의 trading 학습
  2. 변형 수수료 환경으로 학습된 agent들 transfer learning
  3. 각 환경에서의 agent 행동 observation

Key findings

  • 단순 수수료 rate 인상/인하는 RL agent 의 행동에 큰 영향을 끼치지 않는다. 0.003 -> 0.005 으로의 변화는 의미가 없다.
  • Dynamic fee mechanism 은 RL agent 의 의사결정에 의미있는 영향을 끼치며, static fee policy 때보다 총 거래량을 늘리고 총 수수료 수입을 늘린다.

Step 1 : 기본 수수료 환경에서 trading 알고리즘 학습

Trading Algorithm

강화학습 알고리즘은 Agent 가 환경과의 상호작용을 통해 자신이 어떤 상황에 어떤 행동을 하는 것이 가장 최대의 보상을 주는지 학습하는 알고리즘이다. 아래 그림에 그 과정이 나타나있다.

Reinforcement Learning Illustration (https://i.stack.imgur.com/eoeSq.png)

이번 시뮬레이션에서 Agent 는 유동자산 매매를 통해 수익최대화를 노리는 trader 이고, 환경은 Market으로서 Agent의 매수,매도 주문을 받아 새로운 유동자산 가격과 거래량을 알려준다. Agent 는 현재 Market 의 상황을 관찰하고 상황에 따라 자신의 가장 최적행동이 무엇인지 학습해나갈 것이다.

Reinforcement Learning taxonomy as defined by OpenAI [Source]

RL 알고리즘은 크게 Model-Free RL 과 Model-Based RL 로 나뉜다. Model 의 유무는 현재 상태에서 다음 상태로 전이할 확률을 모델로서 나타낸다는 의미이다. 본 시뮬레이션에서는 주가는 random-walk 라는 가정을 견지하여, 현재가격에서 다음 가격으로 변하는 확률을 학습할 수 없다는 입장이다. 따라서, model-free RL 을 사용하였다. 그 중에서도 Policy optimization 계열의 PPO 알고리즘과 Q-Learning 계열의 DQN 을 사용하였다. 좀 더 구체적으로, DQN에 여러 개선장치가 붙은 Rainbow 알고리즘을 사용하였다. 더 나아가 최근 다양한 분야에서 활용되는 Attention 을 활용한 Transformer의 아이디어와 Rainbow를 결합한 알고리즘도 사용했다.

정리하자면, 총 3가지의 학습알고리즘을 사용하여 agent 를 학습시켰다.

Agent’s learning Flow: Different Trading Algorithm uses different Model structure

1. PPO (https://arxiv.org/abs/1707.06347)

2. Rainbow (https://arxiv.org/abs/1710.02298)

3. Transformer(https://arxiv.org/abs/1706.03762)

Performance comparison in default TradingEnv

Model FreeRL 은 크게 PolicyGradient based 방법과 Valuebased 방법으로 나뉘는데 PPO 는 PolicyGradient 방법에서 가장 popular 한 알고리즘이며, Rainbow는 Value 방법에서 가장 popular한 알고리즘 중 하나이다.

PPO는 각 action 을 몇 % 의 확률로 행할지를 직접 학습하는 반면, DQN 계열의 방법은 각 action이 return 하는 value 가 얼마일지를 학습해 가장 value 가 높을 것으로 기대되는 행동을 선택한다.

위의 표를 보면 PPO 가 DQN 계열의 방법인 Rainbow, Attention 보다 성능이 대체적으로 낮은 것으로 나타난다. 이 같은 현상이 나타나는 이유는 PPO 는 On-Policy 방법으로 학습하기 때문에 과거의 경험을 버리고 현재 정책으로 새로운 경험을 받아들여 학습하는 반면, DQN 계열의 알고리즘은 Off-Policy 방법으로 학습해 과거의 경험 중 유의미하다고 생각하는 경험은 계속 Memory 에 쌓아두면서 학습하기 때문이다. 이러한 Memory 의 유무는 model 이 data 에 좀 더 fit 할 수 있게 돕기 때문에 그림과 같은 성능차이가 나타나는 것이다.

(물론 이 fit 이 overfitting 일 수 있다. 그리고 이것은 실제 trading-bot 을 만들때는 매우 중요한 이슈이다. 하지만 agent 의 수익률 자체는 이 시뮬레이션에서 크게 중요한 요소는 아니다. 이 시뮬레이션에서 확인하고자 하는 것은 수수료가 agent 들에게 어떤 영향을 미치는지 확인하는 것이지, agent 의 trading performance 를 극대화하는 것이 아니기 때문이다. (물론 독자는 공개한 trading agent 알고리즘을 사용해 자신만의 trading bot을 만들어 활용할 수 있다. It’s up to you!))

같은 DQN 모델이지만 Attention 모델이 Rainbow보다 더 나은 성능을 보이는 이유는 attention 메커니즘은 시계열 데이터의 모든 부분의 관계성을 평가해 중요한 부분에 집중하는 특성이 있기 때문으로 추정된다. 이러한 특성은 data에서 latent feature 를 뽑아내는 데 더 유리하다.

Agents

Actions

n_action_interval 에 따라 취할 수 있는 action 의 수가 달라진다. n_action_interval을 기준으로 더 작은 수는 buy action, 더 큰 수는 sell action 이다. 코드에서는 n_action_interval=5 로 설정되어 있는데 [0,4] 번 action 은 각각 보유 BTC의 20% , 40%, 60%, 80%, 100%를 사용하여 BNB를 매입하는 action 이고 [6,10]번 액션은 보유 BNB의 20%, 40%, 60%, 80%, 100%를 매도하는 action 이다.

Agent 별 차이점

본 시뮬레이션에서는 30개의 Agent 를 만들어 훈련시키고 총 수수료와 총 거래량을 관찰한다. Agent 들은 risk 선호도가 서로 다르다. 어떤 agent 는 리스크를 선호해서 좀 더 과감한 trading 을 할 것이고 어떤 agent 는 리스크를 회피해 좀 더 보수적인 trading 을 학습할 것이다. 이는 risk_aversion_rate 가 높을수록 (-) reward 에 대한 penalty를 높이는 것으로 구현되어 있다.

Trading Env

https://github.com/Yvictor/TradingGym 를 커스텀하여 사용하였다. 주가 데이터를 통해 환경을 만들 수 있으며 환경은 매 step 마다 obs_data_len 만큼의 OHLC(open-high-low-close) 데이터를 agent 에게 state로 넘겨주고 agent 는 이 state에 따라 action 을 취해 환경에 넘기는 일을 반복한다.

TradingEnv Structure
Making TradingEnv with data

데이터는 BNB / BTC 데이터를 https://api.binance.com/api 에서 가져왔으며 아래와 같은 형태의 OHLC 15분 데이터이다. 수수료가 영향을 미치는 범위는 단타매매라고 생각했기 때문에 비교적 짧은 시간단위인 15분 단위의 OHLC 데이터를 사용하였다.

BNB/BTC 데이터의 일부, 이와 같은 환경에서 PPO 알고리즘과 Rainbow 알고리즘으로 Agent들을 학습시켰다.

아래 영상은 test환경에서 Rainbow Agent 가 trading 하는 모습을 시각화한 것이다. 노란색 박스 영역이 agent 가 관찰하는 가격데이터의 범위(=obs_data_len) 이며, 빨간 삼각형은 매수action을 의미하며 초록 역삼각형은 매도action을 의미한다. 그 아래에 그려지는 빨간색 영역이 수익률을 나타내는데 test가 진행됨에 따라 빨간색 영역이 점점 커지는 것을 알 수 있다.

Step 2: 서로 다른 수수료 환경에서 transfer learning

이제 위의 trading Env 와 Rainbow 알고리즘으로 학습한 agent들을 서로 다른 수수료정책이 적용되는 환경에 이식해 새로 학습을 진행한다. agent들은 달라진 환경에 맞추어 자신의 최적정책을 변경할 것이다. 이에 따라 총 수수료와 총 거래량이 달라질 것인데, 이를 관찰함으로서 같은 agent라도 다른 수수료 정책이 어떻게 agent들의 행동을 다르게 하는지에 대한 인사이트를 얻을 수 있다.

Fees would change depending on the environment

Trading Env list

  1. No fee
  2. 0.003
  3. 0.005
  4. Bollinger band bound Environment
  5. RSI bound Environment
  6. MACD bound Environment
  7. Stochastic slow bound Environment

1 ,2 ,3 번 환경은 static 한 수수료가 적용되는 전통적인 Trading환경이다. 반면, [4,7] 번 환경은 파생지표에 따라 수수료가 변화하는 variational TradingEnv 이다. (각각의 파생지표에 관한 설명, 파생지표에 따라 수수료가 어떻게 달라지는가에 관해서는 Appendix 에 첨부한다)

Default fee 환경에서 1000episode 동안 훈련됐던 30개 agent 들을 각각의 dynamic 한 수수료가 적용되는 환경으로 옮겨 새로 500episode 동안 훈련시킨다. 기존의 환경과 다른 수수료 정책이 적용되기 때문에 agent 들의 최적행동이 달라지게 될 것이다.

Step 3: Observation

Step2 에서 transfer learning 한 agent 들이 test 시에 각각 어느정도의 거래량과 수수료를 내게 되는지 관찰해본다.

Total volume & Toal Fee

Total Fee and Volume Per Trading Environment

가장 특기할 만한 사항은 정적인 수수료환경 (0.003, 0.005) 에서보다 동적인 수수료환경에서 더 많은 거래가 일어난다는 것이다. 특히나 MACD 에서는 거래도 더 많고 수수료도 더 많이 걷혔다. 이것은 동적인 수수료 정책이 시장을 더욱 활성화하면서도 거래소에 유리한 상황을 만들어줄 수 있는 가능성을 시사한다. 특별히 MACD 정책에서 이런 현상이 일어난 이유는 MACD 를 적용할 떄 Fee change 정도가 가장 강하게 나타났기 때문이다. (Fee rate change 그래프 참고)

같은 리스크 회피성향을 가진 agent가 똑같은 market state 를 보더라도 fee에 따라 결정이 달라진다

또한 같은 risk 회피 성향을 가진 agent가 똑같은 OHLC 데이터를 state로 받더라도 fee 가 다르면 그때그때 다른 결정을 내려 위의 그림처럼 누적거래량에 차이가 발생하는 현상을 관찰 할 수 있었다. 수수료 변동폭이 가장 큰 macd 환경에서 가장 거래량이 많았다.

What Feature Agent is focusing on

과연 agent 들이 수수료에 주목하는지 알아본다. 아래 그림은 IntegratedGradient 방법을 사용해 agent 들이 data의 어떤 feature 에 주목하고 있는지를 시각화한 그림이다. 그림을 보면 fee_rate 가 다른 feature 에 비해 agent의 의사결정에 유의미하게 영향을 끼치고 있음이 관찰된다.

IntegratedGradient: Shows what feature agent is focusing on

Conclusions

이번 시뮬레이션에서는 기존의 정적인 수수료를 파생지표에 따라 동적으로 변화하게 하면 어떤 현상이 일어날지 살펴보았다. 이를 위해 첫째로, default 수수료 환경에서 강화학습 agent 들을 훈련시켰다. 둘째로, 서로 다른 수수료 정책이 적용되는 환경에 transfer learning 을 시행했다. 마지막으로, 이렇게 transfer learned 된 agent 들이 각각의 환경에서 어떤 결정을 내리는지 살펴보았다.

실험결과, 기존의 정적인 수수료 ( 0.003, 0.005) 일때보다 오히려 거래량이 늘어나고 수수료가 더 많이 걷히는 결과가 나타났다. 이는 거래소 입장에서는 아주 welcoming 한 상황이다. fee mechanism 을 바꿈으로써 더 많은 거래를 일으키고 더 많은 수수료 수입을 얻을 수 있는 것이다.

본 시뮬레이션에서는 단순히 파생지표에 따라 수수료가 변화하도록 하였지만 다양한 dynamic pricing 방법론을 적용시킨다면 더욱 거래소와 사용자들에게 최적화된 fee dynamics 를 찾아낼 수 있을 것으로 기대된다. Specifically, DEX (Decentralized Exchange, 이하 DEX) 에서는 몇몇 인기있는 토큰을 제외하고는 매우 거래가 일어나지 않는데, 이러한 수수료 dynamics 가 충분히 연구된다면 현재 상황을 유의미하게 반전시키는 방법을 찾을 수 있을수도 있을 것이다.

Further works & Limitations

  1. Agent 의 action 을 수정하여 LOB market 구현

현재 환경에서는 Buy /Sell 주문을 넣으면 바로 체결될 수 있다고 가정하였다. 현재는 자산의 몇 % 를 주문을 넣을지를 action 으로 설정하였기 때문에 일어나는 한계이다. 이를 수정하여 action 을 Limit order 로 한다면 더욱 현실적인 시뮬레이션을 할 수 있을 것이다. 이 같은 환경이 구현된다면 수수료가 bid / ask spread 에 따라 변화하게 하는 등의 실험을 더 할 수 있을 것이다.

2. DEX 구현

DEX에서는 거래가 sparse 하다. 하지만 우리 시뮬레이션에서는 traditional 한 거래소환경을 가정하여 continuous 한 거래가 일어나는 상황에서 시뮬레이션을 진행하였다. 실제로 DEX 에 도움이 되고자 한다면 시뮬레이션 환경을 DEX에 더 닮게 설계할 필요가 있을 것이다. 현재 DEX 환경이 완전히 오픈되있지는 않아 제한되는 부분이지만 DEX환경을 닮은 TradingEnv 를 구현한다면 DEX를 개선시키는 인사이트를 발견하는데 큰 도움이 될 것이다.

3. Multi agent trading

현재 시뮬레이션에서는 agent 들끼리 거래하는 메커니즘이 적용이 안되어 있다. 한 명의 agent 가 market 과 거래하는 상황을 가정하였다. 현실에서 individual 들은 사실상 market 에 미치는 영향이 미미하기 때문에 이 가정이 destroying 한 것은 아니다. 하지만, 시뮬레이션이 좀 더 정교화해진다면 우리 환경에서 agent 들을 훈련시키고 그들끼리 trading 하는 상황을 만들 수도 있을 것이다.

Appendix

A. How to add your environment

  1. Figure out function to influence fee rate

e.g

2. Add your function to ‘fn’. This code snippet is located in agents/DQN/envs/trading_env_integrated.py

B. Dynamic Fee Environment Explanation

  1. MACD (Moving Average Convergence & Divergence)
    -MACD(= long term moving average- short term moving average) shows the trend of price.
    -Link : https://towardsdatascience.com/implementing-macd-in-python-cc9b2280126a

2. RSI(Relative Strength Index))
-It is the ratio of uptrend and downtrend of closing price during certain periods, which shows overbought or oversold signals.
-Link : https://www.investopedia.com/terms/r/rsi.asp#calculation-of-the-rsi

3. Bollinger Bands
- Bollinger Bands is bounded by 2 sigma from simple moving average. The stock market is thought to be oversold or overbought, when the price is out of this boundary.
-Link : https://www.investopedia.com/terms/b/bollingerbands.asp

4. Stochastic Slow
-It is defined as the location of closing price compared with the highest and lowest price during certain periods.
-Link: https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/slow-stochastic

Acknowledgments

Thank you BinanceX (https://www.binance.com/en/blog/372982400902205440/Introducing-Binance-X)

Thank you https://github.com/Yvictor/TradingGym

References

TradingEnv : https://github.com/Yvictor/TradingGym

Transformer : http://nlp.seas.harvard.edu/2018/04/03/attention.html

Integrated Gradient : https://medium.com/@kartikeyabhardwaj98/integrated-gradients-for-deep-neural-networks-c114e3968eae

--

--

Jeffrey Lim
DECON Simulation

Interested in RL adaption to the real world. Building simulation models to validate the token economies with agent-based RL.