Trade Copier

Send one TradingView alert to several of your own licenses at once, each with its own lot multiplier, using a Copier ID in place of a license key.

Overview#

A Trade Copier replicates one inbound webhook signal to several of your own licenses at the same moment. You get a Copier ID in the same format as a license key, and you use it in your TradingView alert where the license key normally goes. Every license you select receives that signal, scaled by a per-license lot multiplier.

The copier is an address, not a license. Nothing connects to it, it never places a trade of its own, and it does not consume one of your license slots. It exists to solve one problem: running the same strategy across several accounts without maintaining one alert per account.

Available on the Pro plan and above. Set it up under Copy Trades to Multiple Licenses on the Licenses page.


Using a Copier ID in an alert#

The Copier ID replaces the license key. Nothing else about the payload changes.

CSV, first field, exactly like a license key:

A1B2-C3D4-E5F6-7890,buy,EURUSD,size_lots=0.10,sl_pips=50,tp_pips=100

JSON, in the license field:

{
  "license": "A1B2-C3D4-E5F6-7890",
  "action": "buy",
  "symbol": "EURUSD",
  "size_lots": 0.10,
  "sl_pips": 50,
  "tp_pips": 100
}

Both formats are auto-detected, same as always.

PineConnector-format alerts#

A copier declares no format of its own. It routes the alert exactly as it arrives, and each license translates it using its own EA settings, so a copied signal behaves identically to one sent straight to that license key.

That means your alerts keep working unchanged. If your licenses run the EA in PineConnector Compatibility Mode, point a PineConnector-format alert at your Copier ID and every one of them interprets risk=, sl=, tp= and pending= exactly as it already does.

The requirement that follows: every ticked license must be set to the same mode your alerts are written in. A PineConnector alert reaching a license whose EA runs the default PineHook syntax is rejected on that license, the same rejection it would get if you sent the alert to that license directly. Copying a strategy assumes the same EA configuration everywhere, so this is normally already true.

A license whose EA has never connected has reported no settings, so a PineConnector alert to it fails closed rather than guessing whether risk=1 means one lot or one percent. Again, identical to a direct alert.


Which commands fan out#

All of them. Entries, all close and cancel forms, modify, delayed signals via delay=, and EA-control commands such as eaon and eaoff all replicate to every selected license.

A delayed signal creates its own delayed entry on each destination, and a later canceldelay sent to the same Copier ID cancels all of them together.

EA-control commands are worth a moment's thought before you send them: eaoff aimed at a Copier ID disables trading on every selected license at once. That is the intended behavior, because it makes the copier a working kill switch across a whole fleet, but it is not reversible by accident.


Lot multiplier#

Each selected license carries a multiplier between 0.01 and 100, defaulting to 1. On a size_lots=0.10 signal:

MultiplierVolume traded
0.5x0.05 lots
1x0.10 lots
2x0.20 lots

What scales#

Every parameter that expresses how much to trade:

size_lots · size_pct · size_pct_equity · size_dollar · size_margin_pct · size_balance_lots_pct · close_lots · tp1_lotstp10_lots · sl1_lotssl10_lots

Percent-based sizing scales too. A size_pct=1 signal on a 2x target risks 2% of that account's balance. Since each account has its own balance, the result stays proportional to the account it lands on.

What never scales#

Every parameter that expresses a price or a distance:

sl_pips · sl_price · sl_pct · tp_pips · tp_price · tp_pct · price · price_pips · price_pct · distance_pips · distance_pct · distance_atr · every trail_* and be_* parameter · close_pct · tpN_close / slN_close · magic · expiry · closetime · the min* account filters · maxspread_*

Your stops, targets and trailing behavior are identical on every account. magic is deliberately identical too, so a later closelong magic=X reaches every leg.

Boundaries#

If a scaled value exceeds a parameter's normal maximum, it is clamped to that maximum and a warning is recorded, and the trade is still sent. A leg dropped for being slightly out of range would leave your accounts holding different positions, which is the exact problem a copier exists to avoid.

If a scaled lot value rounds down to zero volume, that license is skipped and the reason (copier_lot_underflow) appears in the webhook response for that alert. A zero-lot order is never sent.

Broker rounding is not applied here. Your EA still normalizes volume to the symbol's minimum and step, as it does for any signal.


Per-license gates still apply#

The copier decides where a signal goes. Each destination license still decides whether to accept it. On every copy, that license's own configuration is enforced:

  • Symbol filter. A blacklisted or non-whitelisted symbol is blocked on that license only.
  • Position limits, active hours, spread limits. The EA's own settings for that account.
  • Pending-order limit. A license already at its live pending-order ceiling is skipped.
  • Queue. A license whose queue is full rejects the copy, and the others still receive it.

A copier can never push a trade past a risk control you set on an individual account.


Signal authentication#

A copier ID is a credential. It sits in a TradingView alert and it reaches every license you have ticked, so it is worth protecting the same way a license key is. Turn on Signal auth from the copier's row on the Licenses page and set a password of 8 to 72 characters.

Signal auth is checked once, at the copier. Every alert to that ID must then carry auth=YOUR_PASSWORD.

The destination licenses' own signal-auth passwords are not consulted on a copied signal. One alert cannot carry several different passwords, so the copier's password stands in for theirs. A license's own password still applies to signals sent directly to its license key.

That substitution is only safe while the copier actually has a password. If any license you tick enforces its own Signal Authentication and the copier has none, the copier refuses the whole fan-out with a 401 rather than delivering an unauthenticated signal to a license you deliberately protected. Set a password on the copier, or turn Signal Authentication off on that license.

Turning Signal auth off keeps the stored password, so switching it back on does not mean retyping it. Use Clear password to forget it entirely.

Protecting the licenses behind the copier#

A copier password protects the Copier ID and nothing else. Each target license still answers to signals sent straight to its own key, and if that license has no signal auth of its own, it answers to anyone who has the key.

When you set a copier password the dialog offers Require this password on the N selected licenses too, which puts the same value in both locks in one call. One secret then covers both routes: through the copier, and directly to any license behind it.

The two locks stay independent. You can give an individual license a different password afterward, and the copier keeps working, because a copied signal never consults the target's password. The propagation option only appears while a target actually lacks a password, so rotating the copier's password later cannot overwrite one you set deliberately.


Delivery and partial results#

A copier returns HTTP 200 as long as at least one license accepted the signal. The response body lists every destination and what happened to it:

{
  "status": "ok",
  "copier": true,
  "delivered": 2,
  "total": 3,
  "targets": [
    { "license_key": "A1B2-C3D", "status": "queued", "multiplier": 0.5 },
    { "license_key": "E5F6-789", "status": "queued", "multiplier": 1.0 },
    { "license_key": "9A8B-7C6", "status": "blocked", "reason": "symbol_filtered" }
  ]
}

This is deliberate. TradingView retries an alert that returns a non-2xx status, and a retry would re-fire every license that already traded, opening a second position on each of them. A partial result is reported, not retried.

A 429 is returned only when nothing was delivered and retrying could succeed (for example, every destination queue was full). When nothing was delivered and retrying would change nothing, the response is a 200 with "status": "blocked".


Limits#

Plan requiredPro and above
Copiers per accountNo limit
Licenses per copierYour plan's license limit (max 25)
Multiplier range0.01 – 100
License slots consumedNone
Signal costOne per alert, regardless of how many licenses receive it

Things to avoid#

  • Do not point one alert at both a Copier ID and an individual license key. That license will trade twice.
  • Prefer close_pct or closeall over close_lots for exits. close_lots is scaled by the multiplier, so changing a multiplier while a position is open leaves a later close_lots mismatched against the volume that was actually opened. close_pct is a percentage of whatever that account is holding, so it is always correct.
  • Treat the Copier ID as a credential. Anyone holding it can fire signals into every license you have selected.