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()

你可能感兴趣的:(python,量化金融,python,开发语言)