FAQ's
Getting Started
1. How do I get started with CrossTrade?
You need three things: a CrossTrade account (start a free trial at crosstrade.io/signup), NinjaTrader 8 connected to at least one live data feed (sim, prop, or broker — Level 1 data is sufficient), and a TradingView account with 2FA enabled (required for webhooks).
Install the XT Add-On via Tools > Import > NinjaScript Add-On, enable the Automated Trading Interface under Tools > Options, restart NT8, and log in with your CrossTrade credentials. From there, create a TradingView alert with your CrossTrade payload in the message field and your webhook URL in the notifications tab.
Setup guide with video: https://docs.crosstrade.io/readme/set-up-guide Zero to Hero walkthrough: https://docs.crosstrade.io/getting-started/zero-to-hero-guides/your-first-automated-trade
2. How do I upgrade to a new version of the XT Add-On?
Step 1: Close any open XT Add-On windows in NinjaTrader. Step 2: Go to Tools > Remove NinjaScript Assembly. Select the CrossTrade Add-On and click Remove. Step 3: Go to Tools > Import > NinjaScript Add-On and select the new version. Step 4: Restart NinjaTrader.
Download the latest version at https://crosstrade.io/download Full instructions: https://docs.crosstrade.io/getting-started/installation/upgrade-instructions
3. My secret key shows as "missing, invalid, or inactive."
The most common causes are invisible characters or trailing spaces picked up during copy-paste. Go to your My Account page (https://app.crosstrade.io/user/my-account), re-copy the key fresh, and make sure your alert format is key=your-key; with the semicolon at the end.
If the key is definitely correct and formatted properly, email [email protected] so we can look up your account directly. This can't be diagnosed without account access.
4. NT8 says there is a path error when importing the add-on (or crashes during import).
This is almost always caused by NinjaTrader being installed in a OneDrive-synced folder. OneDrive interferes with NT8's file paths during import.
Quick fix (manual install):
Unzip the CrossTrade download file.
Open a separate file explorer window to: Documents\NinjaTrader 8\bin\Custom\
Drag the unzipped files into that folder. Click Replace if prompted.
Start NT8 and click Yes on the compilation prompt.
Permanent fix: Reinstall NinjaTrader outside of OneDrive entirely. This prevents the issue from recurring with any NinjaScript add-on, not just CrossTrade.
5. LIVE: Unable to connect to the remote server (logon failed)
This can happen after updating NT8 to a newer version. To resolve:
Open Command Prompt (search "command prompt" in the Windows start menu)
Type
ipconfig /flushdnsand hit EnterRestart NinjaTrader
6. NinjaTrader keeps randomly disconnecting.
Random disconnects are usually caused by broker-side connection drops, internet instability, Windows sleep/power settings, or automatic Windows updates. NT8 itself can also cycle connections during extended sessions.
CrossTrade v1.12+ includes two features that handle this automatically:
Auto-Reconnect monitors your broker connections and automatically restores them when they drop unexpectedly. It waits a configurable delay before attempting to reconnect, retries up to 5 times, and stops to prevent infinite loops. Configure it per-connection on the web dashboard.
Data Watchdog catches a subtler problem: your connection shows "Connected" but the price data has silently stopped updating. The Watchdog monitors a reference instrument's price feed and triggers a reconnect when data goes stale. It pauses automatically when the market is closed.
Both features work together — when the Watchdog detects stale data, it delegates the reconnect to Auto-Reconnect.
Other things to check: disable Windows automatic updates on your trading machine or VPS, make sure power settings don't allow sleep/hibernate, and reduce the number of open charts if NT8 is sluggish (all charts run on a single thread regardless of CPU cores).
Connection Health docs: https://docs.crosstrade.io/xt-add-on/connection-health Optimizing NT8: https://docs.crosstrade.io/ninjatrader/optimizing-ninjatrader-performance
Alert Setup & Formatting
7. What format do I use for the instrument name in my alert?
CrossTrade accepts multiple formats:
NinjaTrader formats: ES 06-25, NQ JUN25, MNQ 06-25 TradingView continuous contract format: ES1!, NQ1!, MNQ1!
If you use a TV continuous contract symbol like ES1!, CrossTrade automatically converts it to whatever format your NinjaTrader instrument database expects. This is the recommended approach because it avoids manual updates at contract rollover.
You can also hard-code the contract if you prefer (e.g., instrument=ES 06-25;), but you'll need to update every alert when the contract rolls.
The instrument in your alert doesn't have to match the chart that triggered it. You can have an ES chart trigger a trade in NQ — just set instrument=NQ1!; in the payload.
Continuous Contracts docs: https://docs.crosstrade.io/webhooks/advanced-options/continuous-contracts
8. Do I need to update my contract month manually at rollover?
If you're using hard-coded contract months (e.g., instrument=ES 06-25;), yes — you need to update every alert when the contract rolls.
If you use TradingView continuous contract symbols (e.g., instrument=ES1!;), CrossTrade auto-converts to the active front-month using your NT8 instrument database settings.
One caveat with continuous contracts: during the rollover transition, TradingView shifts to the new front-month only after the new contract's volume surpasses the old one. If you update your NT8 database before TV has shifted, there can be a brief mismatch. We recommend either hard-coding or waiting until you confirm TV has rolled before updating NT8.
9. Can I trigger an alert on one instrument and execute a trade on a different one?
Yes. The instrument line in your alert payload has no connection to the chart or condition that triggered the alert on TradingView. You can have an ES chart fire an alert that executes a trade in NQ, MNQ, or any other instrument. Just set the instrument= field to whatever you want NT8 to trade.
10. How do I place a limit order instead of a market order?
Set order_type=LIMIT; and specify the price with limit_price=:
The limit price can be an absolute price level, a tick offset, a percentage offset, or a dollar value:
Absolute:
limit_price=5250.50;Tick offset:
limit_price=-10 ticks;(10 ticks below current price)Percentage:
limit_price=-0.5%;Dollar:
limit_price=-$50;
If you place a buy limit above the current price (or sell limit below), it fills immediately since you're crossing the spread.
As of v1.12, if you attach TP/SL brackets to a limit order, the brackets are held until the entry actually fills. If the limit never fills and gets canceled, the brackets are discarded — no orphaned orders.
Bracket Orders docs: https://docs.crosstrade.io/webhooks/advanced-options/bracket-orders Percentage and Tick Prices docs: https://docs.crosstrade.io/webhooks/advanced-options/percentage-and-tick-prices
11. My alert shows "improperly formatted request."
The payload is either missing required fields or has incompatible content. Check your Alert History on the web dashboard (https://app.crosstrade.io/user/alert-history) to see the exact payload that was received.
Common causes:
Missing semicolon at the end of a line
Leftover default text from TradingView still in the message box (delete ALL default text before pasting your payload)
Misspelled field name (e.g.,
ordertypeinstead oforder_type)Missing a required field for the command type (PLACE requires: key, command, account, instrument, action, qty, order_type, tif)
12. My alert shows "account not found."
The account name in your alert doesn't match any connected account in NinjaTrader. Account names are exact — Sim101 is not sim101 is not sim is not SIM101.
Open the Accounts tab in NinjaTrader and check the exact name. Use that exact string in your account= field. For prop firm accounts, the name is usually something like APEX_12345 or DEMO587654321 — check NT8 for the precise format.
TradingView Integration
13. Should I use a TradingView strategy or indicator with CrossTrade?
If your Pine Script starts with strategy(...), it's a strategy. If it starts with indicator(...), it's an indicator.
Strategies give you dynamic variables like {{strategy.order.action}} and {{strategy.order.contracts}}, plus position state variables for Strategy Sync. The downside: TV strategies require offsetting actions (every entry must have an exit), and the {{strategy.order.action}} variable only outputs BUY or SELL with no built-in way to distinguish entries from exits.
Indicators give you full control. You create separate alerts for buy and sell conditions, hardcode the action and quantity, and there's no offsetting requirement. The tradeoff is no dynamic variables for action or quantity.
Rule of thumb: if your logic does clean entries and exits with position tracking, a strategy with Strategy Sync works well. If it does stop-and-reverse or you want maximum simplicity, an indicator with flatten_first=true; is usually easier. If you're an end-user of a third-party script and didn't write the Pine code, indicators are almost always the simpler path.
Guide: https://docs.crosstrade.io/getting-started/zero-to-hero-guides/automating-tradingview-strategies Guide: https://docs.crosstrade.io/getting-started/zero-to-hero-guides/automating-tradingview-indicators
14. What does {{strategy.order.alert_message}} do and how is it different from other variables?
{{strategy.order.alert_message}} is a passthrough variable. It doesn't produce the action or quantity — it passes whatever text you defined inside your Pine Script's strategy.entry() or strategy.exit() calls using the alert_message parameter.
This means it only works if the full CrossTrade payload is already constructed inside your Pine Script code. If you didn't build the payload in Pine, this variable will be empty or contain default text and your alert will fail.
For most users, it's simpler to paste the full payload directly into the TradingView alert message field and use individual variables like {{strategy.order.action}} and {{strategy.order.contracts}} instead.
Dynamic Variables docs: https://docs.crosstrade.io/getting-started/tradingview-alerts/dynamic-variables
15. I changed my TradingView strategy settings but the alert is still using the old values.
TradingView alerts snapshot your strategy's settings at the time the alert is created. If you change the strategy's inputs after creating the alert (different SMA length, different risk parameters, etc.), the alert keeps using the old values. TV doesn't warn you about this.
The fix: delete the old alert, then create a new one. The new alert will use your current settings.
16. Why is CrossTrade receiving the wrong quantity from my Pine Script?
This is almost always one of two issues:
Stale alert: You changed a script input (like contracts per trade from 1 to 2) but your existing alert is still running on the old settings. Your chart and Pine Logs will show the new value, but the alert is a frozen copy of the old settings. Fix: delete the old alert and create a new one.
Variable scope in Pine Script: A variable calculated inside an if block may be na or holding a stale value when the alert() function executes. Fix: use the input variable directly in your payload string instead of a locally calculated variable. Input variables have global scope and are always accessible with the correct value.
Full diagnosis with code examples: https://docs.crosstrade.io/getting-started/tradingview-alerts/dynamic-variables
17. Can take_profit and stop_loss be used with TradingView strategy variables?
Yes. You can use dynamic values from Pine Script for TP/SL levels. The negative sign requirement for stop loss offsetting was removed — CrossTrade now auto-corrects the sign direction based on your position side.
One caveat: if you're running a stop-and-reverse strategy (constantly flipping long↔short without going flat), you can't use Strategy Sync because the position never reaches flat. For S&R strategies, remove the sync logic and use flatten_first=true; instead.
Bracket Orders docs: https://docs.crosstrade.io/webhooks/advanced-options/bracket-orders
Position Management
18. What's the difference between flatten_first, require_market_position, and out_of_sync?
These three features solve different problems:
flatten_first=true; — An action. Closes any existing position and cancels pending orders for the instrument, then proceeds with your new order. Use when you always want to enter from a clean slate.
require_market_position=flat; — A gate. Checks the account state and blocks the alert entirely if the position isn't in the required state (flat, long, short, or combinations like flat/long). Use when you want to prevent new entries while a position is open. Does not close anything — just rejects the signal.
out_of_sync=flatten; — A recovery mechanism. Part of Strategy Sync. When TradingView's expected position state doesn't match NT8's actual state, this determines what happens: wait (block and do nothing), flatten (close NT8 position to reset), resync (auto-correct to match TV), or ignore (proceed anyway).
max_positions=1; — A guard. Blocks alerts if you already have any position open on the account, regardless of instrument.
You can combine them. For example, flatten_first=true; with require_market_position=flat; means: only enter if the account is flat (no existing position to flatten), but if for some reason a position exists, flatten it first. The require_market_position check happens before flatten_first.
Reference:
19. Does require_market_position apply per-instrument or per-account?
Per-instrument. If you have an open NQ position and an ES alert comes in with require_market_position=flat;, the ES order will go through because the ES position is flat. The NQ position doesn't affect it.
If you want to limit total positions across all instruments on the account, use max_positions=1; (or whatever your limit is). That's account-wide.
You can also check for combined states: require_market_position=flat,long; means "proceed if the position is either flat or already long." This is useful for adding to a position in one direction while blocking entries in the other.
20. How does Strategy Sync work?
Strategy Sync (sync_strategy=true;) keeps your NinjaTrader position aligned with your TradingView strategy's position state. You include these dynamic variables in your alert:
Before placing any order, CrossTrade compares what TradingView thinks the position is (from the variables) against what NinjaTrader actually has. If they match, the order proceeds. If they don't, the out_of_sync parameter determines what happens.
Strategy Sync docs: https://docs.crosstrade.io/webhooks/advanced-options/strategy-synchronization Guide: https://docs.crosstrade.io/getting-started/zero-to-hero-guides/automating-tradingview-strategies
21. Why am I getting out-of-sync warnings?
Your TradingView strategy and NinjaTrader position have drifted apart. Common causes:
You manually closed a position in NT8 while the TV strategy was running
A TradingView alert was missed or delayed (TV server load, connectivity)
An ATM strategy closed the position (TP or SL hit) and TV doesn't know about it
The XT Add-On lost connection during a critical signal
This is exactly what Strategy Sync is designed to detect. The warning is informational — it tells you the system caught and handled the mismatch. With out_of_sync=flatten;, the NT8 position gets reset to flat and both sides wait for the next clean entry. With out_of_sync=resync; (v1.12+), CrossTrade automatically submits a corrective order to align the position.
Check your Alert History on the web dashboard — it shows what TV expected vs. what NT8 had, so you can see exactly where the drift occurred.
22. How do I set up stop-and-reverse automation?
Stop-and-reverse means flipping directly from long to short (or vice versa) without going flat in between. Use flatten_first=true;:
When a BUY alert fires, flatten_first closes any existing short position, then opens the long. When SELL fires, it closes the long and opens the short.
Do NOT use Strategy Sync for stop-and-reverse strategies. S&R strategies never go flat (there's no distinct entry/exit — every signal is both), which breaks the sync state machine. Use flatten_first without sync instead.
Exit Management
23. My ATM template isn't being applied — no error, nothing happens.
This is almost always a quantity mismatch. The qty in your alert must exactly match the total contract count saved in the ATM template. If the ATM is configured for 2 contracts (e.g., 2 targets at 1 contract each) and your alert sends qty=1, NinjaTrader silently fails. No error, no log entry, just nothing happens. This is an NT8 behavior, not a CrossTrade limitation.
Also check:
The template name in
strategy=YourATMName;is spelled exactly right (case-sensitive, spaces included)The template file actually exists in
Documents\NinjaTrader 8\templates\AtmStrategy\NinjaTrader is not installed in a OneDrive-synced folder (this can cause file-not-found issues)
In Chart Trader properties, ATM selection is set to "Select active ATM strategy on order submission"
24. What are orphaned orders and how do I prevent them?
Orphaned orders are bracket orders (TP/SL) left active in the market after the parent position is closed by something other than the brackets themselves — a manual close, a NAM flatten, a strategy exit signal, etc. If price hits one of these orphaned orders, it opens a new unintended position.
Prevent them by using flatten_first=true; on your entry alerts. This cancels any pending orders for the instrument before placing the new entry, ensuring every trade starts with a clean slate. This is especially important when using ATM templates.
25. How do I cancel pending orders via webhook?
Use command=CANCELORDERS; with the account and optionally the instrument:
Cancel all orders in an account:
Cancel orders for a specific instrument:
Cancel all orders across all accounts:
Note: when canceling by instrument, the instrument format must match the format of the original order. If your NT8 settings use numeric date format, use ES 06-25 not ES JUN25.
Multiple Accounts & Strategies
26. How do I send one alert to multiple accounts?
List the account names comma-separated in the account field:
Every listed account receives the same order with the same quantity. Each account executes independently — if one account fails (disconnected, blocked by require_market_position, etc.), the others still proceed.
If you need different position sizes per account, use the Trade Copier instead — it supports per-follower sizing ratios and instrument replacement.
Multi-Account Placement docs: https://docs.crosstrade.io/webhooks/advanced-options/multi-account-placement
27. Can I run multiple strategies on the same instrument and account?
NinjaTrader tracks one net position per instrument per account. No CrossTrade feature changes this. If Strategy A is long and Strategy B sends a short signal on the same instrument in the same account, the signals will conflict.
strategy_tag prevents one strategy from modifying another strategy's position, but it does NOT create separate virtual positions. It's a lock, not a partition.
The cleanest solution is separate accounts per strategy. If you must share an account, use require_market_position=flat; on each strategy so only one can hold a position at a time, and accept that they'll take turns rather than trade simultaneously.
Guide: https://docs.crosstrade.io/getting-started/zero-to-hero-guides/running-multiple-strategies
28. How do I set up the Trade Copier?
The Trade Copier is on the Trading tab of the web dashboard:
Click Add Copier
Select a leader account (the one that initiates trades)
Select one or more follower accounts
Choose a copy mode: Order mode (copies when order is placed, faster) or Execution mode (copies when order fills, safer for prop firms)
Set position sizing ratio (e.g., 1x, 0.5x, 2x between leader and follower)
Toggle the copier ON
The copier works independently of webhooks — you can trade manually, through a webhook, or through a local NT8 strategy, and followers will copy.
The Auto-Sync engine checks follower alignment every few seconds and corrects drift automatically. Be aware: if you manually close a follower position while auto-sync is running, it will re-enter to match the leader.
Trade Copier docs: https://docs.crosstrade.io/trade-copier/overview
Risk Management
29. How do I set up daily profit/loss limits? (NAM)
The NT Account Manager (NAM) monitors each account's session P/L every 2.5 seconds. When a threshold is breached, it can flatten the account and/or disable inbound alerts.
Set it up on the Account Management tab of the web dashboard:
Create a monitor for each account
Set your loss threshold (e.g., -$1,500) and profit threshold (e.g., $2,000)
Choose what happens when each is hit: flatten the account, disable alerts, closing only, or do nothing
Optionally set an end-of-day flatten time
NAM requires a Pro plan. The account must be flat at session start (6 PM ET). Set your loss threshold with a buffer below your firm's actual limit — in fast markets, slippage between detection and flatten is possible.
Account Manager docs: https://docs.crosstrade.io/account-manager/overview
30. Can I set multiple trading windows?
At the alert level, you can set one window per alert using start_time and end_time fields in the payload. Times are in US/Eastern:
You can also add closing_only_after=3:30 PM; to only allow closing orders after a certain time within your window.
For multiple windows per account, you need the NT Account Manager (Pro plan), which supports multiple time-based rules at the account level.
Workaround for Standard plan: create separate alerts, each with its own start_time and end_time, pointed at different TradingView conditions or the same condition.
Alert-level windows: https://docs.crosstrade.io/webhooks/advanced-options/trading-window Account-level windows: https://docs.crosstrade.io/account-manager/account-settings/trading-windows
31. Do I need a Pro plan for prop firm accounts?
Standard plan includes: all webhook commands, all advanced options (flatten_first, require_market_position, brackets, ATMs, Strategy Sync, multi-account placement, continuous contracts, trading windows at the alert level, rate limiting, etc.).
Pro plan adds: NT Account Manager (NAM) for P/L monitoring and daily loss limits, Trade Copier, API access, and multiple account-level trading windows.
For prop firm evaluations: Standard works if you only need alert-based automation. Pro is recommended if you need automated daily loss limits, trade copying across accounts, or per-account risk controls.
All CrossTrade orders go through the NT8 SDK and appear identical to manually placed orders (stealth by default).
Pricing: https://crosstrade.io/pricing
Performance & Troubleshooting
32. How much slippage should I expect? How fast is CrossTrade?
CrossTrade's internal processing — from receiving your alert to passing the order instructions to NinjaTrader — averages around 34 milliseconds.
Total end-to-end latency includes three segments:
TradingView → CrossTrade: Variable. TV fires alerts from their servers. Delays can occur at the top of the hour and during major news events when their server load increases. TV has acknowledged this and is working on improvements.
CrossTrade processing: ~34ms average.
NinjaTrader → Broker: Depends on your internet connection, PC specs, and the broker's execution speed.
Slippage on a market order depends primarily on TV delivery speed and market volatility at the moment of execution. CrossTrade can't control what happens outside its processing window.
NAM's P/L monitoring checks every 2.5 seconds — this is a separate polling mechanism and not related to alert/order processing speed.
33. My alert isn't getting to NinjaTrader.
Work through this diagnostic path:
Check Alert History first (https://app.crosstrade.io/user/alert-history). If the alert appears there, CrossTrade received it. The status and error message will tell you why it didn't reach NT8.
If it's NOT in Alert History at all:
Your webhook URL is wrong — re-copy it from your My Account page
TradingView didn't fire the alert — check TV's alert log
Your CrossTrade subscription may be inactive
If it shows "Success" in Alert History but nothing happened in NT8:
Make sure the XT Add-On is open and logged in
Verify you're connected to a live data feed (not just "Connected" — check the data is actually flowing)
Check if the instrument is valid (not an expired contract)
Check the XT Add-On's log in NinjaTrader for any local errors
If it shows an error in Alert History:
"Improperly formatted request" → formatting issue, see FAQ #11
"Account not found" → account name mismatch, see FAQ #12
"Outside trading window" → alert fell outside your configured window
"Signal blocked" or "Kill switch" → signals are being blocked at the global or account level
"Rate limit" → too many signals for the configured rate, see FAQ #35
34. Can I use the CrossTrade API to place orders programmatically?
Yes. The API uses the same command structure as webhooks. POST your payload to the webhook endpoint with Content-Type: text/plain and the same key=value format.
The API also exposes REST endpoints for:
Account data: cashValue, netLiquidation, unrealizedPnL, margins
Positions: current positions across all accounts
Orders: active and historical orders
Executions: fill history
Quotes: real-time market data for any instrument on your connected feeds
Pro plan required for API access.
API docs: https://docs.crosstrade.io/api/overview
35. What is rate_limit and how do I prevent duplicate orders?
Rate limiting controls how frequently alerts with the same ID are accepted. It prevents duplicate or rapid-fire alerts from executing multiple times.
This allows one alert with ID "mystrategy" per 60 seconds (default). If a second alert with the same ID arrives within that window, it's blocked.
Advanced formats:
rate_limit=1;— 1 request per 60 seconds (default)rate_limit=1/120;— 1 request per 120 secondsrate_limit=3/900;— 3 requests per 15 minutes
For preventing duplicate entries specifically (e.g., an indicator that fires the same condition on multiple bars), require_market_position=flat; is usually more appropriate — it blocks any entry while you're already in a position.
Rate Limiting docs: https://docs.crosstrade.io/webhooks/advanced-options/rate-limiting
36. Can I trade stocks, forex, or crypto with CrossTrade — not just futures?
Yes. Connect a broker that supports the asset class (IBKR or Schwab for stocks, for example) in NinjaTrader, and change the instrument in your alert to the appropriate ticker. Most CrossTrade examples use futures because that's what most users trade, so you'll need to adapt the instrument names.
Broker connection guides: https://crosstrade.io/blog/tag/how-to/
Last updated