Tested by BacktestingMax
ICT Power of 3 (AMD) backtest on NQ, ES and gold futures
Does the ICT Power of 3 (AMD) strategy work on NQ and ES futures?
No, not reliably. We ran 10 backtests from 2020 to 2025, after trading costs: 5 futures markets, each on 5-minute and 15-minute charts. With our standard rules, 4 of the 10 made money, and only 2 made money in both 2020–2023 and 2024–2025. Power of 3, also called AMD, is a day-trading idea from ICT (The Inner Circle Trader, a trading teacher). In the Asian session, price moves sideways (accumulation). Then, usually in the London session, it moves fast past the midnight open, the price at 00:00 New York time (manipulation). ICT teaches that this move is a trap, and that New York then moves price the other way (distribution). Our standard rules buy when price is below the midnight open and a candle closes above a recent swing high (a small peak). They sell in the opposite case. MNQ, the micro (small) NQ contract, made +11.2% of the account on the 5-minute chart and lost 19.1% on the 15-minute chart. MES, the micro ES contract, made +22.0% on the 15-minute chart and lost 57.5% on the 5-minute chart. And the London move was not usually a trap. On the days our rules bought, the price at 16:00 was above the midnight open on 44.5% of them, compared with 52.6% of all trading days.
10 backtests 2020–2025 Trading costs included Tested 26 October 2026
Where it worked 10 backtests- Made money
- 4 of 10 tests, with the standard rules
- Made money in both periods
- 2 2020–2023 and again 2024–2025
- Best backtest
- +46% YM (Dow futures), 15-minute chart: account growth 2020–2025
- Take-profit at the previous day's high or low
- 1 tests made money in both periods, compared with 2 with the standard rules
Made money in both periods
- MNQ (Micro Nasdaq 100), 5-minute
- YM (Dow futures), 15-minute
The results
Results on every market
Each box shows one backtest of the Power of 3 (AMD) with the standard rules, from 2020 to 2025, after trading costs: the % result, and a small chart of the account balance. The solid line is the account balance and the dashed line is the starting balance. Green results made money; red results lost money. Under each result: whether it made money in both 2020–2023 and 2024–2025, or passed all four of our checks (see "How a test passes" further down).
| Market | 5-minute | 15-minute |
|---|---|---|
| MNQ (Micro Nasdaq 100) | +11% Made money in both periods | −19% Lost money |
| MES (Micro S&P 500) | −58% Lost money | +22% Made money overall, lost in one period |
| MGC (Micro Gold) | −76% Lost money | −70% Lost money |
| YM (Dow futures) | −35% Lost money | +46% Made money in both periods |
| RTY (Russell 2000 futures) | −77% Lost money | +19% Made money overall, lost in one period |
All the numbers, test by test
| Market | Chart | Trades | Win rate | Profit factor | Result | Max drawdown | 2020–2023 | 2024–2025 | Monte Carlo drawdown | Trading costs |
|---|---|---|---|---|---|---|---|---|---|---|
| MNQ (Micro Nasdaq 100) | 5-minute | 1,492 | 37.2% | 1.01 | +11.2% | −44.2% | +5.4% | +5.5% | −55.8% | $36,101 |
| MNQ (Micro Nasdaq 100) | 15-minute | 1,458 | 37.1% | 0.97 | −19.1% | −41.2% | −0.4% | −18.8% | −58.0% | $17,559 |
| MES (Micro S&P 500) | 5-minute | 1,492 | 37.1% | 0.92 | −57.5% | −75.0% | −56.6% | −2.3% | −73.7% | $55,720 |
| MES (Micro S&P 500) | 15-minute | 1,469 | 39.9% | 1.02 | +22.0% | −53.6% | −18.6% | +50.0% | −51.7% | $49,433 |
| MGC (Micro Gold) | 5-minute | 1,478 | 34.7% | 0.87 | −75.8% | −77.7% | −59.5% | −40.3% | −82.7% | $33,937 |
| MGC (Micro Gold) | 15-minute | 1,425 | 36.3% | 0.87 | −70.2% | −75.0% | −62.6% | −20.2% | −77.7% | $21,246 |
| YM (Dow futures) | 5-minute | 1,373 | 36.1% | 0.94 | −35.4% | −50.1% | −36.4% | +1.5% | −60.5% | $28,958 |
| YM (Dow futures) | 15-minute | 1,235 | 39.3% | 1.07 | +45.6% | −27.2% | +1.2% | +43.9% | −39.5% | $22,285 |
| RTY (Russell 2000 futures) | 5-minute | 1,204 | 32.6% | 0.81 | −77.2% | −79.8% | −67.1% | −30.6% | −81.4% | $22,505 |
| RTY (Russell 2000 futures) | 15-minute | 1,285 | 38.4% | 1.03 | +18.6% | −24.7% | −1.0% | +19.8% | −44.6% | $23,485 |
Profit factor is the money won divided by the money lost. Above 1 means the test made money. Max drawdown is the biggest fall from the highest balance. 2020–2023 and 2024–2025 show the result in each period on its own. Monte Carlo drawdown: we shuffled the trades into a random order 1,000 times; in 95% of those runs, the worst drawdown was this number or less. Result is the change in the account, with the risk of each trade set to 1% of the account at that time.
The account balance
The best test and the middle test
What we found
What the 10 backtests show
With the standard rules, 4 of the 10 tests made money from 2020 to 2025, after trading costs. Three were on the 15-minute chart: YM (+45.6%), MES (+22.0%) and RTY (+18.6%). The fourth was MNQ on the 5-minute chart (+11.2%). The profit factor (the money won divided by the money lost) was between 0.81 and 1.07, so even the best test won only $1.07 for every $1 it lost. Only 2 tests made money in both 2020–2023 and 2024–2025: MNQ on the 5-minute chart (+5.4% and +5.5%) and YM on the 15-minute chart (+1.2% and +43.9%). Most of YM's gain came from one year: in 2025 alone, the account grew 37.3%. Gold (MGC) lost 75.8% on the 5-minute chart and 70.2% on the 15-minute chart, and it lost money even before trading costs. On MES's 5-minute chart, the trades made $26,948 before costs but paid $55,720 in costs. A typical MES trade needed 14 micro contracts, and every contract pays the spread and a commission.
The setup was not rare. Depending on the test, our rules found a setup on 96.7% to 99.9% of the 1,496 trading days. On the 5-minute charts, half of the trades opened by 02:40 New York time, 40 minutes after ICT's London window starts. On the 15-minute charts, half opened by 04:15 or 04:30, depending on the market. One of the changes we tried only trades after price has gone past the Asian range, the highest and lowest price from 20:00 to 00:00. Even then, there was a setup on 89.8% to 99.4% of the days. So with these rules, a Power of 3 setup is not a rare event: it comes on almost every trading day.
After a buy setup, the Power of 3 expects two things. The lowest price since 00:00 should stay the low of the day, and New York should carry price back above the midnight open. In our test, neither happened most of the time. In 82.0% of the 6,573 buy trades, price went below that low again before 16:00, whether or not the trade was still open. In 84.9% of the 7,338 sell trades, price went above the highest price since 00:00 again. After a buy setup, the price at 16:00 was above the midnight open on 44.5% of the days. Over all trading days, it was above the open 52.6% of the time. After a sell setup, it finished below the open on 39.4% of the days, compared with 47.2% of all days. This was true on all 5 markets (see the table below). So in our test, a move past the midnight open was more often the start of the day's real move than a trap.
Waiting for New York, and only taking setups from 08:30 to 11:00, helped most on MNQ's 15-minute chart. There, MNQ made +35.6% from 2020 to 2025, compared with a loss of 19.1% with the standard rules. Its max drawdown (the biggest drop of the account from its highest balance) was 18.1%, compared with 41.2%. On YM's 15-minute chart, waiting made +19.3%, less than the +45.6% with the standard rules, but the max drawdown fell from 27.2% to 19.9%. With waiting, MNQ and YM both made money on the 15-minute chart in 2020–2023 and again in 2024–2025. With setups after 08:30, the low (or high) since 00:00 was broken less often. On the 15-minute charts, it was still not broken at 16:00 in 45.2% of the trades, compared with 21.5% with the standard rules. But waiting for New York lost money on MES, gold and RTY on both charts, and MES's 15-minute chart went from +22.0% to −18.7% (see the table below). The stop-loss was also further away, so YM and RTY skipped more days. On the 15-minute chart, YM traded on only 490 days and RTY on 293 days.
The Power of 3 idea, checked
On all 5 markets, price finished on the trade's side of the midnight open less often than on an average day
Each row adds up the trades with our standard rules on the 5-minute and 15-minute charts, from 2020 to 2025, so one day can count twice. After a buy setup, the Power of 3 expects price to stay above its low since 00:00, and after a sell setup, below its high since 00:00. It also expects the day to finish on the trade's side of the midnight open, the price at 00:00 New York time. That means above it after a buy, and below it after a sell. We measure the end of the day at 16:00 New York time, when the stock market closes. 'All days' is every trading day in the test, with or without a setup.
| Market | Trades | Low (buys) or high (sells) since 00:00 still not broken at 16:00 | Buys: price at 16:00 above the midnight open | All days: above the midnight open | Sells: price at 16:00 below the midnight open | All days: below the midnight open |
|---|---|---|---|---|---|---|
| MNQ | 2,950 | 15.2% | 46.9% | 54.5% | 38.3% | 45.3% |
| MES | 2,961 | 17.0% | 45.9% | 53.7% | 38.3% | 45.7% |
| MGC (gold) | 2,903 | 21.6% | 39.7% | 51.7% | 37.1% | 48.1% |
| YM | 2,608 | 14.7% | 45.3% | 52.1% | 41.3% | 47.9% |
| RTY | 2,489 | 13.1% | 44.8% | 50.9% | 42.9% | 48.9% |
On the 5-minute charts, the low (or high) since 00:00 was still not broken at 16:00 in 11.5% of the trades, and on the 15-minute charts in 21.5%. On a few days, the price at 16:00 was exactly at the midnight open. So on some markets, the two 'All days' columns add up to a little less than 100%.
London or New York
Waiting for New York lowered the max drawdown in 9 of 10 tests, but gave a better result in only 5
Each row is one market and chart, tested both ways, from 2020 to 2025, after trading costs, on an account that started at $50,000. 'Standard rules' takes setups from 02:00 to 11:00 New York time, and 'Wait for New York' only from 08:30 to 11:00. The result is the change in the account, with the number of trades in brackets. The max drawdown is the biggest drop of the account from its highest balance.
| Market | Chart | Standard rules | Wait for New York | Max drawdown: standard rules | Max drawdown: wait for New York |
|---|---|---|---|---|---|
| MNQ | 5-minute | +11.2% (1,492) | +6.7% (1,459) | 44.2% | 33.2% |
| MNQ | 15-minute | −19.1% (1,458) | +35.6% (906) | 41.2% | 18.1% |
| MES | 5-minute | −57.5% (1,492) | −26.4% (1,440) | 75.0% | 47.9% |
| MES | 15-minute | +22.0% (1,469) | −18.7% (943) | 53.6% | 44.6% |
| MGC (gold) | 5-minute | −75.8% (1,478) | −45.8% (1,448) | 77.7% | 47.6% |
| MGC (gold) | 15-minute | −70.2% (1,425) | −21.8% (840) | 75.0% | 28.8% |
| YM | 5-minute | −35.4% (1,373) | −39.7% (747) | 50.1% | 45.2% |
| YM | 15-minute | +45.6% (1,235) | +19.3% (490) | 27.2% | 19.9% |
| RTY | 5-minute | −77.2% (1,204) | −38.2% (850) | 79.8% | 42.1% |
| RTY | 15-minute | +18.6% (1,285) | −24.1% (293) | 24.7% | 31.9% |
Waiting for New York gave fewer trades for two reasons. On many days, no structure shift from 08:30 to 11:00 closed below the midnight open (for a buy) or above it (for a sell). And by 08:30, the stop-loss was further away: on MNQ's 15-minute chart, a median of 62 points, compared with 31.5 with the standard rules. So on YM and RTY, one contract often risked more than 1%, and the day was skipped: 414 days on YM and 580 days on RTY on the 15-minute chart.
The strategy
What the Power of 3 (AMD) is
Power of 3 is a day-trading idea from ICT (The Inner Circle Trader, the online name of the trading teacher Michael Huddleston). Traders also call it AMD, after its three steps: accumulation, manipulation and distribution. ICT starts the trading day at midnight New York time, and he calls the price at 00:00 the midnight open. In accumulation, price moves sideways in a narrow range during the Asian session, before midnight. In manipulation, usually in the London session, price moves fast against the day's real direction, past the midnight open. ICT teaches that this move is a trap: it triggers other traders' stop-loss orders and gets traders to trade in the wrong direction. In distribution, the New York session moves price the other way, in the day's real direction. So on a day traders expect to go up, they buy below the midnight open after London has pushed price down, and they expect New York to carry it higher. Many traders wait for a sign that the move down is over, often a structure shift: a candle closes above a recent swing high. Traders use the Power of 3 on index futures such as NQ (Nasdaq 100 futures) and ES (S&P 500 futures), on gold and on forex. ICT traders describe the three steps in different ways. Our standard rules are a simple version. They do not decide the day's direction in advance. They take the first structure shift that closes below the midnight open (for a buy) or above it (for a sell). 'The rules we tested' lists them exactly. One of the changes we tried adds a simple daily direction.
- Midnight open
- The opening price of the 00:00 New York candle
- Setup window
- 02:00 to 11:00 New York time. The structure-shift candle must close by 11:00
- Structure shift
- The first candle that closes above the most recent swing high (buy) or below the most recent swing low (sell). Swings are 3-candle swings on the chart's own candles
- Entry
- At the next candle's open, only if the structure shift closed below the midnight open (buy) or above it (sell)
- Stop-loss
- 1 tick beyond the lowest price (buy) or the highest price (sell) since 00:00
- Take-profit
- The previous day's high or low, or 2R, whichever is closer. A trade still open at 16:00 New York time closes then
- Previous day
- The previous futures trading day, from 18:00 New York time. In our data, it ends at 16:15 for the index futures and at 17:00 for gold
- Asian range
- The highest and the lowest price from 20:00 to 00:00 New York time. Only one of the changes we tried uses it
- Trades per day
- 1 at most: the first setup
- Account and risk
- $50,000 at the start, a common size for a prop firm evaluation (the trading test a firm sets before it lets you trade its money). Each trade risks 1% of the account balance at that time, rounded down to whole contracts. On 100 out of 13,911 trades, the stop-loss was very close to the entry. A 1% risk then needed more contracts than our margin limit allows, so the trade used fewer contracts. Margin is the money a broker holds for each open contract
- Days skipped
- The backtest skipped a day when even 1 contract would risk more than 1% of the account. Out of 1,496 trading days, this happened on 122 days (5-minute chart) and 223 days (15-minute chart) on YM. It happened on 291 and 162 days on RTY, 17 and 33 days on gold, and 4 or fewer days on MNQ and MES
- Contracts
- MNQ, MES and MGC are the micro contracts of NQ, ES and gold futures. They are one tenth of the size, so a trade can risk close to 1% of the account in whole contracts. YM and RTY are the E-mini Dow and E-mini Russell 2000 contracts, because our data has no micro contracts for those two markets
- Fills
- The stop-loss fills at its price, or at a candle's open if price opens past it. The take-profit fills at its exact price. When price reaches both in the same candle, the backtest looks at the 1-minute candles inside it to see which came first. If both are in the same 1-minute candle, it assumes the stop-loss came first
- Price data
- BacktestingMax's futures data. It is built from CFD prices (a broker's price that follows the same market). It is adjusted to match the real contracts: their price, trading hours, tick (the smallest price step) and roll (the switch from one contract month to the next). It is not exchange data
- Trading costs
- The spread is the gap between the buy and the sell price. We used 1 tick: $0.50 per contract on MNQ, $1.25 on MES, $1 on MGC, $5 on YM and $5 on RTY. Half is paid when a trade opens, and half when it closes. A take-profit pays no spread when it closes, because it fills at its exact price. There is also a commission (the broker's fee) when a trade opens and again when it closes. It is $0.62 per MNQ, MES or MGC contract, and $2.50 per YM or RTY contract
The rules we tested
- All times are New York time. The day starts at 00:00, and the midnight open is the opening price of the 00:00 candle.
- Look for a setup from 02:00, when ICT's London window starts, until 11:00, the end of the New York morning. Trade Monday to Friday, but not on days the New York Stock Exchange is closed or closes early.
- A swing high is a candle whose high is at least as high as the highs of the candle just before it and the candle just after it. A swing low is a candle whose low is at least as low as the lows of the candles on both sides. A swing counts once the candle after it has closed. On the 5-minute chart these are 5-minute candles, and on the 15-minute chart, 15-minute candles.
- A structure shift up is the first candle that closes above the most recent swing high. A structure shift down is the first candle that closes below the most recent swing low.
- Buy when a structure shift up closes below the midnight open: price has gone below the open (the manipulation) and turns up while it is still below it. Sell (go short) when a structure shift down closes above the midnight open. This is the setup.
- The trade opens at the next candle's open. For a buy, the stop-loss goes 1 tick below the lowest price since 00:00. For a sell, it goes 1 tick above the highest price since 00:00. A tick is the smallest price step: 0.25 points on MNQ and MES, 1 point on YM, 0.1 points on RTY and $0.10 on gold.
- R is the risk of one trade: the distance from the close of the structure-shift candle to the stop-loss, which is about 1% of the account in money. The take-profit is the previous day's high (for a buy) or low (for a sell), or 2R from that close, whichever is closer. If the previous day's high is not above that close (for a sell, its low not below it), the take-profit is 2R.
- The previous day is the previous futures trading day. It starts at 18:00 New York time, and in our data it ends at 16:15 for the index futures and at 17:00 for gold.
- A trade still open at 16:00 closes then. Take one trade a day at most: the first setup, win or lose.
- Size every trade so that, if the stop-loss is hit, the trade loses about 1% of the account balance at that time. Round down to whole contracts. If even 1 contract would risk more than 1%, skip the day.
The method
How we tested it
The test
- Markets
- MNQ (Micro Nasdaq 100), MES (Micro S&P 500), MGC (Micro Gold), YM (Dow futures) and RTY (Russell 2000 futures)
- Charts
- 5-minute and 15-minute candles
- Dates
- January 2020 to December 2025
- Account
- $50,000, risking 1% of the account on each trade
- Trading costs
- Included. Every trade pays that market's normal trading cost: the spread, which is the gap between the buy price and the sell price.
How a test passes
We call a test passed only if it meets all four checks. A strategy can make money in one backtest and still fail one of these checks.
- At least 100 trades. With fewer trades, a good result could be luck.
- It made money from 2020 to 2023 and again from 2024 to 2025. This shows whether the strategy kept working in the newer years, not only in the older ones.
- A profit factor (the money won divided by the money lost) of at least 1.2 from 2024 to 2025, after trading costs.
- In 95% of 1,000 random shuffles of the trades, the account must not fall more than 30% from its highest point.
Improvements
Can the Power of 3 (AMD) be improved?
We tried four changes that Power of 3 traders often make, one at a time, on the same 10 tests. The table below explains each one. If you pick the best change and judge it on the same years you used to pick it, it almost always looks better than it really is. So we picked the best change using 2020–2023 only: the change that made money in the most tests, and in a tie, the one with the better middle test. Then we checked it on 2024–2025, the years we did not use to pick it.
| Version | Made money 2020–2023years used to pick the best version | Made money 2024–2025years not used to pick it | Made money in both periods | Passed all four checks |
|---|---|---|---|---|
| Standard rules The rules under 'The rules we tested': setups from 02:00 to 11:00 New York time, and the take-profit at the previous day's high or low, or 2R, whichever is closer. | 2 of 10middle test −27.5% | 5 of 10middle test −0.4% | 2 | 0 |
| Must go past the Asian range Only buy once price has gone below the Asian range low since 00:00, and only sell once it has gone above the Asian range high. The Asian range is the highest and the lowest price from 20:00 to 00:00 New York time. ICT calls an early move like this, against the day's direction, a Judas swing. | 2 of 10middle test −12.2% | 4 of 10middle test −19.1% | 1 | 0 |
| Only with the previous day's direction Only buy after an up day: the previous futures trading day closed above its opening price at 18:00. Only sell after a down day, when it closed below that price. | 2 of 10middle test −15.2% | 2 of 10middle test −14.1% | 0 | 0 |
| Take-profit at the previous day's high or lowBest on 2020–2023 The take-profit is the previous day's high (buy) or low (sell), even when 2R is closer. ICT traders often aim there, because they expect stop-loss orders to wait just beyond it. If that level is not past the structure-shift candle's close, the take-profit is 2R. The stop-loss and the 16:00 close stay the same. | 3 of 10middle test −10.0% | 4 of 10middle test −5.3% | 1 | 0 |
| Wait for New York (08:30 to 11:00) Only take a structure shift from 08:30 to 11:00 New York time, after ICT's London window (02:00 to 05:00). The stop-loss still goes beyond the lowest (or highest) price since 00:00. | 2 of 10middle test −21.9% | 5 of 10middle test +0.5% | 2 | 0 |
With each of the four changes, at most 2 of the 10 tests made money in both periods. In 2020–2023, the years we used to pick, the take-profit at the previous day's high or low did best. With it, 3 of 10 tests made money, compared with 2 with the standard rules. In 2024–2025, the years we kept for the check, it made money in 4 of 10 tests, compared with 5 with the standard rules. So it did worse in the years we kept for the check. Only 1 test made money in both periods with it, compared with 2 with the standard rules. With the standard rules, the previous day's high or low was closer than 2R on only 12.6% of the trades. Aiming for it put the take-profit a median of 5.5R away, so only 18.0% of the trades reached it. The win rate (the share of trades that made money) fell to 15.7% to 30.3%, and the max drawdown reached 85.0% (MES, 5-minute chart). Waiting for New York had a smaller max drawdown than the standard rules in 9 of the 10 tests, but a better result in only 5 (see the table above). Trading only in the direction of the previous day cut the number of trades by 13% to 39%, and no test made money in both periods. Going past the Asian range first left the number of trades about the same. Only MNQ on the 5-minute chart made money in both periods with it: +54.3% from 2020 to 2025.
Questions
Questions traders ask
Does the ICT Power of 3 (AMD) strategy work?
No, not reliably in our backtest. With our standard rules, it made money in 4 of 10 tests from 2020 to 2025, after trading costs. We tested 5 futures markets (MNQ, MES, YM, RTY and micro gold, MGC), each on 5-minute and 15-minute charts. Only 2 tests made money in both 2020–2023 and 2024–2025: MNQ on the 5-minute chart and YM on the 15-minute chart. The win rate (the share of trades that made money) was 32.6% to 39.9%. The idea behind it is that the London move past the midnight open (the price at 00:00 New York time) is a trap. Our data did not show that. On the days our rules bought, the price at 16:00 was above the midnight open on 44.5% of them, compared with 52.6% of all trading days.
Does the Power of 3 work on NQ?
Not clearly. With our standard rules, MNQ made a small profit on the 5-minute chart and lost money on the 15-minute chart. MNQ is the micro NQ contract (Nasdaq 100 futures). It has the same price, but $2 per point instead of $20, so a trade can risk close to 1% of the account in whole contracts. From 2020 to 2025, after trading costs, MNQ made +11.2% on the 5-minute chart, with a profit in both 2020–2023 and 2024–2025. It lost 19.1% on the 15-minute chart. Two of our changes did better on one MNQ chart each, with a profit in both periods. Going past the Asian range first made +54.3% on the 5-minute chart, and waiting for New York made +35.6% on the 15-minute chart. But with each of those changes, 6 or 7 of the 10 tests lost money. The change that did best in 2020–2023, a take-profit at the previous day's high or low, made +69.8% and +51.5% on MNQ, but not in both periods, and the 5-minute test fell 82.3% from its highest balance.
What is the AMD strategy in trading?
AMD stands for accumulation, manipulation and distribution, the three steps of the Power of 3 from ICT (The Inner Circle Trader, a trading teacher). In accumulation, price moves sideways in the Asian session, before midnight New York time. In manipulation, usually in the London session, price moves past the midnight open (the price at 00:00) against the day's real direction. ICT teaches that this move is a trap. In distribution, the New York session moves price the other way. So traders buy below the midnight open on days they expect to go up, and sell above it on days they expect to go down. In our backtest on 5 futures markets, our rules found a setup on almost every trading day. The lowest (or highest) price since 00:00 was still the low (or high) of the day at 16:00 only about 1 time in 6.
Is the Power of 3 better in London or New York?
Neither was better everywhere in our backtest. With our standard rules, setups count from 02:00, when ICT's London window starts, and half of the 5-minute trades opened by 02:40. When we only took setups from 08:30 to 11:00 New York time, 9 of the 10 tests had a smaller max drawdown. That is the biggest drop of the account from its highest balance. But only 5 of the 10 had a better result. MNQ and YM made money on the 15-minute chart in both 2020–2023 and 2024–2025. MES, gold and RTY lost money on both charts, and MES's 15-minute chart went from +22.0% to −18.7%.
Keep exploring
Related strategies we tested
ICT & smart money ICT Silver Bullet backtest on NQ and ES futures Made money in 0 of 10 tests, 0 of them in both periods. Best: MGC (Micro Gold), 5-minute, −2% ICT & smart money Fair value gap (FVG) retest strategy backtest Made money in 5 of 24 tests, 2 of them in both periods. Best: S&P 500, 15-minute, +124% ICT & smart money Change of character (CHoCH) and market structure shift (MSS) backtest Made money in 7 of 40 tests, 5 of them in both periods. Best: USD/JPY, 1-hour, +66%The strategy code we ran
This is the exact code from the BacktestingMax strategy engine. Paste it into the strategy editor in the app to run it on any market.
class PowerOf3Amd(Strategy):
"""ICT Power of 3 (AMD: accumulation, manipulation, distribution) on futures, as day
traders describe it, plus the changes they argue about. One trade a day at most.
All times are New York time (daylight saving included). The day starts at the midnight
open: the price at 00:00. Accumulation is the quiet Asian session before it (the Asian
range, 20:00 to 00:00). Manipulation is a move past the midnight open against the day's
direction, usually in the London session. Distribution is the New York move the other way.
Standard (all switches off):
1. Look for a setup from 02:00 (London) to 11:00 (the end of the New York morning),
Monday to Friday. No trading on days the New York Stock Exchange is closed or closes
early.
2. A swing high is a candle whose high is above the highs of the candles just before and
just after it (a 3-candle swing); a swing low mirrors it. Swings are on the chart's own
candles: 5-minute swings on the 5-minute chart, 15-minute swings on the 15-minute chart.
A structure shift up is a candle that closes above the most recent swing high; a shift
down closes below the most recent swing low (builtin:market_structure).
3. Buy when a structure shift up closes BELOW the midnight open: price has gone under the
open (the manipulation) and turns up while it is still under it. Sell (go short) when a
structure shift down closes ABOVE the midnight open.
4. The trade opens at the next candle's open. The stop-loss sits 1 tick below the lowest
price since 00:00 (the low of the manipulation) for a buy, and 1 tick above the highest
price since 00:00 for a sell.
5. The take-profit is the previous day's high (buy) or low (sell), or 2R, whichever is
closer. R is the distance from the signal candle's close to the stop-loss. The previous
day is the previous futures trading day, 18:00 to 17:00. If the previous day's high is
not above the entry (for a sell, its low not below), the take-profit is 2R.
6. A trade still open at 16:00 closes then. One trade a day: the first setup, win or lose.
7. Size every trade so that the stop-loss costs 1% of the account, in whole contracts. If
one contract would risk more, skip the day.
The changes, one at a time:
asia = 1 the manipulation must also take the Asian range: only buy once price has gone
below the 20:00-00:00 low since 00:00, only sell once it has gone above its high
bias = 1 only buy after an up day (the previous day closed above its open), only sell
after a down day
pdh = 1 no 2R: the take-profit is the previous day's high (buy) or low (sell)
ny = 1 wait for New York: only take a structure shift from 08:30 to 11:00
"""
params = {"asia": Param(type=int, default=0, min=0, max=1),
"bias": Param(type=int, default=0, min=0, max=1),
"pdh": Param(type=int, default=0, min=0, max=1),
"ny": Param(type=int, default=0, min=0, max=1),
"exit_rr": Param(type=float, default=2.0, min=0.5, max=10.0)}
lookback = 5
window_start = 120 # 02:00 New York, in minutes after midnight
ny_start = 510 # 08:30 New York
window_end = 660 # 11:00 New York: the signal candle must close by then
exit_time = 960 # 16:00 New York
asia_start = 1200 # 20:00 New York, the start of the Asian range
# Days with no trading, 2020-2025: the New York Stock Exchange is closed, or it closes
# early at 13:00.
closed_days = (
"2020-01-01 2020-01-20 2020-02-17 2020-04-10 2020-05-25 2020-07-03 2020-09-07 2020-11-26 "
"2020-11-27 2020-12-24 2020-12-25 "
"2021-01-01 2021-01-18 2021-02-15 2021-04-02 2021-05-31 2021-07-05 2021-09-06 2021-11-25 "
"2021-11-26 2021-12-24 "
"2022-01-17 2022-02-21 2022-04-15 2022-05-30 2022-06-20 2022-07-04 2022-09-05 2022-11-24 "
"2022-11-25 2022-12-26 "
"2023-01-02 2023-01-16 2023-02-20 2023-04-07 2023-05-29 2023-06-19 2023-07-03 2023-07-04 "
"2023-09-04 2023-11-23 2023-11-24 2023-12-25 "
"2024-01-01 2024-01-15 2024-02-19 2024-03-29 2024-05-27 2024-06-19 2024-07-03 2024-07-04 "
"2024-09-02 2024-11-28 2024-11-29 2024-12-24 2024-12-25 "
"2025-01-01 2025-01-09 2025-01-20 2025-02-17 2025-04-18 2025-05-26 2025-06-19 2025-07-03 "
"2025-07-04 2025-09-01 2025-11-27 2025-11-28 2025-12-24 2025-12-25")
def init(self, ctx):
# 3-candle swings, and a break needs a candle to CLOSE beyond the swing.
self.ms = ctx.indicator("builtin:market_structure", lookback=1, lookback_unit="bars",
confirm_bars=1, break_on="close")
self.ny = ctx.clock("America/New_York")
self.no_trading = set(self.closed_days.split())
self.today = None # [open, high, low, close] of the futures day in progress (from 18:00)
self.yesterday = None # the same for the previous futures day
self.asia_high = None # the Asian range, 20:00 to 00:00
self.asia_low = None
self.date = None # the New York date of the current candle
self.midnight_open = None # the price at 00:00
self.day_high = None # the highest and lowest price since 00:00
self.day_low = None
self.done = True # True once today's trade is placed, or the day can't trade
self.trade_date = None # the date the open trade was placed on
def on_bar(self, ctx):
start = self.ny.minute_of_day # this candle's open, New York time
end = start + ctx.timeframe_minutes # this candle's close
# The futures day starts at 18:00: the previous day's high, low, open and close.
if self.ny.new_day(at="18:00") or self.today is None:
self.yesterday = self.today
self.today = [ctx.open[0], ctx.high[0], ctx.low[0], ctx.close[0]]
self.asia_high = self.asia_low = None
else:
self.today[1] = max(self.today[1], ctx.high[0])
self.today[2] = min(self.today[2], ctx.low[0])
self.today[3] = ctx.close[0]
if start >= self.asia_start: # the Asian range, 20:00 to 00:00
self.asia_high = ctx.high[0] if self.asia_high is None else max(self.asia_high, ctx.high[0])
self.asia_low = ctx.low[0] if self.asia_low is None else min(self.asia_low, ctx.low[0])
# A new New York date: the midnight open is the open of the 00:00 candle.
if self.ny.date != self.date:
self.date = self.ny.date
self.midnight_open = ctx.open[0] if start == 0 else None
self.day_high, self.day_low = ctx.high[0], ctx.low[0]
self.done = (self.midnight_open is None or self.ny.weekday >= 5
or self.date in self.no_trading)
else:
self.day_high = max(self.day_high, ctx.high[0])
self.day_low = min(self.day_low, ctx.low[0])
if ctx.position is not None:
if end >= self.exit_time or self.date != self.trade_date:
ctx.close_position() # fills at the 16:00 candle's open
return
if self.done:
return
first = self.ny_start if ctx.params.ny == 1 else self.window_start
if not ctx.gate("trading_window", start >= first and end <= self.window_end):
return
up = len(self.ms.now("bos_bull")) + len(self.ms.now("choch_bull")) > 0
down = len(self.ms.now("bos_bear")) + len(self.ms.now("choch_bear")) > 0
if not ctx.gate("structure_shift", (up or down) and not (up and down)):
return
close = ctx.close[0]
if not ctx.gate("not_a_flat_candle", ctx.high[0] > ctx.low[0]):
return
# A shift up only counts below the midnight open, a shift down only above it.
if not ctx.gate("past_the_midnight_open", close < self.midnight_open if up else close > self.midnight_open):
return
if ctx.params.asia == 1:
took_asia = (self.asia_low is not None and self.day_low < self.asia_low) if up else \
(self.asia_high is not None and self.day_high > self.asia_high)
if not ctx.gate("took_the_asian_range", took_asia):
return
if not ctx.gate("previous_day_known", self.yesterday is not None):
return
if ctx.params.bias == 1:
y_open, y_close = self.yesterday[0], self.yesterday[3]
if not ctx.gate("with_the_previous_day", y_close > y_open if up else y_close < y_open):
return
self.done = True # one trade a day: this setup is it
tick = ctx.pip_size
stop = self.day_low - tick if up else self.day_high + tick
risk = abs(close - stop)
size = ctx.size_by_risk_pct(0.01, stop=stop, entry=close)
if not ctx.gate("one_contract_fits_1pct_risk", size > 0):
return # one contract would risk more than 1%
two_r = close + ctx.params.exit_rr * risk if up else close - ctx.params.exit_rr * risk
level = self.yesterday[1] if up else self.yesterday[2] # the previous day's high / low
beyond = level > close if up else level < close
if not beyond:
target, kind = two_r, "2r"
elif ctx.params.pdh == 1:
target, kind = level, "pdh"
else:
nearer = level < two_r if up else level > two_r
target, kind = (level, "pdh") if nearer else (two_r, "2r")
self.trade_date = self.date
if up:
ctx.buy(size=size, sl=stop, tp=target, tag="po3_long_" + kind)
else:
ctx.sell(size=size, sl=stop, tp=target, tag="po3_short_" + kind)
Your turn
Test the Power of 3 (AMD) yourself
Change the settings, the market or the stop-loss and see the result in seconds. Ask the BacktestingMax AI: Backtest the ICT Power of 3 on MNQ 15-minute charts, taking setups only from 08:30 to 11:00 New York time
.
Free account. No credit card needed.
See every strategy we tested Browse strategies shared by tradersBacktest on historical data with trading costs, run by BacktestingMax. Past results do not guarantee future results, and nothing here is financial advice. Updated 26 October 2026.