ポートフォリオ1
数式を載せたかったのですが,Markdownからの変換がうまくいかないので,軽い説明とプログラムだけ載せます.
まず,使用するデータをプロットする.
これだと,データが対数増加率で正則化する.
# 対数増加率 r_df = np.log(df / df.shift(1)) # 累積利益率にする cum_df = r_df.cumsum().dropna()
累積対数利益率でも同じグラフが描かれる.
平均-分散ポートフォリオを作成するので,平均と銘柄同士の共分散行列を求める.
mean = cum_df.mean() cov = cum_df.cov() std = np.sqrt(np.diag(cov))
を計算すると,最大$S=2.2$,最小$S=-0.4$となった.
5銘柄の投資可能集合を計算する.
allocate5 = [] for i in range(0, 101, 10): for j in range(0, 101 - i, 10): # j <= 100 - i for k in range(0, 101 - i - j, 10): # k <= 100 - i - j for l in range(0, 101 - i - j - k, 10): # l <= 100 - i - j - k allocate5.append([i, j, k, l, 100 - i - j - k - l]) # [i, j, k, l, 残り] allocate5 = np.array(allocate5) / 100