Skip to main content

Reconciliation

Reconciliation is the process of matching broker executions to UTM trades. It ensures the positions and P&L UTM tracks are accurate against what your broker actually has on record.

When You Need to Reconcile

Reconciliation is most commonly needed in two situations:

  1. You connected a broker that already has open positions. UTM has no record of how those positions were entered, so you create the matching trade records through the Resolve flow on the reconciliation page.
  2. An execution was missed. If UTM missed a fill (e.g., due to a connectivity gap), you can add it manually to keep records in sync.

The Reconcile Shell

Navigate to Reconcile in the sidebar. The shell answers one question at a glance: does your book match the broker? It has three parts.

Account filter pills

A row of pills sits at the top: All accounts plus one pill per account in your current trading mode. Each pill is badged with how many items in that account need attention, and All accounts shows the sum. By default the shell shows every account combined (the view you want roughly all of the time); select a single pill when you want to narrow to one book. The selection drives both the queue and the agreement banner.

Agreement banner

Below the pills, the agreement banner states the numbers for the selected scope: how many positions the broker holds, how many UTM tracks, and how many need attention. When nothing needs attention it reads as a calm "everything agrees". The question-mark button explains what each number means.

The three tabs

TabWhat it holds
Needs attentionThe combined queue of items where the broker and UTM disagree, across every account, each row tagged with the account it belongs to and described in plain language. Open a row to drill into that account's detail, where you match, create, or set the item aside.
Broker dataThe raw record of what the broker did: every broker order with its captured fills nested and a link status, plus loose fills that arrived with no order. Also home to the Heal execution-order drift, Backfill missing orders, and Backfill missing fills maintenance actions. See The Broker data tab below.
ReconciledThe searchable history of reconciled trades. See The Reconciled history below.
Not in a positionHistorical remnants: broker fills on a symbol that already agrees with the broker, so they cannot be part of any position you hold now. Import each as history or set it aside. See Remnants: fills not in a position below.
Set asideItems you have set aside (marked as expected or left unlinked), together with the routine lifecycle items UTM tidies automatically. Each has a Bring back to attention button, so nothing is ever swept away for good. See Routine items set aside automatically below.

Opening an item from the queue takes you to its two-sided detail view. The detail states the problem in one plain-language sentence (no enum codes), then lays broker truth on the left against UTM's records on the right, with the gap highlighted. The view it shows depends on the condition:

  • Not tracked in UTM. The broker position sits on the left and a "No trade in UTM tracks this position" panel on the right.
  • Quantity differs. Both sides are shown with the differing figure highlighted, and the shortfall called out. Because UTM's quantity is always the sum of its own fills (rebuilt automatically on every fill change), a difference here can only mean the broker has a fill, or an external change, UTM never recorded. There is no separate "fills do not add up" category: internal drift is impossible, so it is never shown as its own condition.
  • Direction or average-price mismatch. Both sides are shown with the differing figure highlighted.
  • Unlinked fills (orphan fills). The unlinked broker fills sit on the left. On the right, UTM shows a suggested match when it has found one (confirm it or pick another), or the candidate trades when it cannot confidently match, in which case it leaves the choice to you.

Each detail also carries an inline "Show the full trail" disclosure, collapsed by default, that expands to the entity chain UTM holds for the symbol: the orders and the fills, with each fill tagged linked or unlinked. The two columns stack on a phone.

Orders predating your tracked history

Above the Needs attention queue, a small card appears when the broker still has an order working (open, accepted, or partially filled) that was placed before your account's tracked start date. UTM's regular sync deliberately does not pull in broker history from before that date, but a still-working order is live risk regardless of your history preferences, so it is surfaced here instead of silently skipped.

Each row shows the symbol, side, order type, status, filled quantity, and when it was submitted, with two actions:

  • Adopt brings the order into UTM as-is, with its broker-reported status. It is not attached to any strategy or trade, since UTM has no record of why it was placed; use the ordinary reconcile flow afterwards to link it once it has a fill.
  • Acknowledge dismisses the card without creating an order in UTM, for example when you know the order was placed directly at the broker and do not want it tracked. You can add an optional note explaining why.

Once you adopt or acknowledge an order, it stops reappearing here. This card is separate from a broker order UTM has already adopted automatically: an order placed after your tracked start date with no matching UTM order is picked up the moment the sync sees it, with no card or confirmation needed, since it falls inside the history UTM already tracks for the account.

Acting from the detail view

Below the two-sided comparison, the detail view offers one guided primary action for the condition you are looking at, with secondaries alongside, so no condition dead-ends. The primary is whichever fix is obviously right for the condition:

  • Not tracked in UTM (broker holds a position UTM does not track). When real broker fills exist for the symbol, whether loose or attached to an order UTM has already captured, they lead: a Link this order card (or, for loose fills, Link this fill) sits above the create button and the panel says plainly that real fills already sit unmatched. Linking one is preferred over the synthetic-create fallback below, since it uses the true broker fill rather than an estimate. The primary underneath is Create the trade from these fills when any fills exist, building the trade from them. When there are no loose fills, UTM also checks whether your broker's own order history for the symbol exactly accounts for the position - an unbroken run of filled orders, all the same direction, adding up to the exact quantity and average price the broker reports. If it does, the card offers Import with broker orders as the primary: this creates the trade anchored on those real orders and their real fills, with no estimate involved. A Split across strategies option lets you assign whole matched orders to two strategies (an order itself is never split between them - if you need to divide below an order's own boundary, use the synthetic split below instead). Create the trade in UTM stays available alongside it as the fallback, and becomes the primary again whenever no clean order match exists: this opens an allocator where you create one trade for the whole position, or split it across strategies (quantity, strategy, opened-at, and notes per allocation, with a live allocated/remaining check). With no real fill to source the entry from, UTM records a synthetic opening at the broker average and flags it as an estimate wherever the entry is shown, so you never mistake it for a confirmed fill. Re-fetch or add the real fill later if it becomes available. Match to an existing trade sits alongside when there are fills and a candidate trade. The order-backed match is Alpaca only; TradeStation exposes no per-fill activity feed to confirm it against, so it keeps the synthetic import.
  • No longer at broker (UTM still tracks a position the broker has closed out). The primary is Mark this trade closed. Enter the price the broker closed the position at; UTM records a synthetic closing fill, recalculates realised P&L, marks the trade reconciled, and lands it on the Reconciled tab where its Undo reverses it.
  • Quantity differs. When the broker holds more than UTM, a fill is missing: the primary is Re-fetch the missing fill from the broker when the broker can supply it (Alpaca), falling back to Add the missing fill manually as a synthetic top-up at the broker average for the missing quantity when it cannot (TradeStation, which UTM builds executions for from its orders). When the broker holds fewer, a closing fill is missing: the primary is Add the missing closing fill. The trade re-derives from its fills either way.
  • Direction differs (side mismatch). The primary is Fix the fill when a single fill carries the wrong side; the secondary Flip the trade side is for when the whole trade is recorded the wrong way (it moves no fills and recalculates P&L for the new direction).
  • Average price differs (price mismatch). The primary is Fix the fill when a fill's price is wrong; the secondary Override the entry price is a last resort for when the fill is unavailable (the quantity still comes from the fills and does not change). Both are written to the audit log and ask for a short reason.
  • Unlinked fills (orphan fills). When UTM has found a confident match it surfaces a Suggested match card you confirm with one click. Otherwise the primary is Create a trade from selected fills: each orphan fill is shown with a checkbox (all ticked by default), UTM derives the side and quantity from the ticked fills (server-computed, not guessed), and unticked fills stay in the queue so you can carve a second trade out afterwards. A single real fill is never split across trades. Match to an existing trade opens a picker with a quantity-fit hint per candidate.
  • One dismissal, matched to the condition, each changing no data and reversible from the Set aside tab:
    • Do not import for an untracked broker position. Leaves the broker position out of UTM and stops the alert. Use it when the position is not yours to track: a trade placed directly in the broker, or a paper-account leftover.
    • Leave unlinked for an orphan fill. Leaves the fill attached to no trade.
    • Mark as expected for a genuine, external quantity difference. Use it when the broker differs for a known reason: a corporate action (a split or merger) the broker applied, a trade placed directly in the broker UI, or a paper-account reset.

Every data-changing action (match, create, add fill, re-fetch, import a position, close a missing trade, fix a fill, flip the side, or override the entry price) passes through one shared before/after confirm dialog. The dialog leads with a plain-language consequence sentence that says what will happen and why; the exact numeric before/after sits behind a "Show the exact field changes" disclosure, so the meaning comes first and the raw deltas are there when you want them. It carries the trust line: nothing changes until you confirm, and you can undo it later from the Reconciled tab. The preview is computed on the server, so the "after" you see is precisely what gets written. Dismissals change no data, so they skip the dialog.

On confirm, you return to the Needs attention queue so you can keep clearing it; check the Reconciled tab afterwards to see what you matched, created, or added a fill to. For the rare case the guided actions do not cover, the Full trail and advanced repair disclosure below holds every power action on this same surface; there is no longer a separate repair tool.

The old Reconciliation menu item, the /reconciliation route, and the old per-account repair URL all now redirect to the shell.

Full trail and advanced repair

Below the guided actions, a collapsed-by-default Full trail and advanced repair disclosure holds every power action that used to live on the separate repair tool, on this one surface. The default view stays calm; the power is one click away when you need it. You will not normally need to rebuild a trade by hand: any fill change re-derives the trade's quantity, average entry, average exit, and P&L automatically. The one case that automatic rebuild cannot reach is a trade whose totals were left contradicting each other and which then never received another fill, so there was nothing to trigger the rebuild. Rebuild from fills is there for exactly that.

The disclosure has three parts:

  • Fills (broker truth). Every broker fill for the symbol, each with its own actions. A fill already attached to a trade offers Re-match (opens the match picker so you can move it to the correct trade) and Unlink (detaches it; the trade rebuilds from its remaining fills). An unlinked fill offers Match to a trade (the same picker) and Leave unlinked.
  • The trade or trades. Each trade carries the per-trade repairs: Add fill, Override entry price, Fix a fill, Re-open, Rebuild from fills, Change side, Acknowledge (when the symbol has a position discrepancy), and Delete trade, plus the Strategy select to reassign it. Override, Fix, Re-open, Rebuild, and Acknowledge are written to the audit log and ask for a short reason (at least ten characters) in the confirm dialog.
  • Residue trades. Lifecycle leftovers (an expired trade, or a pre-allocated trade that never filled) are listed separately with their date and originating order or signal, so a bare "LONG 0 @ $0.00, expired" row becomes judgeable and you can decide whether it is still relevant before you Re-open or Delete it.

Every data-changing action here passes through the same before/after confirm dialog as the guided actions, and each is undoable from the Reconciled tab.

The match picker

Both Match to an existing trade (from the guided actions) and Re-match / Match to a trade (from the advanced disclosure) open the same picker. It shows the fill or fills being matched, then a searchable list of your same-symbol trades. Each candidate carries:

  • a quantity-fit hint (fits exactly, over-fills, or quantity differs) worked out from the fill quantity against the trade, with the current and resulting fill quantity shown;
  • the suggested-match score when UTM has found one for that trade, reusing the same scoring as the suggested-match card; and
  • a Show this trade's trail disclosure so you can inspect the trade's orders and fills before you link.

Pick a trade and confirm; the match passes through the before/after confirm dialog and is undoable from the Reconciled tab. When you re-match a fill, the trade it currently sits on is left out of the candidate list, so you cannot accidentally re-match a fill onto its own trade.

The candidate list includes a pending shell when the symbol has one: a trade a signal pre-allocated that never received a fill, most often left behind by a repair or an incident. It is tagged plainly ("Pending shell from <strategy> strategy signal, no fills yet") rather than shown with the normal quantity-fit hint, since the rightful owner of a restored order or an unmatched fill is very often exactly this shell. This includes a shell that has since aged out to expired with no order ever placed against it - functionally the same rightful-owner shell, just a little older - so a symbol with zero fills and zero orders still offers its shell as a candidate rather than silently omitting it.

Linking is refused, safely, when it would over-expose the position

Linking a fill or an order can be refused with a message such as "This trade holds a synthetic estimate for the same shares as the fill(s) you are linking. Remove the synthetic execution first, then retry the link", or a broker-exposure message naming the numbers. Nothing is written when this happens: the fill move and the trade recalculation that refused it share one transaction, so a refusal can never leave the trade half-updated. Retry after resolving the named conflict, most often by unlinking the synthetic estimate first (see the repair sequence below).

Routine items set aside automatically

Some trade lifecycle leaves behind housekeeping debris that is not real reconciliation work: a trade that expired before any order reached the broker, or a pre-allocated trade that a newer signal replaced before any fill landed. UTM keeps these out of the Needs attention queue so you are not asked to action something that was never live.

This is a quiet, fully reversible read filter, not a deletion: nothing is removed. When any have been set aside, a small note sits above the queue, for example "3 routine items were set aside automatically", with a View link that opens the Set aside tab. There each item is listed in plain language ("Expired, no fills" or "Replaced before any fill"), tagged with its account, with a Bring back to attention button that returns it to the queue without changing any position. Permanent removal is never an automatic side effect of the reconcile view; it stays a separate, operator-run maintenance task.

Remnants: fills not in a position

After you reconcile your current positions, the broker still holds fills that no longer back anything UTM tracks: closed round-trips, partial-close leftovers, and activity from before you connected UTM. These are remnants, and they live on the Not in a position tab, with a count in the reconciliation alert alongside the rest of your needs-attention work.

A remnant is an unlinked broker fill on a symbol that already agrees with the broker (the symbol has no outstanding position gap). While a symbol still has a gap, its unlinked fills belong to the "create the trade from these fills" flow for the live position; once the symbol is reconciled, any fill left over cannot be part of the current position, so UTM treats it as history. UTM classifies each remnant from the net of its own fills, as a default you can always override:

  • Closed round-trip. The buys and sells net to zero. UTM shows the realised P&L (sell proceeds minus buy cost, correct for both long and short).
  • Unclosed opener. A leftover opener with no matching live position. There is no realised P&L to show.

Each remnant offers two actions:

  • Import as history. Creates the historical trade, usually closed, with its realised P&L. The shared before/after confirm dialog shows the realised P&L and states Affects current position: No, so importing it never changes what you hold now. Pick the strategy it belongs to, the same as the other import flows. The trade lands on the Reconciled tab with an Undo. When the original fills are no longer returnable from the broker (older fills outside Alpaca's window, and every TradeStation case, since TradeStation has no activities feed), UTM imports a summary instead and flags the trade as an estimate, so you never mistake it for confirmed fills.
  • Ignore. Sets the remnant aside without importing it. Reversible from the Set aside tab.

The per-account start date. A banner on the tab shows the account's UTM start date and links to Settings -> Accounts where you set it. Anything before that date is pre-UTM history; the banner offers a one-click Ignore everything before the start date that sets all those fills aside in bulk. Using it is optional: per-item handling is always available, and pre-start-date remnants are de-emphasised and can be shown or hidden. Clearing the date brings the older fills back.

Remnants are the single home for this work. The old Import Review tab on the Trades page has been removed; there is no second place to clear leftover fills.

The Broker data tab

The Broker data tab is the raw record of what the broker did: every broker order for the in-scope accounts, with its captured fills nested underneath and a link status, plus loose fills that arrived with no order. It is read-first, with two write actions. An order that is linked to a trade offers Unlink order, which detaches the order and every one of its fills together (fills follow their order, so an order-backed fill is never unlinked on its own); a loose fill with no order keeps its own per-fill Unlink.

An Unmatched order or loose-fill group offers Link to trade, which opens the same match picker described above (candidates including any pending shell, the strategy gate, and the off-strategy warning), scoped to that order's account and symbol automatically - there is no filter to set. Picking a candidate and confirming links the order (or the loose fills) to it through the same before/after confirm dialog every other reconcile write uses.

Heal execution-order drift. At the top of the tab sits a maintenance action for a rare historical condition: a fill whose trade disagrees with its own order's trade. UTM no longer creates this drift, but older data may still carry it. The action is two explicit steps:

  1. Check for drift. A read-only report. It changes nothing and tells you how many orders are drifting and how many fills would move, with a per-order list. The scope follows the account filter pill: a selected account narrows the check to it, otherwise every account you own is checked.
  2. Heal. Offered only when the check found drift. A confirmation states exactly how many fills will move (taken from the check you just ran) before anything is written. Each fill moves onto its order's trade; a fill whose order has no trade returns to the Needs attention queue. Affected trades are recalculated and every move is recorded in the audit log.

Re-running the check after a heal reports no drift; the action is safe to run any time.

Backfill missing orders. Below the drift heal sits a second maintenance action for a rarer condition: a broker fill that arrived with no UTM order at all, usually because a signal's transmission was lost. It is also two explicit steps:

  1. Check for missing orders. A read-only report. It resolves each order-less fill's broker order id (from stored data or a refetch of the broker's own activity feed) and tells you how many orders it could restore, how many fills would relink, how many are duplicates of a fill you already have, and how many could not be resolved. Nothing is written yet.
  2. Restore. Offered only when the check found a restorable order. A confirmation states exactly how many orders and fills will be affected before anything is written. Each restored order is created from the broker's own record and its fill is attached to it; the order has no trade yet, so use Link this order afterwards to attach one. Every restore is recorded in the audit log.

A duplicate finding means the fill you are looking at describes the same real-world trade as a fill you already have under a restored (or already-existing) order. UTM never writes to or deletes a duplicate automatically: it shows you which trade the duplicate row is currently linked to, so you can see what unlinking it would affect before you act by hand. An unresolvable finding means the broker no longer has a record to match against (for example, the fill is outside its history window); it is left as-is.

Backfill missing fills. Below the missing-orders backfill sits the inverse maintenance action: an order UTM does have, that the broker reports filled (or partially filled), but whose fills were never fully captured - or whose status still disagrees with the broker's own terminal record. It is also two explicit steps:

  1. Check for missing fills. A read-only report. It confirms each candidate order against the broker's current record and tells you how many orders it could restore, how many are already present (every fill the broker reports already matches something you have, just under a different id), how many could not be resolved, and how many hit the broker's rate limit. Nothing is written yet.
  2. Restore. Offered only when the check found a restorable order. A confirmation states how many orders will be affected before anything is written. Each restore repulls the order's fills from the broker, adds only the ones genuinely missing, and corrects the order's status when it disagrees with the broker. Every restore is recorded in the audit log.

An already present finding means every fill the broker reports for that order already matches an execution you have (possibly under a different broker id); nothing is added, though the order's status may still correct. An unresolvable finding means the broker's own record for that order could not be read. A rate limited finding means the broker was still throttling requests after several retries; this is not a data problem, so re-run the check later rather than treating it like an unresolvable row.

Two optional From and To dates narrow the check to a known window (for example, a specific incident's date range) instead of scanning the account's full order history - useful on an account with a long history, since a narrower window finishes faster and puts less load on the broker's API. The report also breaks its findings down by month, so a fresh cluster of gaps stands out from routine historical noise in the same run.

The Reconciled history

The Reconciled tab is the history of every trade you have reconciled, tucked out of the way of the needs-attention queue. It honours the account filter pills and the live or paper mode, so it shows the same scope as the rest of the shell.

  • Search. Type a symbol (or part of one) in the search box to narrow the list. Filtering by anything else is not offered yet; search covers it.
  • Sort. Click any column header to sort by it, and click the same header again to flip the direction. The arrow on the active column shows which way it is sorted.
  • Open a trade. Each symbol is a link to that trade's detail page, so you can inspect the underlying executions and history.
  • Undo. Each row has an Undo button to reverse the reconciliation you made by mistake. It opens the same before/after confirm dialog as every other data-changing action, previewing exactly what will change, and the reversal matches how the trade was reconciled. For a match or create, the trade's broker fills return to Needs attention so you can re-match or recreate them, and any synthetic placeholder fills stay attached. For a manually added fill, that synthetic fill is removed instead and the real broker fills stay attached, so the prior gap reappears. Either way the trade is reopened (unmarked as reconciled), and nothing changes until you confirm.
  • Pending rows. A row whose trade a repair action left with zero fills (an unlink, or a discarded synthetic) still shows here with its status tagged Pending · no fills linked in amber, and its Undo stays reachable and enabled - this tab does not apply the pending-hidden filter the Trades page uses by default.
  • Paging. The list is paged; use the page-size selector and the page controls at the bottom to move through a long history.

Automatic Reconciliation

UTM reconciles account positions automatically after every background sync. The results are stored and visible on each trade via the sync status field. You do not need to trigger this manually. The process:

  1. Pulls current positions from the broker
  2. Calculates UTM's expected positions from open trades
  3. Compares symbol by symbol
  4. Records any discrepancies for review

Discrepancies are resolved automatically when a subsequent sync shows the positions match again.

Reconciliation Statuses

StatusMeaning
ReconciledBroker data and UTM records match
UnreconciledGap exists between broker and UTM data

Use the filter at the top to switch between All, Reconciled, and Unreconciled views.

Discrepancy Types

When automatic reconciliation detects a mismatch, it records the type of discrepancy:

TypeCodeDescriptionDefault Severity
Missing in UTMMISSING_IN_UTMBroker has a position but UTM has no matching open trade.HIGH
Missing in brokerMISSING_IN_BROKERUTM has an open trade but the broker shows no position.HIGH
Quantity mismatchQUANTITY_MISMATCHBoth sides show a position but the quantities differ.HIGH / MEDIUM / LOW (based on percentage difference)
Side mismatchSIDE_MISMATCHBoth sides show a position but the direction differs (long vs short).HIGH
Price mismatchPRICE_MISMATCHQuantities match but the average entry price differs significantly.MEDIUM / LOW
Execution aggregate mismatchEXECUTION_AGGREGATE_MISMATCHA trade's entryQuantity or closedQuantity disagrees with the sum of its linked executions. With the auto-rebuild invariant a trade can no longer drift from its own fills, so this is no longer surfaced as its own user-facing category; any residual signal is presented as Quantity differs.HIGH

Discrepancies appear in the trade sync status as Discrepancy. Review the Reconciliation page to investigate and resolve them.

Resolving a Missing-in-UTM Discrepancy

When the broker shows a position UTM does not know about, click Resolve on the discrepancy. The wizard picks the right primitive for you:

  • Real broker executions exist for the symbol. The wizard defaults to Link N existing executions. It creates a trade backed by the real broker fills, with no synthetic row. You only need to pick a strategy.
  • No broker executions exist for the symbol. The wizard offers the Create synthetic position flow, which builds a trade from the broker average and quantity. Use this when the broker position pre-dates UTM and there is nothing real to link.

The second path is also available as Create synthetic position (advanced) when broker executions exist, but you should only fall back to it if those executions are wrong (for example, sandbox test fills).

Opposing-side blocked on netting brokers

On Alpaca and TradeStation, UTM blocks the import if you already hold a non-terminal trade on the opposite side for the same (account, symbol). The broker nets long and short into one position, so two opposing UTM trade rows would silently desync from the broker. The wizard surfaces the error with the conflicting trade id. Close the existing trade to flat first, then re-run Resolve. Brokers that support hedging (e.g. Interactive Brokers) are unaffected.

Adding Pre-Existing Positions

If you connected a broker that already has open positions, use the Resolve flow for each symbol that shows a Missing in UTM discrepancy. The wizard picks the right primitive automatically:

  • Real broker executions exist. The wizard links them to a new trade. Pick a strategy and confirm.
  • No broker executions exist. The wizard offers the Create synthetic position flow, which builds a trade from the broker average and quantity.

See Resolving a Missing-in-UTM Discrepancy above for full details.

Accept as Final

After the Resolve wizard creates a trade backed by synthetic data, the reconcile button changes to Accept as Final (shown in yellow).

Clicking it means: "I acknowledge this trade is based on manually entered data, and I accept it as accurate."

This marks the trade as reconciled and allows P&L tracking to proceed.

Why the button is different

The standard Reconcile button (green) is used when all executions came directly from the broker. Accept as Final (yellow) signals that at least one execution was entered manually, so you are explicitly accepting the data rather than it being verified against broker records.

Execution origin badges

Every execution row on a trade carries an origin badge so you can tell at a glance where the fill came from:

  • Broker. A real fill reported by the broker. It cannot be deleted; detach it with Unlink if it is attached to the wrong trade.
  • System. A synthetic fill UTM generated itself, either from the Resolve import flow or from the TradeStation execution bridge that backfills positions for brokers that do not report per-fill data. It cannot be deleted, because it is load-bearing: removing it would just regenerate it on the next sync, or leave a transient gap in the position. Correct it by fixing the underlying broker data and letting the next sync rebuild it.
  • Manual. A fill you added by hand to patch a gap. Only Manual fills offer a Delete action. Deleting one soft-deletes it (the row is kept for audit) and recomputes the trade from whatever remains.

Reconciling Broker Executions

When UTM receives a real execution from the broker but has no matching trade, it appears as an unreconciled execution. You can:

  • Link to existing trade: Attach the execution to a trade you already have open
  • Create trade from execution: Let UTM build a new trade record from the execution data
  • Mark as ignored: Exclude the execution if it is not relevant (e.g., a duplicate or test fill)

Ignored executions are permanently excluded from reconciliation. They will not appear as discrepancies in future syncs. Use this for fills that are known to be irrelevant, such as partial fills from cancelled orders or test fills from broker sandbox environments.

Showing and re-matching linked fills

Once a broker fill is attached to a trade, it normally leaves the broker-executions view and is only visible nested under its trade. That is fine until a fill ends up on the wrong trade, because there was previously no way to pull it back out from the reconcile view.

Each symbol now carries a Show linked fills disclosure under its broker executions, collapsed by default so the unlinked (pending-review) fills stay the focus. Expand it to see every broker fill already attached to one of the symbol's trades, each tagged with the trade it currently sits on. Every linked fill offers two actions:

  • Re-match: opens the same match picker used elsewhere with the fill pre-selected, so you can move it to the correct trade. UTM recalculates both the trade the fill left and the trade it moved to, so neither trade is left counting a fill it no longer owns.
  • Unlink: detaches the fill from its trade.

Only real broker fills appear here. Synthetic System and Manual fills are managed from the trade itself, not re-matched from this list.

Suggested matches

When a pending-review execution looks like it belongs to a trade UTM already has, the reconciliation page surfaces a Suggested match card directly under the execution. UTM builds the suggestion by scoring your open and recently closed trades for the same account and symbol on two things:

  • Quantity proximity: how close the execution quantity is to the trade's open or remaining quantity.
  • Time proximity: how close the execution time is to when the trade opened or closed.

The card shows the candidate trade, a match percentage, and the criteria behind it (how far apart the quantities and times were). It offers three actions:

  • Accept: links the execution to the suggested trade. This is the same link you would make by hand, so the trade's totals and reconciliation status update straight away. The link records that it came from an accepted suggestion, along with the score and criteria, in the audit trail.
  • Edit: opens the manual-link dialog pre-filled with the suggested trade selected, so you can change the target before linking.
  • Reject: hides the suggestion for the rest of the session. The execution stays in pending review and the normal manual-link options remain available. The suggestion returns next session if it still qualifies.

UTM never links anything on its own. A suggestion is always a proposal you confirm. When no trade clears the confidence bar, no card appears and the execution behaves exactly as before, with the manual-link options only.

The matcher works the same way for every broker, including TradeStation. An operator can tune the quantity tolerance, the time window, the minimum score, and an overall on/off switch from the admin settings. With the feature switched off, orphan executions show the manual-link options only.

Moving the UTM start date earlier

When you first connect a broker, UTM auto-ignores fills that occurred before your UTM start date so they do not crowd the reconciliation queue. If you later move the start date earlier, some of those fills now fall inside the active window and may need reconciling.

The reconciliation page surfaces this with a banner at the top of the account view:

N previously ignored executions now fall within your active window. They may need reconciling.

The banner offers two actions:

  • Review: expands the Ignored accordion under each affected symbol and scrolls you to the first match, so you can decide what to do row by row.
  • Restore all in window: opens a confirmation dialog and, on confirm, flips every orphan ignored execution at or after the start date back to pending review in one go. Executions linked to a trade are left alone.

Dismissing the banner with the X hides it for the rest of the browser session. It returns next session, or when another account has its own batch of in-window ignored executions.

Executions left behind by a deleted trade

When you delete a trade, UTM does not delete the broker executions that were attached to it. Each execution is detached from the trade and moved back to pending review, so the underlying broker data is never lost.

These orphaned executions always remain visible on the reconciliation page, even when they occurred before your UTM start date or fall outside the default rolling window. This is deliberate: a deleted trade whose fills predate your start date would otherwise leave no trace, making its data appear to have disappeared. You do not need to switch on Show all to see them. Re-link them to a trade, build a new trade from them, or mark them as ignored, just like any other pending-review execution.

The rolling window still applies to ignored executions and to the bulk of historical fills, so large accounts stay fast to load.

Marking a Trade as Reconciled

Once all executions are linked and data looks correct, click Reconcile. The trade moves to the Reconciled view and is excluded from future unreconciled counts.

Common Scenarios

Connecting a Broker Mid-Session

If you connect a broker while positions are open:

  1. Go to Reconciliation, select the account
  2. For each symbol showing Missing in UTM: click Resolve and follow the wizard
  3. From this point forward, new signals will create real executions that reconcile automatically

Missed Fill

If an order filled at the broker but UTM did not record the execution:

  1. Find the trade in Reconciliation
  2. Click Add Synthetic Execution with the fill details
  3. Click Accept as Final

Duplicate Execution

If an execution appears twice:

  1. Find the duplicate in the unreconciled list
  2. Use the actions menu to unlink or delete it
  3. Re-reconcile the trade

Replacing a Synthetic Estimate With Real Fills

A trade sometimes ends up carrying both a synthetic (estimate) execution and, later, the real broker fills or order it was standing in for - usually left behind by an earlier import, a backfill, or an incident repair. Do the repair in this order:

  1. Unlink the synthetic estimate first. Open the trade's Full trail and advanced repair disclosure and unlink the synthetic execution, or discard it directly from its card if one offers a Discard action. This is what keeps the next step quiet: linking a real fill or order onto a trade that still holds a conflicting synthetic estimate is refused (see the callout under The match picker).
  2. Link the order or fill to the surviving trade or shell. Use Link this order / Link this fill from the needs-attention card, or Match to a trade from the advanced disclosure, and pick the correct trade or pending shell from the picker.
  3. Set the orphaned synthetic aside. If the synthetic execution is still sitting unlinked afterwards, discard it from its card (or ignore it via Set aside) rather than leaving it in the needs-attention queue - it no longer represents anything real once the genuine fills are linked.

Doing this out of order now fails safely: if you link the real fill first while the synthetic is still attached, the request is refused with a clear message naming the conflict, and nothing is written (the move and the refusing recalculation share one transaction). It no longer half-applies - the earlier failure mode was a bare server error after the fill had already moved, leaving the trade with doubled quantities until the synthetic was removed. Unlinking the synthetic first avoids the guard entirely and is the reliable order to work in.

Flagging and Repairing a Trade

When a single trade has wrong data, you no longer need an operator to edit it for you. The trade detail page flags the problem; it does not repair it. Every repair lives on one surface, the per-symbol reconcile detail page, so there is a single place to fix things.

Any trade that needs attention shows a yellow Needs repair badge on the reconciliation page (next to its status); click it to jump straight to that symbol's reconcile detail. You can also open a trade from the Trades list: when a trade has a reconciliation issue, its detail page shows an amber Reconciliation issue banner at the top with a Resolve in Reconcile button that opens the same reconcile detail. A healthy trade shows no banner.

On the reconcile detail page, each anomaly explains what was found and offers one or more repairs. Every repair opens a confirmation dialog, shows the change it will make, and requires a short reason (at least 10 characters) that is written to the audit log. Nothing is changed until you confirm.

What UTM detects

AnomalyWhat it meansRepair offered
Aggregate driftThe trade's stored quantities disagree with the sum of its linked executions. This self-heals automatically the next time the trade's fills change, so no manual action is offered.None (auto-heals)
Missing entry executionsThe trade has no entry-side fills, but a filled order for the same symbol is not linked to any trade.Link order, or Override entry price
Entry price out of rangeThe recorded average entry price differs from the real fill price by more than 5x.Override entry price
Wrong terminal statusThe trade is marked failed or expired but has real entry executions.Re-open trade
Permanent position discrepancyDrift on a delisted ticker or a symbol the broker no longer reports. This will never auto-resolve.Acknowledge
Missing in UTMThe broker holds a position UTM has no open trade for.Acknowledge
Implausible execution priceAn execution carries a wrong price (or quantity, or time) the trade derived its totals from.Fix execution

The repair actions

  • Override entry price sets the average entry price directly. Use it when the broker stored a wrong per-share price and there are no trustworthy executions to rebuild from. UTM refuses a price more than 10x the last market price, and refuses the override entirely when the linked executions already agree with the price you entered (the totals are already derived from those fills automatically).
  • Link order attaches a filled, unlinked, same-symbol order and its fills to the trade, then rebuilds the totals.
  • Re-open trade flips a failed or expired trade with real entry fills back to open so the position is tracked again.
  • Rebuild from fills re-derives every total on the trade (quantity, closed quantity, average entry, average exit, realised P&L, and status) from the fills it already holds. Use it when the trade's own numbers contradict each other, for example a trade that shows the same quantity in and out yet still says nothing is closed and is still open. It changes no fill, so it trusts them completely: if a fill is the thing that is wrong, use Fix a fill instead. Running it twice is safe; the second run changes nothing.
  • Acknowledge suppresses a permanent discrepancy for the symbol so it stops surfacing. Use it for corporate action residuals and delisted tickers.
  • Fix execution corrects a single execution that carries a wrong price, quantity, or time, then rebuilds the trade's totals from the corrected fill. Use it when the recorded average looks right but a fill behind it is wrong (for example a cost-basis total stored as a per-share price). Because it edits the source fill, a later sync re-derives the corrected totals rather than undoing the fix. UTM refuses a price more than 10x the last market price.
Repair blocked by broker exposure

If a rebuild or re-open would leave UTM tracking more open shares than the broker holds for that symbol and side, the repair is refused and the trade is left exactly as it was. Close or fix the conflicting open trade, then retry.

Every repair is recorded in the trade's audit timeline with the reason you supplied, so the history of who changed what and why stays on the trade.

Troubleshooting

"Accept as Final" Not Appearing

The button only appears when a trade has at least one synthetic execution. If you see the standard Reconcile button instead, all executions came from the broker.

Trade P&L Looks Wrong After Reconciliation

Check that the synthetic execution price and quantity are correct. You can edit a synthetic execution from the trade detail view.

Position Shows as Unreconciled After Accepting

Refresh the page. Reconciliation status updates immediately but the filter may need a refresh to reflect the change.