Search code examples
pythonpython-3.xfinance

How to construct the daily returns of a index


I should using the snp500 series, which contains the closing prices of S&P500 index for the years 2010-2019, construct the daily returns of this index (returns can be defined a percentage increase in price: $r_1=(P_1-P_0)/P_0$ and convert them to yearly returns, building on the functionx = lambda p,r,n,t: "%"+str(round(p*(1+(r/n))**(n*t),2)/100) Pay attention to the units of measurement. I should assume that there are 252 days in a year. Maybe, I can use the method .shift() for this assignment.

Firstly, I defined the function $r_1=(P_1-P_0)/P_0$

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

Secondly, I wrote the function for finding the data about the index of snp500 from 2010 to 2019

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

Then, I have no idea what my next step is.

Could you advise me on how to complete this task?


Solution

  • How about this?

    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)
    
    

    Output:

        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