When Both Thursdays And Fridays Are Down In SPY (S&P 500 Reversal Trading Strategy)
Last Updated on August 6, 2022
Mondays and Fridays often turn out to be reversals when they move hard either way.
Today, we look at a reversal strategy that happens on Fridays. The results are very good with an average gain of 0.77% per trade.
(This article was originally published in June 2013. We updated the backtest on our Substack service.)
A reversal trading strategy in the S&P 500:
- Today is Friday.
- Yesterday (Thursday) was down more than -0.15% and today also more than -0.15%. 0.15% is used to have some wiggle room because you have to send the orders before the market closes.
- Exit at the close after two days (usually on Tuesdays).
The test period is from 2005 until February 2013:
Here is the equity curve:
Doing the opposite (and short) we get this equity curve:
It does not work on other days. On Wednesdays, it pays off to go short.
If you would like to have the Amibroker and Tradestation code for this strategy plus 70+ other free trading strategies published on this website, please click on this link:
For more trading strategies, please click here:
- Free trading strategies
- Monthly trading edges (subscription service)
Here’s a small script that replicates your strategy in R (http://www.r-project.org):
posSize <- 5000 # per trade
txnFees <- 0.02 # per share
# Get data from Yahoo Finance
x <- getSymbols("SPY", from = "2005-01-01", auto.assign = FALSE)
# Adjust OHLC and subset data from 2005-01-01 to 2013-02-28
x <- adjustOHLC(x["2005::2013-02"], use.Adjusted = TRUE)
# Signal: if Friday and last two close to close were down
x$Wday <- wday(index(x))
x$Sig <- ifelse(x$Wday == 6 & Cl(x) < Lag(Cl(x)) & Lag(Cl(x)) < Lag(Cl(x), 2), 1, 0)
# Entry price: close price of sig day
x$EntryPrice <- as.numeric(Cl(x))
# Exit price: close price 2 days later
x$ExitPrice <- c(as.numeric(Cl(x))[-c(1:2)], rep(NA, 2))
# Number of shares
x$Shares <- floor(posSize/x$EntryPrice)
# Calculate PnL including txn fees
x$PnL <- x$Sig * x$Shares * (x$ExitPrice – x$EntryPrice – 2 * txnFees)
x[is.na(x)] <- 0