대감집

[FinRL] CH4. 예제 Overview 본문

퀀트 투자/FinRL

[FinRL] CH4. 예제 Overview

SKY-STONE 2024. 1. 14. 20:34

Financial Reinforcement Learning(FinRL) Platform

Contents

  1. Installation
  2. Framework Overview
  3. Main Component
    • Data
    • Train
    • Backtest
  4. Examples

CH4. Examples

Introduction
  • 앞선 CH1-3 까지는 FinRL의 기초(FinRL_StockTrading_NeurlPS_2018)를 정리하고 실습한 내용임
  • 이번 CH4에서는 FinRL에서 제공하는 다양한 기능에 대해서 알아보고자 함
  • 아래 그림과 같이 총 4개의 단계로 이루어져 있으며 어떤 내용인지를 간략하게 소개할 예정
    • Introduction: 데이터셋(시장가격, 종목, 재무제표) 추가에 따른 RL 성능 코드 제공
    • Advance: RL 학습 기법(Multi-GPU, Multi-Model)과 학습 평가에 대한 코드 제공
    • Practical: 실제 시장(미국, 암호화폐, 중국)에서 적용한 코드 제공
    • Optimization: 학습 하이퍼파라미터를 자동 최적화 하는 코드 제공

 

GitHub - AI4Finance-Foundation/FinRL-Tutorials: Tutorials. Please star.

Tutorials. Please star. . Contribute to AI4Finance-Foundation/FinRL-Tutorials development by creating an account on GitHub.

github.com


1-1. Introduction - FinRL_StockTrading_NeurlPS_2018
  • 기본 주가데이터(OHLCV) + 보조지표 

  • 보조지표 정보 예시
INDICATORS = [
    "macd", #Moving Average Convergence Divergence
    "boll_ub", #볼린저 밴드 - Upper Bound
    "boll_lb", #볼린저 밴드 - Lower Bound
    "rsi_30",  # Relative Strength Index: 상대강도 탄력성 지표, 과매입/과매도 알려주는 지표 
    "cci_30",  # Commodity Channel Index: 이동평균으로부터 얼마나 떨어져있는지를 측정하는 지표
    "dx_30",   # Directional Index: 추세 방향성 지표
    "close_30_sma", # Simple Moving Average(이동평균선) 30일
    "close_60_sma", # Simple Moving Average(이동평균선) 60일
]
  • 성능평가(참조 논문)
    • 다소 불안정된 모습을 보이나 DJI 보다 높은 안정성과 수익률을 보임  

 

1-2. Introduction - FinRL_PortfolioAllocation_NeurlPS_2020
  • 기본 주가데이터 + 보조지표  + 공간 정보 + 시간 정보

  • 공간 정보(cov_list): 다른 주식간 종가 공분산 추가 -> 공간에 따른 관계성 추가
  • 시간 정보(return_list): 단일 종목에서 1년간 종가 변화율 추가 -> 시간에 따른 관계성 추가
cov_list = []
return_list = []

# look back is one year
lookback=252
for i in range(lookback,len(df.index.unique())):
  data_lookback = df.loc[i-lookback:i,:]
  price_lookback=data_lookback.pivot_table(index = 'date',columns = 'tic', values = 'close')
  return_lookback = price_lookback.pct_change().dropna()
  return_list.append(return_lookback)

  covs = return_lookback.cov().values 
  cov_list.append(covs)

df_cov = pd.DataFrame({'date':df.date.unique()[lookback:],'cov_list':cov_list,'return_list':return_list})
df = df.merge(df_cov, on='date')
  • 성능 평가(참조 논문)
    • 기본 Stock Trading에 비해 좀더 안정된 결과를 보임

 

 

1-3. Introduction - FinRL_StockTrading_Fundamental
  • 기본 주가데이터 + 재무제표 

  • 재무제표 정보 예시
items = [
    'datadate', # Date
    'tic', # Ticker
    'oiadpq', # Quarterly operating income
    'revtq', # Quartely revenue
    'niq', # Quartely net income
    'atq', # Total asset
    'teqq', # Shareholder's equity
    'epspiy', # EPS(Basic) incl. Extraordinary items
    'ceqq', # Common Equity
    'cshoq', # Common Shares Outstanding
    'dvpspq', # Dividends per share
    'actq', # Current assets
    'lctq', # Current liabilities
    'cheq', # Cash & Equivalent
    'rectq', # Recievalbles
    'cogsq', # Cost of  Goods Sold
    'invtq', # Inventories
    'apq',# Account payable
    'dlttq', # Long term debt
    'dlcq', # Debt in current liabilites
    'ltq' # Liabilities   
]
  • 성능 평가  
    • DJI 보다 안정성과 수익률 모든 측면(Sharp Ratio)에서 부족한 성능을 보임. 노이즈로 작용할 수 있음.

Performance Results

 

2-1. Advance - FinRL_PortfolioAllocation_Explainable_DRL
  • RL 학습이 잘 이루어 졌는지 확인하기 위해 필요한 작업(참조논문)
  • Black Box인 Deep Learning을 이해하기 위해서 다양한 분석 환경을 제공하고 있음
  • Integrated Gradient를 계산 후 Correlation Coefficient를 통해 해석하는 방식을 취함
  • Correlation Coefficient가 높으면 높을 수록 잘 예측된 모델이라고 생각하면 됨 
    • The sharpe ratio is in accordance with both single-step and multi-step average correlation coefficient.
    • DRL agents is better at multi-step prediction than ML algorithms while worse at single-step prediction.

The correlation coefficient represents the level of prediction power
Histogram of single-step correlation coefficient
Histogram of multi-step correlation coefficient

 

2-2. Adavance - FinRL_Compare_ElegantRL_RLib_Stablebaseline3
  • Massive Parallel 환경(GPU Cloud)에서 잘 학습할 수 있도록 개발된 툴(참조 논문)
  • FinRL은 현재 RLlib, Stable Baseline3, ElegantRL 환경을 동시에 제공하고 있음
  • 현재 Single SPU 환경에서 사용중이기에 추후 필요시 알아갈 예정

ElegantRL Position

 

2-3. Advance - FinRL_Ensemble_StockTrading_ICAIF_2020
  • A2C, PPO, DDPG와 같은 RL 모델들을 하나로 Ensemble하여 더욱 높은 성능을 얻는 기법(참조논문)

  • 아래 예시에서 가장높은 Sharpe Ratio와 연평균 수익률을 보이고 있음 (참조논문)

 

3-1. Practical - FinRL_PaperTrading_Demo
  • Alpaca 툴을 이용해서 자동으로 거래하는 시스템 구축
paper_trading_erl = AlpacaPaperTrading(ticker_list = DOW_30_TICKER, 
                                       time_interval = '1Min', 
                                       drl_lib = 'elegantrl', 
                                       agent = 'ppo', 
                                       cwd = './papertrading_erl_retrain', 
                                       net_dim = ERL_PARAMS['net_dimension'], 
                                       state_dim = state_dim, 
                                       action_dim= action_dim, 
                                       API_KEY = API_KEY, 
                                       API_SECRET = API_SECRET, 
                                       API_BASE_URL = API_BASE_URL, 
                                       tech_indicator_list = INDICATORS, 
                                       turbulence_thresh=30, 
                                       max_stock=1e2)
paper_trading_erl.run()

 

3-2. Practical - FinRL_MultiCrypto_Trading

 

3-3. Practical - FinRL_China_A_Share_Market

 

4-1. Optimization - FinRL_HyperparameterTuning_Optuna
4-2. Optimization - FinRL_HyperparameterTuning_Raytune_RLlib
4-3. Optimization - FinRL_Weights_and_Biasify_StableBaselines3

'퀀트 투자 > FinRL' 카테고리의 다른 글

[FinRL] CH4. 예제 코드(2)  (1) 2024.01.14
[FinRL] CH4. 예제 코드(1)  (0) 2024.01.14
[FinRL] CH3. 플랫폼 구성-(3)Backtest  (1) 2024.01.11
[FinRL] CH3. 플랫폼 구성-(2)Train  (1) 2024.01.11
[FinRL] CH3. 플랫폼 구성-(1)Data  (0) 2024.01.11