import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

import pandas_datareader
import datetime
import pandas_datareader.data as web

import statsmodels.api as sm
import quandl
start = datetime.datetime(2019, 1, 1)
end = pd.to_datetime('today')
SP500 = quandl.get("MULTPL/SP500_REAL_PRICE_MONTH",start_date = start,end_date = end)
SP500
Value
Date
2019-01-01 2607.39
2019-02-01 2754.86
2019-03-01 2803.98
2019-04-01 2903.80
2019-05-01 2854.71
2019-05-31 2752.08
2019-06-01 2890.17
2019-07-01 2996.11
2019-08-01 2897.50
2019-09-01 2982.16
2019-10-01 2977.68
2019-11-01 3104.90
2019-12-01 3176.75
2019-12-31 3230.58
2020-01-01 3278.20
2020-01-31 3225.04
2020-02-01 3277.31
2020-02-28 2954.81
2020-03-01 2652.39
2020-03-31 2584.59
2020-04-01 2761.98
2020-04-30 2912.43
2020-05-01 2919.61
2020-06-01 3104.66
2020-06-30 3100.29
2020-07-01 3207.62
2020-07-31 3271.12
2020-08-01 3391.71
2020-08-31 3500.31
2020-09-01 3365.52
2020-09-30 3363.00
2020-10-01 3418.70
2020-11-01 3429.33
2020-11-30 3621.63
2020-12-01 3662.45
SP500
Value
Date
2019-01-01 2607.39
2019-02-01 2754.86
2019-03-01 2803.98
2019-04-01 2903.80
2019-05-01 2854.71
2019-05-31 2752.08
2019-06-01 2890.17
2019-07-01 2996.11
2019-08-01 2897.50
2019-09-01 2982.16
2019-10-01 2977.68
2019-11-01 3104.90
2019-12-01 3176.75
2019-12-31 3230.58
2020-01-01 3278.20
2020-01-31 3225.04
2020-02-01 3277.31
2020-02-28 2954.81
2020-03-01 2652.39
2020-03-31 2584.59
2020-04-01 2761.98
2020-04-30 2912.43
2020-05-01 2919.61
2020-06-01 3104.66
2020-06-30 3100.29
2020-07-01 3207.62
2020-07-31 3271.12
2020-08-01 3391.71
2020-08-31 3500.31
2020-09-01 3365.52
2020-09-30 3363.00
2020-10-01 3418.70
2020-11-01 3429.33
2020-11-30 3621.63
2020-12-01 3662.45
SP500.dropna(inplace=True)
SP500.index = pd.to_datetime(SP500.index)
SP500.head()
Value
Date
2019-01-01 2607.39
2019-02-01 2754.86
2019-03-01 2803.98
2019-04-01 2903.80
2019-05-01 2854.71

Simple Moving Averages

SP500['6-month-SMA']=SP500['Value'].rolling(window=6).mean()
SP500['12-month-SMA']=SP500['Value'].rolling(window=12).mean()
SP500.head()
Value 6-month-SMA 12-month-SMA
Date
2019-01-01 2607.39 NaN NaN
2019-02-01 2754.86 NaN NaN
2019-03-01 2803.98 NaN NaN
2019-04-01 2903.80 NaN NaN
2019-05-01 2854.71 NaN NaN
SP500.plot()
<AxesSubplot:xlabel='Date'>

Exponentially-weighted moving averages

SP500['EWMA12'] = SP500['Value'].ewm(span=12).mean()
SP500[['Value','EWMA12']].plot()
<AxesSubplot:xlabel='Date'>