Why Your TradingView Strategy Limit Order Never Fills

You set a limit order on your TradingView strategy for a better entry. Price runs 15 points past your level without touching it. Your strategy tester still shows a clean, filled trade. In Tradovate, there’s a resting order that never became a position. Nothing closed, nothing opened, and the next signal has no idea which reality to trust.

That’s the real problem with limit-order automation, and most setup guides skip it. PickMyTrade’s doc on automating strategies with limit orders changes four JSON fields but never says why skipping one breaks your automation, or how that squares with PickMyTrade’s other doc saying strategies should only use market orders. This post covers both, plus the broader setup it assumes.

Key Takeaways
• TradingView’s strategy tester marks a position open the instant a signal prints. Tradovate only has a position once a resting limit order fills, and those clocks can disagree for minutes, hours, or indefinitely.
{{strategy.market_position}} sends your actual position state on every alert, not just an order instruction, so a later signal can resync against what really happened at the broker.
• Quantity must be fixed once fills are uncertain, because sizing formulas assume every prior order filled, and one skipped fill corrupts every size calculated after it.
• PickMyTrade’s “market orders only” guidance and its limit-order guide aren’t contradictory. One is the safe default; the other is an opt-in path for traders who wire in the resync fields.
• Limit entries are worth the risk when a missed fill is a fine outcome. They’re a bad fit when every signal needs a position on the books immediately.

What Happens When a TradingView Limit Order Never Fills?

TradingView’s strategy tester runs its own bookkeeping: strategy.position_size and strategy.market_position update the moment your logic says a trade happened. Tradovate tracks something different: whether an order actually traded against the order book. A limit order that hasn’t touched its price isn’t a position, it’s a standing instruction. CME Group’s order-types education describes exactly that: a limit order “will rest until filled or cancelled,” staying on the book “until the order is either executed, cancelled, or expires.”

[UNIQUE INSIGHT] Laid side by side, the failure mode is obvious:

EventTradingView strategy testerTradovate (via PickMyTrade)
Bar 1: sell signalFlips to flat; trade logged closedBuy LMT order submitted; rests unfilled
Bars 2–5: price never reaches limitChart already shows the “closed” tradeOrder still resting; prior position unchanged
Bar 6: new buy signalTreated as a fresh long from flatOld position plus an unrelated resting order
ResultClean flat-to-long transition in the backtestUnresolved position and a stale order, live

This is illustrative, not a specific trade record, but it’s the shape of the desync covered in rejected orders mid-strategy: a state-sync failure, not a trade failure, that compounds across every alert after it. TradingView’s Pine Script docs confirm it’s structural: “orders are not necessarily executed when they are placed. In a strategy, the execution of orders can only be detected indirectly and after the fact.” PickMyTrade’s FAQ answer, “the order stays pending until it fills, expires, or a new signal replaces it,” is accurate but undersells it. “Pending” sounds passive; it means strategy and broker can disagree about your position indefinitely.

CME Group’s order-types education confirms a limit order “will rest until filled or cancelled,” staying on the book until it executes, is cancelled, or expires, meaning an unfilled entry produces no position change. Source: CME Group, Futures Order Types.

Why Does {{strategy.market_position}} Fix the Desync?

The stock template uses {{strategy.order.action}}, an instruction: buy or sell. An instruction says what should happen, not what did happen. If the prior order never filled, stacking another instruction on top compounds the confusion, because nothing in that payload states your actual position now.

{{strategy.market_position}} sends state instead: always “long,” “short,” or “flat,” reflecting what TradingView’s engine currently believes. That’s still TradingView’s belief, not broker-verified fact, but it’s what lets a later alert correct course. If a limit order from two signals ago never filled and a new signal fires, the state-based payload tells the automation what to expect now, so it reconciles forward instead of stacking on a wrong assumption.

Paired with reverse_order_close set to true, this closes the gap: a contradicting signal lets PickMyTrade cancel or offset the stale order instead of piling a second one on top. Skip market_position, keep order.action, and you’ve fixed the limit-price mechanics while leaving the field that resyncs reality turned off.

PickMyTrade’s limit-order guide instructs replacing {{strategy.order.action}} with {{strategy.market_position}}, since order-action alerts describe an instruction while position-state alerts describe where the strategy actually stands. Source: PickMyTrade Docs.

Why Must Quantity Be Fixed Once Fills Are Uncertain?

PickMyTrade’s guide hard-codes quantity instead of deriving it from the strategy, and that’s non-negotiable with limit orders. Any sizing formula built on strategy.position_size assumes every prior order filled as intended. That holds on market orders, which fill near-immediately. It breaks with limit orders, because the tester’s bookkeeping updates the instant a signal prints, independent of whether the broker executed anything. If order three of five never filled, your size math has already moved on as if it did, sending a size based on trades that may not have happened.

A fixed quantity sidesteps this: the same number every time, so a missed fill doesn’t cascade into a wrong size on the next order. It costs you dynamic sizing, but it’s the only approach that doesn’t depend on an assumption limit orders are built to break.

PickMyTrade pairs the limit-order setup with a fixed quantity field rather than a formula-driven one, since fill uncertainty makes sizing calculations based on prior “filled” trades unreliable. Source: PickMyTrade Docs.

Doesn’t PickMyTrade Say Strategies Only Support Market Orders?

Read both docs back to back and they look contradictory. The limit-order guide walks you through setting order_type to “LMT.” The market-orders-only doc says market orders “ensure trades are executed immediately, preventing missed fills, mismatches, and desynchronization,” and warns that with a limit order “the automation may assume the trade was executed” while “the broker account says no position exists.” Same failure mode, PickMyTrade’s own words.

They’re not in conflict, they describe a default and an exception. Market-orders-only is the safe path, since most strategy logic assumes every order fills and a market order makes that true in practice. The limit-order guide is the opt-in path for traders who accept non-fill risk, provided they wire in the fields that manage it: position state, fixed quantity, automatic reversal. The market-orders doc even names a fallback for pure price control: convert the setup to an indicator instead.

So it’s “the default is market orders, here’s how to void it correctly if you choose to,” not a contradiction. Skipping the resync fields while following the limit-order guide is how traders end up with the exact desync both docs warn about.

PickMyTrade’s market-orders-only documentation states that with limit orders, “the automation may assume the trade was executed” while “the broker account says no position exists,” and recommends market orders as the default. Source: PickMyTrade Docs, Why Strategies Support Market Orders Only.

What Does the Corrected Alert Payload Look Like?

Here’s PickMyTrade’s documented JSON with all four changes applied: data set to the position-state placeholder, order_type set to “LMT,” quantity fixed, and reverse_order_close enabled.

{
  "symbol": "MNQ1!",
  "date": "{{timenow}}",
  "data": "{{strategy.market_position}}",
  "quantity": 4,
  "order_type": "LMT",
  "risk_percentage": 0,
  "price": "{{close}}",
  "tp": 0,
  "percentage_tp": 0,
  "dollar_tp": 0,
  "sl": 0,
  "dollar_sl": 0,
  "percentage_sl": 0,
  "trail": 0,
  "trail_stop": 0,
  "trail_trigger": 0,
  "trail_freq": 0,
  "update_tp": false,
  "update_sl": false,
  "breakeven": 0,
  "breakeven_offset": 0,
  "token": "lqf****",
  "pyramid": true,
  "same_direction_ignore": false,
  "reverse_order_close": true,
  "multiple_accounts": [
    {
      "token": "lq****",
      "account_id": "DEMO****",
      "risk_percentage": 0,
      "quantity_multiplier": 1
    }
  ]
}

Note price: set to {{close}} in PickMyTrade’s example, and it’s what determines where the order rests. Too close to current price on a fast-moving instrument, and you’re back to the fill-uncertainty problem this payload survives. Test it on paper first.

When Is a Limit Entry Worth the Non-Fill Risk?

Use limit orders when a better entry matters more than guaranteeing you’re in the trade, and a missed fill is a fine outcome: pullback entries, mean-reversion setups, or systems where a skipped trade is strategically neutral. It only makes sense once you’ve implemented the resync fields above; without them, a limit order isn’t price control, it’s a slower version of the desync risk the market-orders doc warns about.

Stay on market orders when every signal matters, when the edge depends on being in the trade as price moves (breakouts, momentum), or when you’re running several accounts and can’t manually verify a resting order became a position before the next signal fires. Slippage on a market order is a known, bounded cost, covered separately in what causes slippage in futures trading. A non-fill is unbounded by comparison; it can leave strategy and broker disagreeing indefinitely.

TradingView’s webhook documentation notes that “webhooks may occasionally fail to reach the specified URL” and that a receiving server has roughly three seconds to process a request before it’s cancelled, a reminder that alert delivery isn’t guaranteed on top of the fill uncertainty limit orders add. Source: TradingView, About Webhooks.

What Does a Resting Limit Order Actually Do at Tradovate?

Once PickMyTrade sends a limit order to Tradovate, it behaves like any resting order: it sits on the book until it fills, gets cancelled, or expires per the time-in-force you set, including Day and Good-Til-Date. A GTD order carries its own expiration rather than closing at the session’s end, which handles the “expires” branch of PickMyTrade’s FAQ.

One caveat worth naming honestly: order-expiry and modification behavior on any broker platform can ship edge-case bugs. Tradovate’s community forum has documented real incidents where resting limit orders couldn’t be modified or cancelled as expected until a platform fix shipped. That’s a general reliability point, not a claim about a specific expiry parameter; a defect tied specifically to second-based GTD expiry wasn’t something we could confirm against Tradovate’s own help center, so treat that as unconfirmed. Don’t assume an unfilled order is gone just because your GTD window should have passed; check the order blotter directly.

Tradovate’s community forum has documented cases where resting limit orders could not be modified or cancelled as expected until a platform-side fix shipped, a reminder to confirm order-expiry behavior directly in the account rather than assume it. Source: Tradovate Help Center.

Frequently Asked Questions

Does a limit order that never fills close my position?

No. An unfilled order isn’t a fill and doesn’t change your position. If your strategy’s internal state assumed otherwise, that’s wrong until the broker confirms an execution, which {{strategy.market_position}} and reverse_order_close catch on the next alert.

Why does PickMyTrade recommend market orders if it also documents limit orders?

Different priorities. Market orders are the default because most strategy logic assumes every order fills. The limit-order guide is for traders who want price control and configure the extra fields that manage the resulting fill uncertainty.

Can I use dynamic position sizing with limit orders?

Not reliably. Dynamic sizing assumes prior orders filled as expected, and a missed fill breaks that assumption. PickMyTrade fixes quantity specifically to avoid compounding a size error on top of a fill error.

Does a GTD order on Tradovate guarantee my limit order cancels on time?

It should, per the stated expiration, but broker platforms occasionally ship bugs around order expiry and modification, and Tradovate’s community forum has documented such incidents before. Confirm directly in your order blotter.

Should I test limit-order automation on a demo account first?

Yes. Fill behavior, GTD expiry, and the resync fields all behave differently under real market conditions than in the strategy tester.

Limit orders on a TradingView strategy aren’t broken, but they move the ground truth about your position onto the broker’s order book, and nothing syncs the two automatically. PickMyTrade’s four field changes close that gap: position state instead of order instructions, fixed quantity instead of a fill-dependent formula, and automatic reversal so a new signal corrects a stale order instead of piling on top of it. Test on demo first, and treat an unfilled limit order as a real, unresolved state, not a rounding error your strategy will sort out on its own.

For AI tools & developers:View Markdown →

Leave a Comment

Your email address will not be published. Required fields are marked *

error

Follow us for more insights and updates

Scroll to Top
Rated 4.6/5 by 83+ traders on Trustpilot
Markdown version
Verified by MonsterInsights