MNQ VS NQ · PROP FIRM CHALLENGE

MNQ or NQ for a 50K challenge? One NQ risked more than the whole drawdown

One strategy, $500 a trade, two years of CME data. MNQ traded 471 of 508 days at $382 of risk. One NQ fitted the $500 on a single day; made to take one contract anyway, it risked $2,799 a trade against a $2,000 drawdown.

Run this script free

Opens on MNQ 5-minute with the backtest done; switch the chart to NQ1! to see the other. Free account, no card.

The same strategy and plan on bothNQ opening range breakout · 2 years · CME
MNQNQ
A point, one contract$2$20
Days it could trade at $500471 of 5081 of 508
Risk a trade, on average$382$2,799one contract every day
Worst trade−$531−$4,020
Challenges, passed22, 6 passed343, 132 passedmost over within two trades
Commission, NQ's size$1510 MNQ a round trip$51 NQ a round trip

Example rules, not any firm's: $50,000, a $3,000 target and a $2,000 drawdown trailing the day's close. MNQ at $0.75 a contract each side, NQ at $2.50, a tick of slippage on both.

How many contracts your drawdown pays for

Contracts are the risk a trade divided by what one contract loses at your stop, two ticks of slippage counted. At $500 a trade, a $2,000 drawdown is four losers in a row; at $250, eight.

StopMNQ at $250MNQ at $500NQ at $250NQ at $500
20 points$41 on one MNQ, $410 on one NQ612none1
40 points$81 on one MNQ, $810 on one NQ36nonenone
60 points$121 on one MNQ, $1,210 on one NQ24nonenone
80 points$161 on one MNQ, $1,610 on one NQ13nonenone
108 pointsthe NQ opening range on a median day, $2,170 on one NQ12nonenone

One NQ fits a $500 risk only with a stop of 24 points or less, and a $1,000 risk with 49 or less. NQ's 15-minute opening range was 108 points on a median day in these two years, 93 in 2025 and 136 in 2026 so far, and 57 or less on only one day in ten.

The code

Tested on CME's data and passed by TradingView's compiler. One script for either contract: it sizes from dollars, so it reads $2 a point on MNQ and $20 on NQ.

The NQ opening range breakout sized from $500 a trade, on MNQ or NQ

One script for either contract: it sizes each trade from a dollar risk, so the same plan reads $2 a point on MNQ and $20 on NQ. When one contract would risk more than the plan, it skips the day, or takes one contract anyway if you tell it to. It keeps a 50K challenge in its own books and counts the days with a setup, the days skipped, the average dollars at risk and every challenge passed or failed. The strategy is our NQ study's opening range breakout, whose stop is the 15-minute range.

Trades
471
Won
44.4%
Profit factor
1.02
Net
+2.8%
Worst drawdown
−18.6%
Worst trade
−$531

MNQ1! · 5-minute · 23 Oct 2024 → 22 Oct 2026 · 2 years · 517 sessions · $0.75 a contract each side on MNQ, one tick of slippage, $50,000 account, $500 risk a trade, one trade a day, flat by 15:55 New York

On MNQ the plan held: 508 days had a setup, 471 were traded at 1.8 contracts on average with $382 at risk, and 37 were skipped because the range was so wide that even one micro risked more than $500. The 50K example challenges came to 22: 6 passed, 15 failed on the drawdown and one was still running. On NQ with the same inputs, one contract fitted $500 on a single day in two years.

  1. The size: the risk a trade in dollars, the most contracts, and what to do when one contract risks more than that.
  2. perContract() is what one contract loses at the stop with two ticks of slippage: the stop in points times syminfo.pointvalue, $2 on MNQ and $20 on NQ, so the same script sizes either one.
  3. The challenge is example numbers in the script's own books: a $3,000 target and a $2,000 drawdown trailing the day's close, stopping at the start, checked at each candle's worst point, and a new challenge the session after one ends.
  4. The strategy: the first close outside the 15-minute opening range, the stop at the range's other side, the target at 2R, one trade a day, flat by 15:55 New York.
  5. The tally in the Data Window and a table on the chart: days with a setup, days skipped, the average dollars at risk, challenges, passed and failed.
Pine Script v6 · 126 linesRun this script
//@version=6
// Suggested timeframe: 5-minute. Run it on MNQ1! and on NQ1!: it sizes either one from the same dollar risk.
strategy("MNQ or NQ: one ORB, sized from the same risk", overlay=true, initial_capital=50000, default_qty_type=strategy.fixed, default_qty_value=1,
     commission_type=strategy.commission.cash_per_contract, commission_value=0.75, slippage=1, margin_long=0, margin_short=0)
// commission_value is a side per contract: 0.75 is about a micro's all-in rate; on NQ we ran 2.5, put your own

// ── The size: contracts from dollars ─────────────────────────────────────────────────────────────
riskUsd = input.float(500, "Risk per trade ($)", minval=10, group="Size")
maxQty  = input.int(10, "Most contracts", minval=1, group="Size")
tooBig  = input.string("Skip the trade", "When one contract risks more than that", options=["Skip the trade", "Take one contract"], group="Size")

// what one contract loses at a stop this many points away, two ticks of slippage counted
perContract(stopPts) =>
    (stopPts + 2 * syminfo.mintick) * syminfo.pointvalue
// the contracts the risk pays for: on MNQ a point is $2 a contract, on NQ $20
contractsFor(stopPts) =>
    n = math.min(maxQty, math.floor(riskUsd / perContract(stopPts)))
    tooBig == "Take one contract" ? math.max(n, 1) : n

// ── The challenge: example rules, not any firm's ─────────────────────────────────────────────────
target  = input.float(3000, "Profit target ($)", group="Challenge")
trailDD = input.float(2000, "Trailing drawdown ($), end of day, stops at the start", group="Challenge")

var float base    = strategy.initial_capital  // the strategy's equity when this challenge began
var float peak    = 0.0                       // the closing balance the floor trails
var bool  live    = true
var int   started = 1
var int   passed  = 0
var int   failed  = 0
if session.isfirstbar
    if live
        peak := math.max(peak, strategy.equity - base)
    else
        base    := strategy.equity
        peak    := 0.0
        live    := true
        started += 1
pnl   = strategy.equity - base
pos   = strategy.position_size
worst = pnl - (pos > 0 ? (close - low) * pos : pos < 0 ? (high - close) * -pos : 0.0) * syminfo.pointvalue
if live
    if worst <= math.min(peak - trailDD, 0.0)
        strategy.close_all(comment="Drawdown hit", immediately=true)
        live   := false
        failed += 1
    else if pnl >= target
        strategy.close_all(comment="Target reached", immediately=true)
        live   := false
        passed += 1

// ── The strategy: the opening range breakout from our NQ study, one trade a day ──────────────────
orSess    = input.session("0930-0945", "Opening range (New York)", group="Strategy")
tradeSess = input.session("0945-1200", "Entry window (New York)", group="Strategy")
rMult     = input.float(2.0, "Target (R)", minval=0.5, step=0.5, group="Strategy")

inOR    = not na(time(timeframe.period, orSess, "America/New_York"))
inTrade = not na(time(timeframe.period, tradeSess, "America/New_York"))
cutoff  = hour(time, "America/New_York") == 15 and minute(time, "America/New_York") >= 55

var float orHigh   = na
var float orLow    = na
var bool  done     = false  // today's trade is taken, or today's setup did not fit
var float stopLvl  = na
var float tgtLvl   = na
var int   setups   = 0      // days with a setup
var int   skipped  = 0      // days whose setup one contract was too big for
var float riskSum  = 0.0    // dollars at risk, over every trade taken
var int   qtySum   = 0
if session.isfirstbar
    orHigh := na
    orLow  := na
    done   := false
if inOR
    orHigh := na(orHigh) ? high : math.max(orHigh, high)
    orLow  := na(orLow) ? low : math.min(orLow, low)
rangeSet   = not inOR and not na(orHigh)
longSetup  = rangeSet and close > orHigh and close[1] <= orHigh and orLow < close
shortSetup = rangeSet and close < orLow and close[1] >= orLow and orHigh > close

if live and inTrade and not done and strategy.position_size == 0 and (longSetup or shortSetup)
    stopPts = longSetup ? close - orLow : orHigh - close
    qty = contractsFor(stopPts)
    setups += 1
    done := true
    if qty < 1
        skipped += 1
    else
        stopLvl := longSetup ? orLow : orHigh
        tgtLvl  := longSetup ? close + stopPts * rMult : close - stopPts * rMult
        riskSum += qty * perContract(stopPts)
        qtySum  += qty
        strategy.entry(longSetup ? "Long" : "Short", longSetup ? strategy.long : strategy.short, qty=qty)
        // the stop and target go in with the entry, so the bar it fills on is covered too
        strategy.exit(longSetup ? "Long exit" : "Short exit", from_entry=longSetup ? "Long" : "Short", stop=stopLvl, limit=tgtLvl)
if strategy.position_size > 0
    strategy.exit("Long exit", from_entry="Long", stop=stopLvl, limit=tgtLvl)
if strategy.position_size < 0
    strategy.exit("Short exit", from_entry="Short", stop=stopLvl, limit=tgtLvl)
if (cutoff or session.islastbar) and strategy.position_size != 0
    strategy.close_all(comment="Cut-off", immediately=true)

plot(rangeSet ? orHigh : na, "Range high", color=color.new(#16A56A, 0), style=plot.style_linebr)
plot(rangeSet ? orLow : na, "Range low", color=color.new(#E5484D, 0), style=plot.style_linebr)

// the tally, in the Data Window and a table on the last bar
taken = setups - skipped
plot(setups, "Days with a setup", display=display.data_window)
plot(skipped, "Skipped: one contract risked more", display=display.data_window)
plot(taken > 0 ? riskSum / taken : na, "Average risk a trade ($)", display=display.data_window)
plot(taken > 0 ? float(qtySum) / taken : na, "Average contracts", display=display.data_window)
plot(started, "Challenges started", display=display.data_window)
plot(passed, "Passed", display=display.data_window)
plot(failed, "Failed on the drawdown", display=display.data_window)

var table book = table.new(position.top_right, 2, 5, bgcolor=color.new(color.black, 15), border_width=1)
if barstate.islast
    table.cell(book, 0, 0, "Days with a setup", text_color=color.white)
    table.cell(book, 1, 0, str.tostring(setups), text_color=color.white)
    table.cell(book, 0, 1, "Skipped: one contract risked more", text_color=color.white)
    table.cell(book, 1, 1, str.tostring(skipped), text_color=color.white)
    table.cell(book, 0, 2, "Average risk a trade", text_color=color.white)
    table.cell(book, 1, 2, taken > 0 ? "$" + str.tostring(math.round(riskSum / taken)) : "—", text_color=color.white)
    table.cell(book, 0, 3, "Challenges", text_color=color.white)
    table.cell(book, 1, 3, str.tostring(started), text_color=color.white)
    table.cell(book, 0, 4, "Passed / failed", text_color=color.white)
    table.cell(book, 1, 4, str.tostring(passed) + " / " + str.tostring(failed), text_color=color.white)

What Run opens

The script above in the Alpha Charts terminal, on MNQ as written and on NQ with two inputs changed: its own screens, taken on 4 November 2026.

The terminal's chat with the MNQ or NQ script read, put on MNQ1! and backtested, and its reply
It lands on MNQ 5-minute and runs. The Copilot reads the script, puts it on the chart and runs the backtest. Ask it to run the same on NQ, or at your plan's risk: it edits the script and runs it again.
MNQ 5-minute on 20 October 2026 with the opening range drawn and the script's table: 508 days with a setup, 37 skipped, $382 average risk, 22 challenges, 6 passed and 15 failed
On MNQ, the plan holds. The script's table: 508 days with a setup, 37 skipped because even one micro risked more than $500, $382 at risk on average, 22 challenges with 6 passed and 15 failed.
NQ 5-minute on 20 October 2026, the same script set to take one contract: 508 days traded, $2,799 average risk, 343 challenges, 132 passed and 210 failed
On NQ, one contract every day. The same script with two inputs changed, one contract when $500 does not pay for one and $2.50 commission: $2,799 at risk on average, 343 challenges in the same two years, 132 passed and 210 failed.

Run your version free

The code is free to copy. Running it takes a free account, no card.

Free account

No card, no time limit.

$0
  • Unlimited backtests, costs charged, with the out-of-sample check
  • The Pine script audit and the full trade list
  • The Pine Copilot writes and edits your script
  • 50 AI credits a day

Paid plans add more AI, the optimiser and the rest of the desk, each with 30 days money back. See the plans

The same strategy, sized four ways

The same entries on the same prices: MNQ and NQ move together, at $2 and $20 a point.

SizeTradesRisk a tradeWorst tradeChallengesCommission
MNQ, sized from $500: the code aboveThe script as written471$382−$5316 of 22passed$1,299
NQ, sized from $500Skips a day when one contract risks more1507 of 508 days skipped$420−$1050 of 1never finished$5
NQ, one contract every daySet to take one contract anyway508$2,799−$4,020132 of 343304 of 342 challenges over within two trades$2,540
10 MNQ every dayOne NQ's size in micros508$2,799−$4,030132 of 343passed$7,620$10 more a trade than one NQ

Sized from the plan, NQ barely traded. One contract cost more than $500 at the stop on every day but 28 November 2024, Thanksgiving, when a short session left an 18-point range. Skipping is what a risk plan should do; it just means the plan does not fit this contract.

Forced to one NQ, a challenge came down to one or two trades. An average loser of $1,544 is three-quarters of the drawdown, and a 2R winner is more than the target: 304 of 342 challenges were decided within two trades, and the worst single trade lost −$4,020, twice the drawdown.

Ten micros are one NQ, at three times the commission. Same points, same slippage in dollars, ten commissions instead of one: $10 more a trade at these rates, $5,080 over 508 trades. What MNQ gives is room to size to the plan, not a cheaper point.

When NQ makes sense

When one NQ fits your risk: a stop of about 24 points at $500 a trade, 49 at $1,000. Then NQ is the cheaper way to hold the same size. With wider stops or a small drawdown, MNQ is the contract that lets you size to the plan, one $2 step at a time.

Questions

Should I trade MNQ or NQ in a 50K challenge?

The one whose contract fits your risk. One NQ moves $20 a point and one MNQ $2. With $500 at risk a trade, one NQ fits a stop of about 24 points; MNQ sizes wider stops in $2 steps. On the NQ opening range breakout, whose stop is the 15-minute range (108 points on a median day in these two years), one NQ fitted $500 on one day in 508; MNQ traded 471 of them.

How many MNQ contracts can I trade with a $2,000 trailing drawdown?

Decide what a trade may lose first, then divide by what one contract loses at your stop. At $500 a trade, four losers in a row reach $2,000. With a 40-point stop one MNQ loses $81 with two ticks of slippage, so $500 pays for 6 contracts; with an 80-point stop, 3; with 108 points, 2.

Is 1 NQ the same as 10 MNQ?

In points, yes: 10 MNQ move $20 a point, like one NQ. In costs, no: commission is per contract, so 10 micros pay ten commissions. At $0.75 a side per micro and $2.50 per E-mini, 10 MNQ cost $15 a round trip and one NQ $5: over the 508 trades in this test, $5,080 more.

Why did one NQ contract end so many challenges so fast?

Each trade risked $2,799 on average, more than the $2,000 example drawdown, so one loser could end a challenge and one winner at 2R could pass it: 304 of the 342 finished challenges were over within two trades. That shows what the size does, not whether the strategy works.

Does the tester charge different costs for MNQ and NQ?

It charges what the script declares, per contract. With no commission in the script it charges $2.50 a contract each side on every future, micros too, and a tick of slippage on market and stop orders. The MNQ run here declared $0.75, about a micro's all-in rate, and the NQ runs $2.50.

Will trading MNQ make me pass?

No one can say that. A backtest shows how past data would have treated these rules at this size, with these costs. Here the same entries on MNQ passed 6 of the 21 challenges that finished: the micro made the risk fit the plan, not the strategy better.

Can I use my firm's rules?

Yes, the target, the drawdown and the risk a trade are inputs. The script stores no firm's rules, and firms change them, so take the numbers from your plan's current page. Alpha Charts is not a prop firm and is not connected with any.

Test the whole challenge

Size is one decision. To test a strategy against a challenge's rules at once, the target, the daily loss limit, the drawdown and the cut-off, paste it into the prop firm challenge backtester. The rules on their own, in Pine Script: a trailing drawdown and a daily loss limit. The strategy itself, run 24 ways, is in the NQ opening range breakout study.

Alpha Charts is software for writing and testing trading scripts. It is not a prop firm: it offers no challenges, evaluations or funded accounts, does not trade for you, holds no money and gives no investment advice. Backtests are past results with costs charged and do not predict passing a challenge or making money. The rules on this page are example numbers, not any firm's. MNQ and NQ are CME Group contracts.

The MNQ or NQ scriptFree account, no cardRun it free