Pass Lab
How Pass Lab simulates the rule
Pass Lab's rule evaluator is a per-trade state machine that runs inside each Monte Carlo iteration, with within-day trade order shuffled to capture path-dependence. See the engine description in methodology.md §4.4.
For the FTMO daily drawdown rule specifically, the simulator tracks:
- A day-bounded running balance that resets at the start of each simulated trading day (using the trade's exit timestamp to determine day membership against FTMO's server-time rollover).
- A daily anchor captured at the prior simulated day's end-of-day close.
- A per-trade floor check evaluated after each trade in the shuffled iteration order: if
cumulative_equity < daily_anchor − 0.05 × initial_balance, the iteration is recorded as a daily_drawdown_breach and short-circuits.
Within-day trade order is shuffled with a deterministic ChaCha8 PRNG seeded by master_seed XOR firm_index XOR window_index, preserving daily clustering — losses cluster on the day the strategy actually had losses — while randomising the order in which those losses arrive. Eight trades on the same Tuesday in different orders produce different daily-drawdown trajectories, and the Monte Carlo iteration count of 1,000 per walk-forward window samples that order-space.
The FTMO daily drawdown rule is evaluated per-iteration, not as a pre-flight short-circuit. There is no portfolio pattern that structurally guarantees a daily drawdown failure (the way a martingale structurally guarantees a martingale-ban breach), so Pass Lab does not short-circuit the firm match. Instead, every iteration runs the rule, and the per-window pass rate is the fraction of iterations in which no breach occurred.
Across all walk-forward windows for the firm, the window pass rates are then resampled 5,000 times to produce a 95% bootstrap confidence interval. Pass Lab reports the lower bound of the CI as the headline metric, not the point estimate.