Python实现交易策略评价指标-夏普比率

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. 计算夏普比率
  1. 获取贵州茅台2015.1.1 ~ 2020.12.31期间的日k数据并保存到文件中

    python 复制代码
    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()
  2. 读取贵州茅台日k数据

    python 复制代码
    # 读取贵州茅台的日k数据,读入日期和收盘价
    data = pd.read_csv("贵州茅台_k_data.csv")[['date', 'open', 'high', 'low', 'close']];
  3. 将日k数据转换为年k(计算夏普比率的收益率以年为单位进行计算,当然也可以选择其他周期)

    python 复制代码
    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)
  4. 计算每年的年化收益率

    python 复制代码
    year_k_data['return_rate'] = (year_k_data['close'] - year_k_data['open']) / year_k_data['open']
    print(year_k_data)
  1. 计算夏普比率
python 复制代码
# 无风险收益率一般用国债收益率代替,本例中取3%
sharp_ration = (year_k_data['return_rate'].mean() - 0.03) / year_k_data['return_rate'].std()
print(sharp_ration)

1.2137091184299078

相关推荐
C#Thread15 分钟前
C#上位机--循环语句
开发语言·c#
EterNity_TiMe_18 分钟前
【人工智能】蓝耘智算平台盛大发布DeepSeek满血版:开创AI推理体验新纪元
人工智能·python·机器学习·deepseek
diemeng111940 分钟前
2024系统编程语言风云变幻:Rust持续领跑,Zig与Ada异军突起
开发语言·前端·后端·rust
顾德拉科43 分钟前
使用pyinstaller对gradio和chromadb进行打包
python
软件黑马王子1 小时前
Unity游戏制作中的C#基础(3)加减乘除算术操作符,比较运算符,逻辑与,或运算符
开发语言·unity·c#
张太行_1 小时前
Qt Creator 设计界面后的预览方法
开发语言·qt
视觉CG1 小时前
【Viewer.js】vue3封装图片查看器
开发语言·javascript·vue.js
h^hh1 小时前
洛谷 P3405 [USACO16DEC] Cities and States S(详解)c++
开发语言·数据结构·c++·算法·哈希算法
qwy7152292581631 小时前
20-R 绘图 - 饼图
开发语言·数据库·r语言
java1234_小锋1 小时前
一周学会Flask3 Python Web开发-redirect重定向
前端·python·flask·flask3