【初心者向け】シャープレシオで投資戦略を正しく評価する方法

基礎知識・戦略

※本記事のコードや情報は執筆時点の仕様に基づいています。投資は自己責任であり、必ずデモ環境や少額資金でテストした上で運用してください。

「儲かった」だけで戦略を評価してはいけない理由

年率+30%のリターンを出した戦略と年率+15%の戦略があるとき、前者の方が「良い戦略」と言えるでしょうか?実はそうとは限りません。前者が毎日50%の確率で大きく上下する激しい戦略であれば、精神的にも資金的にも継続が難しい。

そこで登場するのがシャープレシオ(Sharpe Ratio)です。リターンをリスクで割ることで「1単位のリスクで何単位のリターンを得ているか」を表します。

シャープレシオの計算式

要素 説明
期待リターン(Rp) 戦略・銘柄の平均リターン(年率)
リスクフリーレート(Rf) 国債利回りなどのリスクゼロの利率。日本では0〜0.5%程度
標準偏差(σ) リターンのボラティリティ(年率)
シャープレシオ (Rp – Rf)÷ σ

シャープレシオが1.0以上なら良好、2.0以上なら優秀とされます。0以下はリスクフリー資産を下回っている状態です。

Pythonでシャープレシオを計算・比較する

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

# ==============================
# 設定エリア
# ==============================
PORTFOLIO = {
    "7203.T": "トヨタ自動車",
    "9984.T": "ソフトバンクG",
    "6758.T": "ソニーG",
    "^N225":  "日経平均(参考)",
}
PERIOD        = "3y"    # 評価期間
RISK_FREE     = 0.001   # リスクフリーレート(年率0.1%)
TRADING_DAYS  = 252

# ==============================
# シャープレシオ計算
# ==============================
results = []

for symbol, name in PORTFOLIO.items():
    df = yf.Ticker(symbol).history(period=PERIOD)
    log_ret = np.log(df["Close"] / df["Close"].shift(1)).dropna()

    # 年率リターンとボラティリティ
    annual_ret = log_ret.mean() * TRADING_DAYS
    annual_vol = log_ret.std()  * np.sqrt(TRADING_DAYS)

    # シャープレシオ
    sharpe = (annual_ret - RISK_FREE) / annual_vol if annual_vol > 0 else np.nan

    results.append({
        "銘柄": name,
        "年率リターン(%)": round(annual_ret * 100, 1),
        "年率ボラティリティ(%)": round(annual_vol * 100, 1),
        "シャープレシオ": round(sharpe, 2),
    })

df_result = pd.DataFrame(results).sort_values("シャープレシオ", ascending=False)
print(df_result.to_string(index=False))
print()
print("シャープレシオの目安:")
print("  2.0以上 → 非常に優秀")
print("  1.0〜2.0 → 良好")
print("  0.5〜1.0 → 普通")
print("  0以下   → リスクフリー以下(問題あり)")

シャープレシオの注意点

シャープレシオはあくまで過去データの評価です。将来を保証するものではありません。また、最大ドローダウン(ピークから底値までの最大下落率)も合わせて確認することが重要です。

まとめ

  • シャープレシオ = (リターン – リスクフリーレート)÷ ボラティリティ
  • 1単位のリスクで何単位のリターンを得ているかを表す指標
  • 1.0以上で良好、2.0以上で優秀とされる
  • リターンの高さだけでなく、リスクとのバランスで戦略を評価できる
タイトルとURLをコピーしました