Black-Littermanで仮想通貨の資産配分を最適化する

# 概要
仮想通貨投資の最適化を試みた。
- モデルはBlack-Litterman
- ユニバースはCoincheckで購入可能かつ、時価総額上位100位にランクインしている9銘柄
- Bitcoinに対してネガティブな将来見通しをいくつか組み入れた結果、最適な資産配分はマーケットポートフォリオから乖離し、Bitcoinへの配分を絞る結果が得られた。

# 背景
近年の仮想通貨への盛り上がりに乗じてエクスポージャを増やそうと思ったが、Bitcoinに全ツッパするのは避けたかった。
（というか、unsystematic riskを減らしたかった。）

古典的な発想であるマーケットポートフォリオ（時価加重ウエイト）の適用だが、
- 結局Bitcoinの時価総額が大きすぎて分散投資にならないのでは...？
- ボラ大きすぎて期待リターンの安定した推定無理では...？

と思ったため、上記課題に対応できそうなBlack-Littermanモデルを使用することに。

# Black-Littermanとは
（興味のない人は飛ばしてもらって大丈夫です。）

Black Littermanモデルとは、

https://qiita.com/nokomitch/items/0d1812763114e6266bf3

で分かりやすく説明されているが、要は、観測可能な時価総額ウェイト（＝マーケットポートフォリオ）と投資家のビューを織り交ぜ、最適と考えられるウェイトを新たに求める手法である。以下簡単に説明する。

資産のリターン（以下、均衡リターンと呼ぶ）が市場から以下のように観測できるとする。
```math
\Pi = \lambda \Sigma \omega \tag{1}
```
ここで、
- $\Pi$は均衡リターンを表し、$n$個の資産が存在する場合、$n×1$の行列である。
- $\lambda$は投資家のリスク回避度である。
- $\Sigma$は資産の共分散行列である（相関行列ではない）。 
- $\omega$は資産の時価総額比率を表しており、$n×1$の行列である。

一方、投資家は資産リターンに対して一定の見通し（ビュー）を持っているとする。
```math
\Pi = \mu + \delta, \delta ～N(0, \tau \Sigma) \tag{2}
```

```math
Q = P \mu + \epsilon, \epsilon～N(0, \Omega) \tag{3}
```


ここで、
- $\mu$は資産の期待リターンで、$n × 1$の行列である。
- $\tau$は均衡リターンをどれだけ重視するか表すパラメータであり正値をとる。小さいほど均衡リターンへの信頼度が高い。
- $Q, P, \Omega$はセットで資産リターンの相対的な関係や絶対的な水準を表現する。特に$\Omega$はビューの自信度を表す対角行列であり、対角成分の数値が0に近いほどビューに対して自信を持っていることを意味する。
$k$個のビューが存在する場合、$Q$は$k × 1$, $P$は$k × n$, $\Omega$は$k × k$の行列である。

この時、ベイズの定理より$\Pi$観測後の$\mu$の事後分布における期待値は
```math
\mu^* = E[\mu | \Pi] = ((\tau \Sigma)^{-1} + P^T \Omega^{-1} P)^{-1} ((\tau \Sigma)^{-1} \Pi + P^T \Omega^{-1} Q) \tag{4}
```
と計算できる（$\Pi$と$P^{-1} Q$の加重平均と解釈できる）。

さらに、投資家のビューを反映した最適な資産配分は、(1)式の$\Pi$を$\mu^*$で置き換えることで
```math
w^* = (\lambda \Sigma)^{-1} \mu^*  \tag{5}
```
と計算する。

今回はこの$\omega^*$と$\omega$の差異を確認する。

# 対象とする資産
{coincheckで取引されている銘柄} ∩ {時価総額上位100位以内}を投資ユニバースとする。
具体的には、Avalanche,Bitcoin,Bitcoin Cash,Dai,Ethereum,EthereumClassic,Immutable,Shiba Inu,XRPの9銘柄（辞書順）

時価総額ウェイトはこんな感じ
![img width="50%" alt=original_weight.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512549/85360636-87f3-501e-1ce3-21ea1d493795.png)

データはCoinGeckoのPublic APIから取得する。
期間は2023/12/10-2024/12/08の1年間

# 各種設定
以下のビューをモデルに組み込む。
- ビュー１： Ethereumの年率リターンが、Bitcoin対比で10%上回る
日次では0.027%(=10%/365)
（参考：ヒストリカル年率リターンはBitcoinが86%, Ethereumは57%）
- ビュー２： XRPの年率リターンは200%
日次では0.548%(=200%/365)
（参考：ヒストリカルでは140%）

（これらビューは試験用であり、個人の見通しを示すものではない）
$P, Q$は以下の通り
```math
P= \begin{pmatrix}
0 & -0.5 & 0 & 0 & 0 & 0.5 & 0 & 0 & 0  \\
0 & 0 & 0 & 0 & 0 & 0 &0 & 0 & 1  \\
\end{pmatrix}
```

```math
Q= \begin{pmatrix}
0.027\% \\
0.548\%
\end{pmatrix}
```
ただしPの各列はAvalanche,Bitcoin,Bitcoin Cash,Dai,Ethereum,EthereumClassic,Immutable,Shiba Inu,XRPの順に対応している。

ビューの自信度を表す$\Omega$については、Mednis(2022)に倣い、	
```math
\begin{pmatrix}
(p_1 \Sigma p^T_1) \tau & \dots & 0  \\
\vdots & \ddots & \vdots\\
0 & \dots & (p_k \Sigma p^T_k) \tau 
\end{pmatrix}
```
とする。ただし、$p_1, p_2, ..., p_k$はそれぞれ$P$の各行を表す。
また、ハイパーパラメータ的に設定する必要がある$\tau, \lambda$についても、Mednis(2022)に倣い
- $\tau = 0.1625$
- $\lambda = 2.5%$
とする。

# 結果
ウェイトはこんな感じ
![compare_weight.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512549/ad4d2a08-a8ec-9021-7be5-a03ab0b207fc.png)

時価総額ウェイト対比で、Bitcoinの比率は低減している一方で、高いリターンを期待している$XRP$についてはウェイトが3倍ほど上昇していることが分かる。

変化の幅が若干小さいので、もう少し極端なビューを加えてみる。：
- ビュー３：Shiba Inuコインの年率リターンが300%

結果は以下の通り
![compare_weight.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512549/7903d322-d781-6c7a-b3bb-27abd6631dd7.png)
想定通り、Shiba Inuのウェイトが上昇している。

# データとコード 
雑ではあるがGithubにあげた。

https://github.com/ara-git/CryptoCoin

./dataに諸々のデータ（直近一年間の対数収益率、時価総額ランキング、$P, Q$等）が入っており、./src/black_litterman.pyにて新しいウェイトを計算している。
（適当ですまん）

# 感想
Bitcoinに対して相当ネガティブな見通しを組み入れたため、想定通り、相応にBitcoinの配分を絞る結果となった。
自由に設定できるパラメータが多く、投資家の裁量に委ねられる部分は多い印象だが、不安材料の多い資産の投資配分を考えるうえで一材料にはなりそうか。

ハイパーパラメータ的な（$\Omega, \tau$）についてはもう少し手を動かしてみないと勘所が分からなそう。難しいね。

# 主に参考にしたもの
- Mednis(2022). [Portfolio optimization with crypto assets.](
https://umu.diva-portal.org/smash/get/diva2:1672778/FULLTEXT01.pdf)
    どこかの大学のMaster Thesisぽい。読みやすい。
    まとめ：
    伝統的資産とBitcoinの配分最適化にBlack-Littermanを活用
        - Bitcoinの期待リターンはヒストリカルよりも小さい。
        - RippleはEthereumをアウトパフォームする。
         
    などの5つのビューを組み入れた結果、Market Weightに対して、シャープレシオは0.45低下（0.95⇒0.50）、ボラは13%低下（35%⇒22%)
    BitcoinのWeightが減った（8%⇒1%）ことがクリティカルに効いている印象
- Platanakis, E. and Urquhart, A (2019) . Portfolio management with cryptocurrencies: the role of estimation risk.


- ニッセイアセマネさんの資料
    - [OLSで導出を行うもの](https://www.nam.co.jp/market/column/quantstopics/2024/240802.html)
    - [ベイズで導出を行うもの](https://www.nam.co.jp/market/column/quantstopics/2024/241115.html)
の二つある


# 余談
- 仮想通貨のデータ取得について
　CoinGeckoのPublic APIが使いやすかった。データも網羅的であり、大体揃っていそう。
>CoinGecko’s Public API has a rate limit of 5 to 15 calls per minute, depending on usage conditions worldwide.

（[サポートページ](https://support.coingecko.com/hc/en-us/articles/4538771776153-What-is-the-rate-limit-for-CoinGecko-API-public-plan#:~:text=CoinGecko%E2%80%99s%20Public%20API%20has%20a%20rate%20limit%20of,calls%20per%20minute%2C%20depending%20on%20usage%20conditions%20worldwide)より）
とあるが、ぎりぎりを攻めると普通にエラー吐いたので注意。
余裕をもって30秒インターバル開けたら問題なく動いた。

- 仮想通貨のDiversifyについて
結局ほとんどのアルトコインがBitcoinの動向に大いに影響を受けてしまうのだから、（少なくともBitcoinのウェイトを減らさない限り）Diversifyなど無理では...？
と作業しながら思った。
真面目にPCAなどして、リスクパリティするのが筋よいんかなあ。
（詳しい人は教えてください。）

- $\Sigma$の取り扱い
(5)式について、

https://qiita.com/nokomitch/items/0d1812763114e6266bf3

では$\Sigma$も更新している。
一方、オリジナル論文（He & Litterman(1999)）やMednis(2022)等では$\Sigma$をそのまま使っているため、本稿はこちらに倣った。
この選択による結果ウェイトへの影響は限定的だった。