はじめに
シャープレシオは、ファイナンスの世界では投資判断をする上で、重要な指標の一つです。
そこで、Pythonでシャープレシオを算出する方法を解説します。
シャープレシオとは?
シャープレシオとは以下の数式で表される指標です。Returnが分子で分母にRiskです。Returnは大きく、Riskは小さい方がいいです。なので、シャープレシオは大きければ大きいほど良い指標と言えます。
安全資産の利子を0と仮定すると以下で表されます。
Sharpe_Ratio = return/risk
- return:利益率の平均値
- risk:利益率の標準偏差(ばらつき)
シャープレシオが重要な理由
みなさん、投資を行う時に、Returnが大きい方がいいと考えますよね。それは正解ですが、それだけでは不十分です。
投資には必ずリスクというものが存在します。
そのリスクを最小化しながら、投資をすることが大切です。
このリスク最小化とReturn最大化の指標となるのがシャープレシオです。
だからシャープレシオが重要な指標の一つなのです。
Pythonによるシャープレシオの計算方法
データ
スクレイピングでデータを取得しましょう。今回KDDIの直近1年分の株価を用います。解析日は、2021年1月2日です。
今回は、日足ベースでシャープレシオを計算していきます。
スクレイピングに関する詳細は以下の記事を参考にしてみてください。
import datetime
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import scipy
import pandas_datareader.data as pdr
import datetime
import mplfinance as mpf
STOCKS = "9433.jp"
now = datetime.date.today()
end = now
start = end - datetime.timedelta(days=365)
data = pdr.DataReader(STOCKS , 'stooq', start, end)
mpf.plot(data, type='candle', figratio=(12,4),
volume=True, mav=(5, 25,75), style='yahoo')
出力結果は、以下です。

リターンの計算方法
returns = np.log(data/data.shift(1))
return = returns["Close"].mean()#平均リターン
利益率とは以下で求めることが可能です。
[“Close”]は終値を使うという意味です。
R = X2/X2-X1
しかし、ファイナンスの世界では、一般的には、これをx=0の近傍におけるlog(1+x)のテーラー展開で近似します。
その結果以下となります。
R = np.log(X2/X1)
こちらの計算方法を用いる理由は以下のためです。
- 不均一な分散に対する誤差を減らすため
- 非定常過程に対数差分系列をとることによって定常過程と扱えるため
リスクの計算方法
returns = np.log(data/data.shift(1))
risk = np.std(returns["Close"])#リターンの標準偏差
利益率とは以下で求めることが可能です。
シャープレシオの計算方法
Sharpe_Ratio = return/risk
算出結果
- 0.0008051090152007092
シャープレシオは数値が大きいほど運用効率が良く、1を超えていると一般的に優秀と判断できます。
KDDIのシャープレシオはほぼ0と今年一年で言えば、投資しない方が良さそうですね。
しかし、これは配当と優待を考慮していませんので注意ください。
コメント