Skip to main content

Broadcast a Signal — Fire to All Followers

TL;DR
  • Broadcasting is one field: broadcastSignal on your TradeCommand JSON. Set it to the signal source ID (a GUID) and every active follower receives the trade.
  • Use the Trade Command Builder's Broadcast Trade switch to wire it up visually. It generates a JSON payload that includes the field.
  • Followers' Copy Trade configs override size/leverage. Pair, direction, order type, DCA, trailing — all come from the broadcast.
  • Close commands (isClose, cancelAll, close-long, close-short) broadcast too. One close fires close orders on every follower's account.

You have a Signal Source, you have at least one Copy Trade (yours or a follower's). This page is how you actually fire trades into the channel.

The mechanism: adding broadcastSignal: "<source-id>" to your TradeCommand JSON tells the TVH backend "after executing this trade on my account, replay it on every active follower of this signal source". That is the whole protocol.


Step-by-step

Step 1 — Open the Trade Command Builder

Pick the exchange you trade on and open its Trade Command Builder (the same page you would use for any regular trade — see Trade Command Builder UI).

Step 2 — Activate the Broadcast Trade switch

Scroll to the bottom of the builder, below the order-option checkboxes, and flip Broadcast Trade on (1). A Source dropdown appears (2) listing every Signal Source you own.

Broadcast Trade switch and Source dropdown at the bottom of the Trade Command Builder

Step 3 — Pick the signal source

Select the signal source you want this trade to broadcast to in the Source dropdown. It shows the names; under the hood the form stores the source's GUID.

Step 4 — Configure the trade as normal

Build your trade the way you normally would: pair, direction, size, SL, TPs, DCA, trailing stop, hedge mode — every field in the parameter reference is available.

These values become the defaults for followers. Any follower whose Copy Trade does not override a field will use what you set here.

Step 5 — Click Generate

The generated JSON includes a broadcastSignal field with the source's GUID. The rest of the payload is a plain TradeCommand — see TradeCommand Anatomy for the structure:

{
"exchange": "binance",
"pair": "BTCUSDT",
"isBuy": true,
"isMarket": true,
"unitsType": "percent",
"unitsPercent": 5,
"leverage": 5,
"stopLossType": "percent",
"stopLossPercent": 2,
"broadcastSignal": "SIGNAL_SOURCE_ID",
"token": "YOUR_TVH_TOKEN"
}

Step 6 — Paste into TradingView

Paste the JSON into your TradingView alert's Message field exactly as you would for a normal trade. Enable Webhook URL and set it to the TVH endpoint that matches the exchange you broadcast from (the provider account fires the trade first, so the endpoint follows your exchange):

  • All exchanges except Binance: https://alerts.tv-hub.org
  • Binance (Spot & Futures): https://binance.tv-hub.org — use this whenever the broadcast trades a Binance pair.

Then click Create. The full endpoint list, the low-latency Classic variants, and the matching IP whitelists are on Webhook URLs & IP Whitelist.

TradingView alert dialog with the TVH webhook URL and the broadcast TradeCommand in the Message field

When the alert fires:

  1. Your account executes the trade with the values you set.
  2. The backend resolves the broadcastSignal GUID to a list of active followers.
  3. Each follower's Copy Trade template is merged with your broadcast (override rules in Follow a Signal).
  4. Each follower's exchange order goes out using their own API key.

What followers receive vs. what they override

This is the exact field-by-field mapping a broadcast applies on the follower side.

Field on the broadcastBehavior on the follower side
pairAlways taken from broadcast. Followers cannot override the symbol.
isBuy / isSell / isCloseAlways taken from broadcast.
isMarket / isLimit / orderTypeAlways taken from broadcast.
closeLong / closeShort / cancelAllDca / cancelAllOrdersAlways taken from broadcast. Close commands fully cascade.
useDca / dcaPercent / dcaOrderCountAlways taken from broadcast.
useTrailingStopLoss / trailingStopLossPercent / stopLossToBreakEvenAlways taken from broadcast.
preventPyramiding / reduceOnly / hedgeMode / workingType / delayAlways taken from broadcast.
useScaledOrders and scaled-order fieldsAlways taken from broadcast.
stopLoss / stopLossPercent / stopLossTypeFollower's value wins if non-zero, otherwise broadcast's value is used.
targetsFollower's value wins if non-empty, otherwise broadcast's targets are used.
units / unitsPercent / unitsType / leverage / marginTypeFollower's values win, except when follower's unitsType: "signalSource" — then broadcast's sizing is inherited.
apiKey / tokenFollower's own. The follower's TVH Token is automatically injected, the follower's API key is used for execution.

The cleanest summary: followers own size and risk caps; the provider owns everything else.


Broadcasting + your own trade execution

When you fire a broadcast trade, your own account executes it too. The default flow is always:

  1. Trade hits your account first — your API key, your exchange.
  2. Then it broadcasts — same payload (minus your token/API key) re-keyed for each follower.

There is no "broadcast-only, do-not-execute" toggle in the schema. If you want a broadcast that does not touch your own books, the workaround is to use a separate signal-provider account whose API key is set to read-only or pointed at a paper-trading exchange.


Sending close signals to followers

The close cascade is one of the most useful properties of broadcastSignal. Any trade that closes a position also closes it on every follower.

Close action you fireWhat followers receive
orderType: "close" (full close)Position closes on every follower account.
usePartialClose: true with a partialCloseValuePartial close fires on each follower (their position size, your percentage).
closeLong: true / closeShort: true (hedge-mode close)Hedge-mode-specific close fires on each follower.
cancelAll: true / cancelAllOrders: trueAll pending orders cancelled on each follower.
cancelAllDca: true / cancelAllDcaOrders: trueDCA-tagged orders cancelled.

To send a close-only broadcast to followers, build a TradeCommand with the close fields set, attach broadcastSignal, and fire it from a TradingView alert (or from the /api/trade endpoint directly).


Stopping a broadcast stream

If you want to stop new signals from going out:

  1. Disable the TradingView alert — instant stop, easiest path.
  2. Remove broadcastSignal from your Trade Command Builder — the next trade you fire only executes on your own account.
  3. Delete or pause the Signal Source — pause requires you to remove the field from every active strategy. Delete also revokes follower access.

Existing positions on follower accounts stay open when you stop broadcasting. Followers manage their own exits unless you fire a close broadcast. This is why you should never go silent mid-trade without warning your followers — they may not know your strategy's exit rule.


Latency considerations

Broadcasting adds overhead — the backend has to read your trade, look up followers, render per-follower commands, and queue execution on each follower's exchange.

Expect roughly 1-5 seconds of added latency between your fill and the follower's fill in normal conditions. Whether that matters depends on your trade profile:

Trade profileSuitable?Notes
Swing / positionA few seconds is rounding error on hour+ holds.
Scalping (5-15 min holds)Generally fine. Followers may see modest slippage on volatile pairs.
HFT / sub-secondNot suitable. The fan-out plus exchange round-trip blows past your edge. Use private endpoints, not copy trading.

Latency is dominated by the slowest follower's exchange round-trip, not by TVH itself. A follower on a sluggish exchange does not slow down faster followers — broadcasts fan out in parallel — but a follower's own fills may show slippage compared to the provider's fill.


Pine snippet for broadcasting

The simplest way to broadcast from a Pine strategy: include the broadcastSignal field in your alert message.

//@version=5
strategy("Broadcast Example", overlay=true)

// Replace with your real signal source GUID
sourceId = "SIGNAL_SOURCE_ID"
token = "YOUR_TVH_TOKEN"

buyMsg = '{"exchange":"binance","pair":"BTCUSDT","isBuy":true,"isMarket":true,' +
'"unitsType":"percent","unitsPercent":5,"leverage":5,' +
'"stopLossType":"percent","stopLossPercent":2,' +
'"broadcastSignal":"' + sourceId + '","token":"' + token + '"}'

sellMsg = '{"exchange":"binance","pair":"BTCUSDT","isClose":true,' +
'"broadcastSignal":"' + sourceId + '","token":"' + token + '"}'

longCond = ta.crossover(ta.ema(close, 9), ta.ema(close, 21))
shortCond = ta.crossunder(ta.ema(close, 9), ta.ema(close, 21))

if longCond
strategy.entry("Long", strategy.long, alert_message=buyMsg)

if shortCond
strategy.close("Long", alert_message=sellMsg)

See Pine Script — Strategy Alerts for the full pattern with multi-position and risk management.


Next steps