Tradovate API

Tradovate API/Webhook Limit Order Price Slippage

Your alert says 4100 and the working order shows 4100.50. Nothing crossed the market, the price just got rounded somewhere between your alert and the book. Here's why, and how to stop it.

Reviewed by the PickMyTrade Trading Systems Team Last updated
· 8 min read
Tradovate contract details panel highlighting the tick size and price format for an E-mini futures contract

You set your strategy to close at 4100. The alert fires, the message plainly reads 4100, and yet the working order shows up at 4100.50. Nothing crossed the market, nothing filled at a bad price, the number just changed somewhere between your alert and the order book. That's maddening, and it's the kind of thing people call “slippage” while quietly knowing it isn't quite that.

Here's the short version: futures prices don't live on a smooth number line. They exist only on a fixed grid of ticks. If the price your strategy hands off isn't an exact multiple of that grid, something has to round it, and the direction it rounds is rarely the one you had in your head. Fix where the price gets aligned, and make sure the limit isn't sitting on the wrong side of the market, and the phantom half-point goes away.

This guide walks through why the price moves, how to pin down which of the three usual causes you're hitting, and exactly what to change so your limits land on the number you meant.

What "slippage" actually means here

It's worth separating two very different things, because the fix depends on which one you have.

Real slippage happens on a market order: you accept whatever the book gives you, and in a fast or thin market that's a few ticks worse than the last print. There's no price to protect, so there's nothing to debug, that's the trade you asked for.

What you're seeing is different. A limit order carries a specific price, and that price is getting transformed before it rests on the book. The number in your alert and the number on the working order don't match. That's not the market moving against you; that's your price being reshaped in transit. Good news: reshaped prices are predictable, and predictable means fixable.

Why the price moves off your target

Three mechanisms cause almost every case. They can stack, so it's worth knowing all three even if only one is biting you today.

1. The price isn't on the tick grid

Every contract has a fixed minimum increment. Send a price that falls between two legal ticks and it gets rounded to the nearest one. That's not a bug, a price off the grid simply can't exist on the exchange, so it has to snap somewhere.

The trouble is that different contracts snap at different sizes, and it's easy to assume the wrong one:

Contract Tick size Legal prices near 4100 / 75.00 / 2050
ES, NQ, MES, MNQ0.254100.00, 4100.25, 4100.50, 4100.75
CL (crude oil)0.0175.00, 75.01, 75.02, 75.03
GC, MGC (gold)0.102050.00, 2050.10, 2050.20
YM, MYM (Dow)1.042100, 42101, 42102

Say your logic computes a gold exit at 2050.05. There's no such price, GC moves in dimes, so it rounds to 2050.00 or 2050.10, and now your “5 cents better” exit is a dime off. Confirm the current increment on the exchange's contract spec page before you trust these numbers; the exchange can adjust a tick size, and micro contracts don't always match their full-size sibling.

2. Floating-point math nudges you across a tick

This is the sneaky one, and it's usually behind the classic “sent 4100, got 4100.50” complaint. ES trades in quarters, so both 4100.00 and 4100.50 are perfectly legal. The price didn't round because it was off-grid, it rounded because the value your strategy actually computed wasn't the clean 4100 you saw in the alert text.

Strategies rarely hard-code an exit. They calculate it: an entry minus an offset, a moving-average value, a percentage of a range. Do that in floating-point and you get numbers like 4100.4999999 or 4100.3700001. Round that to the nearest quarter and you can easily land a half-point away from where the round number in your alert made it look like you'd land. The alert message and the price field can even disagree, because one is display text and the other is the value being sent.

3. The limit is already through the market

This one is real slippage wearing a limit-order costume. A buy limit priced above the current ask, or a sell limit priced below the current bid, is “marketable”, it can fill immediately at the best available price instead of resting. So if your strategy computes a limit on the wrong side of the market (a common sign flip: subtracting an offset when you meant to add it), the order crosses the spread and fills at a price that looks nothing like your number.

Order ticket and DOM ladder showing a limit price resting off the intended level next to the bid and ask

The tell: rounding errors put you a tick or two off, always in a rounding-shaped way. A marketable limit puts you wherever the book was, which can be several ticks and always on the side that costs you. If the gap is bigger than one tick and consistently against you, suspect the side of the book, not the grid.

How to fix it, step by step

1

Read the contract's real tick size

Don't assume, look it up for the exact contract you're trading. Pull the tick size from the platform's contract details, the exchange spec page, or the API, where each contract object exposes a tickSize field (alongside priceFormat and priceFormatType that tell you how the price is scaled and displayed). Micro and full-size contracts can share a tick but not always, and quarterly rolls don't change the tick but do change the symbol.

2

Round every price to the tick before it leaves your strategy

Make the rounding explicit and do it as the last step before you send. The pattern is the same in any language:

rounded = round(rawPrice / tickSize) * tickSize

For ES with a 0.25 tick, a raw value of 4100.37 becomes round(4100.37 / 0.25) * 0.25 = round(16401.48) * 0.25 = 16401 * 0.25 = 4100.25. Now you know precisely what price is going out, because you computed it, not the router. If you want to guarantee you never cross the market, round a buy limit down to the tick and a sell limit up, that keeps the order passive.

3

Kill the floating-point drift

Even after rounding, tiny binary-fraction errors can leave you with 4100.2500001. Snap the result to the contract's decimal precision before sending, format ES/NQ to two decimals, gold to two, crude to two, the Dow to zero. Send the price as a clean number in the field, and don't rely on the human-readable alert text to carry it; the value in the payload is what actually gets placed.

4

Check which side of the book the limit sits on

Before you blame rounding, confirm the direction. For a resting buy, the limit should be at or below the current price; for a resting sell, at or above it. If your computed price crosses that line, you've found a marketable limit, and the fix is in your offset math, check the sign and whether you're working in ticks versus points. Five “ticks” on ES is 1.25 points, not 5.00; mixing those up throws the price wildly off and often onto the wrong side entirely.

5

Verify the working order matches

Place one order in a simulated account and read it back. The price on the working order in the Orders panel should equal the number you rounded to, to the tick. If it does, you're done. If it doesn't, log the exact raw price, the tick size you used, and the rounded value you sent, then diff them, the mismatch is almost always one of those three inputs, not the platform.

TradingView alert message editor showing the price placeholder mapped into the outgoing order payloadTradovate Orders panel showing a working limit order whose price matches the intended tick-aligned target

If you're routing through a webhook or bridge

When a TradingView alert drives the order through a bridge, there's an extra handoff where the price can drift. The alert fires with a value, the bridge maps that value into an order payload, and the payload is what reaches the broker. Two things keep it honest.

First, make the strategy the single source of truth for the price, round to the tick inside your Pine logic and pass that exact, pre-rounded number into the alert, rather than sending a raw close and hoping the downstream rounds it the way you'd want. Second, confirm the field the bridge reads is the price field, not a label.

Tired of hand-rounding prices and chasing where a half-tick crept in? PickMyTrade routes your TradingView alerts to Tradovate and handles the tick alignment for you, so the limit that leaves your strategy is the limit that lands on the book.

How to keep it from coming back

Once it's fixed, a few habits stop it recurring:

  • Round in the strategy, always. Never send a raw computed price and let something downstream decide the tick.
  • Log raw and rounded. Keep both values in your logs so a stray tick is a two-second diff, not a mystery.
  • Test in sim first. Fire the alert into a simulated account and eyeball the working price before you trust it with real size.
  • Work in ticks, not points, for offsets. Decide up front which unit your offsets are in and convert once, in one place.
  • Watch bracket legs too. Stop and target prices round the same way; if your protective legs land off, the same rounding fix applies. If those legs fail to attach at all, that's a different issue, see our guide on Tradovate API bracket (OSO/OCO) orders failing.

Stop Hand-Rounding Prices

PickMyTrade routes your TradingView alerts to Tradovate and handles the tick alignment for you, so the limit that leaves your strategy is the limit that lands on the book.

Start Your Free 5-Day Trial

Frequently Asked Questions

Usually not. Real slippage is a market order filling worse than the quote because the book moved. A limit landing a tick or half-tick off your alert was transformed before it hit the book, rounded to a legal tick, nudged by floating-point math, or sent through the market as a marketable limit. Only the last is true slippage; the other two are a formatting problem you control.

ES trades in 0.25 increments, so 4100.00 through 4100.75 are all legal. If your strategy computes the limit from a bar value or an offset, the raw number is often something like 4100.37 or 4100.4999 and rounds to the nearest quarter, sometimes the half-point above where you expected. Round the price to the tick yourself and log the raw and rounded values.

Read it from the platform's contract details, the exchange's spec page, or the API's tickSize field on the contract object. As a quick reference: ES, NQ, MES and MNQ tick in 0.25; crude (CL) in 0.01; gold (GC) in 0.10; the Dow (YM) in 1.0. Confirm the current spec before relying on it.

It removes the rounding surprise, since a market order has no price to round, but it fills at whatever the book offers, which in a fast market can be worse than a correct limit. If price control was the point, keep the limit and fix the rounding. If you just need the fill, a market order is simpler.

No, the tick grid is set by the exchange, so it's identical across evaluation, funded, and personal accounts. What differs by firm is which contracts and order types are allowed and the risk rules, and those surface as rejections, not shifted prices. If your price lands off target, look at alignment and routing, and check your firm's current rules for anything order-type specific.

This guide is for educational and informational purposes only and is not financial, investment, or trading advice. Trading futures and other leveraged products carries a substantial risk of loss and is not suitable for every investor. PickMyTrade is an independent third-party automation platform and is not affiliated with, endorsed by, or sponsored by Tradovate, Inc. or Bookmap. All related names, logos, and trademarks are the property of their respective owners. Platform features and steps change over time, so always confirm the current process in the official platform documentation before acting.