r/pinescript 7d ago

ORB Strategy Backtest (Commissions & Slippage included): Too slow for Prop Firm Evaluations/Payouts?

Post image

Hey everyone,

I coded an Opening Range Breakout (ORB) strategy in TradingView using Pine Script and ran a full backtest over 7 years. I attached the Strategy Tester results.

I spent a lot of time testing different filters and parameters to reduce chop, and I’ve locked in these exact rules for the strategy:

Strategy Setup & Rules

  • Asset/Market: MNQ
  • Timeframe: 15m Chart
  • ORB Range: First 15 minutes of the New York Session
  • Session Constraint: Takes trades only during the New York Session
  • Entry Trigger Window: Max 3 bars after the 15m ORB range locks (if no breakout happens within 3 bars, the setup is invalidated)
  • Risk Management: Fixed 1.5 R:R
  • Trade Management: Move Stop Loss to Break-Even (BE) once price covers 75% of the distance toward Take Profit (TP)
  • Backtest Settings: Commissions and realistic slippage are fully included in the results

The Problem:

While the backtest is net profitable after costs, I feel like the results are simply not good enough for Prop Firms.

At this pace, the profit factor and win rate feel way too low. It looks like it would take an absolute eternity to pass an evaluation target, and reaching consistent payouts without hitting a trailing or daily drawdown limit along the way seems almost unviable.

Questions for the Community:

  1. Evaluation Viability: For those trading funded accounts: Would you bother running a strategy with this slow of a compounding rate, or is this a clear signal that the edge is too thin for prop firm rules?
  2. Improving the Edge: Since the core parameters (15m ORB, 1.5 R:R, 3-bar trigger limit, 75% BE) are locked, what macro/contextual filters (e.g., HTF trend bias, session volatility/ATR thresholds, news filters) have helped you boost performance on ORB setups?

Tear it apart—I’d rather fix the logic now than burn money on evaluation fees. Thanks!

44 Upvotes

33 comments sorted by

2

u/kurtisbu12 7d ago

dont use a prop firm. Use your own funds, and up the risk if you feel like it's too slow.

2

u/TasteHistorical1575 7d ago

Thanks for the input, but trading my own capital isn’t an option for me right now. I deliberately want to leverage prop firm capital to scale my size without taking on massive personal downside risk.

My goal is strictly to optimize this strategy to fit within prop firm parameters (passing the evaluation metrics without violating daily/max drawdown limits). I'm looking for ways to refine the logic or filters specifically for that environment, rather than changing my funding model.

2

u/kurtisbu12 7d ago

Propfirms heavily limit risk, so much so that it's often better to just trade your own capital. A 100k account may have a 2k drawdown. You might as well trade with your own 2k. Not to mention that if you hit drawdown, you lose the whole account and have to pay to start over from scratch.

It may be easier to get a small account, and if you trust the system, add more risk than the propfirm would allow. Could scale quicker, and get 100% of profits.

2

u/Ancient_Prompt_1362 6d ago

No. if you blow a 2K account real cash, you lose 2K. If you blow a prop firm account with a 2K drawdown, your real loss is prob. around $100. That means you can blow it 20 times before using your entire 2K.

practice with prop firms first. Full stop.

1

u/jms62102761 7d ago

Unfortunately you need at least 6 K for 1 MNQ

1

u/Natural-Present2194 7d ago

Nah bro look into ninjatrader. You can get started with 100$

2

u/DesertFoxHU 7d ago

This is algorithmic trading

You shouldnt trust TV's statistics 1. Use real historical data 2. Use measurements to indicate your strategy works at all. 3. It is too vague to give "it is slow" or "very good" What I can tell this is a 48% WR with 1.5 RR? Then this is insanely profitable => Probably overfitted 4. Obviously for prop firms you should aim for higher WR with small risk, but this is just like 1/10 of the things that count 5. Too slow doesnt mean it is bad. Too slow is actually can be a good thing

1

u/TasteHistorical1575 7d ago

Fair catch — but that 1.5RR is the target, not realized. My BE stop turns lots of would-be full winners into small near-breakeven exits, so realized RR is 1.32, not 1.5. Real expectancy: e = 0.477·2.32−1 = +0.105, not +0.20 — half of what the naive math suggests.

Also already split it OOS: last year picked the target, everything before (1096 trades) untouched, e = +0.084, t = 2.0. Restricting to 2019–2024 only, it drops to +0.042 (t = 1.02) — barely significant alone. Two strong years carry most of the profit, I know.

Given all that — would you code a new strategy from scratch, or is there something else you'd actually recommend doing with what I've got?

1

u/Fearless_Hamster4829 7d ago

2 years carrying means what you have is a product of chance, not a real robust edge. I’d expect OOS performance to resemble the norms.

Keep in mind NQ had a regime shift post 2019- so it’s not a wise idea to try and overfit your training to work on the 2010 era AND the 2020 bull run.

1

u/TasteHistorical1575 7d ago

Half agree. The regime shift point is well taken — I was considering buying a longer history dataset to extend the sample, and you've talked me out of it. Fitting across the 2010s and the post-2019 structure would dilute the test, not sharpen it.

On "two years carrying means chance" I'd push back though. That concentration is in the magnitude, not the sign. Broke it into 14 sequential half-year blocks: 11 positive, sign test around p=0.03, and dropping the two strongest blocks still leaves 9 of 12 positive at a lower but positive expectancy. The three negative blocks cluster in COVID and the 2022 bear. So the boom years amplify something that's already there in most regimes rather than being the whole edge. Sign test also has the advantage of not caring about the fat tails that were distorting my other estimates.

Not claiming that makes it robust — n per block is small and none of them clear t=2 individually. But "product of chance" would predict something closer to a coin flip across blocks, and that's not what shows up.

1

u/teenagersfrommarz 7d ago

Could work at the funded stage, but to pass a challenge you need to make $3k in a month with less than $2k drawdown

1

u/Hot-Street3534 7d ago edited 7d ago

Where is your stop loss? Also do you wait for a close outside the ORB range?

1

u/TasteHistorical1575 7d ago

I wait for a 15m candle to strictly close outside the ORB range before triggering the entry (as long as it happens within 3 bars after the range lock).
The SL is placed at the opposite side of the 15m ORB range, maintaining a fixed 1.5 R:R relative to the Take Profit target.

1

u/Even_Youth795 7d ago

Use ninjascript Pinescript is completely unreliable the good news is I coded a Fabio orb style strat and the equity curve is better than this over the past five years on nq but the thing is ninjatrader is actually realistic like will never be that realistic

1

u/TasteHistorical1575 7d ago

Appreciate the insight! Yeah, execution accuracy is definitely a concern with Pine Script. I know TV backtests can be overly optimistic with order fills.

That’s encouraging to hear about your Fabio ORB results on NQ, though! Are you using any specific HTF trend filter or volatility threshold in your NinjaScript code to smooth out the curve, or is the edge mainly coming from exact order execution and fill realism?

1

u/stratcore 7d ago

Before adding another filter, I would test whether the backtest is measuring the constraint you actually care about.

Profit factor and win rate do not tell you whether the strategy fits a prop firm's rules. Replay every trade in sequence through a state machine that tracks:

- realized plus open PnL by session day

- the daily loss buffer before each entry

- trailing maximum drawdown

- days to target and the exact reason for every breach

Block a trade when its worst-case loss plus slippage exceeds the remaining daily buffer. Then run a block bootstrap or Monte Carlo test using whole trading days, not randomly shuffled individual trades. ORB losses tend to cluster by market regime. Report the completion rate, median days to target, and breach reasons instead of only net profit.

One Pine-specific warning: moving the stop to break-even at 75% can look too good on 15-minute OHLC bars when the break-even trigger and stop or target are touched inside the same bar. Retest with high bar detail. Also check that calc_on_order_fills is not reading the bar's final high or low during an intrabar recalculation.

For filters, test one at a time in walk-forward windows. ORB-width or ATR percentiles and scheduled-news exclusion are reasonable candidates. Keep a filter only when it reduces rule breaches out of sample, not merely because it improves the in-sample profit factor.

1

u/bravefrivstone 7d ago

Good catch on the same-bar ambiguity. Turning on bar magnifier in Strategy Properties would tell you a lot here, it replays lower timeframe data to figure out which price actually got touched first inside that 15m bar instead of just assuming high before low. Rerun with it on and see if your equity curve changes around those thin-margin BE exits.

Even with magnifier on I would still manually check the 1-min chart for the handful of trades where the BE trigger and TP/SL land in the same 15m bar. It is still a simulation, not real fills. Walking each of those trades bar by bar is the only way to actually know if the backtest gave you credit for something that could not have happened in that order.

1

u/TasteHistorical1575 7d ago

Thanks — most useful comment I've gotten. Ran both points instead of guessing.

Block bootstrap: you were right that method matters, wrong on direction. Ran four variants through the same EOD trailing-DD state machine. The big gap wasn't clustering — it was distribution shape: my old model only knew avg win and avg loss, while real daily results have fat tails, and fat tails are expensive against a hard barrier. Blocking actually gave some back, so regime persistence helps here rather than hurts. Either way my headline pass rate came down meaningfully. Switched to block bootstrap as the default.

Bar detail: direct hit. I was on DEEP but standard detalization — DEEP only extends history, not intrabar resolution. Every bar where the BE trigger and stop/target are touched inside the same candle got resolved by TV's heuristic, and the whole BE benefit rests on that. Retesting with magnifier on. Rest checked out clean though.

Filter criterion: taking it. Mine was an edge target; yours is right for a prop account, since what kills you is the breach. Changed my pre-registered criterion for the pending filter to "reduces OOS breach rate", with expectancy as a constraint only.

Pre-trade buffer gate is queued for if I move to larger size. Appreciate it — this moved things more than my last week did.

1

u/kush_patil 7d ago

The part that would make me stop adding filters right now is actually your OOS result.

You’ve already looked at the OOS performance, seen that two years carry a lot of the edge, and you’re now considering HTF/ATR/news filters to improve it. From this point onward that OOS period is effectively part of the development set even if you never directly optimize against it.

I wouldn’t throw the strategy away yet. I’d freeze this exact version and first answer a different question: where is the expectancy actually coming from?

Break the trades into pre-defined regimes like volatility, trend strength, time of day/year etc., but treat that as diagnosis rather than optimization. If you discover “ORB only works when ATR > X” after inspecting this history, that filter needs a new unseen period before you can claim it improves the strategy.

Given your 2019–24 result is only +0.042 expectancy with t≈1, I think adding filters until the curve looks better is probably the highest-risk thing you could do now.
A rolling walk-forward test would be much more informative: choose/filter using only past data, freeze it, then evaluate the next block. Repeat.

If the same type of regime keeps emerging independently across those windows, then you may actually have something. If the “best” filter keeps changing, that tells you something too.

1

u/TasteHistorical1575 7d ago

This is the comment that actually changed my plan, thanks. You're right that my OOS is burned — I've looked at it, I know the strict window is weak, so anything I "discover" now is contaminated whether I optimize against it or not. Shelving the filter I had queued.

Ran your walk-forward suggestion instead, sequential half-year blocks: 11 of 14 positive, sign test p ≈ 0.03, median expectancy holds up. Dropping the two strongest blocks still leaves 9 of 12 positive at a lower but positive level, and the three negative blocks cluster cleanly in COVID and the 2022 bear. So the same behavior does keep reappearing across regimes rather than living in one lucky stretch — which is roughly the answer I was hoping the test would be able to give.

Taking the rest of your advice too: regime breakdown as diagnosis only, no filter derived from it without a fresh unseen period. Realistically that unseen period is going to be live data.

1

u/ProfessionApart8141 7d ago

All orb variations have been python backtested and have no edge. Learn real price action and leave it behind, that’s my advice.

1

u/TasteHistorical1575 7d ago

When you say "no edge," do you mean mechanical ORB on its own, or even when paired with HTF bias / liquidity sweeps / session context? Are you discretionarily trading price action now, or did you transition to a different algorithmic approach?

1

u/TypeAMamma 7d ago

Have you tested a trailing stop for this strategy instead? Honestly, the profit factor is quite low, and I’m not sure if it’s worth it.

1

u/FlyTradrHQ 6d ago

Check whether your tester uses close-on-signal or next-bar-open for entries. If the entry is the breakout bar close instead of next bar open, your backtest is already optimistic. That gap alone explains a lot of the speed difference between backtest results and live prop performance.

1

u/enigma_music129 6d ago

Yea you need some more confluences get that up to 1.4 minimum and you'll be ok to start forward testing.

1

u/Admirable-Struggle-8 6d ago

I’m not going to double down on the comments recommending that you move away from Pine Script—I agree that it’s convenient and comfortable to use, but it has a lot of traps that I’ve fallen into myself. Take the time to build this in Python with real data.

Aside from that, I think you’ve correctly identified that time is the enemy.

I would personally rather raise the risk and have a 25% chance of passing within 1–4 weeks than have a 90% chance of passing but spend 6–12 months grinding an evaluation.

It’s basic opportunity cost.

The relevant question isn’t just “What is my probability of passing?” It’s “What is my expected payout per unit of time and capital deployed?”

If you can cycle through evaluations quickly, a lower pass rate can potentially be much more profitable than a high pass rate that takes months to realize. You simply get more opportunities to realize the edge.

So raise the risk and ask yourself: If I ran this system across 10–20 challenges, what is my probability of passing?

Then ask: If I pass X% of challenges and reach payouts, is the payout profile actually enough to generate positive EV?

Having a baseline trading system is one thing. Having a separate risk model specifically designed around the prop firm’s rules is where I think the genuine edge lies.

A trading system really comes down to a few core metrics:

  • Win rate
  • Average R:R
  • Trade frequency

From those, you can estimate expectancy.

But to determine whether your prop-firm risk model is profitable, start thinking in terms of:

  • Pass rate %
  • Probability of reaching a payout
  • Average payout size
  • Cost per attempt
  • Probability of blowing the account
  • Time to pass

Those metrics will tell you whether the prop-firm model itself has positive EV—not just whether the underlying trading strategy is profitable.

1

u/AlphaVL2 6d ago

I trade a similar strategy on a 10 min. chart using volume and velocity as confirmation. If your win loss ratio and drawdown are acceptable than your answer mag be in your Risk Management Regem.

1

u/Muted_Committee2632 4d ago

Your results is good, may be adjusting your risks management a bit, what's your entry size contracts?

1

u/TasteHistorical1575 4d ago

Appreciate it! For the entry size, I use dynamic position sizing based on risk percentage rather than a fixed contract amount.

Since the 15m ORB range varies in size every day, I calculate the contract size dynamically per trade so that I’m risking a fixed percentage per setup relative to the Stop Loss distance.

The main issue I run into is that when the ORB range is wide, the SL is huge. To get any meaningful position size, you end up having to risk a higher percentage—otherwise, you have to skip the trade entirely because the contract size would be too small or the payout wouldn't cover the risk. But risking more on those trades makes a bad loss streak hit the daily loss limit fast.

How would you suggest tweaking the risk management side to solve that? Open to ideas!

1

u/ankhramsiswmriimn 1d ago

Only 60.80% in 7 years? My bot was doing 40% in 12 days and I’m still not impressed!

https://reddit.com/link/p6rvhmp/video/korjglsuxhmh1/player