如何构建指数的每日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
我应该使用包含 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