공부 : 금융공학, 금융, 통계, 공학, 경제 등

0. 목표 (financial portfolio rebalancing & backtesting by python)

김문영 2022. 1. 29. 16:06

 파이썬을 통해 포트폴리오 리밸런싱을 해보고, 그 성과를 구현해보자.

 최종적인 목표는 '엔터키 한 번으로 전략, 리밸런싱 주기, 투자 유니버스의 size'에 따른 성과를 Backtest하기인데, 이를 위해서는 최소 3가지의 Class가 필요하다. (cf. Class : 객체의 속성attribute과 기능method로 구성된, 파이썬에서 객체를 표현하기 위한 방법. 자세한 건 구글에 'python 클래스' 검색.)

 우선 이 Class에 대해 설명해보고, 각 Class를 어떻게 구현하는지 설명해보려 한다.


 1. strategy, rebalnce cycle, investment universe를 바꿀 수 있는 Backtest class 만들기.
 - Class ‘Backtest’는 주어진 portfolio에 따라 각 자산의 보유량을 조절하고, 그 performance를 평가 (=백테스트) 할 수 있는 class이다. ( Class에 대해선 ‘Python Class’ 라고 구글에 검색.)
 - Class 

 2. 특정 기간동안 정해진 weight와 reblance cycle에 따라 rebalancing을 수행하는 class ‘Strategy’ 만들기.
예를 들자면, 
Ex)
 1월 1일 : 정해진 비중으로 리밸런싱
 1월 2일 : 리밸런싱 X
 1월 3일 : 리밸 X
 1월 4일 : 정해진 비중으로 리밸런싱
 1월 5일 : 리밸 X
 1월 6일 : 리밸 X
 (…)
이런 식으로.
 - 이때 자료형은 pd.Series 형태로 적용된다. 
 - 경우의 수는
1) 정해진 비중으로 리밸런싱.
2) 리밸 X.
 두 가지 뿐이다. (n주 추가매수/매도, 100만원만큼 추가매수/매도 이런 것도 넣고 싶긴 했다. 그러면 글이 자동매매 쪽으로 넘어가는 것 같아서 뺐다.)

 3. Class ‘Strategy’를 상속받은 Class ‘HRPStrategy’, ‘IVStrategy’, ‘MVStrategy’, ‘MCWStrategy’ 등등 만들기.
 - 각 Strategy 앞에 붙은 HRP, IV, MV, MCW 등은 전략의 이름이다. (HRP: Hierarchical Risk parity, IV: Inverse Volatility, MV: Minimum Variance, MCW: Market Capital Weight)
 - Class Strategy에서처럼 주어진 기간동안 정해진 rebalance cycle에 따라 reblancing을 수행하는데, 이번에는 경우의 수가
1) 정해진 전략으로 리밸런싱
2) 리밸 X.
 의 두 가지다.
 - 이 Class들은 부모 Class인 ‘Strategy’를 상속받는다. 다시 말해, 각 Class인 HRPStrategy, IVStrategy 등은 부모 Class인 Strategy의 기능을 모두 사용할 수 있다. (자세한 건 구글에 ‘python 클래스 상속’ 검색.)
 - 그래서 각 Class가 rebalancing을 할 때는
 1) 정해진 전략을 통해 비중 산출 ->
 2) 그 비중으로 리밸런싱
 의 순서를 거친다.
 - 그러므로 다음과 같은 결과가 나온다.
Ex)
 1월 1일 : (각 알고리즘이 1월 1일까지의 데이터를 활용해)정해진 비중으로 리밸런싱
 1월 2일 : 리밸(런싱) X
 1월 3일 : 리밸 X
 1월 4일 : (각 알고리즘이 1월 4일까지의 데이터를 활용해)정해진 비중으로 리밸런싱
 1월 5일 : 리밸 X
 1월 6일 : 리밸 X
 (…)

 이제 코드와 함께 각각을 구현해보자.
 몰? 루.