如何构建指数的每日returns

How to construct the daily returns of a index

我应该使用包含 2010-2019 年标准普尔 500 指数收盘价的 snp500 系列,构建该指数的每日 returns(returns 可以是定义价格上涨百分比:$r_1=(P_1-P_0)/P_0$ 并将它们转换为年度 returns,建立在函数 x = lambda p,r,n,t: "%"+str(round(p*(1+(r/n))**(n*t),2)/100) 上 注意到计量单位。我应该假设一年有 252 天。也许,我可以使用 .shift() 的方法来完成这项作业。

首先,我定义了函数$r_1=(P_1-P_0)/P_0$

def percentage_increase_in_price():
r_1 = (P_1 - P_0) / P_0

其次,我编写了查找2010-2019年snp500指数数据的函数

import pandas as pd
import pandas_datareader.data as web
import datetime as dt

start = dt.datetime(2010, 1, 1)
end = dt.datetime(2019, 12, 31)

snp500 = web.DataReader('SP500', 'fred', start, end)
snp500

然后,我不知道下一步是什么。

你能告诉我如何完成这个任务吗?

这个怎么样?

import pandas as pd
import pandas_datareader.data as web

snp500 = web.DataReader('SP500', 'fred', '2010-01-01', '2019-12-31')

# calculate simple returns
snp500["daily_ret"] = snp500["SP500"].pct_change()
snp500.dropna(inplace=True)

# scale daily returns to annual returns and apply rounding
def annualize(r, n, p, t=1):
  return round(p * (1 + r/n)**(n*t),2)/100

snp500["inv"] = snp500["daily_ret"].apply(annualize, p=100, n=252)

输出:

    SP500   daily_ret   inv
DATE            
2012-03-27  1412.52 -0.002817   0.9972
2012-03-28  1405.54 -0.004942   0.9951
2012-03-29  1403.28 -0.001608   0.9984