3銘柄に株式投資したリバランスリターンの計算をpythonのjupyter notebookで書いていますが、リバランス後のリターンのグラフが「0」で横ばいになってしまいます。
色々なweb記事でコードはいろいろと参考にさせていただきました。2銘柄でリバランスしたリターンのグラフは表示されましたが、これを応用して3銘柄でリバランスリターンのグラフを出そうとしましたが、画像のようにうまくいきませんでした。
どこを改修したらいいのでしょうか。
よろしくお願いします。
python
1 2コード 3```#TQQQとTECLとSOXLで41.8%:36.3%:21.9%としてリバランスありのパフォーマンス 4 5%matplotlib inline 6import numpy as np 7import pandas_datareader.data as web 8import pandas as pd 9import matplotlib.pyplot as plt 10import scipy.stats as ss 11from matplotlib.animation import FuncAnimation 12import pandas_datareader.data as web #データのダウンロードライブラリ 13 14TQQQ=web.DataReader("TQQQ", "yahoo","2019/1/1")['Adj Close'] 15TECL=web.DataReader("TECL", "yahoo","2019/1/1")['Adj Close'] 16SOXL=web.DataReader("SOXL", "yahoo","2019/1/1")['Adj Close'] 17 18TQQQ=TQQQ/TQQQ.iloc[0]#株価の指数化 19lnTQQQ=np.log(TQQQ) 20dlnTQQQ=lnTQQQ.diff().dropna() 21 22TECL=TECL/TECL.iloc[0] 23TECL 24lnTECL=np.log(TECL) 25dlnTECL=lnTECL.diff().dropna() 26 27SOXL=SOXL/SOXL.iloc[0] 28SOXL 29lnSOXL=np.log(SOXL) 30dlnSOXL=lnSOXL.diff().dropna() 31 32 33def portfolio_rebalance(tsd1,tsd2,tsd3): 34 port=pd.concat([tsd1,tsd2,tsd3],axis=1).dropna() 35 port.columns=('p1','p2','p3') 36 port['a1']=0 37 port['a2']=0 38 port['a3']=0 39 port['v']=1 40 41 n=len(port) 42 43 p1=port['p1'].iloc[0] 44 p2=port['p2'].iloc[0] 45 p3=port['p3'].iloc[0] 46 v=port['v'].iloc[0] 47 48 a1=float(v/3/p1) 49 a2=float(v/3/p2) 50 a3=float(v/3/p3) 51 52 port.iloc[0,2]=a1 53 port.iloc[0,3]=a2 54 port.iloc[0,4]=a3 55 56 for i in range(1,len(port)): 57 p1=port['p1'].iloc[i]#今日のTQQQの株価 58 p2=port['p2'].iloc[i]#今日のTECLの株価 59 p3=port['p3'].iloc[i]#今日のSOXLの株価 60 61 p1_0=port['p1'].iloc[i-1]#前日のTQQQの株価 62 p2_0=port['p2'].iloc[i-1]#前日のTECLの株価 63 p3_0=port['p3'].iloc[i-1]#前日のSOXLの株価 64 65 a1_0=port['a1'].iloc[i-1]#前日のTQQQの保有株数 66 a2_0=port['a2'].iloc[i-1]#前日のTECLの保有枚数 67 a3_0=port['a3'].iloc[i-1]#前日のSOXLの保有枚数 68 69 v_0=port['v'].iloc[i-1]#前日のリバランスポートフォリオの価値 70 71 #v=a1_0*(p1-p1_0)+a2_0*(p2-p2_0)+v_0#今日のリバランスポートフォリオの価値 72 73 v=a1_0*p1+a2_0*p2+a3_0*p3#今日のリバランスポートフォリオの価値 74 75 port.iloc[i,4]=v#リバランスポートフォリオの価値のアップデート 76 77 a1=float(v/3/p1)#調整後のTQQQの株数 78 a2=float(v/3/p2)#調整後のTECLの株数 79 a3=float(v/3/p3)#調整後のSOXLの株数 80 81 port.iloc[i,2]=a1#TQQQの株数のアップデート 82 port.iloc[i,3]=a2#TECLの株数のアップデート 83 port.iloc[i,4]=a3#SOXLの株数のアップデート 84 85 port['v2']=0.418*port.p1+0.363*port.p2+0.219*port.p3#リバランスの無いポートフォリオの価値 86 return port 87port=portfolio_rebalance(TQQQ,TECL,SOXL) 88 89lnport=np.log(port) 90lnport.v.plot(label="port daily rebalance",linewidth=1.0) 91lnTQQQ.plot(label='TQQQ',style='-.') 92lnTECL.plot(label='TECL',linestyle='--') 93lnSOXL.plot(label='SOXL',linestyle='--') 94plt.legend(loc="upper left")
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/27 02:04