当前位置: 首页 > news >正文

夏普比率和最大回撤公式推导及代码实现

一、夏普比率

夏普比率是衡量一个策略的关键指标,它衡量的是承担每一单位波动的风险,可以多赚取多少的超额收益。

因为要衡量波动量,因此如果只知道初期资产和末期资产,是无法计算夏普比率的,必须知道每日的收益率或者每日对应的收益额。

可以假设年化无风险利率为2%,那么按照A股来说,假设1年252个交易日,则日无风险利率为0.02/252。也有很多人为了省事直接将无风险利率设为0,这个看自身情况设定。

夏普比率一般计算年化夏普比率,也可以计算月度夏普比率等。

夏普比率sharpratio=(策略的预期收益率−无风险利率)/策略收益率的标准差 夏普比率sharp ratio=(策略的预期收益率-无风险利率)/策略收益率的标准差 夏普比率sharpratio=(策略的预期收益率无风险利率)/策略收益率的标准差

注意:
年化夏普比率=日度夏普比率 ∗252* \sqrt{252}252
年化夏普比率=月度夏普比率 ∗12* \sqrt{12}12

解释下这是怎么来的呢?

假设说我们已经得到了日超额收益率序列xtx_txt,注意这里是已经减去日无风险利率得到的日超额收益率序列。
通过xtx_txt计算得到的均值和标准差为μ\muμσ\sigmaσ。那么,
年化夏普比率=年化超额收益率平均值年化超额收益率标准差=μ∗252σ∗252=日度夏普比率∗252 年化夏普比率=\frac{年化超额收益率平均值}{年化超额收益率标准差}\\=\frac{\mu*252}{\sigma*\sqrt{252}}\\=日度夏普比率 *\sqrt{252} 年化夏普比率=年化超额收益率标准差年化超额收益率平均值=σ252μ252=日度夏普比率252

总结

假设已经得到每日的收益率序列,要计算年度夏普比率,共分为三步:
1、设定好年化无风险利率,将日收益率序列-日无风险收益率序列=日超额收益率序列;
2、计算日超额收益率序列的均值和标准差;
3、年化夏普比率=日度夏普比率 ∗252* \sqrt{252}252

二、最大回撤

最大回撤是指从最高点跌下来时,跌的最惨有多惨。
假设已经得到每日的收益率序列,计算最大回撤的四个步骤:
1、将每日的收益率序列转换为每日的历史总收益率序列;
2、遍历求出每日的目前为止最高历史收益率;
3、计算每日相对历史最高点的回撤比例;
4、在所有回撤中找到最惨的那一天,那一天的回撤比例即为所求的最大回撤;

三、代码实现

这里使用一个最简单的策略,策略就是买入沪深300ETF,然后放着10年不动,看这个策略的年化夏普比率和最大回撤。这里使用tushare来获取行情数据。

tushare介绍

tushare是一个比较常用的开源数据平台,pro版本对于在校大学生是免费的。
注意,tushare对于个股,ETF数据,指数数据的获取方式是不一样的。分别为pro.daily(),pro.fund_daily(),pro.index_daily(),如果混用了,会返回空值。

python代码实现

import tushare as tsdef sharp_ratio_test():pro = ts.pro_api('your token')hushen_df = pro.fund_daily(ts_code='510300.SH', start_date='20150101', end_date='20251001')hushen_df = hushen_df.sort_values(by='trade_date', ascending=True)  # 先将df中的数据进行倒序排列,使得日期从前到后hushen_df['daily_rate'] = 0  # 每日的收益率,从第1日买入,第2日开始有收益for i in range(1, hushen_df.shape[0]):hushen_df['daily_rate'][i] = (hushen_df['close'][i] - hushen_df['close'][i - 1]) / hushen_df['close'][i - 1]hushen_df['daily_hist_rate'] = 0  # 每日的历史总收益率for i in range(1, hushen_df.shape[0]):hushen_df['daily_hist_rate'][i] = (hushen_df['close'][i] - hushen_df['close'][0]) / hushen_df['close'][0]# 计算夏普比率rf_annual = 0.02  # 年化无风险利率rf_daily = rf_annual / 252  # 日无风险利率hushen_df['daily_super_rate'] = 0  # 每日的日超额总收益率for i in range(1, hushen_df.shape[0]):hushen_df['daily_super_rate'][i] = hushen_df['daily_rate'][i] - rf_dailymu = hushen_df['daily_super_rate'].mean() #注意,这2行代码可以再微调,从第2日开始sigma = hushen_df['daily_super_rate'].std() #这里有个除以n-1和除以n的区别,可以微调sharp_ratio = mu / sigma * (252 ** 0.5)print("sharp ratio:", sharp_ratio)# 计算最大回撤equity = 1 + hushen_df['daily_hist_rate']  # 每日的净资产是初始资产的多少倍roll_max = equity.cummax()draw_down = equity / roll_max - 1max_draw_down = draw_down.min()print("max draw down:", max_draw_down)if __name__ == '__main__':sharp_ratio_test()

按照上述代码,可得到最后的结果

sharp ratio: -0.16625517304850126
max draw down: -0.45100740485620805
http://www.dtcms.com/a/590103.html

相关文章:

  • win32k!xxxKeyEvent函数里面的win32k!xxxDoHotKeyStuff如何确定是CAD键的到来的
  • 网站建设课我要表白网站在线制作
  • 烟台网站建设 烟台网亿网络公司python培训学校
  • 计算机网络自顶向下方法41——网络层 自治系统内部的路由选择:开放最短路优先(OSPF)设置OSPF链路权值
  • HDFS分布式存储“入门教程“:从“文件上传“到“副本管理“,3步理解核心原理
  • 做网站的人是什么职位个人备案网站建设方案书
  • 网站后台补丁如何做珠海做网站公司有哪些
  • 黑龙江省农业网站建设情况win7怎么建设网站
  • 海南网站开发公司汝阳建设局网站
  • 人工智能备考2.2.1-2.2.5总结
  • 网络安全形势下怎么建设学校网站wordpress diy主题
  • 已经有域名如何做网站万网域名注册步骤
  • 有域名怎么建立网站建设网站需要什么技术
  • Altium Designer 6.0 初学教程(一)
  • 碳化硅为啥能成“功率芯片新贵”?
  • 蒙古网站群建设海口百度seo公司
  • 深圳网络做网站基于oa系统的网站建设
  • iis做的网站提示500学校的网站管理系统
  • 13.POSIX信号量
  • 网站开发实习深圳外贸公司名单
  • Node.js后端框架Express.js
  • 网站建设不用备案的淘宝网网页版入口
  • 创意互动网站jsp做网站视频教程
  • 普中51单片机学习笔记-流水灯
  • 先备案先建网站运城市住房和城乡建设厅网站
  • 制作网站要什么软件app运营成本估算
  • MBSE与数字孪生:五大行业案例
  • 火狐安装uBlock广告拦截工具
  • AActor前面为什么要加A? UObject前面为什么要加U?
  • C++ 变量作用域 存储期 链接性:const / static / extern 全面解析