Skip to main content

Your First Automated Trade (Tradovate)

This guide walks you through one thing: sending a single market order from TradingView to Tradovate through CrossTrade. No strategies, no brackets, no advanced options. Just a working alert that places a trade. Once this works, everything else builds on top of it.

There is nothing to install. CrossTrade sends the order to Tradovate's cloud API over HTTPS, so this pipeline runs even when your computer is off.

info

Routing to Tradovate is one line in the alert: destination=tradovate;. Without it, alerts route to NinjaTrader 8, the default destination. Everything else about CrossTrade webhooks is the same on both.

What You Need Before Starting

  1. A CrossTrade account with an active subscription or free trial. If you don't have one, start your free 7-day trial.
  2. A linked Tradovate account. Live and Demo are separate environments; prop firm logins (Apex, Topstep, etc.) belong on Demo. If you haven't linked yet, do Linking Your Tradovate Account first — it takes about a minute.
  3. A TradingView account with 2FA enabled. Webhooks require two-factor authentication. If you haven't enabled it, TradingView will prompt you the first time you try to set up a webhook.
Test on Demo first

If you have a Demo link, use a Demo account for your first alert. The pipeline is identical to Live, and a sim fill costs nothing.

Step 1: Find Your Webhook URL and Secret Key

You need two things from your CrossTrade account:

Your Webhook URL — this is the address TradingView will send alerts to. Find it on your My Account page or on the Webhooks dashboard.

Your Secret Key — this authenticates your alerts. It's on the same My Account page.

Copy both somewhere you can paste from. You'll need the secret key in the alert message and the webhook URL in the alert notification settings.

Step 2: Build Your First Alert Payload

Open a chart in TradingView. It doesn't matter which instrument — we'll specify the instrument in the alert message, not through the chart.

Click the alert icon (the clock button on the right sidebar or the alarm icon in the top toolbar) to open the alert creation window.

Set the Condition: For testing, use something simple that will trigger quickly. You can set it to the chart's price crossing above or below a nearby price level, or use CrossTrade's free test indicator which fires a signal on every bar.

Set the Alert Message: This is the critical part. Delete everything in the message box — all of it. TradingView pre-fills this with default text from your indicator or strategy, and that text will break your alert. The message must contain only the CrossTrade command.

Paste the following, replacing your-secret-key with your actual key and DemoAccount with your actual Tradovate account name (shown in My Account → Brokers after linking):

key=your-secret-key;
command=PLACE;
account=DemoAccount;
instrument=MES1!;
action=BUY;
qty=1;
order_type=MARKET;
tif=DAY;
flatten_first=true;
destination=tradovate;

flatten_first=true; is included so that each time the alert fires, it closes any existing position on that contract before opening a new one. This prevents stacking positions during testing. destination=tradovate; is the routing line — it's what sends this to Tradovate instead of NinjaTrader.

Every line ends with a semicolon. The instrument uses TradingView's continuous contract format (MES1!), which CrossTrade resolves to the front-month contract automatically. NinjaTrader style (MES 09-26) and Tradovate style (MESU6) both work too.

info

The Webhook Trader on your Tradovate Webhooks page pre-loads this exact example with your secret key and first linked account filled in — you can fire it from the browser before involving TradingView at all.

Step 3: Add the Webhook URL

Switch to the Notifications tab in the alert window. Check the Webhook box and paste your CrossTrade Webhook URL.

If this is your first time using webhooks, TradingView will prompt you to enable 2FA. Follow the prompts, then come back and paste the URL.

Save the alert.

Step 4: Verify It Worked

When the alert fires, two things should happen almost simultaneously:

TradingView logs the alert in its alert history (click the clock icon to see it and then switch to Log).

CrossTrade Alert History shows the received alert with a status. Go to Alert History on the web dashboard. You should see your alert with a green "Success" status and a blue Tradovate badge next to the command — that badge is your confirmation the order routed to Tradovate and not NT8. If the row shows red, the status message will tell you what went wrong.

You can also open Tradovate itself: the fill and position appear in your Tradovate platform immediately, with the order marked as placed by CrossTrade.

Accepted is not resting

Tradovate can accept an order and still reject it a moment later in its risk layer (the classic case is a price outside exchange limits). CrossTrade re-checks placements a few seconds after acceptance and flips the Alert History row to a yellow warning with Tradovate's reason if that happens. A green row means "accepted by Tradovate" — if your prices sit near the limits, check back for warnings.

Troubleshooting Your First Alert

If it didn't work, here's the diagnostic path:

Alert didn't show up in Alert History at all: The webhook URL is wrong or TradingView didn't send it. Double-check the URL on the Notifications tab. Make sure it's your personal webhook URL, not a generic example.

Alert shows "Improperly formatted request": The payload has a syntax problem. The most common mistakes: a missing semicolon at the end of a line, leftover default text from TradingView still in the message box, or a misspelled field name. Compare your message character-by-character against the example above.

Alert shows an account error: The account name doesn't match a linked Tradovate account. Check the exact name in My Account → Brokers. If the same name exists under two linked identities, CrossTrade rejects it as ambiguous rather than guessing.

Alert shows "Secret key missing, invalid, or inactive": Re-copy the key from your My Account page. Watch for invisible characters or trailing spaces that can get picked up during copy-paste.

Alert shows an authorization error: Your Tradovate session expired or was evicted (signing in elsewhere with the same login can do this). Re-link the environment in My Account → Brokers — it takes seconds. See Linking Your Tradovate Account.

Alert succeeded but the order was rejected a moment later: See the "accepted is not resting" note above — the warning on the Alert History row carries Tradovate's rejection reason, most often InvalidPrice from a stop or limit outside the product's price bands.

What You Just Built 🏆

That single alert command contains the same core structure that every CrossTrade automation uses. The fields you used — key, command, account, instrument, action, qty, order_type, tif — are the required foundation, and destination=tradovate; is the one-line routing switch. Everything else is optional enhancements layered on top.

From here, the next step depends on what you're trying to automate:

Automating a TradingView indicator with separate buy/sell alerts → Automating TradingView Indicators

Automating a TradingView strategy with entries, exits, and position tracking → Automating TradingView Strategies

Adding stops, targets, trailing, and scale-outsOrder Types and Exits on Tradovate

Copying trades across multiple accounts (especially prop firm evals) → Managing Multiple Tradovate Accounts

Or explore the full command reference and the Tradovate capability matrix to build your own setup.