파이썬으로 Tangent (Max Sharp ratio) Portfolio를 만들자

Tangent (Max Sharp ratio) Portfolio의 조건

Tanget Portfolio의 조건은 당연히 Sharp ratio의 최대화이다. 이를 수식으로 표현하면 아래와 같다.

$ max $ $\frac{w\mu-r_f}{\sqrt{w^T\sum_{} w }}$
subject to
$ w^T1 = 1 $

이때 $\sum_{}$ 는 Covariance Matrix고 $w^T\sum_{} w $는 변동성을 표현하는 수식이다.
그리고 각 종목의 비중의합은 1이 되도록 제약함수를 둔것이다.

라그랑지안으로 이 함수를 풀면

$ L = \frac{w\mu-r_f}{\sqrt{w^T\sum_{} w }} + \lambda( w^T1 - 1) $

이 나온다. 이 해를 풀면

$ w_T = \frac{\sum_{}^{-1}\mu}{1^T\sum_{}^{-1}\mu} $ 결과가 나온다.

파이썬으로 구현

수익률추정치는 과거 12개월 평균 수익률로 가정하였다.

import pandas as pd
import numpy as np

return_data=pd.read_csv("K200_monthly_return.csv",encoding="CP949",index_col="date",dtype="double")

sliced_data=return_data.iloc[1:13].T.dropna().T
average_mean=sliced_data.mean()
cov_mat=sliced_data.cov() 
cov_inv=pd.DataFrame(np.matrix(cov_mat).I, cov_mat.columns, cov_mat.index)
ones=np.ones(cov_inv.shape[1])


weight=(cov_inv@average_mean)/(ones.T@cov_inv@sliced_data.mean())

print(weight)

댓글남기기