The Christmas Eve Selloff was a Classic Capitulation

The selloff on Christmas eve was so bad it looked like a typical bear market capitulation. The following rally merely confirmed it.

As mentioned in the last post, at the time the correction reached 16%, at the close of December 21st, the oversold indicator was not lighted. What followed was the worst Christmas eve selloff ever. The selloff had two achievements. First, it took this bear market to a slightly deeper level than the 1998 bear market, which, based on my previous analysis, was the smallest bear market to date.

The second accomplishment of the selloff was that it looked a lot like a capitulation typical of a bear market bottom or a reversal. Running the capitulation function from the previous post confirms. In other words, the seloff took the three relevant indexes 10% or more away from their 50 day exponential moving average.

capitulation = function(spx=NULL, dji=NULL, nyse=NULL)

  spx = if(is.null(spx)) na.fill(Ad(getSymbols("^GSPC", from="1900-01-01", auto.assign=F)), "extend")  else spx
  dji = if(is.null(dji)) na.fill(Ad(getSymbols("^DJI", from="1900-01-01", auto.assign=F)), "extend") else dji
  nyse = if(is.null(nyse)) na.fill(Ad(getSymbols("^NYA", from="1900-01-01", auto.assign=F)), "extend") else nyse
  spx.macd = MACD(spx, nFast=1, nSlow=50, maType=EMA)
  dji.macd = MACD(dji, nFast=1, nSlow=50, maType=EMA)
  nyse.macd = MACD(nyse, nFast=1, nSlow=50, maType=EMA)
  merged = merge(spx.macd[,1], dji.macd[,1], nyse.macd[,1], spx, dji, nyse, all=FALSE)
  merged = cbind(ifelse(merged[,1] <= -10 & merged[,2] <= -10 & merged[,3] <= -10, 1, 0), merged)
  colnames(merged) = c("ind", "spx.ind", "dji.ind", "nyse.ind", "spx.close", "dji.close", "nyse.close")
  capitulation = merged[merged[,1] == 1,2:NCOL(merged)]
  return(list(capitulation=capitulation, details=merged))
cap = capitulation()
#              spx.ind   dji.ind  nyse.ind spx.close dji.close nyse.close
# 2009-03-06 -15.84705 -15.21571 -16.07971    683.38   6626.94    4284.49
# 2009-03-09 -16.14169 -15.70102 -16.65649    676.53   6547.05    4226.31
# 2009-03-10 -10.42353 -10.43552 -10.87757    719.60   6926.49    4499.38
# 2011-08-08 -13.47900 -11.42400 -14.88095   1119.46  10809.85    6895.97
# 2011-08-10 -12.61128 -11.47501 -11.57217   1120.76  10719.94    7101.24
# 2018-12-24 -12.01412 -11.68575 -10.95371   2351.10  21792.20   10769.83

What’s next? No one knows. 🙂 It is a bear market until proven otherwise. In the distant pass, the capitulation indicator has been pretty reliable and less frequent. In the 2002 bear market, and especially in the 2008 there were more signals. The indicator gave a few signals way before the pain started to ease. In 2011, the indicator gave signal even without a bear market and was spot on – the bottom came a day later. Today’s rally certainly confirms the oversold theory.


  1. Joe says:

    Thanks for the post, really cool analysis. Any advice on best resource to learn performanceanalytics?

    1. quintuitive says:

      Hi, the package vignettes are a good start. There is a lot of information online – the package has been around for quite a while. Good luck!

Leave a Reply