Python量化交易实战-18计算夏普比率,规避投资风险

auto-trade xuhss 1880℃ 0评论

今天这节课计算风险收益指标:夏普比率

一、什么夏普比率

又叫做Sharpe Radio,夏普指数,衡量的是一项投资在对其调整风险后,相对于无风险资产的收益

在1966年,威廉夏普提出,美国金融经济学学者,曾在1990年获得诺贝尔经济学奖。是资产定价模型的奠基者

夏普率=(期望投资回报率 - 无风险利率)/ 投资回报率标准差

1.1无风险利率

是指当你买入一个没有风险的资产所获得的回报,什么是没有风险的资产?通常来说是债。通常各个国家的无风险利率都是以国债的年化回报为准,比如:中国债年化汇报3%左右。

所以你会发现,夏普比率最常用于投资组合类的投资工具,比如说基金,因为基金除了纯货币纯债基之外,大部分都是风险类的资产,比如说股票类的证券组成。这种基金有可能亏损。

1.2投资回报率标准差

投资回报率标准差:一种离散指标,体现数据样本内部的差异性。

20210608173405 - Python量化交易实战-18计算夏普比率,规避投资风险

等于(数据样本里面每个数据项 减去 样本的所有数据项的均值)的绝对值平方总和,除以 数据项个数,然后开根号

比如说,有一支股票的收盘价,每个数据项就是每个收盘价,减去 所有收盘价的均值,取它们绝对值的平方,然后把每个收盘价和均值的距离差距 加起来,除以数据项个数,再开根号,就是标准方差。体现的是每个点和每个点之间的距离。

如果说一支股票,它的标准差很大,它代表这个股票的波动很大,也就意味着风险很大。所以标准差在金融领域中的应用代表的是风险指标。

1.3夏普比率

总的来说 夏普比率代表的是投资者额外承受的单位的风险对应所获得的额外收益有多少。基于这个层面,我们知道夏普比率肯定是越大越好的。只要它大于1,也 就是收益远高于风险的,如果小于1,那就是风险大于收益的。

在实际的应用中,不管做量化还是你在基金公司,非常看重的指标一定有夏普比率。其次就是回撤指标,还有收益率和风险其他相关的指标。

这就是关于夏普比率如何计算的问题,接下来学习一下如何使用Python代码来计算夏普比率。

二、实战

2.1计算夏普率

#计算夏普率
def caculate_sharp(data):
    #公式 夏普率 = (回报率均值 - 无风险率) / 回报率的标准差
    # pct_change()是pandas里面的自带的计算每日增长率的函数,它和calculate_profit_pct函数功能是一样的,用于计算股票的单次收益率。
    daily_return = data['close'].pct_change()
    # 回报率均值 
    avg_return = daily_return.mean()
    # 回报率标准差
    std_return = daily_return.std()
    #计算夏普
    sharp = avg_return / std_return
    return sharp

2.1.1回报率的均值

要计算回报率的均值首先要计算回报率。

回报率是怎么算的呢,假设我们是以股票每日的收盘价为单位来计算,回报率就是每日的增长率,也就是说,你可以理解为日涨跌幅。所以回报率的均值就是计算日涨跌幅的均值

以基金为例,它是一个投资组合,里面有股票、货币和债券,那这个情况下,回报率的均值就可以用基金每天的净值的日涨跌幅来替代。

2.1.2无风险利率

我们的回报率是以天为单位的,那这里3%的年化回报率除以252就是每天的,几乎等于0,在大部分的sharp计算中,我们会把无风险利率约等于0,如果用年化算,就取3%,每家公司都不太一样。

所以你会发现,你去看同一个基金的sharp,你会发现有微小的差距。在这里,我们以天为单位,所以无风险利率等于0

2.2计算年夏普率

这里我们计算的是每日收益率,通常来说对于基金,我们会计算年化收益率,年化收益率怎么做呢?

#计算夏普率
def calculate_sharp(data):
    #公式 夏普率 = (回报率均值 - 无风险率) / 回报率的标准差
    # pct_change()是pandas里面的自带的计算每日增长率的函数,它和calculate_profit_pct函数功能是一样的,用于计算股票的单次收益率。
    daily_return = data['close'].pct_change()
    # 回报率均值 
    avg_return = daily_return.mean()
    # 回报率标准差
    std_return = daily_return.std()
    #计算夏普
    sharp = avg_return / std_return
    #计算夏普 年华夏普
    sharp_year = sharp * np.sqrt(252)
    return sharp, sharp_year

为什么这里是开根号呢?因为根据之前的经验,我想把每日的收益率转化为每年的收益率 计算公式:

每日收益率*252 = 每年收益率

那为什么是开根号呢?标准差的计算是开过根号的.

夏普率=回报率均值*252/回报率标准差*根号252 

2.3调用计算函数:

    # 计算夏普比率
    # 获取数据
    data = st.get_single_price(stock_code='000001.XSHE', timefrequency='daily', start_date='2006-06-01', end_date='2021-06-01')
    # 计算最大回撤率
    sharp = calculate_sharp(data)
    print(sharp)

20210609200615 - Python量化交易实战-18计算夏普比率,规避投资风险

转载请注明:xuhss » Python量化交易实战-18计算夏普比率,规避投资风险

喜欢 (8)

您必须 登录 才能发表评论!