A stop loss is a trigger, not a promise that the market will trade at the line you drew. Weekend gap risk backtesting must therefore fill an exposed position at the next available market price, then carry that loss through the prop account's equity path.
The thesis is simple: if a backtest quietly closes every gapped stop at its requested level, it understates both execution loss and the chance of crossing an account constraint. A smooth line between Friday and Monday is not evidence that the missing market existed.
What weekend gap risk means in a backtest
Weekend gap risk is the risk that the first tradable price after the market reopens is beyond a position's stop, target or pending-order trigger. No quote was available inside the closed interval, so the simulator must distinguish the requested level from the price that could actually execute.
cTrader's official order documentation makes that distinction explicit: a stop activates a market order and fills at the best available price, which can differ because of slippage. That execution rule matters more than the neatness of the chart.
Consider a deliberately hypothetical long trade:
| Item | Price or result |
|---|---|
| Entry | 100.00 |
| Protective stop | 99.00 |
| Planned risk | 1.00 = 1R |
| First available price after the gap | 98.20 |
| Executed loss before costs | 1.80 = 1.8R |
The extra 0.80 is not a second trading decision. It is the consequence of there being no executable price between 99.00 and 98.20. The figures are an arithmetic example, not a claim about a particular market or broker.
This is also different from bar-close versus intrabar backtesting. Intrabar testing asks what happened inside a recorded candle. Gap testing asks what the engine does when the next recorded market is discontinuous from the last one.
Why a stop-price fill can flatter a prop result
A stop-price fill can flatter a prop backtest because the account is judged by the loss that actually reaches equity, not by the distance the trader intended to risk. The error can affect more than one summary metric.
- Trade loss. The realised loss can exceed the planned 1R.
- Floating equity. The account can reopen below a relevant loss threshold before any recovery is possible.
- Daily accounting. The loss belongs to the firm's applicable reset period, which may not match the strategy's preferred calendar.
- Overlapping exposure. Several positions can gap together, especially when they share a market driver.
- Sizing path. A larger loss changes the balance used by later fixed-fractional trades.
The applicable rule definitions belong to the prop firm and can change. The funding model keeps the strategy path beside the account constraints, but the firm's current documentation remains the authority for a live evaluation.
FTMO's current weekend-position FAQ distinguishes its Standard and Swing account types: Swing permits weekend holding, while restrictions apply to funded Standard accounts. Permission to hold is not protection from the gap. It simply decides whether this exposure belongs in the intended use case. The related FTMO Swing versus Standard backtest guide covers that compatibility question in detail.
How to build a clean weekend gap test in cTrader
A clean test freezes the strategy and changes only the gap-execution assumption. The goal is to expose sensitivity, not to tune the system around the weekends that already happened.
cTrader's official cBot backtesting guide documents server tick data, server M1 bars, custom M1 CSV data, spread settings, visual playback and downloadable reports. Those controls support two complementary checks:
Replay historical weekend transitions
Run the identical cBot and preset on the most granular broker history available. For every position that crosses a market closure, save the last pre-close quote, the first post-open quote, the stop level, the recorded deal price, spread, commission, swap and resulting equity.
Do not infer the fill from the candle drawing. Read the deal history. If a stop is reported at a price that never appears as an executable quote after the reopen, the fill model needs an explanation before the result is credible.
Inject declared synthetic gaps
Historical gaps show only the path that occurred. A custom M1 CSV can add declared discontinuities to test the cBot's plumbing under a controlled shock. Keep the scenario separate from the historical baseline and label it synthetic.
Vary the reopening price, spread and the number of simultaneously exposed positions under a prewritten scenario grid. Do not search for the one shock the strategy survives. Retain every run and report which account constraint, if any, was crossed.
What the test record must preserve
The test record must preserve enough detail for another trader to reconstruct the transition from planned risk to executed loss. A final profit figure cannot do that job.
| Record | Why it matters |
|---|---|
| Broker and data source | Gap quotes and spreads are feed-specific |
| Last quote and first available quote | Shows the discontinuity the engine received |
| Bid and ask used for the trigger | Prevents a mid-price chart from hiding the spread side |
| Requested stop and actual deal price | Separates protection intent from execution |
| Commission and swap | Reconciles the complete account change |
| Pre-gap and post-gap equity | Connects the fill to the prop-rule path |
| Other open positions | Reveals clustered weekend exposure |
| Account clock and current rule source | Determines where the loss is counted |
The stop-loss distance guide explains why changing the stop also changes size and expectancy. Gap testing comes after that design choice. It asks whether the chosen stop is modelled as a trigger under discontinuous prices rather than as a guaranteed exit.
What this test cannot prove
Weekend gap testing cannot set a universal worst case. Future reopening prices, liquidity and broker execution can be worse or simply different from both the historical record and a synthetic grid.
It also cannot turn a permissive account type into a recommendation to hold. Closing before a weekend removes that specific open-position gap exposure but may change the strategy itself, its costs and its evidence base. Holding retains the strategy's intended path and accepts a risk that must be measured. The test describes that trade-off; it does not choose it for the trader.
How realbacktesting treats the assumption
realbacktesting is a trading-software studio for cTrader built around results that can be inspected and reproduced. The methodology page exposes the data, costs, execution and validation assumptions so a reader can challenge the path rather than trust the endpoint.
That still does not make a backtest a live track record. Broker history can document recorded reopenings, and scenario tests can document declared shocks. Neither can guarantee the next available price.
Frequently asked
Does a stop loss guarantee the stop price after a weekend gap?
No. A stop triggers an order; execution occurs at an available market price. If the market reopens beyond the stop, the resulting deal can be worse than the requested level.
Are M1 bars enough to test weekend gaps?
M1 bars can reveal the reopening discontinuity, but they may not preserve every tick, spread change or execution detail. Use the most granular broker data available and verify the deal history rather than relying on the candle alone.
Is weekend gap risk relevant only to Swing accounts?
It is relevant whenever a position is permitted to remain open across a market closure. Account type determines whether that use is allowed; it does not determine the size of the next gap.
Should a synthetic gap scenario replace historical backtesting?
No. Historical and synthetic tests answer different questions. Keep the recorded baseline, then add clearly labelled scenarios to examine failure paths the sample did not contain.
The stubborn takeaway
A stop drawn inside a closed market is only an intention. A credible prop backtest begins again at the first price that could actually trade.