其数值意思为在承受单位风险的情况下,所能获取的回报。
计算公式:
S h a r p e R a t i o = E ( R P ) − R f σ P SharpeRatio=\frac {E(R_P)-R_f} {\sigma _P} SharpeRatio=σPE(RP)−Rf
其中, E ( R p ) E(R_p) E(Rp) 是投资预期报酬率, R f R_f Rf 是无风险利率(常用国债利率), σ P \sigma_P σP 是投资标准差。
别名:期望投资报酬率
计算公式:
E ( R P ) = 期 望 投 资 收 益 / 投 资 成 本 × 100 % E(R_P)=期望投资收益/投资成本×100% E(RP)=期望投资收益/投资成本×100%
eg:某物业售价 200 W 200W 200W,同等物业月租金 2 W 2W 2W,转售成交价 215 W 215W 215W,
出 租 投 资 报 酬 率 = 2 W ∗ 12 ( 月 数 ) 200 W = 12 % 出租投资报酬率=\frac {2W*12(月数)}{200W}=12\% 出租投资报酬率=200W2W∗12(月数)=12%
售 出 投 资 报 酬 率 = 215 W − 200 W 200 W = 7.5 % 售出投资报酬率=\frac {215W-200W} {200W}=7.5\% 售出投资报酬率=200W215W−200W=7.5%
计算公式:
σ p = ∑ i = 1 n ( x i − x ˉ ) 2 n \sigma_p=\sqrt{\frac{\sum_{i=1}^{n}(x_i-\bar{x})^2}{n}} σp=n∑i=1n(xi−xˉ)2
其中, x i x_i xi为第 i i i 天收益率, x ˉ \bar x xˉ 为收益率平均数, n n n 为天数。
假设计算十天数据,使用随机函数生成随机利润百分数,假设年无风险利率为3%
# 数据天数
n=10
# 假设年无风险利率
rf=3
# 随机生成 n 天利润百分数
data=np.random.normal(size=(n))
'''
数据为:array([ 0.23239275, 0.06663936, -0.5533271 , -0.79159902, 0.72197139,
0.97178241, 2.18499703, 0.51868447, -0.41878817, -0.51338701])
'''
计算年月日夏普比率
# 投资预期收益率 - 无风险利率
erp_rf=data.sum()/n-rf/252
'''
data.sum()/n 为 n 天利润百分数平均值
rf / 252 对应日无风险利益
'''
# 投资标准差
sigmap=data.std()
import math
# 关于 period(数值,意义):(252,日夏普),(52,周夏普),(12,月夏普),(1,年夏普)
period=252
Sharpe=erp_rf/sigmap*math.sqrt(period)
注:随机选取了5个股票数据(来自雅虎),在做的项目刚好有股票数据,就拿来使用了
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 使用雅虎得到股票数据,选其中5个股票收盘价数据
print(stock_data)
'''
d_spy_TEL d_spy_HON d_spy_ADP d_spy_FIS d_spy_ICE
2007-11-09 32.570000 55.066624 41.027218 41.779999 33.088001
2007-11-12 31.360001 54.466000 40.930641 42.900002 32.270000
2007-11-13 32.349998 55.428905 41.404739 43.730000 33.580002
2007-11-14 32.500000 55.791183 41.633011 43.360001 34.228001
2007-11-15 33.099998 54.494602 41.167690 43.240002 34.500000
... ... ... ... ... ...
2008-08-20 33.439999 46.228889 38.805969 22.230000 17.114000
2008-08-21 33.189999 46.476765 39.262512 22.160000 16.830000
2008-08-22 32.900002 47.477802 39.622475 22.330000 17.620001
2008-08-25 32.099998 46.286091 38.718174 21.969999 16.990000
2008-08-26 32.000000 46.657906 38.832310 21.790001 16.948000
200 rows × 5 columns
'''
计算组合收益
# pct.change() 函数计算第 i 天相对第 i-1 天变化的百分率
# drop() 丢弃nan数据
# stock_ratio 为五个股票数据199天的收益率
stock_ratio=stock_data.pct_change().dropna()
# 5个股票权重(生成随机数并标准化)
weight=np.random.uniform(size=5)
weight/=weight.sum()
'''
array([0.14724825, 0.0809638 , 0.26815966, 0.24306394, 0.26056435])
'''
# 根据权重计算5个股票收益率
stock_ratio_weight=stock_ratio.mul(weight, axis=1)
# 添加一列数据:组合收益率
stock_ratio_weight['portfolio']=stock_ratio_weight.sum(axis=1)
'''
d_spy_TEL d_spy_HON d_spy_ADP d_spy_FIS d_spy_ICE portfolio
2007-11-12 -0.005470 -0.000883 -0.000631 0.006516 -0.006442 -0.006911
2007-11-13 0.004648 0.001431 0.003106 0.004703 0.010578 0.024466
2007-11-14 0.000683 0.000529 0.001478 -0.002057 0.005028 0.005662
2007-11-15 0.002718 -0.001882 -0.002997 -0.000673 0.002071 -0.000762
2007-11-16 0.008541 -0.001813 0.001544 -0.001518 0.003837 0.010591
... ... ... ... ... ... ...
2008-08-20 -0.003901 -0.000941 0.000121 -0.001952 0.008068 0.001396
2008-08-21 -0.001101 0.000434 0.003155 -0.000765 -0.004324 -0.002601
2008-08-22 -0.001287 0.001744 0.002459 0.001865 0.012231 0.017011
2008-08-25 -0.003581 -0.002032 -0.006120 -0.003919 -0.009316 -0.024968
2008-08-26 -0.000459 0.000650 0.000790 -0.001991 -0.000644 -0.001653
199 rows × 6 columns
'''
组合投资收益
stock_ratio_weight.portfolio.plot()
plt.show()
all_portfolio = ((1+stock_ratio_weight['portfolio']).cumprod()-1)
all_portfolio.plot(label='portfolio')
plt.legend()
plt.show()
# 组合收益率
data=np.array(stock_ratio_weight.portfolio)
# 计算方法同单个投资实例
erp_rf=data.sum()/n-rf/252
sigmap=data.std()
Sharpe=erp_rf/sigmap*math.sqrt(period)
函数来源自库:empyrical【金融评测指标库】
# 函数定义
def sharpe_ratio(returns,
risk_free=0,
period=DAILY,
annualization=None,
out=None):
'''
Parameters
----------
returns : pd.Series or np.ndarray
策略的日利率,非累积的利率。
risk_free : int, float
无风险利率
period : str, optional
计算结果的夏普比率类型:
年、季、月、周、日
'yearly'、'quarterly'、'monthly'、'weekly'、'daily'
'''