pandas_计算年化收益率

目录

 一、当数据为净值,求年化收益率

二、当数据为收盘价,求年化收益率


 一、当数据为净值,求年化收益率

前置:

文章中用到的数据

链接:https://pan.baidu.com/s/1rKLM45dq_xIKxcI54Nq0qg 
提取码:c298

公式:

计算过程(jupyter notebook):

import pandas as pd
df = pd.read_csv('./temptemp.csv',encoding='utf-8')
df['o_date'] = df['date']
df['o_date'] = pd.to_datetime(df['o_date'])
df.dropna(inplace=True)
df.sort_values(by='o_date', ascending=True, inplace=True)
df.head()

# value值从1开始,每一日的value是当日的净值
# 对应到公式,第一行的value为初始净值,最后一行的value为最终净值
first_one = df.iloc[0]
last_one = df.iloc[-1]
annual_profilt = pow(last_one['value']/first_one['value'],250/len(df))-1
annual_profilt

 

二、当数据为收盘价,求年化收益率

推导:

设,

1. 周期为p,例如p可以是日、周、月、季度等,对应的就是日收益率、周收益率、月收益率、季度收益率等;数据个数为N

2. 每期收益率为Rp,每期平均收益率为,年化平均收益率为

3.  对应周期p,一年有m个周期p,例如:p为日,m为252;p为周,m为52;p为月,m为12等

求,

1. 每期平均收益率

2. 年化收益率

 

 代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
df_aapl = pd.read_csv('AAPL.csv',encoding='utf-8')
df_aapl.head()

df_aapl['ret'] = df_aapl['Close'].pct_change()
df_aapl.head()

 

df_aapl['ret'].plot(figsize=(8,4))

 

# 计算日平均收益率
# prod() 将所有数值乘起来
r_daily_mean = ((1+df_aapl['ret']).prod())**(1/df_aapl.shape[0])-1
r_daily_mean
# out: 0.0006941719590121131

# 计算年收益率
annual_rets = (1+r_daily_mean)**252-1
annual_rets
# out: 0.19109213356890775

# 适用不同周期收益率计算年化收益率函数
def annualize_rets(returns,n_periods):
    '''
    给定一系列的收益率和期数,算出年化收益率
    '''
    # 每一期的平均收益
    r_periodic_mean = ((1+returns).prod())**(1/returns.shape[0])-1
    return (1+r_periodic_mean)**n_periods-1
annualize_rets(df_aapl['ret'],252) 
# out: 0.19109213356890775

 

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值