ポートフォリオ1

数式を載せたかったのですが,Markdownからの変換がうまくいかないので,軽い説明とプログラムだけ載せます.

まず,使用するデータをプロットする. f:id:ShogoAkiyama:20181110130607p:plain

これだと,データが対数増加率で正則化する.

# 対数増加率
r_df = np.log(df / df.shift(1))
# 累積利益率にする
cum_df = r_df.cumsum().dropna()

f:id:ShogoAkiyama:20181110130931p:plain

累積対数利益率でも同じグラフが描かれる.

平均-分散ポートフォリオを作成するので,平均と銘柄同士の共分散行列を求める.

mean = cum_df.mean()
cov = cum_df.cov()
std = np.sqrt(np.diag(cov)) 

{
S=\frac{\mu}{\sigma}
}

を計算すると,最大$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

最小分散ポートフォリオ,最大リターンポートフォリオ,最大Sharpe Ratioポートフォリオを求めることができる.