見出し画像

株価のデータ分析!シャープレシオの計算とリスクフリーレートの設定

今回は、投資の世界でよく耳にする「シャープレシオ」について、わかりやすく解説していきます。


シャープレシオって何?

シャープレシオは、投資のパフォーマンスを評価するための指標です。簡単に言うと、「リスクに見合ったリターンが得られているかどうか」を数値化したものです。

例えば、友達のAさんとBさんがいて、それぞれ違う投資をしているとします。

  • Aさん:年間リターン10%、ボラティリティ(価格変動の大きさ)20%

  • Bさん:年間リターン8%、ボラティリティ10%

一見するとAさんの方が儲かっているように見えますが、実はBさんの方が効率的な投資をしているかもしれません。なぜなら、Bさんはより少ないリスクで高いリターンを得ているからです。このような比較を可能にするのがシャープレシオなんです。

専門家A: シャープレシオは、リスク1単位あたりのリターンを示すので、異なる投資戦略や資産クラスの比較に役立ちます。

わかりやすい図解

とてもわかりやすい図解がありましたので、引用させていただきます。

以下の記事から引用しております。

シャープレシオが大きいのはリスクが少なく、かつ、リターンも大きい
実際には上記の式で計算することになる

シャープレシオの計算方法

さて、具体的にどうやって計算するの?という疑問が湧いてきますよね。基本的な計算式はこんな感じです:

シャープレシオ = (投資のリターン - リスクフリーレート) / 投資のボラティリティ

ここで出てきた「リスクフリーレート」って何?って思いますよね。これは「リスクゼロで得られるはずの利回り」のことです。通常、国債の利回りなどが使われます。

Pythonを使ってシャープレシオを計算する場合、以下のようなコードになります:

def calculate_sharpe_ratio(returns, risk_free_rate):
    excess_returns = returns - risk_free_rate
    return (excess_returns.mean() / excess_returns.std()) * np.sqrt(252)

ここで、`np.sqrt(252)`は年間の営業日数の平方根で、日次リターンを年率に変換するために使用しています。


リスクフリーレートの設定

さて、ここで重要になってくるのが「リスクフリーレート」の設定です。どの金利を使うべきか、実はこれが結構難しい問題なんです。

一般的には以下のような選択肢があります:

1. 米国債10年物の利回り
2. 3ヶ月物のT-Bill(財務省短期証券)の利回り
3. FF金利(Federal Funds Rate)

リスクフリーレートの設定方法

個人投資家の立場からすると、どれを選べばいいか迷いますよね。実際のところ、投資の期間や目的によって適切なものが変わってきます。長期投資なら10年債、短期の運用なら3ヶ月物T-Billが適しているかもしれません。でも、大事なのは一貫性です。同じ分析の中では、同じリスクフリーレートを使い続けることが重要です。


Pythonでシャープレシオを計算してみよう!

それでは、実際にPythonを使ってシャープレシオを計算してみましょう。以下のコードは、株価データを取得し、10年債と3ヶ月物T-Billの両方を使ってシャープレシオを計算します。


import pandas as pd
import numpy as np
import yfinance as yf
import matplotlib.pyplot as plt

# 株価データの取得
def get_stock_data(ticker, start_date, end_date):
    stock = yf.Ticker(ticker)
    df = stock.history(start=start_date, end=end_date)
    return df['Close']

# リターンの計算
def calculate_returns(prices):
    return prices.pct_change().dropna()

# 対数リターンの計算
def calculate_log_returns(prices):
    return np.log(prices / prices.shift(1)).dropna()

# 算術平均リターンの計算
def arithmetic_mean_return(returns):
    return returns.mean() * 100  # パーセント表示

# リスク(ボラティリティ)の計算
def calculate_volatility(returns):
    return returns.std() * 100  # パーセント表示

# 幾何平均リターンの計算
def geometric_mean_return(returns):
    return ((1 + returns).prod() ** (1 / len(returns)) - 1) * 100  # パーセント表示

# 年率リターンの計算
def annualized_return(prices):
    last_price = prices[-1]
    one_year_ago_price = prices[-252]  # 252営業日を考慮
    return ((last_price / one_year_ago_price) - 1) * 100  # パーセント表示

# メイン処理
def main():
    # パラメータ設定
    ticker = "AAPL"  # Apple Inc.の株価を例として使用
    start_date = "2022-11-01"
    end_date = "2023-11-30"

    # データ取得
    prices = get_stock_data(ticker, start_date, end_date)

    # 通常のリターン計算
    returns = calculate_returns(prices)

    # 対数リターン計算
    log_returns = calculate_log_returns(prices)

    # 結果の計算と表示
    print(f"分析期間: {start_date} から {end_date}")
    print(f"対象銘柄: {ticker}")
    print("\n通常リターンベースの計算:")
    print(f"算術平均リターン(日次): {arithmetic_mean_return(returns):.4f}%")
    print(f"リスク(ボラティリティ、日次): {calculate_volatility(returns):.4f}%")
    print(f"幾何平均リターン(日次): {geometric_mean_return(returns):.4f}%")

    print("\n対数リターンベースの計算:")
    print(f"算術平均リターン(日次): {arithmetic_mean_return(log_returns):.4f}%")
    print(f"リスク(ボラティリティ、日次): {calculate_volatility(log_returns):.4f}%")
    
    # 年率換算(営業日数を252日と仮定)
    print("\n年率換算:")
    print(f"算術平均リターン(年率): {arithmetic_mean_return(returns) * 252:.4f}%")
    print(f"リスク(ボラティリティ、年率): {calculate_volatility(returns) * np.sqrt(252):.4f}%")
    print(f"幾何平均リターン(年率): {((1 + geometric_mean_return(returns)/100) ** 252 - 1) * 100:.4f}%")
    
    # 年率リターンの計算と表示
    print(f"\n年率リターン: {annualized_return(prices):.2f}%")

    # グラフの描画
    plt.figure(figsize=(12, 6))
    plt.plot(prices.index, prices.values)
    plt.title(f"{ticker} Stock Price")
    plt.xlabel("Date")
    plt.ylabel("Price")
    plt.show()

    plt.figure(figsize=(12, 6))
    plt.plot(returns.index, returns.values * 100)  # パーセント表示
    plt.title(f"{ticker} Daily Returns")
    plt.xlabel("Date")
    plt.ylabel("Return (%)")
    plt.show()

if __name__ == "__main__":
    main()

このコードを実行すると、選択した銘柄のシャープレシオが計算されます。10年債と3ヶ月物T-Billの両方を使用することで、異なるリスクフリーレートがシャープレシオにどのような影響を与えるかを比較できます。

まとめ

シャープレシオは、投資のパフォーマンスを評価する上で非常に有用な指標です。ただし、その計算には注意が必要で、特にリスクフリーレートの選択は重要です。

  • シャープレシオは、リスク調整後のリターンを示す指標

  • 計算には投資のリターン、ボラティリティ、リスクフリーレートが必要

  • リスクフリーレートの選択には一貫性が重要

投資の世界は奥が深いですが、こういった指標を理解し活用することで、より賢明な投資判断ができるようになります。ぜひ、自分の投資ポートフォリオのシャープレシオを計算してみてください!

最後に一言付け加えると、シャープレシオは過去のデータに基づいているため、将来のパフォーマンスを保証するものではありません。他の指標と組み合わせて総合的に判断することが大切です。投資は常に慎重に、そして継続的に学び続けることが大切です。みなさんも、楽しみながら賢く投資していきましょう!

情報源

以下のサイトを参考にさせていただきました。

シャープレシオの計算方法は以下にあります。共分散からも計算できます。