Quantity & Position Sizing
Quantity controls how many contracts NinjaTrader places when a CrossTrade alert fires. This page covers how to set qty (statically or dynamically from a strategy), why the actual contracts filled can differ from what you sent, and the most common culprits: ATM template quantity mismatches, stale configurations, scaling, and copier ratios.
How do I set the quantity in my alert?
If you're sending a fixed size, put a number in the qty field to define how many contracts to open in NinjaTrader. If you're firing from a TradingView strategy, you can parameterize it with the \{\{strategy.order.contracts\}\} variable so the quantity comes straight from the strategy order instead of being hard-coded.
How do I dynamically pass the strategy's contract size into the alert?
Use the \{\{strategy.order.contracts\}\} TradingView variable in the qty field. The correct pattern is:
action={{strategy.order.action}};
qty={{strategy.order.contracts}};
The docs were updated to remove the old "Quantity" field reference to avoid confusion — only the dynamic variable form is current.
Do I still need to set qty in the signal if I'm using an ATM strategy?
Yes. The qty in the alert and the quantity configured on the ATM template must match exactly, or the ATM will not open. This trips up a lot of new users.
Why does my ATM silently fail to open when I use dynamic quantity?
NinjaTrader silently fails to open an ATM if the alert qty does not match what the template expects. This is an NT8 behavior, not a CrossTrade issue — CrossTrade's "successful" status just confirms the signal was handed off to NT8, not that NT8 executed it. If you dynamically change the webhook contract quantity so it no longer matches the ATM's saved quantity, the entry will not execute even though CrossTrade reports success.
What happens if I send more contracts than the ATM template calls for?
The extra quantity is added to the ATM's brackets — usually the first set. For example, sending 4 contracts to a template configured for 3 will open the ATM and add the extra contract to the first bracket group. ATMs do still fire when the webhook qty is higher than the default, so in principle you can scale up by leaving ATM quantities at 1 and sending larger quantities, but the quantity must still satisfy the template's minimum.
My ATM isn't opening — what's wrong?
There are really only two things that prevent an ATM from opening: the template name or the qty. The fastest way to isolate it is to fire the "Send Test Command" from the CrossTrade dashboard against a freshly-created ATM. Also note that NT8 doesn't always surface ATM errors to the user — quantity mismatches and template-name-not-found errors often just land as red entries in the NT8 Control Panel Logs tab (not the CrossTrade activity log).
Where do I look when the alert reports success but no position opens?
Check the NT8 Control Panel's Logs tab (not the Activity Log, and not the CrossTrade webhook log). If something is failing inside NT8 after the handoff — including ATM quantity mismatches or template-not-found errors — it will be logged there as a red error. CrossTrade's "Execution" message only confirms the signal reached NT8; it does not confirm the order filled.
Does CrossTrade calculate or modify the qty I send?
No. CrossTrade submits exactly what you send for the qty field. Nothing is manipulated or calculated on our end. If the filled quantity is different from the alert quantity, the cause is downstream — typically an ATM mismatch, a copier ratio, or Auto-Sync reconciling against the leader.
Can I cap the maximum contracts per instrument on an account?
There isn't a dedicated command for capping contracts on an instrument at the moment — it's on the research list. If what you actually want is "don't stack a second trade on top of an open one," use require_market_position=flat; to only forward signals when the account is flat.
See: require_market_position.
Can I route alerts to multiple accounts or instruments?
Yes. You can fire alerts against any instrument and route them to whichever account you want. Whether the alerts interfere with each other is purely a function of how you've configured them — an NT8 account only knows the instrument and the open contract count; it doesn't care where the order originated.
Why did my copier follower open more contracts than expected?
The most common causes are ratios and Auto-Sync:
- Ratio math: A 2x ratio means 1 leader contract becomes 2 follower contracts. Review the copier logs for each account to confirm the multiplier applied.
- Auto-Sync reconciliation: If the follower's reported position drifts from the leader (including when NT8 or a prop firm briefly misreports a quantity as zero), Auto-Sync will keep sending correction orders every few seconds until the positions match. If the connection is unstable, this can stack extra contracts. Disabling Auto-Sync until the underlying connection is stable is recommended.
- Partial fills with fractional ratios: Each leader partial fill is scaled and rounded independently. A 5-contract leader exit split as 4+1 with a 0.5x ratio becomes FLOOR(4×0.5)+ceil-to-min(1×0.5)=2+1=3 on the follower instead of 2, and can leave the follower with an offsetting short. Auto-Sync is the practical remedy for this case.
How does fractional ratio rounding work on the copier?
CrossTrade takes the floor of the scaled quantity and rounds down to the nearest whole contract. The one exception is the minimum: if the leader is 1 contract and the scaled follower value falls between 0 and 1, it rounds up to 1. The minimum contract size is always 1.
Will a follower with a Max Position Size cap reject orders that exceed it?
No — it caps the follower's position rather than rejecting the order outright. If the follower's Max Position Size is 1 and the leader opens 3, the follower opens 1. Note that a Max Position Size set only on the follower (with none on the master) can also be the reason a follower's orders appear to stall or not execute.
How do I size one leader trade differently across multiple follower accounts (e.g., HG on some, MHG on others)?
Use the copier's instrument replacement to trade MHG on specific followers when the leader trades HG (or RTY). Sizing and mapping are controlled at the copier level. Direction, however, cannot be controlled from inside the copier — any long/short filtering has to be handled at the strategy level.
Can I scale in and out of a position with CrossTrade?
Yes — you can send additional buy/sell signals that add to or reduce an open position, including with ATMs (ATMs are placed as a grouped order). If you're sending signals that might affect a position that's already wrapped in an ATM, add flatten_first=true; to cancel the existing ATM's pending orders first. Note that when you partially close a position, any existing TP/SL orders do not auto-adjust to the new contract count — CrossTrade does not actively monitor positions the way an ATM would, so a 5-contract entry with a 2-contract partial close will still have the original 5-contract TP/SL on the remaining 3 contracts.
Why can't I get a "trailing stop per trade" when scaling in?
Because "a trade" isn't well-defined once you add contracts. In NT8, if you open +2 ES at price X and then add +3 ES at price Y, the entire +5 ES position has a single average price Z. NT8 has no native mechanism to track the +2 and +3 legs separately at their individual execution averages, and it has no way to split an open position while both halves are still open. Tracking per-leg trailing levels would require independently tracking each leg's execution average against the underlying price — it's a heavy lift and is not supported today.
My follower account opened 10 contracts when I only sent 1 — what happened?
That pattern almost always traces back to Auto-Sync repeatedly attempting to recalibrate the follower to the leader. If the connection is flaky or the reported leader quantity briefly flips (e.g., NT8 reads the leader as zero for several seconds because of a prop connection issue), Auto-Sync will keep sending correction orders to close the gap. Review the copier logs for the specific follower — if you see repeated sync attempts, that's the cause. Disabling Auto-Sync until prop firm / connection issues are resolved is the recommended workaround.
Why is Auto-Sync considered an "advanced" feature?
Because as long as the account doesn't explicitly report itself disconnected, Auto-Sync will keep retrying every few seconds to reconcile orders and positions with the leader. When an account times out or orders get blocked silently (e.g., rate limiting, prop-firm rejections that don't surface as explicit errors), that retry loop can cause extra contracts to stack up. The general recommendation is to start with Auto-Sync off until you're comfortable with how the copier behaves, then enable it once your account and connections are stable.
What does "Auto-Sync Exhausted" mean in the copier logs?
It means the copier sent correction orders to reconcile the follower's position to the leader's, but the follower's position never changed — typically because the broker or prop firm silently rejected or blocked the orders. Rather than keep retrying forever, Auto-Sync stops and surfaces the message. It will retry automatically on the next position change, or you can trigger a Manual Sync to force a reconcile.