python计算复合年化增长率、年化波动率与夏普比率

根据日收益率,计算:

  • 复合年化增长率
  • 年化波动率
  • 夏普比率

示例代码如下:

示例代码

import pandas as pd
import numpy as np
import math


def cal_sharp(daily_returns: np.ndarray, rf=0, period=252):
    """计算夏普比率:(投资组合期望收益率 - 无风险收益) / 投资组合波动率"""
    Er = daily_returns.sum() / len(daily_returns) - rf / period  # 每日的平均收益 - 每日的无风险收益
    sharp = Er / daily_returns.std() * math.sqrt(period)
    return sharp


def cal_volatility(daily_return: np.ndarray, period=252):
    """策略年化波动率"""
    vol = np.sqrt(period) * np.std(daily_return)
    return vol


def cal_cagr(daily_return: pd.Series):
    """复合年化增长率"""
    cum_return = daily_return.add(1).cumprod()  # 净值序列
    time_days = (cum_return.index[-1] - cum_return.index[0]).days  # 累计收益的天数
    return np.power(np.abs(cum_return[-1]), 365 / time_days) - 1  # power(净值,1/持续年份) -1


def main():
    """
    data.sum()/n 为 n 天利润百分数平均值
    rf / 252 对应日无风险利益
    :return:
    """
    n = 200  # 数据天数
    rf = 3  # 假设年无风险利率
    data = np.random.normal(size=(n))  # 随机生成日增长率
    # 关于 period(数值,意义):(252,日夏普),(52,周夏普),(12,月夏普),(1,年夏普)
    daily_return = pd.Series(data, index=pd.date_range(start='2020-01-01 00:00', periods=n))
    print("年化增长率:", cal_cagr(daily_return))
    print("年化波动率:", cal_volatility(daily_return.values))
    print("夏普比率:", cal_sharp(daily_return.values, rf=rf))


if __name__ == '__main__':
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值