回答編集履歴

1

こーどついか

2021/07/28 12:19

投稿

退会済みユーザー
test CHANGED
@@ -61,3 +61,189 @@
61
61
 
62
62
 
63
63
  それぞれの列がかぶらないように列のインデックスを変える必要があるんじゃないですかね。
64
+
65
+
66
+
67
+ ```py
68
+
69
+ # TQQQとTECLとSOXLで41.8%:36.3%:21.9%としてリバランスありのパフォーマンス
70
+
71
+ #%matplotlib inline
72
+
73
+ import numpy as np
74
+
75
+ import pandas_datareader.data as web
76
+
77
+ import pandas as pd
78
+
79
+ import matplotlib.pyplot as plt
80
+
81
+ import scipy.stats as ss
82
+
83
+ from matplotlib.animation import FuncAnimation
84
+
85
+ import pandas_datareader.data as web #データのダウンロードライブラリ
86
+
87
+
88
+
89
+ TQQQ=web.DataReader("TQQQ", "yahoo","2019/1/1")['Adj Close']
90
+
91
+ TECL=web.DataReader("TECL", "yahoo","2019/1/1")['Adj Close']
92
+
93
+ SOXL=web.DataReader("SOXL", "yahoo","2019/1/1")['Adj Close']
94
+
95
+
96
+
97
+ TQQQ=TQQQ/TQQQ.iloc[0]#株価の指数化
98
+
99
+ lnTQQQ=np.log(TQQQ)
100
+
101
+ dlnTQQQ=lnTQQQ.diff().dropna()
102
+
103
+
104
+
105
+ TECL=TECL/TECL.iloc[0]
106
+
107
+ TECL
108
+
109
+ lnTECL=np.log(TECL)
110
+
111
+ dlnTECL=lnTECL.diff().dropna()
112
+
113
+
114
+
115
+ SOXL=SOXL/SOXL.iloc[0]
116
+
117
+ SOXL
118
+
119
+ lnSOXL=np.log(SOXL)
120
+
121
+ dlnSOXL=lnSOXL.diff().dropna()
122
+
123
+
124
+
125
+ def portfolio_rebalance(tsd1,tsd2,tsd3):
126
+
127
+ port=pd.concat([tsd1,tsd2,tsd3],axis=1).dropna()
128
+
129
+ port.columns=('p1','p2','p3')
130
+
131
+ port['a1']=0
132
+
133
+ port['a2']=0
134
+
135
+ port['a3']=0
136
+
137
+ port['v']=1
138
+
139
+
140
+
141
+ n=len(port)
142
+
143
+
144
+
145
+ p1=port['p1'].iloc[0]
146
+
147
+ p2=port['p2'].iloc[0]
148
+
149
+ p3=port['p3'].iloc[0]
150
+
151
+ v=port['v'].iloc[0]
152
+
153
+
154
+
155
+ a1=float(v/3/p1)
156
+
157
+ a2=float(v/3/p2)
158
+
159
+ a3=float(v/3/p3)
160
+
161
+
162
+
163
+ port.iloc[0,3]=a1
164
+
165
+ port.iloc[0,4]=a2
166
+
167
+ port.iloc[0,5]=a3
168
+
169
+
170
+
171
+ for i in range(1,len(port)):
172
+
173
+ p1=port['p1'].iloc[i]#今日のTQQQの株価
174
+
175
+ p2=port['p2'].iloc[i]#今日のTECLの株価
176
+
177
+ p3=port['p3'].iloc[i]#今日のSOXLの株価
178
+
179
+
180
+
181
+ p1_0=port['p1'].iloc[i-1]#前日のTQQQの株価
182
+
183
+ p2_0=port['p2'].iloc[i-1]#前日のTECLの株価
184
+
185
+ p3_0=port['p3'].iloc[i-1]#前日のSOXLの株価
186
+
187
+
188
+
189
+ a1_0=port['a1'].iloc[i-1]#前日のTQQQの保有株数
190
+
191
+ a2_0=port['a2'].iloc[i-1]#前日のTECLの保有枚数
192
+
193
+ a3_0=port['a3'].iloc[i-1]#前日のSOXLの保有枚数
194
+
195
+
196
+
197
+ v_0=port['v'].iloc[i-1]#前日のリバランスポートフォリオの価値
198
+
199
+
200
+
201
+ # v=a1_0*(p1-p1_0)+a2_0*(p2-p2_0)+v_0#今日のリバランスポートフォリオの価値
202
+
203
+ v=a1_0*p1+a2_0*p2+a3_0*p3#今日のリバランスポートフォリオの価値
204
+
205
+
206
+
207
+ port.iloc[i,6]=v#リバランスポートフォリオの価値のアップデート
208
+
209
+
210
+
211
+ a1=float(v/3/p1)#調整後のTQQQの株数
212
+
213
+ a2=float(v/3/p2)#調整後のTECLの株数
214
+
215
+ a3=float(v/3/p3)#調整後のSOXLの株数
216
+
217
+
218
+
219
+ port.iloc[i,3]=a1#TQQQの株数のアップデート
220
+
221
+ port.iloc[i,4]=a2#TECLの株数のアップデート
222
+
223
+ port.iloc[i,5]=a3#SOXLの株数のアップデート
224
+
225
+
226
+
227
+ port['v2']=0.418*port.p1+0.363*port.p2+0.219*port.p3#リバランスの無いポートフォリオの価値
228
+
229
+ return port
230
+
231
+ port=portfolio_rebalance(TQQQ,TECL,SOXL)
232
+
233
+
234
+
235
+ lnport=np.log(port)
236
+
237
+ lnport.v.plot(label="port daily rebalance",linewidth=1.0)
238
+
239
+ lnTQQQ.plot(label='TQQQ',style='-.')
240
+
241
+ lnTECL.plot(label='TECL',linestyle='--')
242
+
243
+ lnSOXL.plot(label='SOXL',linestyle='--')
244
+
245
+ plt.legend(loc="upper left")
246
+
247
+ plt.show()
248
+
249
+ ```