S&P Overnight Trading Model

The last couple of articles I’ve written were highlighting simple trading models that could be the basis for a profitable trading system on the S&P market. These ideas would be suitable either for the ETF market or the Emini futures market. This article will explore yet another simple trading model. Recently I was inspired by a post at Quantifiable Strategies titled, “How To Make Money From The Close Until Tomorrow’s Open in SPY/S&P 500” by Oddmund Grotte. This brief blog post builds up the work of Rob Hanna at Overnight Edges to test another simple S&P model. I thought I would create the model in EasyLanguage and put it through my own testing.

The Overnight Edge

The overnight edge is an S&P market edge that I, along with many other people, discovered years ago. I’ve written about this market edge in a previous article, “The Overnight Edge“. This particular model is going to take advantage of that edge by going long at the close of the day and closing the trade at the next day’s open. The dominate question we will be answering today is, when should we buy. Obviously buying at the close of every single day is not a realistic strategy. So, we wish to eliminate the unproductive trades in favor of finding the highest probability set-ups. That is, what types of days produce the biggest nightly returns?

Baseline Model Rules

  1. SPY closes at new 20 day low
  2. Close is above 200 day simple moving average
  3. Go long at the close
  4. Exit at tomorrow’s open

Below is a snapshot of a few trades taken on the daily chart of the S&P Emini.

Trade Examples

Trade Examples

Testing Environment

I coded the above rules in EasyLanguage and tested it on the E-mini S&P futures market. Before getting into the details of the results let me say this: all the tests within this article are going to use the following assumptions:

  1. Starting account size of $25,000
  2. Dates tested are from September 11, 1997 through December 31, 2012
  3. One contract was traded for each signal
  4. The P&L is not accumulated
  5. $30 was deducted per round-trip for slippage and commissions
  6. There are no stops

Baseline Results

Below is the equity graph and the performance results of the baseline model.


Baseline Net Profit

Baseline Net Profit

Overnight Low Baseline Results


Testing the Robustness of the Lookback Period

The baseline rules call for a 20-day new low. Is this just an outlier? Or, is this parameter robust for a wide range of values? When looking at a trading model, it’s important that the parameters demonstrate robustness across a wide range. That is, the system should remain profitable over many different values.

To test the robustness of this input, I will use TradeStation’s optimization feature which will allow me to quickly test a range of values. I will test the range 2 – 30. The results of my test are below. The x-axis displays the number of days for the new low while the y-axis displays the net profit.

Lookback vs. Net Profit

Lookback vs. Net Profit

We can easily see a clear trend. The shorter the lookback period the more profit. Notice that a lookback period of 4 days is probably an outlier. It’s enticing to simply pick a small lookback period like 3 or 5, but from experience I know more profit often comes at a price. Often that price is deep drawdown, larger losing streaks and prolonged periods of no new equity highs.

Let’s look at these results another way.

Another way to look at the results is to compare the profit factor vs. the lookback period. See the bar chart below. The x-axis displays the number of days for the new low while the y-axis displays the profit factor.

Lookback vs. Profit Factor

Lookback vs. Profit Factor

We can see that our profit factor has an opposite trend when compared to the new profit bar graph. In other words, as we make more net profit, we do so with less efficiency. Sure we are making more money when we have a lookback period of 3 when compared to a lookback period of 20. But we also have more losing trades. This can be confirmed by the next bar graph.

Let’s also take a look at the number of trades. See the bar chart below. The x-axis displays the number of days for the new low while the y-axis displays the number of trades.

Lookback vs. Number of Trades

Lookback vs. Number of Trades

Once a again there is a clear trend. There are fewer trading opportunities as you increase the lookback period. This makes sense. The higher the lookback period the less likely you are to experience that new low.

So, more profit does come at a cost. It will be up to you to determine what is appropriate for your trading situation. For me, I would like to have fewer trades and less net profit. This comes with, what I consider, the benefit of fewer losing trades, more net profit per trade, and less drawdown. In short, I prefer the quality trades over the quantity of trades. It appears we can improve the net profit of our model by reducing the lookback period for the new look. More on that later.

Testing the Robustness of the Regime Filter

The regime filter in this model is a simple moving average. We are using the “standard” 200-day simple moving average. This is a very common period for daily charts. It’s commonly understood that price is generally bullish when it’s above this moving average and bearish when below it. Again, to test the robustness of this filter I will use TradeStation’s optimization feature. I will test the range 60 – 250. The results of my test are below. The x-axis displays the number of days for the lookback value while the y-axis displays the net profit.


Lookback Value vs. Net Profit

Clearly the longer the lookback period the more net profit we generate. Our “standard” 200-day lookback value performs well, but it’s not the best. The best value is 250 in this study. Many values will perform similarly. This gives me confidence the regime filter is not overly optimized and is robust.

Weak Close Filter

In the original blog post by Oddmund Grotte he introduced a price based filter that required the close of the current bar to be within the lower half of the daily range. If price closes in the lower half of the daily range it is presumed we are looking for a weak close. A strong close would be when the close is the upper half of the daily range.

The calculation to determine if the close is within the lower half of the daily range looks like this:

Weak Close = (c-l)/(h-l) < 0.5

With this additional filter we are confirming weakness before opening a new long position. The results of our trading model with the new filter are below.




Model Equity Curve With Weak Close Filter


Overnight Low Baseline With Filter ResultsThe filter did a fantastic job of removing unproductive trades. You can see this because we are making more net profit with fewer trades. This pushes up the average profit per trade. We also reduce our drawdown which increases our profit factor. The only thing concerning is our trade size is small. The baseline had 61 trades, which is not very many trades. With our filter we reduce the trades to 55. But we know how to increase the number of trades by reducing the lookback period of the “new low”. We’ll do that later. For now, there is one other input value I want to test.

Testing the Robustness of the Close Filter

Once again let’s take a detailed look at the percent range used in the Close Filter. If you will recall, we are looking for a close in the lower half of the daily range. But is this just a fluke value? Will other values produce similar results?

The bar graph below depicts taking trades at or above the given x-axis value. For instance, the far left bar produces a net profit around $4,700. The value on the x-axis at this bar is 0.1. This states that all this profit is accumulated above this value. By the time we reach 0.45 there is no more profit to accumulate. Thus, we can see the accumulated profitable trades occur when the daily close falls within the lower 40% daily range. Put another way, we want to open a long position when the daily close is within the lower 2/5 of the daily range.



Combining Our Findings

Let’s now combine a couple of our findings. First, let’s increase the number of trades by reducing the lookback period on locating a new low. Let’s try to keep the profit factor around 2.0, so we’ll use a lookback period of 5 instead of the default 20. I will then change the weak close filter to a value of 0.40 from the default 0.50. I will make no change to the simple moving average regime filter which is at 200. Below are the results.


Model Equity Curve With Combined Findings

Overnight Combined Results


Not too bad for a few lines of code. Remember this model does not have any stops nor does in reinvests profits. In short, this is not a trading system but an interesting model which could evolve into a complete trading system with some work.


Model code as TradeStation ELD
TradeStation WorkSpace
Model code as text file

About the Author Jeff Swanson

Jeff is the founder of System Trader Success – a website and mission to empowering the retail trader with the proper knowledge and tools to become a profitable trader the world of quantitative/automated trading.

follow me on: