Jake Bernstein’s Swing Methods on the Futures in His Weekly Report: 21 Backtests on 29 Markets
Jake Bernstein’s weekly market report walks through 39 futures markets: stock indices, rates, metals, grains, softs, energy, currencies, bitcoin and volatility. His swing-trading methods are taught on exactly these markets, so we tested them there: the same 21 research configurations we built from his swing-trading material, run on daily and weekly bars of 29 of those markets, with futures commissions and slippage instead of stock-trading costs.
The short answer
From 2002-01-02 to 2026-10-09, the 21 configurations opened 140,489 positions on 29 markets, with equal initial notional per position. After illustrative cost rates based on one tick per side and $5 commission per reference contract, three of the 21 finished with a positive mean per position: channel trend, pullback entry, every pullback (W08, weekly), open/close averages, crossover approximation (W17, weekly) and open/close averages, research implementation (W18, weekly). Before costs seven were positive; at double the modelled cost three still are. Pooled over every position, the 21 averaged −0.08% per trade.
None of the 15 daily configurations finished positive (pooled mean −0.10% per position); three of the six weekly ones did (pooled mean +0.11%). This does not establish a weekly-timeframe advantage: among six corresponding daily/weekly implementations, three weekly means are higher and three are lower. Holding periods differ, so these per-position means do not measure time-adjusted efficiency. Of the positive ones, all three are positive in both the 2002–2019 and the 2020–2026 simulation. Bitcoin contributes 36% of W08’s, 98% of W17’s and 56% of W18’s summed equal-notional net returns. These contributions sum position percentage returns, not one-contract dollar profits. Without bitcoin all three stay positive (W08 +0.25%, W17 +0.004%, W18 +0.12% per position), one of them in both date windows (W08). W17’s and W18’s short positions lost money on average; their gains come from long positions, which markets that rose over the period, such as bitcoin, the stock indices and gold, help regardless of timing.
By market, a majority of the configurations with trades finished positive on seven of 29: CME Bitcoin, British pound, Euro FX, DAX, E-mini Nasdaq 100, Copper, Silver. No configuration is recommended. With 21 variants, two timeframes and many markets, some positive averages are expected by chance alone; the tables below describe the simulation, they do not establish an edge.
From the team behind this backtest
Get seasonal patterns that have worked in the past
Testing popular trading ideas against decades of data is what we do every day. Does It Repeat applies it to timing: which weeks of the year a market has historically risen or fallen, how consistently, and whether that pattern still holds up.
Seasonality screener
FreeThe next yearly windows with a perfect record
- ICG.LICG PLCLongOct 21 → Nov 25 · won 10 of 10 years · +13.3% avg
- PHParker HannifinLongOct 21 → Nov 22 · won 10 of 10 years · +11.4% avg
- ODFLOld Dominion Freight LineLongOct 22 → Dec 2 · won 10 of 10 years · +9.0% avg
Price cycle screener
FreeCycle models with an entry in the next two weeks
- LITELumentum Holdings Inc.Shortentry Oct 29 · +302.9% net · 100% won
- XMR-USDMoneroLongentry Oct 27 · +278.2% net · 80% won
- AMDAdvanced Micro Devices Inc.Shortentry Oct 27 · +217.1% net · 80% won
Free account includes a screener preview, no credit card. Full access $20/mo at early-adopter pricing, 14-day money-back guarantee, cancel anytime. All statistics are historical; past performance does not guarantee future results.
Which markets, and which prices
The market list is the one in the report’s October 12, 2026 edition, read from its chart titles; we publish the list only, not the commentary. Free, continuous futures histories do not exist for most of these contracts: the usual front-month series jump at every contract roll, and a swing system would read each jump as a price move. We therefore used one price series per market that has no roll gaps, and modelled synthetic positions with equal initial notional.
- Stock indices use the cash index. The futures track it closely apart from a small, slowly changing carry.
- Rates, metals, grains, sugar, energy and volatility use exchange-traded funds that hold the futures or the metal. Their prices already include the cost or gain of rolling from one contract to the next, so their daily moves behave like a roll-adjusted futures series, less a small fund fee.
- Currencies use spot exchange rates, inverted where the future is quoted the other way round (Swiss franc, yen, Canadian dollar, peso). Bitcoin uses the spot price on weekdays only; CME bitcoin futures exist only from December 2017.
The fund series follow the US stock session, not the nearly round-the-clock futures session, so their daily highs, lows and opens differ from the contract’s. Each position receives an illustrative transaction-cost rate: one tick per side plus $5 commission for a reference contract, divided by its estimated entry-date notional. Available futures closes value the ETF reference contracts; the other markets use cash-index or spot closes, and VX uses spot VIX. These approximate values are not observed execution prices. Charges are subtracted after simulating proxy-price fills; integer contract quantities are not modelled.
Australian-dollar prices start on 2020-11-23, and Euro FX prices on 2016-01-11, the dates their smaller tick sizes took effect. Earlier prices are excluded, including from indicator warm-up, so their first simulated trades occur later. The other markets keep their available histories.
| Market | Report symbol | Price series used | Source | First trade | Mean modelled cost |
|---|---|---|---|---|---|
| E-mini S&P 500 | ES | ^GSPC | Yahoo, cash index | 2002 | 3.4 bp |
| E-mini Nasdaq 100 | NQ | ^NDX | Yahoo, cash index | 2002 | 2.6 bp |
| 30-year T-bond | ZB | TLT | Yahoo | 2003 | 5.2 bp |
| 10-year T-note | ZN | IEF | Yahoo | 2003 | 3.0 bp |
| Gold | GC | GLD | Yahoo | 2005 | 1.9 bp |
| Silver | SI | SLV | Yahoo | 2007 | 5.4 bp |
| Platinum | PL | PPLT | Yahoo | 2011 | 2.8 bp |
| Palladium | PA | PALL | Yahoo | 2011 | 10.8 bp |
| Copper | HG | CPER | Yahoo | 2020 | 2.9 bp |
| Corn | ZC | CORN | Yahoo | 2011 | 13.5 bp |
| Soybeans | ZS | SOYB | Yahoo | 2014 | 5.6 bp |
| Wheat | ZW | WEAT | Yahoo | 2014 | 10.9 bp |
| Sugar #11 | SB | CANE | Yahoo | 2018 | 15.4 bp |
| Crude oil | CL | USO | Yahoo | 2007 | 3.8 bp |
| RBOB gasoline | RB | UGA | Yahoo | 2009 | 1.6 bp |
| Natural gas | NG | UNG | Yahoo | 2008 | 7.9 bp |
| Euro FX | 6E | EURUSD=X | Dukascopy spot, daily | 2017 | 1.2 bp |
| Swiss franc | 6S | USDCHF=X (inverted) | Dukascopy spot, daily | 2004 | 1.4 bp |
| Japanese yen | 6J | USDJPY=X (inverted) | Dukascopy spot, daily | 2004 | 1.6 bp |
| British pound | 6B | GBPUSD=X | Dukascopy spot, daily | 2004 | 1.9 bp |
| Canadian dollar | 6C | USDCAD=X (inverted) | Dukascopy spot, daily | 2004 | 1.8 bp |
| Mexican peso | 6M | USDMXN=X (inverted) | Dukascopy spot, daily | 2008 | 5.0 bp |
| Australian dollar | 6A | AUDUSD=X | Dukascopy spot, daily | 2021 | 2.2 bp |
| New Zealand dollar | 6N | NZDUSD=X | Dukascopy spot, daily | 2004 | 2.2 bp |
| CME Bitcoin | BTC | BTC-USD | Yahoo | 2015 | 32.8 bp |
| VIX futures | VX | VIXY | Yahoo | 2012 | 61.7 bp |
| FTSE 100 | FTSE | ^FTSE | Yahoo, cash index | 2002 | 2.2 bp |
| DAX | DAX | ^GDAXI | Yahoo, cash index | 2002 | 2.8 bp |
| Nikkei 225 (CME, USD) | NKD | ^N225 | Yahoo, cash index | 2002 | 7.2 bp |
“Mean modelled cost” is the average round-trip charge across that market’s positions, in basis points of one contract’s value (1 bp = 0.01%). VIX futures are expensive because one tick is worth $50 on a contract of roughly $15,000–20,000.
10 markets have no series without roll gaps and are not tested: lean hogs, live cattle, soybean oil, soybean meal, oats, cocoa, orange juice, cotton, coffee, heating oil. Results cover 29 of the 39 markets.
All 21 configurations
Each synthetic position has the same initial notional; partial exits are weighted fractions of that position. These are normalized percentage returns, not a one-contract dollar account. Means are per position after the illustrative cost rate, so markets and configurations that trade more contribute more. Bitcoin’s contribution uses the sum of those equal-notional net returns. “Mean net excl. bitcoin” drops the bitcoin positions. The reference row, a 50/200-day average crossover, is shown for scale and is not one of the 21.
| Configuration | Positions | Mean net | Median net | Win rate | Profit factor | Mean net, double cost | Mean net excl. bitcoin |
|---|---|---|---|---|---|---|---|
| Channel trend, immediate entryW01 · Daily | 3,878 | −0.05% | −0.66% | 47.8% | 0.96 | −0.12% | −0.08% |
| Channel trend, pullback entry, every pullbackW02 · Daily | 13,573 | −0.04% | +0.13% | 53.3% | 0.96 | −0.10% | −0.04% |
| Channel trend, pullback entry, first pullback onlyW03 · Daily | 3,897 | −0.10% | +0.13% | 52.9% | 0.90 | −0.16% | −0.08% |
| Channel trend, immediate entry, alternative confirmationW04 · Daily | 4,598 | −0.10% | −0.56% | 48.5% | 0.93 | −0.17% | −0.12% |
| Channel trend, immediate entry, no confirmationW05 · Daily | 5,619 | −0.10% | −0.66% | 47.6% | 0.93 | −0.17% | −0.10% |
| Channel counter-move approximationW06 · Daily | 7,736 | −0.03% | +0.03% | 52.0% | 0.95 | −0.09% | −0.03% |
| Channel trend, immediate entryW07 · Weekly | 634 | −0.17% | −1.65% | 46.7% | 0.95 | −0.22% | −0.19% |
| Channel trend, pullback entry, every pullbackW08 · Weekly | 2,467 | +0.38% | +0.48% | 55.8% | 1.18 | +0.32% | +0.25% |
| Divergence, oscillator AW09 · Daily | 1,631 | −0.32% | +0.23% | 53.3% | 0.80 | −0.40% | −0.34% |
| Divergence, oscillator BW10 · Daily | 1,752 | −0.17% | +0.29% | 58.3% | 0.88 | −0.25% | −0.20% |
| Divergence, oscillator CW11 · Daily | 2,072 | −0.19% | −0.09% | 49.5% | 0.88 | −0.27% | −0.17% |
| Divergence, oscillator DW12 · Daily | 1,304 | −0.18% | −0.56% | 29.2% | 0.89 | −0.25% | −0.11% |
| Divergence, first of the four oscillatorsW13 · Daily | 3,147 | −0.25% | −0.34% | 42.4% | 0.83 | −0.33% | −0.22% |
| Divergence, oscillator AW14 · Weekly | 349 | −0.93% | −1.27% | 44.1% | 0.74 | −1.03% | −1.16% |
| Open/close averages, crossover approximationW15 · Daily | 21,469 | −0.11% | −0.41% | 36.2% | 0.90 | −0.17% | −0.15% |
| Open/close averages, research implementationW16 · Daily | 14,880 | −0.03% | −0.28% | 41.6% | 0.97 | −0.09% | −0.07% |
| Open/close averages, crossover approximationW17 · Weekly | 4,187 | +0.21% | −0.96% | 35.6% | 1.09 | +0.15% | +0.004% |
| Open/close averages, research implementationW18 · Weekly | 2,997 | +0.27% | −0.41% | 44.0% | 1.15 | +0.21% | +0.12% |
| Fast band swing tradeW19 · Daily | 23,046 | −0.13% | +0.38% | 62.5% | 0.85 | −0.20% | −0.12% |
| Fast band swing tradeW20 · Weekly | 4,271 | −0.14% | +1.04% | 64.6% | 0.93 | −0.20% | −0.14% |
| Volatility score (our reconstruction, two settings assumed)W21 · Daily | 16,982 | −0.16% | −0.39% | 39.8% | 0.89 | −0.22% | −0.17% |
| Reference: 50/200-day average cross, eligibility gatedW22 · Daily | 792 | +4.95% | −2.17% | 34.5% | 1.99 | +4.89% | +2.05% |
Daily and weekly configurations hold positions for different lengths of time, so their means per position are not comparable measures of efficiency.
Two separately simulated date windows
The 2002–2019 window runs on data ending in 2019. The 2020–2026 window starts flat in January 2020, using older prices only to warm up indicators where those prices are within the market’s permitted history. Markets whose history starts later enter only after that start and fresh warm-up; AUD contributes no positions to the earlier window. Both are chronological checks, not an untouched holdout: the markets, price series and research choices were all fixed after both periods had happened.
| Configuration | 2002–2019 positions | 2002–2019 mean | 2020–2026 positions | 2020–2026 mean | Excl. bitcoin, 2002–2019 | Excl. bitcoin, 2020–2026 | Positive entry-year cohorts |
|---|---|---|---|---|---|---|---|
| Channel trend, immediate entryW01 · Daily | 2,457 | −0.04% | 1,421 | −0.09% | −0.06% | −0.13% | 12 of 25 |
| Channel trend, pullback entry, every pullbackW02 · Daily | 8,485 | −0.06% | 5,097 | +0.002% | −0.05% | −0.02% | 8 of 25 |
| Channel trend, pullback entry, first pullback onlyW03 · Daily | 2,480 | −0.09% | 1,439 | −0.10% | −0.05% | −0.10% | 10 of 25 |
| Channel trend, immediate entry, alternative confirmationW04 · Daily | 2,916 | −0.11% | 1,682 | −0.08% | −0.13% | −0.10% | 11 of 25 |
| Channel trend, immediate entry, no confirmationW05 · Daily | 3,592 | −0.11% | 2,027 | −0.09% | −0.12% | −0.08% | 12 of 25 |
| Channel counter-move approximationW06 · Daily | 4,827 | −0.06% | 2,909 | +0.03% | −0.05% | −0.01% | 9 of 25 |
| Channel trend, immediate entryW07 · Weekly | 409 | −0.14% | 225 | −0.23% | −0.18% | −0.20% | 12 of 25 |
| Channel trend, pullback entry, every pullbackW08 · Weekly | 1,537 | +0.16% | 939 | +0.75% | +0.13% | +0.48% | 19 of 25 |
| Divergence, oscillator AW09 · Daily | 1,036 | −0.36% | 594 | −0.23% | −0.35% | −0.30% | 6 of 25 |
| Divergence, oscillator BW10 · Daily | 1,114 | −0.23% | 637 | −0.07% | −0.20% | −0.19% | 10 of 25 |
| Divergence, oscillator CW11 · Daily | 1,288 | −0.27% | 789 | −0.04% | −0.22% | −0.06% | 9 of 25 |
| Divergence, oscillator DW12 · Daily | 825 | −0.29% | 490 | +0.09% | −0.25% | +0.20% | 7 of 25 |
| Divergence, first of the four oscillatorsW13 · Daily | 1,986 | −0.27% | 1,194 | −0.20% | −0.25% | −0.16% | 6 of 25 |
| Divergence, oscillator AW14 · Weekly | 214 | −1.20% | 136 | −0.32% | −1.25% | −0.83% | 8 of 24 |
| Open/close averages, crossover approximationW15 · Daily | 13,511 | −0.07% | 7,958 | −0.16% | −0.11% | −0.20% | 7 of 25 |
| Open/close averages, research implementationW16 · Daily | 9,364 | +0.02% | 5,516 | −0.11% | −0.03% | −0.15% | 12 of 25 |
| Open/close averages, crossover approximationW17 · Weekly | 2,535 | +0.31% | 1,652 | +0.13% | +0.09% | −0.05% | 14 of 25 |
| Open/close averages, research implementationW18 · Weekly | 1,838 | +0.02% | 1,159 | +0.66% | −0.004% | +0.32% | 13 of 25 |
| Fast band swing tradeW19 · Daily | 14,423 | −0.14% | 8,630 | −0.11% | −0.12% | −0.11% | 2 of 25 |
| Fast band swing tradeW20 · Weekly | 2,640 | −0.14% | 1,631 | −0.15% | −0.19% | −0.06% | 10 of 25 |
| Volatility score (our reconstruction, two settings assumed)W21 · Daily | 10,675 | −0.14% | 6,307 | −0.20% | −0.14% | −0.21% | 5 of 25 |
| Reference: 50/200-day average cross, eligibility gatedW22 · Daily | 487 | +5.92% | 305 | +4.63% | +1.87% | +3.47% | 16 of 25 |
“Positive entry-year cohorts” counts entry years whose positions have a positive mean net return. Each position’s complete eventual return is assigned to its entry year, even if it exits in a later year. This is not calendar-year account profit or mark-to-market annual performance.
By market group
Mean net per position within each group. A method that works on futures generally should be positive in most groups, not only in one.
| Configuration | Stock indices | Rates | Metals | Grains | Softs | Energy | Currencies | Bitcoin | Volatility | Groups positive |
|---|---|---|---|---|---|---|---|---|---|---|
| Channel trend, immediate entryW01 · Daily | +0.08% | −0.25% | −0.12% | −0.28% | +0.36% | −0.36% | −0.13% | +1.50% | +1.23% | 4 of 9 |
| Channel trend, pullback entry, every pullbackW02 · Daily | +0.001% | −0.01% | −0.11% | −0.09% | −0.31% | +0.13% | −0.03% | +0.01% | −0.38% | 3 of 9 |
| Channel trend, pullback entry, first pullback onlyW03 · Daily | −0.02% | −0.005% | −0.15% | +0.10% | −0.28% | −0.23% | −0.005% | −1.25% | −0.84% | 1 of 9 |
| Channel trend, immediate entry, alternative confirmationW04 · Daily | −0.14% | −0.04% | −0.01% | −0.21% | +0.12% | −0.42% | −0.04% | +0.79% | −0.20% | 2 of 9 |
| Channel trend, immediate entry, no confirmationW05 · Daily | −0.12% | −0.10% | +0.07% | −0.35% | +0.47% | −0.29% | −0.08% | −0.03% | −0.11% | 2 of 9 |
| Channel counter-move approximationW06 · Daily | +0.02% | −0.01% | −0.07% | −0.06% | −0.17% | −0.05% | −0.02% | +0.20% | −0.06% | 2 of 9 |
| Channel trend, immediate entryW07 · Weekly | +0.64% | −0.21% | −0.55% | −0.75% | +0.59% | −0.71% | −0.24% | +2.29% | −3.00% | 3 of 9 |
| Channel trend, pullback entry, every pullbackW08 · Weekly | +0.39% | −0.21% | +0.55% | +0.18% | −0.24% | −0.18% | −0.04% | +6.08% | +4.47% | 5 of 9 |
| Divergence, oscillator AW09 · Daily | −0.26% | −0.38% | +0.14% | −0.08% | −0.08% | −1.22% | −0.08% | +1.18% | −1.91% | 2 of 9 |
| Divergence, oscillator BW10 · Daily | −0.12% | −0.20% | +0.05% | −0.27% | −0.22% | −0.27% | +0.003% | +1.12% | −1.99% | 3 of 9 |
| Divergence, oscillator CW11 · Daily | −0.27% | −0.12% | −0.01% | +0.39% | −0.46% | −0.50% | −0.01% | −0.96% | −1.05% | 1 of 9 |
| Divergence, oscillator DW12 · Daily | −0.24% | −0.04% | +0.26% | −0.56% | +0.02% | −0.54% | +0.20% | −1.85% | −1.74% | 3 of 9 |
| Divergence, first of the four oscillatorsW13 · Daily | −0.09% | −0.12% | −0.30% | −0.02% | −0.32% | −0.66% | +0.07% | −1.11% | −1.45% | 1 of 9 |
| Divergence, oscillator AW14 · Weekly | −0.65% | +1.27% | −0.46% | −1.18% | −8.89% | −2.75% | −0.23% | +10.34% | −3.14% | 2 of 9 |
| Open/close averages, crossover approximationW15 · Daily | −0.13% | −0.05% | +0.03% | −0.30% | −0.28% | −0.30% | −0.02% | +1.82% | −1.54% | 2 of 9 |
| Open/close averages, research implementationW16 · Daily | +0.04% | −0.07% | +0.10% | −0.23% | −0.18% | −0.23% | −0.02% | +2.14% | −1.36% | 3 of 9 |
| Open/close averages, crossover approximationW17 · Weekly | −0.03% | +0.56% | −0.67% | −0.05% | +0.01% | +0.63% | −0.05% | +13.36% | +0.92% | 5 of 9 |
| Open/close averages, research implementationW18 · Weekly | +0.05% | +0.72% | +0.01% | +0.12% | −0.23% | +0.15% | −0.15% | +10.53% | +3.33% | 7 of 9 |
| Fast band swing tradeW19 · Daily | −0.16% | −0.05% | −0.09% | −0.10% | −0.30% | −0.11% | −0.04% | −0.79% | −0.81% | 0 of 9 |
| Fast band swing tradeW20 · Weekly | −0.08% | −0.08% | −0.49% | −0.43% | +0.01% | −0.27% | +0.08% | −0.22% | +0.18% | 3 of 9 |
| Volatility score (our reconstruction, two settings assumed)W21 · Daily | −0.23% | −0.15% | +0.06% | −0.16% | +0.18% | −0.44% | −0.04% | +0.36% | −1.24% | 3 of 9 |
| Reference: 50/200-day average cross, eligibility gatedW22 · Daily | +4.77% | +0.83% | +3.30% | +1.52% | +0.28% | +5.88% | −0.44% | +166.48% | −4.69% | 7 of 9 |
By market
How many configurations finished positive on each market, and the mean over all their positions there. The denominator counts configurations that opened at least one position; untraded configurations are omitted. Markets with shorter histories have fewer positions and noisier results.
| Market | Group | Configurations positive | Positions | Mean net, all 21 pooled |
|---|---|---|---|---|
| E-mini S&P 500 | Stock indices | 8 of 21 | 6,741 | −0.11% |
| E-mini Nasdaq 100 | Stock indices | 11 of 21 | 6,768 | −0.02% |
| 30-year T-bond | Rates | 6 of 21 | 6,315 | −0.05% |
| 10-year T-note | Rates | 3 of 21 | 6,334 | −0.04% |
| Gold | Metals | 10 of 21 | 5,736 | −0.01% |
| Silver | Metals | 14 of 21 | 5,369 | +0.12% |
| Platinum | Metals | 8 of 21 | 4,508 | −0.10% |
| Palladium | Metals | 8 of 21 | 4,458 | −0.27% |
| Copper | Metals | 13 of 21 | 1,940 | +0.01% |
| Corn | Grains | 5 of 21 | 4,120 | −0.16% |
| Soybeans | Grains | 5 of 21 | 3,443 | −0.17% |
| Wheat | Grains | 6 of 21 | 3,232 | −0.16% |
| Sugar #11 | Softs | 8 of 21 | 2,402 | −0.16% |
| Crude oil | Energy | 6 of 21 | 5,337 | −0.10% |
| RBOB gasoline | Energy | 7 of 21 | 4,969 | −0.17% |
| Natural gas | Energy | 2 of 21 | 5,197 | −0.40% |
| Euro FX | Currencies | 11 of 21 | 2,409 | −0.02% |
| Swiss franc | Currencies | 6 of 21 | 5,755 | −0.05% |
| Japanese yen | Currencies | 5 of 21 | 5,688 | −0.04% |
| British pound | Currencies | 11 of 21 | 5,548 | −0.02% |
| Canadian dollar | Currencies | 8 of 21 | 5,554 | −0.02% |
| Mexican peso | Currencies | 9 of 21 | 4,741 | −0.02% |
| Australian dollar | Currencies | 10 of 20 | 1,294 | −0.10% |
| New Zealand dollar | Currencies | 8 of 21 | 5,623 | −0.04% |
| CME Bitcoin | Bitcoin | 14 of 21 | 2,755 | +1.02% |
| VIX futures | Volatility | 5 of 21 | 3,965 | −0.77% |
| FTSE 100 | Stock indices | 4 of 21 | 6,562 | −0.11% |
| DAX | Stock indices | 13 of 21 | 6,719 | −0.03% |
| Nikkei 225 (CME, USD) | Stock indices | 5 of 21 | 7,007 | −0.16% |
Long and short positions
Long positions in markets that rose over the period, such as the stock indices, gold and bitcoin, are helped by that rise. Short positions in the volatility and natural-gas funds are helped by their steady roll losses, which a futures holder also bears. Neither is evidence of timing skill; the split is shown so readers can see where results come from.
| Configuration | Long positions | Long mean net | Short positions | Short mean net |
|---|---|---|---|---|
| Channel trend, immediate entryW01 · Daily | 1,935 | +0.06% | 1,943 | −0.17% |
| Channel trend, pullback entry, every pullbackW02 · Daily | 8,002 | +0.02% | 5,571 | −0.11% |
| Channel trend, pullback entry, first pullback onlyW03 · Daily | 1,951 | −0.05% | 1,946 | −0.15% |
| Channel trend, immediate entry, alternative confirmationW04 · Daily | 2,296 | −0.07% | 2,302 | −0.13% |
| Channel trend, immediate entry, no confirmationW05 · Daily | 2,806 | −0.02% | 2,813 | −0.19% |
| Channel counter-move approximationW06 · Daily | 4,046 | −0.04% | 3,690 | −0.01% |
| Channel trend, immediate entryW07 · Weekly | 317 | +0.27% | 317 | −0.62% |
| Channel trend, pullback entry, every pullbackW08 · Weekly | 1,450 | +0.53% | 1,017 | +0.16% |
| Divergence, oscillator AW09 · Daily | 691 | −0.09% | 940 | −0.49% |
| Divergence, oscillator BW10 · Daily | 767 | −0.10% | 985 | −0.23% |
| Divergence, oscillator CW11 · Daily | 862 | +0.01% | 1,210 | −0.34% |
| Divergence, oscillator DW12 · Daily | 581 | +0.20% | 723 | −0.48% |
| Divergence, first of the four oscillatorsW13 · Daily | 1,367 | −0.08% | 1,780 | −0.38% |
| Divergence, oscillator AW14 · Weekly | 154 | −0.90% | 195 | −0.95% |
| Open/close averages, crossover approximationW15 · Daily | 10,732 | −0.01% | 10,737 | −0.20% |
| Open/close averages, research implementationW16 · Daily | 7,565 | +0.01% | 7,315 | −0.08% |
| Open/close averages, crossover approximationW17 · Weekly | 2,094 | +0.76% | 2,093 | −0.34% |
| Open/close averages, research implementationW18 · Weekly | 1,540 | +0.75% | 1,457 | −0.24% |
| Fast band swing tradeW19 · Daily | 12,023 | −0.09% | 11,023 | −0.18% |
| Fast band swing tradeW20 · Weekly | 2,325 | −0.01% | 1,946 | −0.29% |
| Volatility score (our reconstruction, two settings assumed)W21 · Daily | 8,490 | −0.04% | 8,492 | −0.27% |
| Reference: 50/200-day average cross, eligibility gatedW22 · Daily | 397 | +10.34% | 395 | −0.46% |
How much the costs matter
Across all positions the median illustrative round-trip charge is 3.0 bp of initial notional, against the 10 bp we charged stock positions. The cost model is a simplification: it ignores exchange and clearing fee differences between contracts, wider spreads in thin night sessions, and margin interest. The double-cost column in the main table shows how sensitive each result is; 3 of 21 stay positive there.
Order timing
Indicators use completed bars. Orders triggered by a completed bar execute at the next open; resting orders already marketable at the open fill there, and gap stops fill at the worse opening price. When a stop and a target fall inside the same bar we assume the stop came first, and a target on the bar a position was entered intrabar is not credited. One position per market and configuration can be open at a time; different configurations and markets can overlap. There is no shared capital budget, and open positions are closed at the end of each window.
Research implementations and sources
The configurations are the same neutral-labelled research implementations used for our swing study on US stocks, built from Bernstein’s 2017 timing-trigger webinar and the course recordings cited below. The stock screens of that study (minimum volume and price) are switched off; the price inputs, reference-contract tick units and history cutoffs are described above. Entry and management rules are otherwise unchanged. Settings and order rules stay private, so readers can inspect the method and the results but cannot rebuild the strategies from this page. Several configurations involve research choices or approximations, and none is a certified reproduction of the author’s complete method. This study is independent and not affiliated with or endorsed by Bernstein. His intraday methods are tested in our NQ study.
| Method | Source location | Scope / research choices |
|---|---|---|
| Moving Average Channel | 2017 webinar 00:15:00–00:32:10; course S3 00:35:52–00:40:15, 00:44:32–00:58:50 | Tested: immediate and pullback entries, three confirmation variants, daily and weekly. Position split and tie-breaks are our choices. |
| Channel counter-move trade | 2017 webinar 00:24:40–00:29:30; course S3 01:03:41–01:04:12 | Single-bar approximation with research choices for exits. The multi-bar form is not tested. |
| Momentum divergence | 2017 webinar 00:32:14–00:42:40; course S3 01:11:56–01:13:30 | Daily tests cover four oscillators separately and combined. Only oscillator A receives a weekly counterpart. The reviewed material states no initial stop; ours is a research choice. |
| 8 Open / Close | 2017 webinar 00:42:40–00:53:30; course S3 01:15:20–01:19:30 | Tested twice: the bare cross used in our first article, and a research implementation using the 2017 session. Management after the decision bar is our choice; this is not a certified complete reproduction. |
| “888” | 2017 webinar 00:53:30–00:55:50 | Not tested. The trigger and target arithmetic are not recoverable from the recording. |
| 3 × 3 channel | 2017 webinar 01:08:45–01:10:40 | Tested daily and weekly. Re-entry handling is our choice. |
| Trailing rule after a large favourable move | 2017 webinar 00:10:47–00:14:30 | Applied inside the configurations where the material applies it. |
| Volatility Trigger | 2017 webinar 01:16:45–01:18:30 | Reconstruction only. Two settings are not legible in the recording and were assumed, so this is not the author’s indicator. |
| Seasonal date trades | 2017 webinar 00:55:50–01:01:10; course S4 00:34:13 | Not tested. The method depends on the author’s proprietary date lists. |
| Commitments of Traders trigger | 2017 webinar 01:10:42–01:16:45 | Not tested. Long-term positioning, formula not disclosed. |
| Opening gap trades | 2017 webinar 01:04:20–01:08:40 | Outside this study; intraday adaptations appear in our first article. |
| Expansion / Contraction | Course S1 00:47:54–00:56:40; S4 00:41:53–00:48:35 | Not tested. No formula is given. |
What this study cannot conclude
- Fund, cash-index and spot prices stand in for futures. Session hours, opening prices and the daily range differ from the contracts, and that changes where stops and entries fill.
- 10 of the 39 report markets are missing, including livestock, most softs and heating oil. The markets tested are the ones with clean free data, not a random sample.
- Positions overlap in time and across related markets, so the position count is not a count of independent observations. No confidence interval or significance test is given.
- Twenty-one variants, two timeframes, nine groups and two windows create many chances for a good-looking cell. The tables are not corrected for multiple testing.
- There is no portfolio model, margin or capital budget, and no comparison with random entries. Results do not show that a trading account would have been profitable, and they do not verify the author’s own performance figures.
How the results were verified
The engine, its regression tests and the independent verifier are unchanged from the stock study. The verifier reconstructed all 282,657 positions across the full and separate windows from their exit records, recomputed 703 aggregate rows, and reproduced 1,584 reference positions with a separate implementation. The futures-cost tables are recomputed from the verified trade records and checked to add up to each configuration’s total. Code, data and results are kept privately for audit, with hashes recorded for every input.
Related: 54 NQ backtests inspired by Jake Bernstein and the same configurations on gold.
From the team behind this backtest
Get seasonal patterns that have worked in the past
Testing popular trading ideas against decades of data is what we do every day. Does It Repeat applies it to timing: which weeks of the year a market has historically risen or fallen, how consistently, and whether that pattern still holds up.
Seasonality screener
FreeThe next yearly windows with a perfect record
- ICG.LICG PLCLongOct 21 → Nov 25 · won 10 of 10 years · +13.3% avg
- PHParker HannifinLongOct 21 → Nov 22 · won 10 of 10 years · +11.4% avg
- ODFLOld Dominion Freight LineLongOct 22 → Dec 2 · won 10 of 10 years · +9.0% avg
Price cycle screener
FreeCycle models with an entry in the next two weeks
- LITELumentum Holdings Inc.Shortentry Oct 29 · +302.9% net · 100% won
- XMR-USDMoneroLongentry Oct 27 · +278.2% net · 80% won
- AMDAdvanced Micro Devices Inc.Shortentry Oct 27 · +217.1% net · 80% won
Free account includes a screener preview, no credit card. Full access $20/mo at early-adopter pricing, 14-day money-back guarantee, cancel anytime. All statistics are historical; past performance does not guarantee future results.