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()

最初のウェイトベクトルと最後のウェイトベクトル

weights at the first and the last

効率ロンティア曲線

シャープレシオ

最大シャープレシオとそのウェイト

最小分散ポートフォリオ

いいなと思ったら応援しよう!