ICT Silver Bullet (10:00-11:00 New York)
A fair-value gap traded towards the nearest liquidity pool. A simple backtest shows a profit; realistic fills and costs turn it into a loss.
Why it failed: No edge: t −0.83 after realistic costs and t 0.86 even at the lab's cheapest cost model, against a bar of 3.43. A simple mid-price backtest of the same rule shows +0.164R (t 2.74). See the scorecard
Cumulative result
R per trade (bid/ask fills, spread and slippage). At most one trade a day: the first fair-value gap between 10:00 and 11:00 New York in the direction of the nearest untaken liquidity pool. The data file shows no spread before 2012, so the early years carry only the slippage; the turn in 2012 is partly that.
Show the data as a table
| Year | Trades | Sum R | Mean R |
|---|---|---|---|
| 2005 | 49 | −0.1 | −0.003 |
| 2006 | 58 | +25.2 | +0.435 |
| 2007 | 59 | −1.8 | −0.031 |
| 2008 | 52 | +13.4 | +0.257 |
| 2009 | 51 | −3.3 | −0.064 |
| 2010 | 62 | +3.6 | +0.058 |
| 2011 | 53 | −8.2 | −0.155 |
| 2012 | 42 | −27.8 | −0.661 |
| 2013 | 56 | −25.5 | −0.455 |
| 2014 | 52 | −11.5 | −0.221 |
| 2015 | 52 | −7.7 | −0.149 |
| 2016 | 40 | −1.0 | −0.025 |
| 2017 | 52 | −12.3 | −0.237 |
| 2018 | 67 | −2.5 | −0.038 |
| 2019 | 57 | +7.0 | +0.123 |
| 2020 | 60 | +9.6 | +0.159 |
The claim
In the hour from 10:00 to 11:00 New York, find the liquidity the market is drawn to (an untaken high or low above or below price). When a fair-value gap forms in that direction, enter on the retrace into the gap, put the stop beyond the gap's first candle, and target the liquidity.
Source: The Silver Bullet setup taught by ICT (Inner Circle Trader) and repeated widely on YouTube and social media. This is our mechanical reading of the public rules, fixed before the run; it does not test any one trader's discretionary judgement.
What we tested
- Liquidity pools known at 10:00: yesterday's high and low (sessions run 18:00 to 17:00 New York) and the overnight high and low (18:00 to 09:30). A pool is taken once price has traded beyond it.
- Draw on liquidity: the untaken pool nearest to the price at 10:00. Trade only in its direction; the pool is the target.
- Fair-value gap on 5-minute bars, all three candles inside 10:00-11:00: for a long, the third candle's low is above the first candle's high by at least 0.10 x the 14-bar average true range (mirrored for shorts). The first such gap in the direction of the draw is the day's only setup.
- Entry: a limit order at the near edge of the gap, live until 11:00. Stop beyond the gap's first candle; 1R is the distance from the limit to the stop.
- The setup needs at least 1R of room to the target. It is cancelled if price reaches the target before the order fills, or if the target was reached before the gap formed.
- Exit at the target, at the stop, or at 16:00.
Costs and fills
- Bid/ask from the minute file. A limit order fills only when price trades 0.25 points through it, at the limit price, never better. A stop touched in the minute of the fill counts. Stops and the 16:00 exit pay 0.5 points of slippage, and a stop that price gaps through fills at the bar open. The median stop is 5.7 points, so the spread and slippage come to a median of up to 0.13R a trade.
- The file shows no spread before 2012, so in 2005-2011 only the slippage is charged. As a check, the lab's cheapest cost model (1.70 points per round trip at a recent index level, scaled down with the index) leaves +0.051R a trade, t 0.86.
Data
- US100 CFD minute bid/ask, true clock, aggregated to 5-minute bars
Why we re-ran it
The Silver Bullet is one of the most-asked-about setups, and a first run by one of our agents had already found nothing (t −0.17). We did not publish that run: it used fixed point sizes (a 3-point minimum gap) on an index whose price has risen many times over, took the first gap in either direction with no draw on liquidity, and filled the limit order at the gap on any touch. So we wrote the rules down again, sized everything in average true range, pre-registered them, and ran them once on the 2005-2020 Discovery years.
Making the draw on liquidity mechanical
The draw is the part traders describe with judgement, so it has to be pinned down before a computer can test it. We used the most literal version: the nearest untaken pool among yesterday's high and low and the overnight high and low, fixed at 10:00. Over 4,136 trading days that gave 1,500 orders and 862 filled trades. Most targets were the overnight high or low.
Where a simple backtest goes wrong
Run the same rules the way most backtests are written, on mid prices, filling the limit order whenever price touches it and with no costs, and the result is +0.164R a trade with t 2.74 on 938 trades. That looks like an edge.
Fill details remove about half of it. A limit order at the edge of a gap that price only touches is often not filled in a real market; a backtest that fills it anyway keeps every trade where price turned exactly at the level. And when the order fills inside a minute, nobody knows whether the target was hit before or after the fill, so it cannot be credited. With those rules, stops that gap filled at the open, and still no costs, the result falls to +0.085R a trade, t 1.43.
A small stop makes costs large
The gap's first candle is close to the entry, so the stop is small: a median 5.7 points, from 3.0 points in 2005 to 31.2 points in 2020. A spread and half a point of slippage are then a large share of the risk: up to 0.13R a trade at the median, still up to 0.034R in 2020. After costs the result is −0.050R a trade (t −0.83); charging one more spread plus a point per trade gives t −5.08.
Part of the curve's turn in 2012 is the data, not the market. The minute file shows no spread before 2012 and then 1.00 point against a median stop of 4.3 to 4.5 points: in 2012-2013 the spread alone averaged 0.239R a trade, and the loss of those two years is −53.2R after costs against −27.4R before them. Before costs the rule made +0.17R a trade in 2005-2011 (t 1.83) and +0.02R in 2012-2020 (t 0.23), so the early profit is not significant either.
On 1-minute bars, which many traders use for this setup, the stop is even smaller: the median cost is up to 0.28R and the result is −0.444R a trade (t −10.38).
What else we checked
Five variants were declared before the run and all lose: no draw filter (−0.124R, t −2.73), a draw set by which side was swept before 10:00 (t −1.42), 1-minute gaps (t −10.38), a fixed 2R target (t −1.03) and an entry at the gap's midpoint (t −1.74).
Picking the side of each trade by coin flip instead of by the draw, with the same engine, did as well or better in 15% of 200 runs. Shifting the clock by 1 to 3 minutes either way leaves the result negative at every shift (t −1.31 to −0.31), so the result is not a clock artefact.
What this does and does not say
It does not test the other Silver Bullet hours (03:00-04:00 and 14:00-15:00), other ways of reading the draw, or a trader who skips days that look wrong. It does say that a faithful mechanical version of the 10:00 setup on the Nasdaq-100 has no edge after realistic fills, and that the profit a simple backtest shows comes from how it fills limit orders.
The 12-gate scorecard
1 passed · 5 failed · 6 not run or not reached. A gate is "not reached" when the strategy had already failed a veto: there is nothing left for it to test.
Is the backtest real?
Absolute veto. These gates look for bugs and physical limits, not for statistical evidence, so one failure ends the test.
True clock from the lab's loader. Pools, the draw and the gaps use only minutes already closed. With the clock shifted −3 to +3 minutes the result is negative at every shift (t −1.31 to −0.31).
Limit fills need a 0.25-point trade-through at the limit price, a stop touched in the fill minute counts, gaps through the stop fill at the open, file bid/ask: −0.050R a trade against the +0.05R floor. At the lab's cheapest cost model it is +0.051R, right at the floor, so this gate alone does not decide the verdict; G1 does.
Is the edge more than luck?
G12, one pre-registered holdout, is the only statistical veto. G1 to G5 and the regime test G6 are always reported; G6 vetoes only a regime that is significantly negative. A strategy with no edge after costs never reaches G12, because there is nothing to confirm.
t −0.83 against a bar of 3.43 for one pre-registered rule.
Choosing the side by coin flip (200 runs, same engine) did as well or better in 15% of runs; the pre-registered bar for a real draw-on-liquidity effect was under 1%.
All five pre-declared variants lose too: no draw filter, a sweep-based draw, 1-minute gaps (t −10.38), a fixed 2R target, entry at the gap's midpoint.
Spread and slippage up to 0.13R a trade at the median (median stop 5.7 points); t −5.08 with one more spread plus a point per trade. Before costs +0.085R, t 1.43.
No regime below t −2 (2008 +0.257R, 2011 −0.155R, 2015-16 −0.095R, 2020 +0.159R a trade), but only 5 of 16 years are positive and both halves are negative. 2012-2013 lost 53.2R after costs and 27.4R before them: about half of that fall is the spread that first appears in the data file in 2012.
Validation and holdout years (2021 onwards) were not opened.
Can it survive a prop-firm account?
Absolute veto, for strategies meant for funded accounts. The account rules are simulated event by event, not at the end of the day.
Limit entries need a fill model
A backtest that fills a limit order whenever price touches it keeps the trades that bounce off the level and never misses one. Require price to trade through the level, and do not credit a target in the same minute as the fill. Here the fill rules alone halved the result before any cost was charged, and the costs of a small stop did the rest.
Receipts
Every number on this page comes from one of these files: the test script, its saved output, the trade list and, where the test was pre-registered, the registration and its hash lock. Download them and check our work. Numbers that also appear in the chart are recomputed from the trade list when this page is built, and the build fails if they disagree.
| File | Kind | Size | Status | sha256 |
|---|---|---|---|---|
| ICTSB01_PREREG.md prereg/ICTSB01_PREREG.md | Pre-registration | 9 KB | Complete | 5a45a7eefa4d |
| _ictsb01_silver_bullet_20261020.py experiments/_ictsb01_silver_bullet_20261020.py | Script | 29 KB | Complete | 27fc3a7b078e |
| _ictsb01_precheck_20261020.out experiments/_ictsb01_precheck_20261020.out | Saved output | 5 KB | Complete | 6486533cd843 |
| _ictsb01_run_20261020.out experiments/_ictsb01_run_20261020.out | Saved output | 6 KB | Complete | 1e02fe7b2dcc |
| _ictsb01_cost_periods_20261020.py experiments/_ictsb01_cost_periods_20261020.py | Script | 4 KB | Complete | 8d091f4669a6 |
| _ictsb01_cost_periods_20261020.out experiments/_ictsb01_cost_periods_20261020.out | Saved output | 2 KB | Complete | bdebf4c147d8 |
| ICTSB01_PREREG.lock prereg/ICTSB01_PREREG.lock | Hash lock | 313 B | Complete | a80d2edbaf67 |
| _ictsb01_trades_20261020.csv experiments/_ictsb01_trades_20261020.csv | Trade list | 132 KB | Prices removed (data licence) | aff8d31057a0 |
| hdam_sim.py hdam/hdam_sim.py | Lab module | 13 KB | Complete | b080665fccf1 |
| ledger.py prop_gpu_miner/ledger.py | Lab module | 3 KB | Complete | 89de43aeeb06 |
Price data is not included: the vendors' licences do not allow it, so the scripts run only with your own copy of the data, and the trade lists show dates, direction, R and costs, not prices. Lines that refer to the lab's private live strategy are replaced by a marker; the receipts page explains the rules and lists the sha256 of every original file.
Related tests
Opening Volatility Stretch on DAX, Bund and Nasdaq
The DAX and Bund results came from a frozen pre-open quote. Nasdaq is positive but unproven.
Momentum pullback to the 9 and 21 EMA
Buy the strongest stocks when they dip to a moving average and turn up. Negative at both fill bounds over 16 years.