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

相关推荐
q***92516 分钟前
PHP搭建开发环境(Windows系统)
开发语言·windows·php
Chrison_mu9 分钟前
Android项目背景动效-Kotlin
android·开发语言·kotlin
啃火龙果的兔子10 分钟前
如何控制kotlin项目back的时候,只回退webview的路由
开发语言·kotlin·harmonyos
烟袅13 分钟前
为什么调用 OpenAI Tools 后,还要再请求一次大模型?——从代码看 LLM 工具调用的本质
后端·python·llm
GeekPMAlex13 分钟前
Python OOP 深度解析:从核心语法到高级模式
python
拼好饭和她皆失29 分钟前
C#学习入门
开发语言·学习·c#
分布式存储与RustFS29 分钟前
MinIO 不再“开放”,RustFS 能否成为更优选择?
开发语言·安全·安全架构·企业存储·rustfs
Sunhen_Qiletian31 分钟前
《Python开发之语言基础》第一集:python的语法元素
开发语言·python
速易达网络32 分钟前
tensorflow+yolo图片训练和图片识别系统
人工智能·python·tensorflow
從南走到北1 小时前
JAVA同城信息付费系统家政服务房屋租赁房屋买卖房屋装修信息发布平台小程序APP公众号源码
java·开发语言·小程序