How to Automate TradingView Alerts to Tradovate

Tradovate is the default execution platform behind an Apex evaluation and a supported option at Topstep. TradingView generates the signal but can't place the order itself — here's the webhook bridge that closes the gap.

TradingView can chart a Pine Script strategy and fire an alert the instant its conditions are met, but it has no way to place an order at a broker on its own. Getting from a chart signal to a live fill in a Tradovate evaluation account needs a webhook bridge in the middle — this walks through that exact setup using TradersPost, with PickMyTrade as a documented alternative.

What's needed before starting

  • A TradingView plan that supports webhooks — Essential or higher; the free plan doesn't expose the webhook field on an alert
  • An Apex or Topstep evaluation on Tradovate — log in at least once beforehand to confirm the environment is active
  • A TradersPost account — the bridge that accepts the webhook and routes it to Tradovate. PickMyTrade is a valid alternative covered in our PickMyTrade + Apex setup guide
  • A Pine Script strategy with alert conditions wired up — either through strategy.entry()/strategy.exit() or a standalone alertcondition()

Step 1: Set up the webhook in TradersPost

  1. Create an account at TradersPost — an entry-level plan covers a single broker connection, enough for one evaluation
  2. Under Brokers → New Connection, select Tradovate and complete the OAuth flow, making sure the Apex or Topstep evaluation account is the one selected — not a separate live account
  3. Under Strategies → New Strategy, set the symbol (e.g. MES or MNQ), quantity, and order type — TradersPost maps the generic contract symbol to the correct front-month code automatically
  4. Once saved, TradersPost generates a webhook URL in the form https://webhooks.traderspost.io/trading/webhook/<uuid>/<token>. Copy it for Step 3
PickMyTrade is a valid alternative to TradersPost for this same Tradovate connection and tends to have a simpler interface for a first-time setup — see the PickMyTrade setup guide if that path fits better.

Step 2: Wire the Pine Script alert

There are two ways to emit an alert TradersPost can parse, depending on how the script is built.

Option A: strategy.entry / strategy.exit (recommended)

With strategy.entry() and strategy.exit() calls, set the TradingView alert condition to "Order fills only" and use the built-in order alert message. A payload shape like this works cleanly with TradersPost:

JSON
{
  "ticker": "{{ticker}}",
  "action": "{{strategy.order.action}}",
  "quantity": {{strategy.position_size}},
  "price": {{close}},
  "sentiment": "{{strategy.market_position}}"
}

Option B: standalone alertcondition()

If the script fires alerts through alertcondition() instead of strategy calls, define each condition manually and wire a separate TradingView alert per direction:

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

alertcondition(longCond,  title = "Long Entry",  message = '{"ticker":"MES","action":"buy","quantity":1}')
alertcondition(shortCond, title = "Short Entry", message = '{"ticker":"MES","action":"sell","quantity":1}')

Each alertcondition() needs its own TradingView alert, all pointed at the same TradersPost webhook URL.

Step 3: Create the TradingView alert

  1. Right-click the chart and select Add Alert, or press Alt+A
  2. Under Condition, select the strategy name and Order fills only (for Option A), or the specific alertcondition name (for Option B)
  3. Under Notifications, check Webhook URL and paste the TradersPost URL from Step 1
  4. In Message, paste the JSON payload from Step 2 — TradingView expands the placeholders at fire time
  5. Set expiration well into the future — TradingView alerts expire by default, and a lapsed one means missed signals with no warning
  6. Click Create
Webhook alerts only work on an Essential-tier TradingView plan or higher. If the Webhook URL field is grayed out, the account is still on the free plan.

Prop firm compliance checklist

Before running any of this on a live Apex or Topstep evaluation, confirm the Pine Script includes:

  • A kill switch input — a manual toggle that blocks new entries without closing existing positions
  • A session filter — restricts trading to regular hours and avoids holding through overnight sessions most evaluations disallow
  • Bar-close entriescalc_on_every_tick = false in the strategy declaration, so entries fire on confirmed closes rather than intrabar ticks
  • An EOD flatten — force-closes all positions before market close, which both Apex and Topstep evaluations expect
  • A daily loss limit — a coded halt once realized-plus-unrealized loss crosses a threshold, mirroring the account's actual drawdown mechanic at the strategy level

Free code snippets covering each of these are available in our Pine Script snippets library.

Common issues and fixes

  • Alert fires but no order appears in Tradovate. Check the TradersPost webhook log first — every received payload shows a success or error status there. A malformed JSON payload (a missing quote, a wrong field name) is the usual cause; validate it with a free JSON linter before re-pasting.
  • Order fills at an unexpected price. Usually means the alert fired on an intrabar tick rather than bar close. Confirm calc_on_every_tick = false and set the TradingView alert to fire "Once per bar close."
  • Duplicate fills. The alert is set to "Once per bar" instead of "Order fills only." Switching the condition to fills-only usually resolves it.
  • Symbol not found in Tradovate. Tradovate uses specific front-month contract codes internally; TradersPost handles the rollover mapping automatically as long as the generic symbol (e.g. MES) is used in the strategy configuration rather than a dated code.

Skip the wiring — get a strategy that's already connected.

Every script ships with the TradersPost JSON payload pre-filled, session filters, and a setup PDF. Invite-only on TradingView within 24 hours.