What's Bar Magnifier backtesting mode

Premium account holders can obtain more realistic order fills in their strategy backtests by using The Bar Magnifier option. This tool uses intrabar inspection to obtain deeper granularity on price movement within a bar, allowing for more precise order fills. When selected, Bar Magnifier mode replaces the assumptions the broker emulator must make on price movement with only OHLC values for historical bars.

The intrabar timeframe used with the Bar Magnifier dynamically adjusts with the chart’s timeframe. This table lists the intrabar timeframe used for progressively higher chart timeframes:

Chart timeframe, T

Intrabar timeframe used

1S < T < 30S

1S

30S <= T < 5

5S

5 <= T < 30

15S

30 <= T < 60

1

60 <= T < 240

5

240 <= T < D

15

D <= T < W

60

W <= T < 2W

120

T >= 2W

D

Table 1. Intrabar timeframes used

Here’s an example of a strategy that uses a stop order without using the Bar Magnifier option:

//@version=5
strategy("bar_magnifier_demo", overlay = true, use_bar_magnifier = false)

if bar_index  == 10381
    strategy.entry("Long", strategy.long, stop = 157.0)
    strategy.exit("Exit", stop = 156.0)

The broker emulator places a stop order on bar #10381 and fills an order with a price of 157.0 on the next bar as soon as the stop = 157.0 condition is met. The broker emulator estimates that inside the bar itself, the price goes from “open” to “low”, then to “high” (triggering the entry), then to “close”. After a few bars (11 days for the current timeframe), the condition for exiting the position with the stop price = 156.0 is triggered:

When the Bar magnifier is enabled (parameter use_bar_magnifier = true), exit and entry prices are unchanged; however, the exit from the position occurs inside the same bar in which the entry happened:

//@version=5
strategy("bar_magnifier_demo", overlay = true, use_bar_magnifier = true)

if bar_index  == 10381
    strategy.entry("Long", strategy.long, stop = 157.0)
    strategy.exit("Exit", stop = 156.0)

If we check the lower timeframe chart for the same symbol (a 60-minute chart, according to the intrabar timeframe table) and find the time range corresponding to bar 10382, we can see that on the hourly timeframe, after reaching 157.0 and triggering the entry, the price goes down below 156.0, satisfying the stop = 156.0 condition:

With Bar Magnifier on, the broker emulator gets access to price changes from lower timeframes during backtesting, making its behavior more similar to what would happen during forward testing the strategy for the same time period.

The Bar magnifier option can be switched by toggling corresponding input in strategy’s “Settings/Properties” window: