Everything between a TradingView alert and a filled order: provider choice, alert configuration, payload reference, and the verification steps that catch problems before money is live.
This is where almost every setup ticket comes from — and the fix is nearly always the same one step. Read the non-negotiable item first, then follow the exact setup for your provider. Bracket prices are computed on the strategy side and embedded in every alert, so there's nothing to parse on the bridge.
v7.4 ships four built-in providers in the Webhook Provider dropdown: PickMyTrade, TradersPost, CrossTrade, and Custom Template. All four use the same alert Condition — Any alert() function call with an empty Message box:
| Provider | TradingView Alert Condition | Message box |
|---|---|---|
| PickMyTrade | Any alert() function call | leave empty |
| TradersPost | Any alert() function call | leave empty |
| CrossTrade | Any alert() function call | leave empty |
| Custom Template | Any alert() function call | leave empty |
What goes in the strategy's Auth Token / API Key and Account ID inputs, by provider:
| Provider | Auth Token / API Key → | Account ID → | Broker bracket |
|---|---|---|---|
| PickMyTrade | your PMT token | your exact account number (Tradovate or Rithmic) | native, broker-side |
| TradersPost | — leave blank (greys out) | — leave blank (greys out) | full, broker-side* |
| CrossTrade | your CrossTrade key | your NinjaTrader account name(s), comma-separated | fixed bracket, or ATM template (NT-side trail) |
| Custom Template | fills the {token} placeholder | fills the {account} placeholder | depends on template |
*TradersPost authenticates through your webhook URL, so the Auth Token and Account ID fields stay blank — they grey out automatically. Paradox builds the full bracket (market entry + take-profit + stop / stop-limit / trailing) into the payload it sends, so the position is protected broker-side.
Not sure which one? Tradovate account (most prop firms) → PickMyTrade. Rithmic account → PickMyTrade + your Rithmic connection name. NinjaTrader 8 → CrossTrade. Already on CrossTrade with Tradovate → CrossTrade with Destination = Tradovate. Anything else → TradersPost or Custom Template.
Best for: futures traders running Tradovate, Rithmic, TopstepX (ProjectX), TradeStation, Interactive Brokers, TradeLocker, or Match-Trader. Native broker-side bracket support.
app.pickmytrade.io and link your broker. Supported: Tradovate · Rithmic · Interactive Brokers · TradeStation · ProjectX (TopstepX) · TradeLocker · Match-Trader · Binance · Bybit.RITHMIC1). The full bracket, adaptive trailing stop, and multi-account all carry natively. On Tradovate? Leave it blank — your payload is unchanged.https://api.pickmytrade.io/v2/add-trade-data-latesthttps://api.pickmytrade.trade/v2/add-trade-data-latest
Your token travels in the JSON body the strategy emits — not in the URL. The older app.pickmytrade.com/webhook/... format is deprecated and silently fails.Nothing to configure on Tradovate. PMT executes through the Tradovate API. The only requirement is that the account is connected inside PickMyTrade — you do not log into Tradovate or set anything up there.
Multiple accounts (v7.3). Enter several account numbers in Account ID, comma-separated, and a single alert fires every one of them — e.g. run your eval and funded accounts side by side. Each must be an exact account number connected inside PickMyTrade.
Best for: traders on a TradersPost-supported broker (NinjaTrader, Tradovate, TradeStation, and more). As of v7.3 the strategy builds the full bracket for you — no JSON to paste.
traderspost.io, connect your broker(s), and create a strategy. Copy its webhook URL: https://webhooks.traderspost.io/trading/webhook/<id>/<token>.Verified end to end (v7.4). We audited the entire TradersPost path against their official spec. Two TradersPost-side settings worth checking: keep the "Use signal take profit / stop loss" boxes CHECKED (unchecked = your brackets get silently ignored), and near contract rollover use the exact contract symbol (like MNQZ2026) — TradersPost switches front-month on its own schedule, which can differ from TradingView's. Also good to know: TradersPost's trailing stop trails from entry at your full stop distance, broker-side — a simpler trail than the chart's adaptive one, so live trail exits won't mirror the backtest tick for tick. That's expected.
Migrating from QuantLynk? QuantLynk is retired. Flatten any open QuantLynk-managed position, switch Webhook Provider to TradersPost (or PickMyTrade), and re-create your alert. Already using TradersPost's older order-fills method? It still works — see the legacy note below.
Best for: NinjaTrader 8 traders. CrossTrade is a native provider as of v7.4 (Paradox) and v1.5 (Kairos) — no more hand-building custom templates for NinjaTrader.
Strategy tagging is automatic. Every order carries a strategy tag, so Paradox's trades stay in their own lane — other bots on the same NinjaTrader account can't touch them, and Paradox won't touch theirs. Running Kairos on the same account? Each algo keeps its own tag.
For any bridge not built in, set Webhook Provider = Custom Template and paste your bridge's exact JSON into the Custom Template field, using the strategy's single-brace placeholders. The strategy substitutes each one at fire time:
{symbol} · {action} (buy / sell / flatten) · {qty} · {price}{tp_price} · {sl_price} — absolute bracket prices · {tp_offset} · {sl_offset} — distances in points{token} — fed by your Auth Token / API Key input · {account} — fed by your Account ID inputFlatten Word field. The Flatten Word input controls the exact word the strategy puts in {action} when it closes a position (time-exit, session end, or stop). Set it to whatever your bridge expects for a close — e.g. close, exit, or flat. If your bridge ignores closes, that almost always means the Flatten Word doesn't match what it's looking for.
As of v7.3, TradersPost is a built-in provider (see the TradersPost section above) and that's the recommended path for new setups. If you're already running TradersPost the old way, that method still works:
traderspost.io, connect your broker(s), and create a strategy. Copy its webhook URL: https://webhooks.traderspost.io/trading/webhook/<id>/<token>.Switching to built-in? Change Webhook Provider to TradersPost, set the Condition to Any alert() function call, and clear the Message box — the strategy then supplies the payload. Don't mix methods: never pick "Order fills and alert() function calls," which doubles every fire.
In the TradingView alert dialog, open the Notifications tab → enable Webhook URL → paste your provider's endpoint there. Do not paste it in the Message box (that box is for the payload, which the strategy fills for the built-in providers). For PickMyTrade, copy the endpoint from your strategy detail page in PMT — it's the api.pickmytrade.io/v2/add-trade-data-latest address (or the .trade variant for Tradovate-only accounts).
Webhook URL field) are available on TradingView's Essential plan and above — Pro and Pro+ are fine too. The free plan does NOT include webhook alerts. Alert quotas: Essential 20 · Pro 100 · Premium 400 · Ultimate 2,000. Open-ended alert expiration (no 60-day timer) requires Premium or Ultimate; on lower tiers, alerts expire after ~2 months and must be renewed. 2FA must be enabled on your TradingView account before webhooks will deliver.For the four built-in providers (PickMyTrade, TradersPost, CrossTrade, Custom Template), this is the whole flow. The Condition is Any alert() function call and the Message stays empty — the strategy supplies the payload, bracket prices and all.
Paradox Algo Strategy v7.4 or Kairos Scalper [ParadoxAlgo], matching what appears in your Indicators → Invite-Only Scripts list.alert() with bracket prices, ticker, and direction already filled in. Do not paste a template here (that's only for the TradersPost order-fills path).If you inspect the JSON PickMyTrade receives, a few fields won't match the Pine script — and that's correct. Here's what the strategy sends versus what PMT adds on its own side, so you can tell a real issue from a non-issue.
The strategy emits a compact payload. PickMyTrade then adds its own internal fields on its side before routing to the broker — these are not from the Pine script, and seeing them does not mean the script is broken:
| Field | Added by | What it is |
|---|---|---|
symbol · action · quantity | Strategy | the order itself |
dollar_tp · dollar_sl | Strategy | bracket distance from entry, in points |
token · account | Strategy | your Auth Token and Account ID |
full_closed | PMT | PMT's internal close flag |
order_type | PMT | PMT's order-type field |
main_token_type | PMT | PMT account/token classifier |
tif · gtd_in_second | PMT | PMT time-in-force fields |
full_closed, order_type, main_token_type, tif, or gtd_in_second as proof the script has bugs — those are PickMyTrade's own internal fields, added on PMT's side, not emitted by the Pine script. They're supposed to be there.tp and sl showing 0 is correctIf you see tp: 0 and sl: 0 in the payload, that's intentional — the bracket is sent the other way. There are two methods:
tp / sl would carry exact prices. The strategy does not use this path for PMT — hence the zeros.dollar_tp and dollar_sl — the distance from entry in points. PMT builds the bracket as entry ± that distance. So tp: 0 / sl: 0 alongside non-zero dollar_tp / dollar_sl is exactly right.Entries are market orders — confirmed in live testing. The strategy enters at market on the confirmed signal, and PMT attaches the bracket (from dollar_tp / dollar_sl) on the broker side.