Download the accompanying IPython Notebook for this Tutorial from Github.
Last Tutorial, we outlined steps for calculating the Stochastic Oscillator.
In this Tutorial, we walk through calculating 5-day, 10-day, and 20-day future returns, from historical data.
Caculating 5-day, 10-day, and 20-day future returns will allow us to identify relationships between current technical indicators and future returns.
Let’s use Python to compute the 5-day, 10-day, and 20-day future returns.
1.) Import modules.
import pandas as pd
import numpy as np
from pandas_datareader import data as web
import matplotlib.pyplot as plt
%matplotlib inline
2.) Define function for querying daily close.
def get_stock(stock,start,end):
return web.DataReader(stock,'google',start,end)['Close']
3.) Define function for calculating the 5-day future return.
def fiveday(close):
fiveday = ((close.shift(-5) - close) / close) * 100
return fiveday
4.) Define function for calculating 10-day future return.
def tenday(close):
tenday = ((close.shift(-10) - close) / close) * 100
return tenday
5.) Define function for calculating 20-day future return.
def twentyday(close):
twentyday = ((close.shift(-20) - close) / close) * 100
return twentyday
6.) Query daily close.
df = pd.DataFrame(get_stock('FB', '1/1/2016', '12/31/2016'))
7.) Run daily close through fiveday, tenday, and twentday functions. Save series to new columns in dataframe.
df['5 day'] = fiveday(df['Close'])
df['10 day'] = tenday(df['Close'])
df['20 day'] = twentyday(df['Close'])
df = df.dropna()
df.tail()
8.) Plot average 5-day, 10-day, and 20-day future returns.
df2 = df[['5 day', '10 day', '20 day']].mean()
df2.plot(kind='bar')
There you have it! We calculated 5-day, 10-day, and 20-day future returns. Here’s the full code:
import pandas as pd
import numpy as np
from pandas_datareader import data as web
import matplotlib.pyplot as plt
%matplotlib inline
def get_stock(stock,start,end):
return web.DataReader(stock,'google',start,end)['Close']
def fiveday(close):
fiveday = ((close.shift(-5) - close) / close) * 100
return fiveday
def tenday(close):
tenday = ((close.shift(-10) - close) / close) * 100
return tenday
def twentyday(close):
twentyday = ((close.shift(-20) - close) / close) * 100
return twentyday
df = pd.DataFrame(get_stock('FB', '1/1/2016', '12/31/2016'))
df['5 day'] = fiveday(df['Close'])
df['10 day'] = tenday(df['Close'])
df['20 day'] = twentyday(df['Close'])
df = df.dropna()
df.tail()