Python×投資・金融

【Python×米国株+仮想通貨】米インデックス投資と仮想通貨の最適な組み合わせ比率を計算

記事内に商品プロモーションを含む場合があります

こんにちは、hokkyokunです。

仮想通貨はここ数年かなり強いトレンドを示し、驚異的な成長率を誇っています。

一方で、高いボラティリティ(変動率)を持っており、仮想通貨だけに投資をしていたら資産額の乱高下が強く、落ち着いていられなくなるというデメリットもあります。

また、「まだまだ仮想通貨は投機商品であり、本質的には無価値だからいつ暴落してもおかしくない。」という意見も根強いです(個人的にはここを100%否定することはできないです…)

ただし、ここ10年は仮想通貨のポジションを持っていたかいなかったかで資産額は無視できないくらい差が開いていますので、全く持たないのは逆にリスクとなっています。

そこで、私はこれまでにも実績のあるインデックス投資をメインの投資とし、サブの投資として仮想通貨投資を行ってきました。

結論から言うと、ここ数年はこれが最適解でした。

では、このインデックスと仮想通貨の比率はどれくらいが良いのでしょうか。50%が仮想通貨というのは怖そうですが、かといって5%くらいだと良くも悪くもあまり影響なさそうですし…

ここを一度しっかり検証したいと思ったので記事にしてみます。

Pythonというプログラミング言語を使ってシミュレーションをしてみます。

プログラム作成

Pythonとは?

Pythonとはプログラミング言語の一種です。

言語としては簡単な構文で書くことができ、初心者でも学びやすい言語といわれています。

とはいえ、プロも使うれっきとした言語で、AIや機械学習などの最新技術のコーディングにも使われていたり、ウェブサイト作成からスクレイピング(インターネット自動操作)からエクセル層まで幅広い面で活躍できる言語です。

当サイトでも習得を推奨しており、特にエクセルを駆使する必要があったり、投資を効率的に情報分析したいならぜひ習得してほしい言語です。

【VBA⇒Python】VBAからPythonへ移行した方がいい理由と実用的な書き換え用例10選 こんにちは、hokkyokunです。 私はVBAからプログラミングのキャリアをはじめ、Python,HTML,CSSと勉強し、今...
【Python】yfinanceAPIを叩いて株価を取得する方法 こんにちは、hokkyokunです。 yfinanceAPIを叩いて株価を取得するコードです。株価の始値、高値、安値、終値、出来...
【Python】Cryptowatchが使えなくなったのでKrakenAPIを叩いて仮想通貨(暗号資産)のヒストリカルデータを取得 こんにちは、hokkyokunです。 Cryptowatchが使えなくなってしまったのでKrakenのPublicAPIを叩いて...

Pythonコード

今回使用したPythonコードを公開しておきます。

import yfinance as yf
import pandas as pd
import numpy as np

def calculate_investment(start_date, end_date, ticker1, ticker2, ratio1, ratio2, monthly_investment):
    # 投資比率の合計が100%であることを確認
    if ratio1 + ratio2 != 100:
        raise ValueError("投資比率の合計が100%である必要があります。")

    # 株価データを取得
    data1 = yf.download(ticker1, start=start_date, end=end_date, progress=False)["Adj Close"]
    data2 = yf.download(ticker2, start=start_date, end=end_date, progress=False)["Adj Close"]

    # 月末の終値データにリサンプル
    data1 = data1.resample('M').last()
    data2 = data2.resample('M').last()

    # データフレームに結合
    combined_data = pd.DataFrame({ticker1: data1, ticker2: data2}).dropna()

    # 初期値の設定
    total_investment = 0  # 総投資額
    ticker1_units = 0  # 投資先1の購入単位数
    ticker2_units = 0  # 投資先2の購入単位数
    results = []  # 各月の結果を保存するリスト

    for date, prices in combined_data.iterrows():
        # 毎月の投資額を比率に応じて分配
        ticker1_investment = (ratio1 / 100) * monthly_investment
        ticker2_investment = (ratio2 / 100) * monthly_investment

        # 購入単位を計算し累積
        ticker1_units += ticker1_investment / prices[ticker1]
        ticker2_units += ticker2_investment / prices[ticker2]
        total_investment += monthly_investment

        # 現在の総資産額を計算
        total_value = (ticker1_units * prices[ticker1]) + (ticker2_units * prices[ticker2])
        profit_rate = (total_value - total_investment) / total_investment * 100  # 利益率

        # 月次リターンを計算
        if len(results) > 0:
            prev_value = results[-1]['Total Value']  # 前月の総資産額
            monthly_return = (total_value - prev_value) / prev_value if prev_value > 0 else 0
        else:
            monthly_return = 0

        # 結果を保存
        results.append({
            "Date": date,  # 日付
            "Total Investment": total_investment,  # 総投資額
            "Total Value": round(total_value, 2),  # 総資産額
            "Profit Rate (%)": round(profit_rate, 2),  # 利益率
            "Monthly Return": round(monthly_return, 2),  # 月次リターン
        })

    # データフレームに変換
    results_df = pd.DataFrame(results)
    
    # ボラティリティを計算(リターンの標準偏差を使用)
    results_df['Volatility'] = results_df['Monthly Return'].rolling(window=2).std() * np.sqrt(12)
    results_df['Volatility'] = results_df['Volatility'].round(2)

    return results_df

def calculate_sharpe_ratio(monthly_returns, risk_free_rate=0.0):
    """
    シャープレシオを計算する関数
    :param monthly_returns: 月次リターンのシリーズ
    :param risk_free_rate: 無リスク利率(デフォルト: 0%)
    :return: シャープレシオ
    """
    # 無リスク利率を月次ベースに変換し、超過リターンを計算
    excess_returns = monthly_returns - (risk_free_rate / 12)
    # シャープレシオを計算
    return excess_returns.mean() / excess_returns.std() * np.sqrt(12)

# 比率を変化させたシミュレーション結果を保存するリスト
comparison_results = []

def run_comparison(start_date, end_date, ticker1, ticker2, monthly_investment):
    # ticker1の比率を100%から0%まで10%刻みで変更
    for ticker1_ratio in range(100, -1, -5):
        ticker2_ratio = 100 - ticker1_ratio  # ticker2の比率を計算

        # 各比率で投資シミュレーションを実行
        df_result = calculate_investment(start_date, end_date, ticker1, ticker2, ticker1_ratio, ticker2_ratio, monthly_investment)

        # シャープレシオを計算
        sharpe_ratio = calculate_sharpe_ratio(df_result["Monthly Return"].dropna())

        # 最終行を抽出
        last_row = df_result.iloc[-1]

        # 期間中の最低利益率を計算
        min_profit_rate = df_result["Profit Rate (%)"].min()

        # 比率ごとの結果を保存
        comparison_results.append({
            f"{ticker1} (%)": ticker1_ratio,  # ticker1の比率
            f"{ticker2} (%)": ticker2_ratio,  # ticker2の比率
            "Total Investment": last_row["Total Investment"],  # 総投資額
            "Total Value": last_row["Total Value"],  # 総資産額
            "Profit Rate (%)": last_row["Profit Rate (%)"],  # 利益率
            "Volatility": last_row["Volatility"],  # ボラティリティ
            "Sharpe Ratio": round(sharpe_ratio, 2),  # シャープレシオ
            "Min Profit Rate (%)": round(min_profit_rate, 2)  # 最低利益率
        })

    # 比較結果をデータフレームに変換
    comparison_df = pd.DataFrame(comparison_results)

    return comparison_df

# 使用例
start_date = "2020-12-23"  # 開始日
end_date = "2024-12-23"  # 終了日
ticker1 = "^GSPC"  # 投資先1(例: S&P 500)
ticker2 = "ETH-USD"  # 投資先2(例: イーサリアム)
monthly_investment = 1000  # 毎月の投資額


df = run_comparison(start_date, end_date, ticker1, ticker2, monthly_investment)
df.to_csv(f"data/{ticker1}_{ticker2}.csv",encoding="utf-8-sig",index=False)

分析概要

Pythonを用いた分析概要について説明します。

  • シミュレーションは毎月定額積立投資とする
  • データを2つ取得(S&P500(指標)、VOO(ETF)、ビットコイン(通貨)…etc)
  • 二つのデータの投資比率を決定
    例えば(S&P500とビットコインを90:10で毎月投資)
  • 積立シミュレーションを行う。
  • 最終的な評価額、利益率、ボラティリティ(変動率)、シャープレシオ、期間中の最大損失率 を出す
  • 今度は投資比率を変更し同様のシミュレーションを行う。

つまり、例えば、毎月の投資金額1000ドルであった場合、

同じ期間でS&P500に毎月900ドル、ビットコインに毎月100ドル積立投資をして最終的な利益なり、シャープレシオ(※後述)なりを計算ます。

次は比率を変更してS&P500を800ドル、ビットコインを200ドルで投資した場合を計算…

これを繰り返します。利益率の高さとシャープレシオ(投資の効率さ)を兼ねた株式投資と仮想通貨投資の比率の落としどころを探っていきます。

シャープレシオ ( Sharp Ratio )

投資のリターンがどれだけのリスクをとって得られたかを評価する指標です。
高いほど効果的な投資ができていると言えます。

  • 平均リターン : 投資の期間中に得られたリターン(利益率)の平均値
  • 無リスクリターン : 無リスク資産(国債等)のリターン
  • リスク ( リターンの標準偏差 ) : リターンの変動の大きさ

例えばシャープレシオ1.5の投資はシャープレシオ0.5の投資よりもリスクに対する見返りが高く、効率の良い投資といえます。

シャープレシオを評価することで、仮想通貨の高いリスクに対し、効率の良い投資ができているかを評価していきます。

分析結果

S&P500×ビットコイン

S&P500とビットコインの投資比率の最適解を探ってみます。

S&P500指数で調査してもいいのですが、現実的にはETFや投資信託を購入することになります。

なので、S&P500はVOOというETFで計算しました。

ビットコインはビットコイン/ドルで計算しています。

VOO : S&P500指数と連動したETF
BTC-USD : ビットコイン/ドル

VOOとBTC-USDを100:0から0:100まで比率を変えながら毎月投資した結果です。

投資は2020年12月23日から2024年12月23日までの4年間でシミュレーションしています。

毎月トータルで1000ドル投資したと仮定しています。

利益率は最後(2024/12/23)時点の利益率
ボラティリティは価格の変動性
シャープレシオは投資の効率さ
最大損失は期間中の最も損失の大きかったタイミングの利益率

を表しています。

VOO (%) BTC-USD (%) 評価額(ドル) 利益率(%) ボラティリティ シャープレシオ 最大損失(%)
100 0 67550.81 37.86 0.17 2.06 -12.81
95 5 70782.10 44.45 0.24 2.06 -14.42
90 10 74013.40 51.05 0.29 2.05 -16.02
85 15 77244.69 57.64 0.34 2.07 -17.63
80 20 80475.98 64.24 0.39 2.05 -19.23
50 50 99863.72 103.80 0.64 1.92 -29.62
10 90 125714.05 156.56 0.91 1.76 -45.98
0 100 132176.63 169.75 0.96 1.73 -50.06

ご覧の通り、ビットコインの比率を高めるにつれて利益率も上がりますが、ボラティリティ(変動率)も上がっていきます。

不安定になっている証拠ですね。

最大損失も徐々に上がってきています。ただ、50:50でも最大損失が-30%なので、思ったほど大きくもないなというのが印象でした。

一方でシャープレシオ(投資の効率の良さ)はビットコイン比率20%までほとんど変動なしで、最高値クラスです。

このあたりをどう評価するかですが、シャープレシオを重視する(投資効率を重視する)なら仮想通貨の割合は5%やそこらよりも10%台~20%くらいでも良いと考えれらます。

S&P500×米国債券

次はS&P500と米国債券を比較してみます。

S&P500は引き続きVOOで計算してみます。
米国債券としては、総合的に米国の債券に投資できるAGGというETFを使います。

VOO : S&P500指数と連動したETF
AGG : 米国の総合債券

後の条件は同じです。

投資は2020年12月23日から2024年12月23日までの4年間でシミュレーションしています。毎月トータルで1000ドル投資したと仮定しています。

VOO (%) AGG (%) 評価額(ドル) 利益率(%) ボラティリティ シャープレシオ 最大損失(%)
100 0 67550.81 37.86 0.17 2.06 -12.81
95 5 66631.28 35.98 0.17 2.06 -12.74
90 10 65711.74 34.11 0.17 2.07 -12.67
85 15 64792.21 32.23 0.17 2.07 -12.59
80 20 63872.67 30.35 0.17 2.05 -12.52
50 50 58355.46 19.09 0.15 2.06 -12.08
10 90 50999.18 4.08 0.10 2.02 -11.49
0 100 49160.11 0.33 0.07 1.99 -11.93

ボラティリティはかなり低いですね。
ただその効果を発揮しようとするなら結構しっかり債権比率を上げないといけないことがわかりました。

今回の実験で言うと米国株と債券の比率は50:50くらいまで上げないとボラティリティの数値は下がりませんでした。

最大損失はVOO100%に投資した場合と比較して、債権比率を上げてもあまり、下げ幅を縮小するというところまではいきませんでした。

利益率を犠牲にした割にはあまり効果が見えずらいなというのが印象です。

S&P500×イーサリアム

次はS&P500とイーサリアムの比較です。

イーサリアムとS&P500を比較したかった理由は、

  • イーサリアムがステーキングコインであり、定期報酬を受け取ることが可能
  • ビットコイン以外の仮想通貨でも同じような状況なのかどうか

他の条件については上記と同じなので省略します。

VOO (%) ETH-USD (%) 評価額(ドル) 利益率(%) ボラティリティ シャープレシオ 最大損益(%)
100 0 67550.81 37.86 0.17 2.06 -12.81
95 5 68088.96 38.96 0.24 2.01 -13.83
90 10 68627.11 40.06 0.29 1.95 -14.84
85 15 69165.25 41.15 0.37 1.89 -15.86
80 20 69703.40 42.25 0.44 1.83 -17.14
50 50 72932.28 48.84 0.83 1.57 -29.07
10 90 77237.45 57.63 1.35 1.37 -44.97
0 100 78313.75 59.82 1.45 1.34 -48.95

さて、ビットコインとの状況の違いですが、結論から言うと状況はことなります。

まず、イーサリアムはボラティリティがとても高い
ビットコイン100%投資だとボラティリティは0.96なのに対し、イーサリアム100%だと1.45と大きな違いが見られます。

利益率も高いボラティリティを許容したにも関わらず、ビットコインとの組み合わせの方が利益率は高いです。

シャープレシオ(投資の効率さ)もイーサリアムの比率を上げるたびに目に見えて下がっています。

一見イーサリアムは投資妙味がなさそうに見えますが、イーサリアムはステーキングコインなので、毎月定期報酬を得ることができます

ステーキング報酬は年率3%以上が期待できるので、高配当投資くらいの利回りで運用することが可能です。こう考えるとシミュレーション以上に手元に資産が残ります。

詳細はこちらで解説していますので、詳しく知りたい方は除いてみてください。

【ステーキングで定期報酬】仮想通貨投資が米国株投資家におすすめできる理由 なぜ米国株投資家におすすめなのか 仮想通貨は今追い風が吹いている 仮想通貨は今、驚異的な伸びを示しています。 下記は...

ざっくりと説明すると、ステーキングコインで報酬が得られる理由は

  1. 取引の承認というネットワーク維持の「お仕事」に貢献するため。
  2. ステーキングしたコインがネットワークのセキュリティを高める「担保」として機能するため。

ステーキング投資の報酬最高値はBITPOINTです。

下記ボタンから申し込むと最大1500円分の仮想通貨がもらえます
(口座申し込みで500円分+一回取引で1000円分)

BITPOINTであればイーサリアムの定期報酬率は3.5%です。
他社は大体~3%くらいなので、そこよりも高い報酬が期待できます。

仮想通貨投資はもともと別の取引所を使っていたのですが、定期報酬の高さを知って、BITPOINTに乗り換えました。

毎月5000円~から積立設定ができるのもポイントです。

積立設定をすることでついついめんどくさくて買いそびれたりするこを防いでくれるので仮想通貨に投資するなら積立設定のある取引所にすることをお勧めします。

結論

思っているよりも仮想通貨のリスクは吸収できる

私の率直な意見としては、

仮想通貨のリスクは思ったよりも米国株で吸収できている

でした。

例えばVOOとビットコインを80:20で投資してもVOO単独で投資するのと同程度のシャープレシオでした。

一方で利益率はVOO+ビットコイン(80:20)は64%なのに対し、VOO単独は38%でした。

倍近く利益率が変わります。

ただ、もちろんボラティリティも一時的な損失もビットコインを一緒に投資した方が大きくなりますので、危険がないわけではないです。

ここが許容できるならビットコインを取り入れた方が効率の良い投資が期待できそうです。

ただし、未来はわからない

とはいえ、これは一つの期間の一例にすぎません。

未来がこの通りに動くわけではありませんので、過度の期待は禁物です。

仮想通貨は政府の方針によっても大きく変動します。

ビットコインの価格が一気に半分吹き飛ぶようなことが今後起きないとは限りませんので、下落の覚悟がなければ投資は難しいかもしれません。

私ならどうするか

さて、私はどうするかですが、仮想通貨投資を継続しようと思います

今後の情勢を考えても仮想通貨には追い風が吹いていますし、シャープレシオも思った以上に仮想通貨比率をあげても下がりませんでした。

リスクをとって、利益を求めるのは合理的であると考えています。

【ステーキングで定期報酬】仮想通貨投資が米国株投資家におすすめできる理由 なぜ米国株投資家におすすめなのか 仮想通貨は今追い風が吹いている 仮想通貨は今、驚異的な伸びを示しています。 下記は...

さて、米国株と仮想通貨の投資比率をどうするかですが、

新規購入金額の8割を米国株、2割を仮想通貨投資に充てます。

私は総資産5000万円を目標に投資を継続していますが、2024年末時点で約2000万円に到達しました。

このうち、仮想通貨の割合は3%くらいなのですが、この比率10%台くらいに、ゆっくりゆっくり上げていこうと考えています

仮想通貨の成長率はまだまだ米国株よりも高い可能性がありますので、新規購入の2割+高い成長率で5年~10年くらいで目標値に到達できればと考えています。

私は仮想通貨投資にBITPOINTを取引所として使っています。

  • ステーキング(仮想通貨で定期報酬が受け取れる)対応している取引所は少ない
  • その少ない取引所でも、報酬年率が最も高い
  • 毎月の積立設定が可能。
    毎月5000円~(複数の仮想通貨合算でもOK)と比較的少額から始められる。

ステーキング投資の報酬最高値はBITPOINTです。

下記ボタンから申し込むと最大1500円分の仮想通貨がもらえます
(口座申し込みで500円分+一回取引で1000円分)

最後までお読みくださりありがとうございました。

ではでは。