대감집
[FinRL] CH4. 예제 Overview 본문
Contents
- Installation
- Framework Overview
- Main Component
- Data
- Train
- Backtest
- 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)에서 부족한 성능을 보임. 노이즈로 작용할 수 있음.
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.
2-2. Adavance - FinRL_Compare_ElegantRL_RLib_Stablebaseline3
- Massive Parallel 환경(GPU Cloud)에서 잘 학습할 수 있도록 개발된 툴(참조 논문)
- FinRL은 현재 RLlib, Stable Baseline3, ElegantRL 환경을 동시에 제공하고 있음
- 현재 Single SPU 환경에서 사용중이기에 추후 필요시 알아갈 예정
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 |