Many researchers and practitioners argue that a long-term return forecast would be overestimated if it is based on the arithmetic mean of the past returns and underestimated based on a geometric mean. Using 80 years' historical returns to forecast the next 25-year future return, Jacquier, Kane, and Marcus (2003) suggest the following weighted scheme:
The following program reflects the preceding equation:
import numpy as np import pandas as pd from matplotlib.finance import quotes_historical_yahoo_ochl as getData # # input area ticker='IBM' # input value 1 begdate=(1926,1,1) # input value 2 enddate=(2013,12,31) # input value 3 n_forecast=25 # input value 4 # def geomean_ret(returns): product = 1 for ret in returns: product *= (1+ret) return product ** (1.0/len(returns))-1 # x=getData(ticker,begdate,enddate,asobject=True, adjusted=True) logret = np.log(x.aclose[1:]/x.aclose[:-1]) date=[] d0=x.date for i in range...