pandas_计算夏普比率

数据为收盘价,求夏普比率

概念说明:

夏普比率:(return-Rf)/vol
return为年化收益;Rf为无风险利率一般使用 三个月的短期国债 或 三个月的银行存款利率 (0.011); vol为年化收益波动率

Rf本文取三个月银行存款
http://www.pbc.gov.cn/zhengcehuobisi/125207/125213/125440/125838/125888/2968982/index.html


使用:夏普比率越大越好 

代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
df_aapl = pd.read_csv('AAPL.csv',encoding='utf-8')
df_aapl.head()

df_aapl['ret'] = df_aapl['Close'].pct_change()
# 1. 年化收益率
# 1.1 日平均收益率
r_daily_mean = ((1+df_aapl['ret']).prod())**(1/df_aapl.shape[0])-1
r_daily_mean
# out: 0.0006941719590121131

def annualize_rets(returns,n_periods):
    '''
    给定一系列的收益率和期数,算出年化收益率
    '''
    # 每一期的平均收益
    r_periodic_mean = ((1+returns).prod())**(1/returns.shape[0])-1
    return (1+r_periodic_mean)**n_periods-1
annualize_rets(df_aapl['ret'],252)
# out: 0.19109213356890775

# 2. 年化波动率
# 2.1 年化方差
annual_var = df_aapl['ret'].var()*252
annual_var
# out: 0.20305560031619677
# 2.2 年化波动率,标准差
annual_std = df_aapl['ret'].std()*np.sqrt(252)
annual_std
# out: 0.45061691081915334
def annualize_std(returns,n_periods):
    '''
    给定一系列的收益率,算出年化的标准差
    '''
    return returns.std()*np.sqrt(n_periods)
annualize_std(df_aapl['ret'],252)
# out: 0.45061691081915334

# 3. 计算夏普比率
sharp_ratio = (annual_rets-0.011)/annual_std
sharp_ratio
# out: 0.3996568465251948
def annual_sharpe_ratio(returns,n_periods,risk_free_rate):
    '''
    给定一系列的收益率,计算年化的夏普比率
    '''
    annual_r = annualize_rets(returns,n_periods)
    annual_v = annualize_std(returns,n_periods)
    return (annual_r-risk_free_rate)/annual_v
annual_sharpe_ratio(df_aapl['ret'],252,0.011)
# out: 0.3996568465251948
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值