# Fitting GARCH(1,1) in Python for moderately large data sets

I am using the arch package in python to fit a GARCH(1,1) to fit daily S&P 500 returns from 1990 to 2017 (about 6800 data points). The code I am using is as follows:

sp500 = pd.read_csv('sp.csv', index_col=0, parse_dates=True, squeeze=True)
sp500 = (np.log(sp500) - np.log(sp500.shift(1))).dropna()[::-1]

from arch import arch_model
garch11 = arch_model(sp500, p=1, q=1)
res = garch11.fit(update_freq=10)
print res.summary()


Even for just 50 data points, the solver fails to converge, citing

The optimizer returned code 8. The message is:
Positive directional derivative for linesearch
See scipy.optimize.fmin_slsqp for code meaning. ConvergenceWarning)


It seems ridiculous that it can't fit 50 data points. Are there any tweaks to get this working?

• You may be looking for an ARMA(1,1) model with GARCH(1,1) errors, very common in this type of modeling. – user25064 Feb 16 '17 at 15:06
• @user25064 that doesn't answer my question. – user369210 Feb 23 '17 at 18:29
• @user321210 did you somehow solve your problem? I have the same issue when running the arch_model function. – joomanda Jun 13 '17 at 11:46
• @joomanda yes I did! Scale all your data by a factor of 100. Check the first example here: pypi.python.org/pypi/arch/3.0. It seems that the optimizer fails when the values are too close to 0 – user369210 Jun 18 '17 at 21:40