金融量化指标--策略年化收益

发布于:2025-09-10 ⋅ 阅读:(33) ⋅ 点赞:(0)

策略年化收益计算公式

年化收益率是评估任何投资策略(包括量化策略)最核心、最直观的指标之一,但它绝不是一个孤立的数字。必须将其放在风险、市场环境、计算方法和对比基准的背景下进行全面分析,否则极易产生误导。

一、年化收益率的定义与计算

定义:年化收益率是把策略在特定时间段内的总收益(无论策略运行了1个月还是5年),换算成相当于投资期限为一年的标准化收益率。其目的是为了消除投资期限不同带来的比较障碍,使不同策略之间的收益表现具有可比性。

核心计算方法

  1. 总收益率法(简单情况)
  • 如果策略运行了 T 年(T可以是小数,如0.5年代表6个月),总收益率为 R_total
  • 年化收益率 = (1 + R_total)^(1/T) - 1
  • 例子:策略运行3年,总收益为50%(即 R_total = 0.5)。
    • 年化收益率 = (1 + 0.5)^(1/3) - 1 ≈ 14.47%

  1. 复利法(更精确,考虑资金进出)
  • 通常使用时间加权收益率(Time-Weighted Rate of Return, TWR) 来消除资金流入流出的影响,然后进行年化。
  • 或者通过策略的每日/每周/每月收益率序列进行计算:
    • 年化收益率 = (1 + 平均周期收益率)^(年化周期数) - 1
    • 例子:策略有250个交易日,每日平均收益率为0.05%。
    • 年化收益率 = (1 + 0.0005)^250 - 1 ≈ 13.3%

二、深入分析年化收益的多个维度

只看一个孤立的年化收益数字是极其危险的。一个30%的年化收益,可能来自高风险赌博,也可能来自稳健的套利。必须结合以下维度进行分析:

1. 风险调整后收益(最重要的一环)

高收益可能只是承担了更高风险的补偿。风险调整后收益才能真实反映策略的“性价比”。

  • 夏普比率最常用的风险调整收益指标
    • 公式 = (年化收益率 - 无风险利率) / 年化波动率
    • 解读:它表示每承受一单位总风险(波动),能获得多少超出无风险利率的超额收益。夏普比率越高,策略的“质量”通常越好。通常,夏普比率大于1被认为是好的,大于2是非常优秀的。必须注意,计算夏普比率时使用的波动率是年化的

下面是计算的公式代码

import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime

def simple_annualized_return(initial_value, final_value, days):
    """
    计算简单年化收益率
    
    参数:
    initial_value -- 初始投资金额
    final_value -- 最终价值
    days -- 投资天数
    
    返回:
    年化收益率(小数形式)
    """
    holding_period_return = (final_value - initial_value) / initial_value
    years = days / 365
    annualized_return = holding_period_return / years
    return annualized_return

def cagr(initial_value, final_value, years):
    """
    计算复合年化增长率(CAGR)
    
    参数:
    initial_value -- 初始投资金额
    final_value -- 最终价值
    years -- 投资年数
    
    返回:
    年化收益率(小数形式)
    """
    if years <= 0:
        raise ValueError("投资年数必须大于0")
    if initial_value <= 0:
        raise ValueError("初始投资金额必须大于0")
    
    cagr = (final_value / initial_value) ** (1 / years) - 1
    return cagr

def annualized_return_from_periodic(returns, periods_per_year=252):
    """
    根据周期收益率计算年化收益率
    
    参数:
    returns -- 周期收益率列表(小数形式)
    periods_per_year -- 年化周期数(默认252个交易日)
    
    返回:
    年化收益率(小数形式)
    """
    if not returns:
        return 0
    
    cumulative_return = np.prod([1 + r for r in returns]) - 1
    n_periods = len(returns)
    years = n_periods / periods_per_year
    
    annualized_return = (1 + cumulative_return) ** (1 / years) - 1
    return annualized_return

def visualize_growth(initial_value, annual_return, years):
    """
    可视化投资增长情况
    
    参数:
    initial_value -- 初始投资金额
    annual_return -- 年化收益率(小数形式)
    years -- 投资年数
    """
    values = [initial_value]
    for i in range(1, years + 1):
        values.append(values[-1] * (1 + annual_return))
    
    plt.figure(figsize=(10, 6))
    plt.plot(range(years + 1), values, marker='o')
    plt.title('投资增长可视化 (年化收益率: {:.2%})'.format(annual_return))
    plt.xlabel('年份')
    plt.ylabel('投资价值')
    plt.grid(True)
    plt.show()

# 示例使用
if __name__ == "__main__":
    # 示例1: 简单年化收益率计算
    initial = 10000
    final = 12000
    days = 180
    simple_ar = simple_annualized_return(initial, final, days)
    print(f"简单年化收益率: {simple_ar:.2%}")
    
    # 示例2: CAGR计算
    years = 3
    cagr_value = cagr(initial, final, years)
    print(f"复合年化增长率(CAGR): {cagr_value:.2%}")
    
    # 示例3: 从周期收益率计算年化收益率
    daily_returns = [0.01, -0.005, 0.02, 0.015, -0.01]  # 5个交易日的收益率
    annualized = annualized_return_from_periodic(daily_returns)
    print(f"从周期收益率计算的年化收益率: {annualized:.2%}")
    
    # 示例4: 可视化投资增长
    visualize_growth(initial_value=10000, annual_return=0.08, years=10)

数据结果


网站公告

今日签到

点亮在社区的每一天
去签到