Critical-Line Algorithm for Portfolio Optimization: An Open Source Test
テストデータを使って、最小分散ポートフォリオ、最大シャープレシオポートフォリオ、効率フロンティアをCLAアルゴリズムを用いて計算する。
def main():
import numpy as np
import pandas as pd
import CLA
#1) Load data, set seed
df=pd.read_csv("http://www.quantresearch.org/CLA_Data.csv.txt")
mean=np.array(df[:1]).T
lB=np.array(df[1:2]).T
uB=np.array(df[2:3]).T
covar=np.array(df[3:])
#2) Invoke object
cla=CLA.CLA(mean,covar,lB,uB)
cla.solve()
print('the 1st weight:', cla.w[0].T)
print('the last weight:', cla.w[-1].T)
#3) Plot frontier
mu,sigma,weights=cla.efFrontier(100)
plot2D(sigma, mu, 'Risk', 'Expected Excess Return', 'CLA-derived Efficient Frontier')
#4) Get Maximum Sharpe ratio portfolio
sr,w_sr = cla.getMaxSR()
print('Sharpe ratio ',sr)
print('Sharpe ratio risk ',np.dot(np.dot(w_sr.T,cla.covar),w_sr)[0,0]**.5)
plot2D(sigma,np.array(mu)/np.array(sigma),'Risk','Sharpe Ratio','CLA-derived Sharpe Ratio function')
#5) Get Minimum Variance portfolio
mv, w_mv = cla.getMinVar()
print('the Minimum Variance Portfolio variance:', mv )
print('the Minimum Variance Portfolio variance weight:', w_mv.T)
return
#---------------------------------------------------------------
main()
最初のウェイトベクトルと最後のウェイトベクトル
効率ロンティア曲線
シャープレシオ
最大シャープレシオとそのウェイト
最小分散ポートフォリオ