基金评价指标2——Alpha、Beta、跟踪误差、信息比率、特雷诺比率

各个指标

1. Alpha

Alpha = 策略年化收益 - [无风险年化收益 + beta * (基准年化 - 无风险年化收益)]

Alpha是指风险调整后的收益(剔除掉基准带来的收益后的剩余),如果Alpha值大于0,表示剔除基准带来的收益后,策略仍然能够取得正收益,如果Alpha小于0表示主动管理部分造成了负收益

2. Beta

Beta = cor(策略,基准) / var(策略)

Beta用来衡量个别股票或股票基金相对于整个股市的价格波动情况

3. 跟踪误差 Tracking Error

跟踪误差 = 每日涨跌幅与基准涨跌幅偏离的标准差

跟踪误差表示策略与基准的偏离程度

4. 信息比率 Information Ratio

信息比率 = (累计收益率 - 基准累计收益率)/ 跟踪误差

信息比率表示剔除市场基准的波动后,主动管理带来的单位收益

5. 特雷诺比率 Treynor

特雷诺比率 = (年化收益率 - 无风险收益)/ Beta

表示每单位系统风险资产获得的超额报酬,可以认为是承担beta的性价比,注意:如果使用OLS回归有四个基本假设,最好使用corr/var的计算方式

程序复现

import numpy as np
import pandas as pd
from copy import deepcopy


def fund_calculate_beta(_value_df):
    """计算beta"""
    _beta = _value_df['单位净值'].cov(_value_df['基准净值']) / _value_df['单位净值'].var(ddof=0)
    return _beta


def rolling_pipe(dataframe, window, _func):
    return pd.Series([dataframe.iloc[: i].pipe(_func)
                      if i >= window else None for i in range(1, len(dataframe) + 1)], index=dataframe.index)


def fund_analyze_with_market(net_series, market_net_series, rf=0.03, one_year_count=365, normalize_first_data=True):
    net_series = deepcopy(net_series)
    market_net_series = deepcopy(market_net_series)
    collect_df = pd.concat([net_series, market_net_series], axis=1)
    collect_df.columns = ["单位净值", "基准净值"]

    # 基本净值
    collect_df['单日涨跌幅'] = collect_df['单位净值'].pct_change()
    collect_df["累计收益率"] = collect_df['单位净值'] - collect_df['单位净值'].iloc[0]
    collect_df['年化收益率'] = collect_df['累计收益率'] / (collect_df.index - collect_df.index[0]).days * one_year_count
    # 基准
    collect_df['基准涨跌幅'] = collect_df['基准净值'].pct_change()
    collect_df["基准累计收益率"] = collect_df['基准净值'] - collect_df['基准净值'].iloc[0]
    collect_df['基准年化收益率'] = collect_df['基准累计收益率'] / (collect_df.index - collect_df.index[0]).days * one_year_count

    # 开始计算指标
    collect_df["Beta"] = collect_df[["单位净值", "基准净值"]].pipe(rolling_pipe, 2, fund_calculate_beta)  # 滚动计算beta指标

    # alpha = 策略年化收益 - [无风险年化收益 + beta * (基准年化 - 无风险年化)]
    collect_df['Alpha'] = collect_df['年化收益率'] - (rf + collect_df['Beta'] * (collect_df['基准年化收益率'] - rf))

    # 跟踪误差 = 每日涨跌幅与基准涨跌幅偏离的标准差
    collect_df['TrackingError'] = (collect_df['单日涨跌幅'] - collect_df['基准涨跌幅']).rolling(
        collect_df.shape[0], min_periods=0).std()

    # IR: 信息比率表示剔除市场基准的波动后,主动管理带来的单位收益
    collect_df['InformationRatio'] = (collect_df["累计收益率"] - collect_df['基准累计收益率']) / collect_df['TrackingError']

    # 特雷诺比率:注意如果使用OLS回归有四个基本假设,最好使用corr/var的计算方式
    # 该指数的含义为每单位系统风险资产获得的超额报酬,可以认为是承担beta的性价比
    collect_df["Treynor"] = (collect_df['年化收益率'] - rf) / collect_df["Beta"]
    return collect_df


def main():
    # 示例数据:生成净值与业绩基准两个净值序列
    _size = 500
    net_df = pd.DataFrame({
        "净值": 1 + pd.Series(np.random.normal(0, 0.01, size=_size)).cumsum(),
        "业绩基准": 1 + pd.Series(np.random.normal(0, 0.01, size=_size)).cumsum(),
    })
    net_df.index = pd.date_range("2024-01-01", periods=_size)
    # 计算净值相对基准
    net_analyze = fund_analyze_with_market(net_df['净值'], net_df['业绩基准'])
    print(net_analyze.head())


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、付费专栏及课程。

余额充值