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.
Paradox Algo v7.5 and Kairos Scalper v1.6 ship five built-in providers in the Webhook Provider dropdown: Shifu, PickMyTrade, TradersPost, CrossTrade and Custom Template. Use one setup per alert:
| Provider | TradingView Alert Condition | Message box |
|---|---|---|
| Shifu | alert() function calls only | leave empty |
| PickMyTrade | alert() function calls only | leave empty |
| TradersPost | alert() function calls only | leave empty |
| CrossTrade (recommended) | Order fills only | {{strategy.order.alert_message}} |
| CrossTrade (still works, exits at bar close) | alert() function calls only | leave empty |
| Custom Template | alert() function calls only | leave empty |
On a strategy, TradingView's dialog says alert() function calls only. Older guides, and some Paradox Algo v7.5 tooltips, call it “Any alert() function call”: the same setup. Never pick Order fills and alert() function calls on Paradox Algo or Kairos: it sends every order twice. Quantum Edge uses the same setup for its providers (PickMyTrade, TradersPost, Custom Template).
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 |
|---|---|---|---|
| Shifu | — leave blank (greys out) | — leave blank (greys out) | entry, target, stop and trailing stop at the broker (NinjaTrader and Tradovate)* |
| PickMyTrade | your PMT token | your exact account number (Tradovate, Rithmic or Interactive Brokers) | native, broker-side |
| TradersPost | — leave blank (greys out) | — leave blank (greys out) | target and stop at the broker; the stop trails from entry* |
| 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 |
*Shifu and TradersPost authenticate through your webhook URL, so the Auth Token and Account ID fields stay blank — they grey out automatically. The strategy builds the bracket into the payload it sends. TradersPost has no trigger-based trail: its stop trails from entry at the full stop distance.
Not sure which one? Tradovate or NinjaTrader account (most prop firms) → PickMyTrade or Shifu. Rithmic account → PickMyTrade + your Rithmic connection name. Already on CrossTrade → CrossTrade (NinjaTrader 8 add-on, or Destination = Tradovate). Anything else → TradersPost or Custom Template (read the TradersPost limits first).
PARADOXALGO at PickMyTrade's checkout. Tradovate accounts sign up at pickmytrade.trade, Rithmic accounts at pickmytrade.io (partner links; we may earn a commission, at no extra cost to you). Partner page & setup →Best for: futures traders on Tradovate (sign up at pickmytrade.trade — including Tradovate-powered prop-firm accounts) or Rithmic (sign up at pickmytrade.io). On Paradox Algo v7.5 and Kairos Scalper v1.6, also Interactive Brokers (pickmytrade.io). Native broker-side bracket support.
Other pickmytrade.io brokers are not supported yet. PickMyTrade also connects ProjectX / TopstepX, TradeStation, Ironbeam, TradeLocker, Tradier, cTrader and Match-Trader, but our products do not send those brokers' message format yet, so their orders would be rejected. Support is in progress. TradeStation accounts can use TradersPost instead.
PARADOXALGO at checkout (partner links).RITHMIC1). The full bracket and multi-account both carry natively. PickMyTrade sends the trailing stop to Rithmic accounts too. PickMyTrade's own trailing documentation covers Tradovate, so run one Rithmic sim trade before relying on it. On Tradovate? Leave it blank — your payload is unchanged.MNQ1! works — PickMyTrade maps it to the front contract and moves the mapping four days before expiry. An exact contract such as MNQZ6 also works but never rolls, so update it each quarter.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.
One PickMyTrade account per algo. PickMyTrade ignores a second same-direction entry from any strategy on that account, so don't point two algos at one account.
PARADOXALGO at Shifu's checkout. Pro Annual members get their first month free with a personal code by email. Paradox Algo is an official Shifu partner and may benefit when you subscribe. Shifu is a separate company; its service, pricing, terms and support are its own. Partner page & setup →Best for: Tradovate or NinjaTrader accounts, including most prop-firm accounts. One alert carries the entry, target, stop and trailing stop, and they rest at the broker. Shifu is the default provider on Paradox Algo v7.5; on Kairos Scalper v1.6, pick it yourself.
MNQ1! or MES1!. In contract-roll week, type the dated contract your chart is on. On any other market (gold, crude, silver, rates, currencies), always use the dated contract.Sizing. Your Contracts setting sets the size only while the bot's How to size each trade is on From the TradingView alert (the default for bots made in Shifu's dashboard). Fixed contracts uses the bot's own Default size.
Know the limits. Rithmic account: use PickMyTrade. Shifu's Rithmic route places the entry, target and stop, but it can't hold a separate trail distance and doesn't flatten before a new entry, so our trailing exits won't match the chart there. One algo per contract per account: Shifu flattens that contract before each new entry, so two algos on the same contract in one account close each other's trades. Different contracts or different accounts are fine. Paradox Algo v7.5: use one Shifu bot per chart for now. Two alerts that leave at the same instant for the same side can be read as one alert sent twice, and the second is dropped without an error. Kairos Scalper v1.6 can feed two charts into one bot.
Who helps. Our settings or alerts: our Discord or support@paradoxalgo.com. Your Shifu account, billing or broker connection: support@shifu.trade. Shifu logs every alert it refuses, with the reason, on its Alerts page. Aurum has had Shifu since v1.2 (type the exact gold contract, like MGCZ6), SignalWave v4.2 has it as the default of its optional webhook automation, and Nova AI Trader v2.5 has it too. Quantum Edge gets Shifu with its next update.
Best for: accounts that don't fit PickMyTrade, Shifu or CrossTrade, such as TradeStation or tastytrade. As of v7.3 the strategy builds the order for you — no JSON to paste.
Read these limits first. TradersPost sends the entry, target and stop. It has no trigger-based trail: its stop trails from entry at the full stop distance. The chart usually exits first, and the broker then stays in the trade until its own stop or target. That's expected, not a bug. Once the chart is flat, no session-end close follows, so on a prop account check TradersPost is flat by your firm's cutoff. For exits that follow the chart, use Shifu or PickMyTrade. Targets and stops need a Tradovate, NinjaTrader, TradeStation or tastytrade connection; the trailing stop needs Tradovate or NinjaTrader (anywhere else, set PMT — Trail Enable to 0).
traderspost.io, connect your broker(s), and create a strategy. Copy its webhook URL: https://webhooks.traderspost.io/trading/webhook/<id>/<token>.MNQZ2026 — never MNQ1!.TradersPost-side setting to check. Keep the top “Allow signal overrides” box ticked: it lets the alert's market order type, target, stop and quantity through. Leave “Reject exit if signal is older than” empty: an exit refused as stale can leave the position open with no target or stop. Exit fix in Paradox Algo v7.5 and Kairos Scalper v1.6: exits now cancel the resting target and stop and close the whole position (older versions could leave the bracket working or be rejected). An alert made before you updated keeps the old behavior until you re-create it.
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 is retired on Paradox Algo v7.5 and Kairos Scalper v1.6 — see the note below and switch now.
Best for: members already on CrossTrade — NinjaTrader 8 through the desktop add-on (the default destination), or Tradovate through CrossTrade's cloud connection. A native provider since Paradox Algo v7.4 and Kairos Scalper v1.5 — 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. On Tradovate the tag is accepted but not enforced, so keep other bots on a separate account there.
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.
Your bridge must place the target and stop at the broker from the values sent: the chart's own target, stop and trail closes send no alert for this provider. Alert: alert() function calls only, Message box empty.
Retired on Paradox Algo v7.5 and Kairos Scalper v1.6. The old method used Order fills only with TradersPost's own JSON in the Message box. It worked through Paradox Algo v7.4 and Kairos Scalper v1.5. In v7.5 and v1.6, the chart's target, stop and trail fills no longer reach TradersPost that way. The setup still sends entries and forced exits, but it carries no target or stop with the entry, so the broker position can sit open and unprotected.
How to migrate. Close any open position by hand first. Then change Webhook Provider to TradersPost, set the Condition to alert() function calls only, clear the Message box, delete the old alert and create a new one. An alert made before you updated still runs the old version until you re-create it. Don't mix methods: never pick “Order fills and alert() function calls,” which sends every order twice.
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 Shifu, it's the link on your bot's Setup tab. 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 five built-in providers, this is the whole flow. The Condition is alert() function calls only and the Message stays empty — the strategy supplies the payload, bracket prices and all. CrossTrade's recommended setup differs at steps 5 and 7; see the table above.
Paradox Algo Strategy v7.5 or Kairos Scalper v1.6 [ParadoxAlgo], matching what appears in your Indicators → Invite-Only Scripts list.alert() with bracket prices, ticker, and direction already filled in. The one exception: CrossTrade's recommended setup puts {{strategy.order.alert_message}} there.{{strategy.order.alert_message}}) — never “Order fills and alert() function calls,” which sends every order twice. (3) Webhook URL pasted in the Notifications tab. Get those three right and the alert reaches your broker.Everything above covers the algos. Three of the six indicators can also drive a webhook. The other three send alerts only, so you act on them yourself.
| Indicator | What it can send | Platforms | Alert setup |
|---|---|---|---|
| SignalWave | An opt-in webhook JSON on every confirmed flip that passes your Signal Filter, plus an opt-in per-bar TRAIL_UPDATE payload for platforms that keep a resting stop in sync | Any platform that reads its JSON | One extra alert: Any alert() function call |
| QuantumFlow | Ready-to-send orders | PickMyTrade (Tradovate only), TradersPost, Custom Template. No CrossTrade | Any alert() function call, Message box empty |
| Nova AI Trader | Ready-to-send entries and exits, with an optional broker-side trailing stop and, on PickMyTrade with Tradovate, broker-side breakeven | Shifu, PickMyTrade (Tradovate or Rithmic), TradersPost, CrossTrade, Generic, Custom Template | Any alert() function call, Message box empty |
| EdgeFlow · DeepWave · TrendScore | Alerts only, no broker orders | — | See each indicator's page |
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.