1.夏普比率的定义
在投资的过程中,仅关注策略的收益率是不够的,同时还需要关注承受的风险,也就是收益风险比。
夏普比率正是这样一个指标,它表示承担单位的风险会产生多少超额收益。用数学公式描述就是:
S
h
a
r
p
R
a
t
i
o
=
E
(
R
p
)
−
R
f
σ
p
SharpRatio = \frac{ E(R_p) - R_f}{\sigma_p}
SharpRatio=σpE(Rp)−Rf
参数说明:
E ( R p ) E(R_p) E(Rp): 表示投资组合预期收益率
R f R_f Rf: 表示无风险收益率,一般用国债收益率代替
σ p \sigma_p σp: 投资组合收益率的标准差(投资组合的风险)
2. 计算夏普比率
-
获取贵州茅台2015.1.1 ~ 2020.12.31期间的日k数据并保存到文件中
import pandas as pd import numpy as np import baostock as bs lg = bs.login() # 显示登陆返回信息 print('login respond error_code:'+lg.error_code) print('login respond error_msg:'+lg.error_msg) #### 获取沪深A股历史K线数据 #### # 获取后复权数据 rs = bs.query_history_k_data_plus("sh.600519", "date,code,open,high,low,close,volume", start_date='2015-01-01', end_date='2020-12-31', frequency="d", adjustflag="1") print('query_history_k_data_plus respond error_code:'+ rs.error_code) print('query_history_k_data_plus respond error_msg:'+ rs.error_msg) data_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) #### 结果集输出到csv文件 #### result.to_csv("贵州茅台_k_data.csv", index=False) print(result) #### 登出系统 #### bs.logout()
-
读取贵州茅台日k数据
# 读取贵州茅台的日k数据,读入日期和收盘价 data = pd.read_csv("贵州茅台_k_data.csv")[['date', 'open', 'high', 'low', 'close']];
-
将日k数据转换为年k(计算夏普比率的收益率以年为单位进行计算,当然也可以选择其他周期)
data['date'] = pd.to_datetime(data.date) data['year'] = data.date.dt.to_period('Y') year_k_data = data.groupby('year').agg({'open':'first', 'high':'max', 'low' :'min', 'close' :'last'}) print(year_k_data)
-
计算每年的年化收益率
year_k_data['return_rate'] = (year_k_data['close'] - year_k_data['open']) / year_k_data['open'] print(year_k_data)
- 计算夏普比率
# 无风险收益率一般用国债收益率代替,本例中取3%
sharp_ration = (year_k_data['return_rate'].mean() - 0.03) / year_k_data['return_rate'].std()
print(sharp_ration)
1.2137091184299078