2021-11-02
2021/11/2 23:40:32
本文主要是介绍2021-11-02,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
基金评价指标计算 -- python
近期在做基金的评价工作,需要计算一些因子数据,由于部分数据源缺失值比较多,所以打算自己计算一下,下面是自己计算因子指标的python实现,比较简单粗暴,只是一些计算公式,有错误的话欢迎大家一起指正~~~
import math import numpy as np
# nav为基金净值序列dataframe # 年化收益 def ann_return(nav, ys=0): df_return_cum = nav.iloc[-1] /nav.iloc[0] - 1 fector = len(nav) / 252 if ys == 0: df_return = df_return_cum * fector else: df_return = df_return_cum / ys return df_return # 波动率 def vol(nav, prd=252): daily_return = df_nav.pct_change()[1:] df_vol = np.sqrt(prd) * daily_return.std() return df_vol #最大回撤 def max_dd(nav): tmp_df = nav / nav.cummax() -1 df_dd = abs(tmp_df.min()) return df_dd # 夏普比率,无风险利率为3% def sharpe_ratio(df_return, rf=0.03, df_vol): df_sharpe = (df_return-rf) / df_vol return df_sharpe # Burke比率:(年化收益-无风险利率)/ 每日回撤的日均值标准差 def burke_ratio(df, rf=0.03): ''' df:nav dataframe return :burke series ''' daily_dd = df / df.cummax() -1 daily_dd2n = daily_dd.apply(lambda x:pow(pow(x,2).mean(), 1/2)) rp_lst = df.iloc[-1] / df.iloc[0]-1 rp_ann = rp_lst * 252 /len(df) # rp_ann = df.pct_change().mean() burke = (rp_ann - rf) / daily_dd2n return burke #周胜率 def wRate(nav): nav_f = nav.copy() nav_f.index = nav_f.index.to_series().apply(lambda x: datetime.datetime.strptime(x, '%Y-%m-%d')) df_rate_w = nav_f.resample('W', label='left').first() / nav_f.resample('W', label='left').last() w_num = df_rate_w.shape[0] df_wRate = df_rate_w.apply(lambda x: x[x>1].count()) / w_num return df_wRate # 下行标准差:取一段时间的日收益率均值,对小于均值的部分求标准差,最后年化 def down_std(nav): pct_nav = nav.pct_change()[1:] mean_col = pct_nav.mean() df_posi = pct_nav.apply(lambda x: np.where(x>=x.mean(), 0,x-x.mean())) #对小于均值的值赋予0,负责返回与均值的标准差 nav_dstd = df_posi.apply(lambda x: (sum(x[x<0]**2)/len(x[x<0]))**0.5) return nav_dstd * np.sqrt(252) #所提诺比率:(组合年化收益-无风险)/ (组合下行标准差)) def sortino_ratio(ann_return,rf=0.03, downside_std): sortino = (ann_return - rf) / downside_std return sortino #信息比率:(组合年化收益-基准年化收益)/ ((组合收益-基准收益的标准差)*sqrt(252) ) #这里基金的基准年化我选择的对应的基金指数,比如分析债券混合型一级基金,基准我取的是wind上债券混合型型一级基金指数 def get_IR(nav, base_nav): # 计算中注意两个df的索引对其 port_ann = ann_return(nav, ys=0) base_ann = ann_return(base_nav, ys=0) nav_rate = nav.pct_change()[1:] base_rate = base_nav.pct_change()[1:] denominator = nav_rate.apply(lambda x: (x-base_rate).std()*np.sqrt(252)) ir = (port_ann - base_ann) / denominator return ir # 特雷诺比率:(组合年化收益-无风险利率) / bata def treynor_ratio(nav, rf=0.03, base_nav): port_ann = ann_return(nav, ys=0) nav_rate = nav.pct_change()[1:] base_rate = base_nav.pct_change()[1:] bata = nav_rate.apply(lambda x: (np.cov(x, base_rate))[0][1]/np.var(base_rate)) treynor = (port_ann - rf) / bata return treynor # 卡玛比率:组合年化收益 / 最大回撤 def calmar_ratio(ann_return,rf=0.03, max_dd): calmar = (ann_return-rf) / max_dd return calmar
这篇关于2021-11-02的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)
- 2024-11-24细说敏捷:敏捷四会之每日站会
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解