Running Multiple Strategies
How to run more than one trading strategy without them stepping on each other.
This is the most complex use case on CrossTrade, and the one with the most misconceptions. If you're running a single strategy across multiple accounts, you want Guide 4: Managing Multiple Accounts. This guide is specifically about running different strategies that might conflict with each other on the same instrument or account.
The Fundamental Constraint
NinjaTrader tracks one net position per instrument per account. There's no concept of "Strategy A is long 2 contracts and Strategy B is short 1 contract" within a single account. NT8 just sees "net long 1 contract." No CrossTrade feature changes this reality.
This means if Strategy A opens a long position and Strategy B sends a short signal on the same instrument in the same account, the short signal doesn't open a separate short — it offsets the long. Depending on quantities, you could end up flat or net short when one strategy thought you were long and the other thought you were short.
Everything in this guide flows from this constraint.
The Clean Solution: Separate Accounts Per Strategy
If your broker or prop firm provides multiple accounts, dedicate one account per strategy. Strategy A trades on Account1, Strategy B trades on Account2. They can trade the same instrument without interference because each account maintains its own independent position.
// Strategy A alert
account=APEX_12345;
instrument=MNQ1!;
action=BUY;
...
// Strategy B alert
account=APEX_67890;
instrument=MNQ1!;
action=SELL;
...This is by far the simplest and most reliable approach. Each strategy's alerts target a dedicated account. No conflicts, no position tracking ambiguity, no need for tagging or locking.
If you need the same trade replicated from one strategy across multiple accounts, use either multi-account placement (account=Acct1,Acct2,Acct3;) or the trade copier. Both are covered in Guide 4.
Same Account, Different Instruments
If your strategies trade different instruments on the same account, things are simpler. require_market_position is evaluated per-instrument, not per-account. A long NQ position won't block an ES entry.
These won't interfere because they're on different instruments. The require_market_position=flat; on each ensures no strategy opens a second position on its own instrument.
If you want to limit total positions across all instruments on the account, use max_positions=2; (or whatever your limit is). This blocks any new entry if you already have that many positions open on the account, regardless of instrument.
Same Account, Same Instrument — The Hard Case
If you must run multiple strategies on the same instrument in the same account (maybe you only have one account), you need to accept that they will interact. Here are the tools available and what they actually do.
Strategy Lock (strategy_tag)
strategy_tag locks a position so that only alerts carrying the same tag can modify it. Add strategy_tag=AlphaScalp; to Strategy A's alerts and strategy_tag=BetaSwing; to Strategy B's alerts.
What this actually does: When Strategy A opens a position with strategy_tag=AlphaScalp;, any subsequent alert that tries to modify that position (close it, reverse it, add to it) will be rejected unless it also carries strategy_tag=AlphaScalp;. Strategy B's alerts (tagged BetaSwing) will be blocked from touching Strategy A's position.
What this does NOT do: It does not create separate virtual positions. It does not allow Strategy A to be long while Strategy B is short in the same instrument on the same account. NT8 still sees one net position. Strategy Lock just controls who gets to modify it.
The practical result: whichever strategy opens a position first "owns" it via the tag. The other strategy's signals for that instrument get blocked until the first strategy's position is closed and the tag is released.
This is useful for preventing accidental interference, but it doesn't enable true multi-strategy independence on one instrument. For that, you need separate accounts.
See the Strategy Lock docs for the full specification.
require_market_position
Use require_market_position=flat; to prevent a strategy from entering when a position already exists:
This prevents double entries. If Strategy A is in a position, Strategy B's entry signal gets blocked. But it also means Strategy B never enters until Strategy A exits. Whether that's acceptable depends on your trading logic.
Rate Limiting
If you're running fast-firing strategies that produce many signals, rate_limit controls how frequently alerts are accepted per instrument or account. This prevents one hyperactive strategy from flooding the account with orders.
This allows one alert per 60 seconds. See Rate Limiting docs for the full syntax.
Strategy Sync with Multiple Strategies
Strategy Sync is designed around a single strategy controlling a single instrument on a single account. If you're running two TV strategies that both use sync_strategy=true; on the same instrument/account, their position state variables will conflict. Strategy A thinks the position should be long because it just entered. Strategy B thinks the position should be flat because it hasn't entered yet. Both are sending sync data, and CrossTrade can't reconcile two conflicting sources of truth.
Don't use Strategy Sync for multiple strategies on the same instrument/account. Instead, use flatten_first=true; with require_market_position to manage the interaction.
If each strategy targets a different instrument (Strategy A on ES, Strategy B on NQ), Strategy Sync works fine — each instrument's sync state is tracked independently.
If each strategy targets a different account, Strategy Sync also works fine — each account is independent.
Practical Configurations
Two Strategies, Same Account, Different Instruments
This is the simplest multi-strategy setup. Each strategy targets its own instrument. No conflicts.
Strategy A (ES scalper):
Strategy B (NQ swing):
Both can use Strategy Sync independently. The require_market_position check is per-instrument, so they don't interfere. If you want a global position limit, add max_positions=2; to both.
Two Strategies, Different Accounts, Same Instrument
Clean separation. Each strategy owns its account entirely.
Strategy A → Account 1:
Strategy B → Account 2:
Each account tracks its own position state. Strategy Sync works independently on each.
Two Strategies, Same Account, Same Instrument (Managed)
The compromise approach when separate accounts aren't available. Use strategy tags to prevent interference, accept that only one strategy can hold a position at a time.
Strategy A:
Strategy B:
require_market_position=flat; means Strategy B can only enter when Strategy A's position is closed (and vice versa). strategy_tag ensures that even if a signal slips through, it can't modify the other strategy's position.
Don't use Strategy Sync here. Use flatten_first and require_market_position for position management instead.
Summary: Which Approach For Which Scenario
2 strategies, 2 accounts
Separate accounts
Yes (each independently)
2 strategies, 1 account, different instruments
Both on same account
Yes (each independently)
2 strategies, 1 account, same instrument
Separate accounts if possible
No — use flatten_first + require_market_position
1 strategy, multiple accounts
Multi-account or copier
Yes (single source of truth)
Related Guides:
Guide 2: Automating a TradingView Strategy — single-strategy sync setup
Guide 4: Managing Multiple Accounts — one strategy across many accounts
Guide 5: Exit Management — ATMs, brackets, and strategy exits
Reference Docs:
Last updated