Copier fields
A trade copier copies trades from a leader account to one follower (single) or several (group). The same fields apply to NinjaTrader (/nt8/copiers) and Tradovate (/tradovate/copiers) unless the Broker column says otherwise.
Access: W writable, R read-only.
| Field | Type | Access | Broker | Constraints | Description |
|---|---|---|---|---|---|
id | string | R | Both | Copier id, assigned when it is created | |
nickname | string or null | W | Both | 1 to 64 characters. null removes it | Display name |
active | boolean | W | Both | New copiers are off unless you send true | Whether the copier is copying |
mode | order or execution (NinjaTrader); signal, execution or order (Tradovate) | W | Both | How trades are copied | |
leader | string | W | Both | One of your accounts; not also a follower | The account being copied |
type | single or group | W | Both | Change it together with followers and groupName | One follower or a named group of followers |
groupName | string or null | W | Both | 1 to 64 characters. Required for group, null for single. On NinjaTrader it must not match one of your account names | Name of the group |
followers | array of objects | W | Both | single: exactly 1. group: 2 to 200, no duplicates, leader excluded | The accounts that receive the copies |
followers[].account | string | W | Both | One of your accounts | Follower account |
followers[].ratio | number or absent | W | Both | One of 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75 or a whole number from 2 to 10 (otherwise ratio_not_a_step), not checked when sizing.method is fixed. Groups only. Its whole-number part must not exceed sizing.maxQuantity | This follower's own ratio, instead of sizing.ratio |
followers[].environment | demo or live | R | Tradovate | The follower's Tradovate environment | |
sizing | object | W | Both | How follower quantity is computed | |
sizing.method | ratio or fixed | W | Both (fixed: Tradovate) | NinjaTrader copiers use ratio only | ratio multiplies the leader quantity; fixed always trades quantity |
sizing.ratio | number | W | Both | One of 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75 or a whole number from 2 to 10 (the web app's choices; otherwise ratio_not_a_step). Not checked when method is fixed | Multiplier used with ratio sizing |
sizing.quantity | integer or null | W (Tradovate), R (NinjaTrader) | Both | 1 to 10000. Required for fixed, null for ratio | Quantity used with fixed sizing |
sizing.maxQuantity | integer or null | W | Both | 1 to 10000. null means no cap | Largest position a follower may hold |
inverse | boolean | W | Both | In order mode only together with fillsOnly | Copy in the opposite direction |
fillsOnly | boolean | W | Both | Not allowed in execution mode | Fills Only: copy the leader's fills as market orders and ignore its working orders |
instruments | array of strings | W | Both | 1 to 200 root symbols (ES, MNQ: uppercase letters and digits, up to 10 characters, no duplicates), or ["*"] alone for all | Products the copier copies |
symbolReplacements | object | W | Both | At most 200 FROM: TO pairs. Keys and values are uppercase letters and digits, up to 10 characters. No self-mapping. Keys must be in instruments unless *. In order mode only related sizes of one product (for example ES to MES). A PATCH replaces the whole map; send {} to remove them all | Trade a different product on the followers |
stealth | boolean | W | Both | Stealth Mode. NinjaTrader: copied orders get neutral names instead of tracking ids. Tradovate: the copied-from attribution text is left out | |
tandem | boolean | W | Both | Every follower needs an Account Manager monitor on the same broker | Tandem Mode: copying runs only while the followers' monitors are active and within their limits |
autoSync | object | W | Both | Keep follower positions in line with the leader | |
autoSync.enabled | boolean | W | Both | Turn Auto-Sync on | |
autoSync.intervalSeconds | integer | W | NinjaTrader | 3 to 900. Default 10 | How often positions are compared |
syncCorrection | object | W | Both | Limits on automatic corrections | |
syncCorrection.cooldownSeconds | integer | W | Both | NinjaTrader 60 to 86400; Tradovate 30 to 86400 | Minimum time between corrections |
syncCorrection.maxAttempts | integer | W | Both | 1 to 10 | Corrections allowed per mismatch |
reconnectDelayMs | integer | W | NinjaTrader | 0 to 3600000, whole seconds only (multiples of 1000). 0 is off | Reconnect Delay: extra wait after a leader reconnects before copying resumes |
strategyTagMode | override or skip | W | NinjaTrader | How Auto-Sync treats follower positions held by Strategy Lock: skip leaves them alone, override corrects them | |
created | string (timestamp) or null | R | Both | When the copier was created | |
updated | string (timestamp) or null | R | Both | When the copier last changed |
Sending a NinjaTrader-only field to a Tradovate copier returns 422 field_not_applicable. So does sizing.quantity on a NinjaTrader copier.
A create refuses read-only fields (422 field_read_only). A PATCH may echo read-only and not-applicable fields back from a GET: each one is ignored when it equals the saved value (null for a field this broker does not have) and refused (field_read_only or field_not_applicable) when it differs. updated is always ignored. So you can GET a copier, edit it and PATCH the whole object back; if nothing differs the response says changed: false.
Defaults on create
A create needs type, leader and followers (plus groupName for a group). Everything else takes the web app's new-copier default, except active, which is false unless you send true:
- NinjaTrader:
mode: order,stealth: true, ratio sizing at 1,instruments: ["*"], Auto-Sync on every 10 seconds, sync correction 300 seconds and 1 attempt,tandem: false,reconnectDelayMs: 10000,strategyTagMode: override. - Tradovate:
mode: signal,stealth: true, ratio sizing at 1,instruments: ["*"], Auto-Sync on, sync correction 300 seconds and 1 attempt.
A copier created without "active": true does not copy anything until you turn it on. This lets you review it first.
Rules
The ownership check runs on every create and whenever type, leader, followers or groupName is sent. The loop, duplicate and Auto-Sync checks run on every create, whenever one of those fields or instruments or autoSync is sent, and when a copier is turned on. They compare against all your copiers on the same broker, including ones that are off. Turning a copier off is always allowed.
- Ownership. Every account must be yours (
404 account_not_found). On NinjaTrader the connected add-on must list them, andBacktestandPlayback101are never accepted. Because the add-on is asked, changing any of the four fields above needs it connected (409 addon_disconnected); sending their saved values back does not. On Tradovate they must be among your synced Tradovate accounts. - No copy loops (
409 copier_cycle): a copier cannot lead, directly or through other copiers, back to its own leader. - No duplicates (
409 duplicate_copier): a second copier from the same leader to the same follower is allowed only when the two copy different instruments.*overlaps everything. On Tradovate a copier that is on is held to a stricter rule: creating one with"active": true, or adding a leader and follower pair to a copier that is on, is refused when any other copier already links that pair, whatever the instruments. - Auto-Sync (NinjaTrader,
409 autosync_conflict): a follower shared by two copiers cannot have overlapping instruments when either copier uses Auto-Sync. Sharing a follower at all needs the add-on connected and v1.10.10 or newer. - Shared followers (Tradovate,
409 follower_conflict): a copier that is on cannot share a follower with another active copier when either of them uses Auto-Sync. - Tandem (
409 tandem_requires_monitor): every follower needs an Account Manager monitor. - Mode rules:
executionmode cannot usefillsOnly, andinverseinordermode needsfillsOnly. These are refused rather than silently changed. - Changing the type: send
type,followersandgroupNametogether, for example{"type": "group", "groupName": "Team", "followers": [...]}. AgroupneedsgroupNameand at least two followers; asinglecopier needs exactly one follower andgroupName: null. - Names: Tradovate account names compare without regard to case; NinjaTrader names must match exactly. Account names may contain spaces inside the name, but leading or trailing spaces, tabs, non-breaking spaces, other whitespace,
;and=are refused (422 validation_failed). - Turning Auto-Sync off on NinjaTrader resets
syncCorrectionto 300 seconds and 1 attempt, as the web editor does, unless you sendsyncCorrectionin the same request. - A copier saved before today's rules does not block unrelated changes. A NinjaTrader copier saved with fixed-quantity sizing reads as
fixedwith itsquantityand can be switched toratio.
A follower ratio whose whole-number part is larger than sizing.maxQuantity is refused, because that follower could never place a trade. Other group sizing that the platform would block is saved and returned with a warning.
When changes take effect
- NinjaTrader: sent to the add-on right after the save, or when it next connects.
- Tradovate: signal mode on the next signal, execution and order mode on the next fill. Turning on your first active Tradovate copier can take up to about 30 seconds.