Can I rebuild my NinjaTrader orderflow strategies in Python with tick data to speed up backtesting?

Hey all,

I'm building strategies in NinjaTrader, but the replays are taking way too long. I capture a lot of different orderflow signals, and running through everything in NinjaTrader's replay is killing my iteration speed.

Is it possible to rebuild this whole setup in Python and feed it tick data instead? My thinking is that this would let me backtest much faster and iterate on ideas without waiting on slow replays.

Has anyone done this? Specifically:

  • What libraries or frameworks do you use for tick-level backtesting?
  • Where do you get your tick data, and what format works best?
  • How do you handle orderflow metrics (delta, footprint, bid/ask volume, etc.) in Python?
  • Any major gotchas going from NinjaTrader to a Python workflow?

Appreciate any pointers. Thanks!

reddit.com
u/alexdevonx — 8 days ago

NQ CRT Strategy Data - How to not overfit this ?

I ran a replay on a NQ strategy I'm building here are the raw results (capturing all candidates)

All Stats

  • Signals: 684
  • Fills: 523
  • Points: -1,105.50
  • Avg: -2.11
  • WR: 67.7%
  • PF: 0.84
  • DD: 1,462.75

Logs and analyzes every valid CRT with full filtering context — to tell whether an edge is real or overfit.

Segmentation (tag every candidate & trade)

- Session: RTH / ETH-Asia / ETH-Euro + time bucket

- Source replay · side · month/week/day

- Whether another CRT was active/overlapping

Volume Profile

- Value state: mother open/close + transition; sweep close/extreme/trigger; "barely closed back inside" flag

- Distance to POC/VAH/VAL/VA-edge/VWAP; value width

- Touches of POC/VAH/VAL by mother/sweep/prior

- Setup type: inside-value / outside-value / breakout-from-value / failed-auction

Order Flow

- Big trades (buy/sell/delta) for mother, sweep, entry candles + recent 5-bar

- Trap vs response BT volume; aligned vs opposing delta

- Absorption at sweep wick; trapped-trader score post-sweep

- BTs into sweep that failed; entry OF confirms vs contradicts direction

ATR / Volatility / Chop

- ATR: EntryATR14, 15m ATR14/ATR50, ATR14-vs-ATR50 expansion

- Range vs ATR: mother range, avg 15m range; mother size bucket (S/M/L)

- Chop: regime, score, compressed flag; balanced vs directional flag

CRT Structure

- Mother range bucket; sweep retrace %; entry progress % in range; entry beyond midpoint

- Bodies: mother/sweep relationship; sweep doji; multi-doji

- Prior candle: range vs mother; 1.5x/2x/3x flag; profile/VWAP/key-level interaction

- Swept candle already invalidated/overlapped?

Range32 (LTF confirmation)

- Enabled/triggered; trigger time + bars/minutes after sweep

- Aligned vs opposing bars (+ net score); max move toward/against entry

- Invalid-before-trigger; same-bar-invalid; earlier confirm/warn before 15m stop entry

Risk / Management

- Levels: initial stop, target, risk/reward pts; target policy (mother-edge / midpoint / actual)

- Excursion: MFE, MAE, mother-capture pts; bars to MFE 20/40, to 50/75/80% capture, to mother edge

- Stops: lock armed, trail armed, mother-edge trail, moved to BE, lock amount

- Range-trail: activation, captured pts; "gave back too much" flag

reddit.com
u/alexdevonx — 14 days ago

How to filter this date without overfitting?

I ran a replay on a NQ strategy I'm building here are the raw results (capturing all candidates)

All Stats

  • Signals: 684
  • Fills: 523
  • Points: -1,105.50
  • Avg: -2.11
  • WR: 67.7%
  • PF: 0.84
  • DD: 1,462.75

Logs and analyzes every valid CRT with full filtering context — to tell whether an edge is real or overfit.

Segmentation (tag every candidate & trade)

- Session: RTH / ETH-Asia / ETH-Euro + time bucket

- Source replay · side · month/week/day

- Whether another CRT was active/overlapping

Volume Profile

- Value state: mother open/close + transition; sweep close/extreme/trigger; "barely closed back inside" flag

- Distance to POC/VAH/VAL/VA-edge/VWAP; value width

- Touches of POC/VAH/VAL by mother/sweep/prior

- Setup type: inside-value / outside-value / breakout-from-value / failed-auction

Order Flow

- Big trades (buy/sell/delta) for mother, sweep, entry candles + recent 5-bar

- Trap vs response BT volume; aligned vs opposing delta

- Absorption at sweep wick; trapped-trader score post-sweep

- BTs into sweep that failed; entry OF confirms vs contradicts direction

ATR / Volatility / Chop

- ATR: EntryATR14, 15m ATR14/ATR50, ATR14-vs-ATR50 expansion

- Range vs ATR: mother range, avg 15m range; mother size bucket (S/M/L)

- Chop: regime, score, compressed flag; balanced vs directional flag

CRT Structure

- Mother range bucket; sweep retrace %; entry progress % in range; entry beyond midpoint

- Bodies: mother/sweep relationship; sweep doji; multi-doji

- Prior candle: range vs mother; 1.5x/2x/3x flag; profile/VWAP/key-level interaction

- Swept candle already invalidated/overlapped?

Range32 (LTF confirmation)

- Enabled/triggered; trigger time + bars/minutes after sweep

- Aligned vs opposing bars (+ net score); max move toward/against entry

- Invalid-before-trigger; same-bar-invalid; earlier confirm/warn before 15m stop entry

Risk / Management

- Levels: initial stop, target, risk/reward pts; target policy (mother-edge / midpoint / actual)

- Excursion: MFE, MAE, mother-capture pts; bars to MFE 20/40, to 50/75/80% capture, to mother edge

- Stops: lock armed, trail armed, mother-edge trail, moved to BE, lock amount

- Range-trail: activation, captured pts; "gave back too much" flag

reddit.com
u/alexdevonx — 14 days ago

Filtering this Date without overfitting - NQ CRT STRATEGY

I ran a replay on a NQ strategy I'm building here are the raw results (capturing all candidates)

All Stats

  • Signals: 684
  • Fills: 523
  • Points: -1,105.50
  • Avg: -2.11
  • WR: 67.7%
  • PF: 0.84
  • DD: 1,462.75

Logs and analyzes every valid CRT with full filtering context — to tell whether an edge is real or overfit.

Segmentation (tag every candidate & trade)

- Session: RTH / ETH-Asia / ETH-Euro + time bucket

- Source replay · side · month/week/day

- Whether another CRT was active/overlapping

Volume Profile

- Value state: mother open/close + transition; sweep close/extreme/trigger; "barely closed back inside" flag

- Distance to POC/VAH/VAL/VA-edge/VWAP; value width

- Touches of POC/VAH/VAL by mother/sweep/prior

- Setup type: inside-value / outside-value / breakout-from-value / failed-auction

Order Flow

- Big trades (buy/sell/delta) for mother, sweep, entry candles + recent 5-bar

- Trap vs response BT volume; aligned vs opposing delta

- Absorption at sweep wick; trapped-trader score post-sweep

- BTs into sweep that failed; entry OF confirms vs contradicts direction

ATR / Volatility / Chop

- ATR: EntryATR14, 15m ATR14/ATR50, ATR14-vs-ATR50 expansion

- Range vs ATR: mother range, avg 15m range; mother size bucket (S/M/L)

- Chop: regime, score, compressed flag; balanced vs directional flag

CRT Structure

- Mother range bucket; sweep retrace %; entry progress % in range; entry beyond midpoint

- Bodies: mother/sweep relationship; sweep doji; multi-doji

- Prior candle: range vs mother; 1.5x/2x/3x flag; profile/VWAP/key-level interaction

- Swept candle already invalidated/overlapped?

Range32 (LTF confirmation)

- Enabled/triggered; trigger time + bars/minutes after sweep

- Aligned vs opposing bars (+ net score); max move toward/against entry

- Invalid-before-trigger; same-bar-invalid; earlier confirm/warn before 15m stop entry

Risk / Management

- Levels: initial stop, target, risk/reward pts; target policy (mother-edge / midpoint / actual)

- Excursion: MFE, MAE, mother-capture pts; bars to MFE 20/40, to 50/75/80% capture, to mother edge

- Stops: lock armed, trail armed, mother-edge trail, moved to BE, lock amount

- Range-trail: activation, captured pts; "gave back too much" flag

reddit.com
u/alexdevonx — 14 days ago
▲ 53 r/InvestingandTrading+3 crossposts

Building An AI Options Trader

I'm a futures trader - it's been difficult to create an algo in futures so I decided to give options I try. I never traded options so this is a blind experiment for me.

I’ve been building an autonomous options paper-trading system and I’m looking for feedback from people who trade options, build trading systems, or have experience with paper-to-live gaps.

This is not live money. It is Tradier paper trading only right now. My plan is to let it run for at least 2 more weeks before I even consider a small live account.

• What it does, high level:

- Built in Python

- Has a local “brain”/memory layer that tracks trades, lessons, and system state

- Scans options setups

- Filters for liquidity, risk, and data quality

- Paper-trades only simple long calls/puts right now

- Actively manages open positions

- Closes 0DTE trades the same day

- Uses stop-loss and take-profit rules

- Tracks every trade, close, and P&L

Current paper performance as of June 18, 2026:

- Closed P&L: +$2,222

- Closed trades/records with P&L: 45

- Win rate: 55.6%

- Average closed P&L: +$49.38

- June 17: +$1,668 across 29 closed records

- June 18: +$498 across 15 closed records

- Current open positions: 5

- Current open premium risk/cost basis: about $533

- Current unrealized P&L: about -$155

Risk limits I’m trying to mimic for a future $20k live account:

- Max risk per trade: $400

- Target risk per trade: about $250

- Max open premium risk: $2,000

- Max new premium risk per day: $1,500

- Daily loss halt: $600

- Max spread: 30% of mid

- Structures allowed: long calls / long puts only

- No tight max concurrent position cap yet; I’m controlling total premium risk instead

- RTH required for entries and exits

- 0DTE must close same day

- Longer-dated options can hold only while thesis/risk checks remain clean

u/alexdevonx — 18 days ago