Idea in brief
Ernie Chan runs the QTS Capital fund and the PredictNow.ai service. In the interview Chan describes the fund's Tail Reaper strategy. It is intraday momentum on the S&P 500 future: if the market has risen strongly during the day, the fund is long into the close, and if it has fallen strongly, the fund is short. Long and short happen on different days. The position is liquidated the same day.
The author discloses nothing more. Chan does not name the entry time, the threshold for a "strong" move, the stop or the size. We set all of this below. The scheme comes from the academic research line on market intraday momentum, which the author refers to without naming papers: the signal is measured from the prior close, and the trade takes place in the last 30 minutes of the session.
On top of the base rule the fund runs a machine learning risk layer. It decides whether to trade on a given day and with what size. The author says plainly that the original version no longer works without yearly refinements. This card describes the original idea and a simple replacement for the risk layer.
Why it might work
The author's explanation is forced rebalancing. Options market makers who have sold calls and puts are short gamma. When the market has risen strongly during the day, their book has become short delta. To get back to neutral delta by the end of the day, they need to buy futures or stocks, and this buying pushes the market further up. On a decline everything is mirrored: they sell.
Chan calls such a strategy causal. The effect has a cause, and as long as the cause has not gone away, the effect remains, even if it was written about long ago. The relationship is noisy, though: many other factors move the market on any given day. That is why the fund keeps a simple entry rule and a complex risk layer. The layer's job is not to find trades but to decide on which days not to trade or to trade less. In the author's view, this is exactly where machine learning works: declining a trade does not compete with anyone.
The second property the author names: the strategy is trend-following and therefore behaves like long volatility, even though it does not trade options. The interview gives no figures for the strategy, neither returns nor number of trades. The author says the effect has been described in numerous academic papers but names none of them. The references below are ours, not the author's. The card's scheme (the return from the prior close to the last half hour, explained by dealers' gamma hedging) matches the paper by Baltussen, Da, Lammers and Martens (2021, Journal of Financial Economics). The earlier paper by Gao, Han, Li and Zhou (2018) predicts the last half hour from the first half hour of the session, measured from the prior close. We use both papers only as a template for the scheme, and their conclusions and figures have not been checked against the interview.
Rules
Signal (author's idea, windows and threshold by Finetiq)
// instrument: E-mini S&P 500 future (ES) or the MES micro contract // author: the fund trades only the S&P 500 future
// 5-minute bars, New York exchange time
PrevClose = ES price at 16:00 ET in the previous session // Finetiq: cash session close, not settlement and not 17:00 ET
Px1530 = Close of the 15:25–15:30 ET bar // Finetiq: trade only in the last 30 minutes
DayRet = Px1530 / PrevClose - 1
Sigma = StdDev(returns 16:00 ET → 16:00 ET, 20 days) // Finetiq: threshold as a fraction of a normal daily move
Z = DayRet / Sigma
// author: strong rise → long into the close, strong fall → short
IF Z >= +K THEN BUY AT NEXT BAR OPEN // entry at 15:30 ET; Finetiq: K = 0.5
IF Z <= -K THEN SELL SHORT AT NEXT BAR OPEN
// Finetiq, reading without a threshold: every day by the sign of DayRet (K = 0)
Exit and limits
// author: the position is closed every day and never held overnight
EXIT at the close of the 15:55–16:00 ET bar // Finetiq: cash session close time
Long: StopLoss = EntryPrice - 0.3 * ATR(14, D1) // Finetiq: emergency stop, also test without it
Short: StopLoss = EntryPrice + 0.3 * ATR(14, D1)
no more than one trade per day // Finetiq
IF shortened session (close at 13:00 ET) // Finetiq
the window shifts to 12:30–13:00 ET, PrevClose stays the same
Size (Finetiq)
// author: every day is a new position, size is chosen anew
BaseSize = Equity * 0.5% / (0.3 * ATR(14, D1) * PointValue) // Finetiq: 0.5% risk to the stop
Contracts = floor(BaseSize)
Variant B. A simple model instead of the author's ML layer (Finetiq)
The author describes the layer this way: a model estimates the probability that the strategy will make money today. A high probability means more capital, a low one means less or zero. The factors and the model are not disclosed. Below is a transparent replacement built on data available to a retail trader.
// all features are known before 15:30 ET
X = [ |Z|,
VIX at yesterday's close,
opening gap / Sigma,
third Friday of the month flag,
Fed decision day flag ] // Finetiq
p = logistic regression P(trade is profitable | X) // Finetiq
trained on the past 750 days, retrained once a quarter // past data only
IF p < 0.5 THEN Size = 0 // author: "do not trade on this day"
IF p >= 0.5 THEN Size = BaseSize * min(1.5, 1 + 5 * (p - 0.5)) // Finetiq
Parameters
| Parameter | Value | Source |
|---|---|---|
| Instrument | S&P 500 future (ES, MES) | author |
| Direction | with the day's move, long and short | author |
| Holding | intraday, closed every day | author |
| Risk layer | decides whether to trade and with what size | author (model not disclosed) |
| Reference price | ES at 16:00 ET in the previous session | Finetiq |
| Signal time | close of the 15:25–15:30 ET bar | Finetiq |
| Exit | 16:00 ET | Finetiq |
| Normalization | StdDev of daily returns over 20 days | Finetiq |
| Threshold K | 0.5, test 0–1.0 | Finetiq |
| Emergency stop | 0.3 × daily ATR(14) | Finetiq |
| Risk per trade | 0.5% of capital | Finetiq |
| Variant B: features | |Z|, VIX, gap, expiration, Fed | Finetiq |
| Variant B: training | 750 days, once a quarter | Finetiq |
What to test
- Is there an effect at all. Reading without a threshold: every day a position by the sign of DayRet from 15:30 to 16:00 ET. Calculate the average trade in points, and separately after costs: at least one tick of slippage on entry and on exit plus commission. The trade lasts 30 minutes, and costs will eat an average result of a couple of ticks entirely.
- Strength of the day. Threshold K = 0, 0.25, 0.5, 1.0. If the average trade grows with the threshold, there is a link to the size of the daily move. If not, the threshold only shrinks the sample.
- Window. Signal at 15:00, 15:30 and 15:45 ET with the exit at 16:00 ET. Separately, an exit at 16:15 ET, when the future is still trading. If the result holds in only one window, it is overfitting.
- Time. Results by year, separately before and after 2022, when S&P 500 options got expirations on every day of the week. Dealer hedging depends on how the options market is structured, and the author says the original version has decayed.
- The long volatility property. Correlation of the daily result with |DayRet| and with the daily change in VIX. Results in 2008, 2020 and 2022. The author claims the strategy makes money on days of large moves.
- Stop. No stop versus 0.3 and 0.6 of daily ATR. Within half an hour a stop may knock out exactly the volatile days that deliver the profit.
- Risk layer. Variant B versus the base rule, only on data after the training period. If B wins only on the training sample, the layer is overfitted.
Platform notes
TradingView (Pine Script)
- The
ES1!session starts at 18:00 ET the previous day, and the daily bar closes later than 16:00 ET. Take the reference price from the 5-minute bar that closed at 16:00 ET and store it in avarvariable. Trade window:time(timeframe.period, "1530-1600", "America/New_York"). - By default an order fills at the open of the next bar: entry at 15:30, and an exit via
strategy.closeon the 15:55 bar goes to the open of the 16:00 bar. For an exit exactly at 16:00 ET,process_orders_on_close = trueis more convenient, but then the entry also fills at the close of the signal bar. Pick one mode. - Days with a 13:00 ET close are not marked in the built-in calendar, so set them as an array of dates.
- The depth of intraday history depends on the subscription plan. There may not be enough 5-minute bars to test by year and across crises.
MultiCharts and TradeStation (EasyLanguage)
Timeis the bar's close time. The 15:25–15:30 signal bar hasTime = 1530, and the entryBuy next bar at marketfills at the open of the bar withTime = 1535.- Exit at the 16:00 ET price on the bar with
Time = 1600:Sell this bar on closefor a long andBuy to cover this bar on closefor a short.SetExitOnClosedoes not fire in live trading. - A futures daily bar in TradeStation closes at settlement. Calculate Sigma and the reference price from 16:00 ET intraday closes, otherwise the threshold and the signal will come from a different price.
- If the symbol uses the full CME session, the daily bar's "prior close" will be at 17:00 ET. Record the 16:00 ET price yourself.
MetaTrader 5 (MQL5)
- Few brokers offer the ES future. A CFD on the S&P 500 (US500, SPX500) tracks the index or the future with a spread, and the last 30 minutes cost more on it than on the exchange.
- Convert 15:30 and 16:00 ET into broker server time, accounting for daylight saving time both in the US and on the server. In the tester
TimeGMT()equals server time and does not help. - A CFD daily bar closes at server midnight, not at 16:00 ET. Calculate PrevClose and Sigma from M5 bars.
- Take the signal from the closed bar (index 1) and check for a new 5-minute bar, otherwise the entry will repeat on every tick.
Where the idea can break
- The rules are entirely ours. The author named the instrument, the direction, closing every day and the purpose of the risk layer. The windows, threshold, stop, size and the replacement for the ML layer are starting values for testing.
- The author says the original version does not work and survives on refinements almost every year. The simple rule in this card is closer to the original version, and a weak result in recent years is to be expected for it.
- The working part of the fund's strategy is hidden in the risk layer. It cannot be reproduced, and the author sells a service that builds such layers.
- The interview gives no figures for the strategy. All properties, including long volatility, are the author's claims.
- The average trade is short and small. One tick of slippage on entry and exit can wipe out the result, especially on CFDs.
- With a threshold, signals cluster in volatile periods. The result may rest on a couple of crisis years.
- The dealer hedging flow changes along with the options market. The effect may shift in time within the day or weaken, and in historical data this will look like a breakdown.