Trading Journal Data Quality: Fixing Fills, Costs, and Gaps Before Review
Bad journal data produces a confident, wrong review. Verify raw source records — fills, corrections, costs, timestamps, duplicates, and missing records — before trusting derived trades or P&L.
Trading-journal data quality starts with the finest-grained authoritative record the chosen source actually exposes, not with the trade summary a dashboard displays. Depending on the broker, asset class, and export or API, that record may be an individual fill, an average-price execution, an allocation, a transaction or confirmation, or an order-level summary; more granular execution details may exist elsewhere. A market execution, a broker-internal allocation, a customer-facing confirmation, and a journal-derived round trip are related but are not interchangeable records. Preserve more granular source records when they are available, and reconcile at the finest granularity the source actually provides before trusting any trade, position, or P&L figure built on top of it. A journal can look complete — populated fields, a clean dashboard, a calculated win rate — while resting on records that were never checked against the source, and a review built on that record inherits the error without any visible warning sign.
Quick answer
Trading-journal data quality depends on the authoritative source and the granularity it exposes. The reliable sequence is: identify that source, preserve its raw evidence, reconcile executions or transactions and later corrections at the available level, normalize timestamps and identifiers without overwriting source values, derive or group trades and positions only afterward, and review only after unresolved periods are flagged. Before trusting a calculated result, confirm fill or transaction accuracy, correction handling, source-aware cost attribution, identifier-scoped duplicate detection, and multiple independent controls such as record count, quantity, costs, cash movement, source P&L, ending position, or balance where available. A journal that fails any one of these can still render a normal-looking dashboard, so the check has to be deliberate rather than assumed from a working interface.
The data model: source records, trades, and positions
Several different objects get called “a trade” in casual journal language, and confusing them is the root of several data-quality failures below.
- Source record: the finest-grained authoritative record the selected source actually exposes. It may be an individual market or broker execution, an allocation, an average-price execution, a transaction or confirmation, or an order-level summary. Do not treat a customer-facing record as an exchange-level fill unless the source establishes that granularity.
- Derived trade or round trip: a journal-defined or source-defined aggregation built from one or more underlying records under an explicit grouping rule. Possible rules include flat-to-flat position cycles, FIFO or LIFO lot matching, specific-lot logic, broker or account conventions, strategy-defined grouping, or average-cost position accounting where applicable. Trade grouping, tax-lot accounting, and position accounting can overlap but are not conceptually identical.
- Position: the net (or, for accounts that track long and short separately, gross) exposure in an instrument across a sequence of executions, including scale-ins and scale-outs that a round-trip view would otherwise fragment.
- Multi-leg group: two or more source records the trader intends as one strategy — a spread, a hedge, a rolled position — that a journal may display as a single row while the underlying records remain separately traceable.
Reconciliation belongs at the lowest authoritative level the source exposes. An aggregation step can only be as accurate as the records it aggregates, and it can hide an error that reconciling only at the journal’s trade level would never surface. The rest of this article uses “source record” when granularity is not established and “execution” only when the source exposes an execution-level event.
Three layers: evidence, normalization, analytics
Use three explicit layers so later calculations never masquerade as source facts:
- Layer 1 — source evidence: immutable/raw values received from the authoritative source, such as source timestamp, price, quantity, identifier, source-reported fee, or source-reported P&L.
- Layer 2 — normalized ledger: deterministic transformations, such as a normalized time zone, symbol, currency, mapped account identity, or current transaction status.
- Layer 3 — derived analytics: journal interpretations and calculations, such as round-trip grouping, setup-level trade, allocated cost, base-currency P&L, slippage, session assignment, or behavioral classification.
Never silently overwrite Layer 1 with Layer 2 or Layer 3. Preserve provenance from a derived value back through the normalized ledger to the original source record.
Why a working dashboard is not proof of clean data
A journal interface can populate every field, sort correctly, and produce a plausible-looking equity curve while still resting on flawed underlying source records. None of the error types below announce themselves. A duplicated record inflates volume without producing an obvious anomaly. A missing record simply is not there to be missed. A misattributed fee shifts a result by a small, easy-to-miss amount. A source timestamp overwritten with the wrong time zone can move a record into the wrong session without changing anything else about how it looks on screen.
Automated trading journal imports already draws the boundary between what a transaction source can capture and what it cannot infer — intent, plan, and applicable rule. Data quality is the layer underneath that boundary: before asking whether the record captures the trader’s intent, confirm that it correctly captures what the authoritative source reports about the account’s activity. A journal can clear the automation boundary and still fail the data-quality layer, and the two problems require different checks.
Record and fill accuracy: does the journal match the source?
When the source exposes individual executions or fills, a record is accurate when its price, quantity, side, timestamp, account, and — where the source exposes one — execution or trade identifier match what the broker or exchange reports for that fill. When the source exposes only transactions, confirmations, allocations, average-price records, or another coarser representation, reconcile those fields at the source’s available granularity and do not imply that fill-level verification occurred.
| Field | What to check | Common failure |
|---|---|---|
| Execution price | When execution-level evidence exists, compare with the authoritative execution-level source record; otherwise reconcile the represented price at the source record’s actual granularity | Journal stores a mid-price or a delayed quote instead of the source-reported price |
| Quantity | Matches contracts or shares actually filled, including each partial fill | A partial fill is recorded as if it were the full requested size |
| Side | Buy or sell, recorded separately from position effect | Buy-to-open and sell-to-close are treated as the only possible side values |
| Position effect | Opening or closing, preserved separately from side when the source explicitly reports it; otherwise derived from position or accounting logic and labeled as derived | Buy/sell is treated as proof of open/close without considering existing exposure, or a derived effect is presented as raw |
| Source and account identity | The specific account or sub-account the execution belongs to | Multi-account imports merge executions from different accounts under one identity |
| Execution or trade identifier | The broker’s or exchange’s own identifier for the event, when the source provides one | The import discards the source identifier and assigns its own, with no way back to the original record |
| Timestamp | Matches the source’s precision and time zone or offset | Import applies a different time zone than the one the source reported |
Side and position effect answer different questions and should not be treated as one field. Side is an execution attribute — buy or sell. Position effect is what the execution does to an existing position — open or close — and should be preserved as source-reported when the source explicitly provides it. Otherwise, it may be derived from position or accounting logic, but must remain labeled as derived rather than being presented as a raw execution field. A buy can open a long position or close a short one; a sell can close a long position or open a short one.
Partial fills deserve their own accuracy check. Preserve the lowest-level source records actually available. When the source exposes several partial executions, keep each individually traceable — its own price, quantity, and timestamp — even after the journal derives a weighted-average entry or exit price. If only an average-price customer transaction or confirmation is available, preserve it exactly and do not reverse-engineer fictional partial fills; if more granular details can be obtained from the broker, store them as separate source evidence rather than silently replacing the confirmation.
A single reconciled source record is not sufficient evidence that the whole import is accurate. Reconcile a sample that includes ordinary single-fill executions, partial fills where exposed, average-price or summarized records where that is the available granularity, and any instrument or account type where the import method is new or has changed.
Cancellations and corrections: what changes the ledger
An order that is submitted and cancelled before it fills never produced an execution, so it is not a trade and should not appear in an execution or trade count. Cancellation at the order level is routine — it reflects an order that was withdrawn, not a transaction that happened and was later reversed.
A different event is a cancellation, reversal, or correction applied to a transaction that was already reported. Post-trade correction mechanisms exist in several market and broker reporting systems. For example, FINRA Rule 6380B requires members to report cancellations or reversals of trades previously submitted to the FINRA/NYSE Trade Reporting Facility. The exact event type and handling rule depends on the source and asset class; this rule is not universal for every broker execution, exchange, futures or options record, or FX/CFD-style transaction. When the authoritative source reports one of these events, the journal should reflect the current authoritative state while preserving provenance of the original record and the change.
Treat these as two different data-quality questions. An order-cancellation import bug shows up as executions that shouldn’t exist because they were never filled. A transaction previously reported by the source and later cancelled, reversed, or corrected may have stale or changed reported values. Confirming which one applies determines whether the fix is “remove a row that was never an execution” or “apply the source’s correction to a previously reported transaction.”
Timestamps: preserve the source, derive the rest
Preserve the execution’s original timestamp exactly as the source reported it, including its time zone or UTC offset, whenever the source provides one. That source timestamp is what you reconcile against later; overwriting it with a converted value destroys the only evidence of what the broker actually reported.
Derive a separate, normalized timestamp for review — one consistent time zone or session convention applied across every account and import path — rather than replacing the source value. Keep both fields: the source timestamp for reconciliation, and the normalized timestamp for grouping executions into sessions and comparing across accounts or brokers that report in different time zones.
Daylight-saving transitions and session boundaries are where this distinction matters most. An execution reported near a DST change or near a session cutoff — midnight, the exchange’s session close, or the trader’s own defined session window — can shift into a different calendar day or session depending on which time zone and which convention are applied. A journal that only stores one converted timestamp cannot detect or correct for this after the fact. A normalized timestamp can be re-derived when the source timezone, UTC offset, or another authoritative timezone convention is known or preserved; a naive timestamp with no recoverable timezone context may remain ambiguous.
Cost attribution: transaction, position, and account levels
Costs attach at different levels, and treating them as one undifferentiated “fees” bucket is what breaks per-trade cost attribution.
- Execution-attributable transaction costs can be tied to a specific execution when the source supplies execution-level attribution: commissions, exchange fees, and regulatory transaction fees may be reported against the fill that generated them.
- Position-related or period-accrued carrying costs accrue to holding exposure over time rather than to any single execution, such as borrow or funding where applicable. Their source-reported level depends on the provider; do not universally assign them to a specific position or fill.
- Account-level financing and other charges may be calculated from aggregate account balances rather than tied to a particular execution or position. Platform subscription fees, inactivity fees, wire fees, or data fees are also account-level examples. Attaching any of these to a trade at all is an analytical choice, not a source fact.
Do not assume every fee is directly reported at the economic level it affects. A commission or exchange fee may be attributable to trading activity while reported as a combined transaction, order, or statement amount rather than one explicit amount per execution. Financing, borrow, swap, or margin-interest charges may accrue because of a position but be posted at account level. When a cost must be allocated for analysis, retain the source amount and source level, document the allocation method, and store the resulting derived amount separately. Allocated costs must not be presented as broker-reported facts. Currency conversion works the same way: treat a converted figure as derived and distinct from the source-reported amount.
Slippage is a different question than fill accuracy
Record and fill accuracy asks whether the journal’s source record matches what the authoritative broker or platform source reported at the granularity available. When individual fills exist, slippage can be measured and decomposed at fill level. When only an average-price execution, transaction, or comparable achieved-price record exists, an order- or transaction-level deviation from a predetermined, consistent, reproducible benchmark may still be measured when the two prices are economically comparable; the coarser source does not support invented fill-level decomposition. These remain separate questions. An accurately imported fill can match the broker’s confirmation exactly and still show real slippage, because the market moved, the order type interacted with available liquidity differently than expected, or latency separated the decision from the fill.
Do not label a difference between the intended price and the filled price as a data error. It is a data error only if the recorded fill does not match what the broker or exchange actually reports for that execution. It is slippage if the recorded fill is accurate but differs from whatever reference price the trader’s process defines as the target. Measuring slippage requires a benchmark definition that is predetermined, consistent, and reproducible. The benchmark may be recorded contemporaneously at decision or order time, or deterministically reconstructed afterward from timestamped market data under a predefined methodology. Choosing a benchmark retrospectively because it produces a preferred execution-quality result is invalid.
Gross vs. net P&L: broker-reported and journal-recomputed
A broker, clearing platform, or account statement may report realized P&L or transaction economics, but the field definition and included costs vary by source. Inspect the specific source statement’s definitions; preserve any source-reported P&L separately from the journal’s recomputation rather than assuming how another provider reports or nets it. The two values answer different questions, and a mismatch is diagnostic rather than an error to silently resolve.
Journal-derived gross P&L is the pre-cost economic result calculated under the applicable position-matching, multiplier, settlement, valuation, and accounting conventions. For a simple closed round trip, it commonly reduces to price change × quantity × applicable multiplier. Net P&L subtracts the costs the source or journal’s methodology attributes to the result. Which costs move gross to net is not universal: inspect the specific source statement’s definitions and preserve its source-reported P&L separately from the journal’s recomputation rather than assuming how commissions, exchange fees, financing, swaps, or other carrying costs were netted.
For instruments with a contract multiplier — futures and options, for instance — gross P&L depends on multiplying the price difference by the multiplier and the quantity, and an import that drops or mis-states the multiplier produces a P&L figure that is wrong by a constant factor without looking obviously wrong. Where a position is reported in a currency different from the journal’s base currency, the FX rate and conversion timing used to translate P&L into the base currency should be recorded and applied consistently, since converting at a different rate or a different moment than the broker used is enough by itself to explain a mismatch that has nothing to do with a data error. Currency-pair records add swap charges and platform position tickets to that reconciliation; the forex trading journal lists those fields.
Preserve SOURCE_REPORTED_PNL and JOURNAL_RECOMPUTED_PNL conceptually as separate values rather than replacing one with the other. A discrepancy between them is a reconciliation signal — a missing fee, an unrecorded multiplier, an FX timing difference, or a genuine difference in calculation convention — and that signal disappears the moment only one of the two numbers survives.
Duplicate detection: identifier first, composite match only as a fallback
The reliable way to detect a duplicate is to construct a stable source-scoped authoritative record identifier at the granularity the source actually exposes: an execution identifier when execution-level evidence exists, or a transaction, allocation, or confirmation identifier when that is the authoritative source granularity. Include source, account, namespace, date, version, correction context, or other fields required by the identifier’s documented uniqueness semantics. An ORDER identifier is not interchangeable with an EXECUTION, transaction, or confirmation identifier, and matching IDs are evidence of duplication only when their semantics and namespace are known.
When the source does not expose a stable identifier, fall back to composite matching — instrument, timestamp, side, quantity, and price together — but treat this as a weaker signal, not a substitute for an identifier. A composite match can produce a false positive when the available timestamp precision is coarse or truncated: two genuinely separate fills can then share the same stored timestamp, price, quantity, and other compared fields. Before discarding a “duplicate” found only by composite matching, confirm there is no source identifier available and consider whether the account’s trading pattern makes two legitimate identical fills plausible.
To test duplicate handling, do not re-import a live, in-use data range purely to see whether the journal creates copies — that risks committing a real duplicate into the working record if the test fails. Limit re-import testing to an importer that supports a preview or dry-run mode, an idempotent re-import documented not to create duplicates, or a sandbox or test account, so a failed test does not corrupt live data.
Missing-record reconciliation: match the source’s granularity
Reconcile at the same level of detail the source reports, not only at the level the journal happens to display. A missing record commonly results from an import that silently drops an unsupported order or event type, a connection gap during a sync window, or a cancellation or correction the source reports but the import does not capture.
Trade count alone is a weak check. Compare execution or transaction count at the source’s available granularity, not just derived trade count, since a grouping rule can hide missing or extra records. Where relevant and comparable, extend the check to signed quantity or volume, transaction costs, cash movement, source P&L, and ending position or account balance. A matching ending position or balance is consistency evidence, not proof that intervening executions were complete: one missing buy and one missing sell, duplicate offsetting trades, cash movements, financing, FX conversion, corporate actions, or settlement events can leave a period-end total unchanged. No single control total is sufficient, and not every source exposes all of these controls.
A single matching aggregate is not sufficient. One missing execution and one duplicated execution of similar size can offset each other in a trade-count or even a volume total while both errors remain present in the underlying data. Use multiple independent controls where available — record count, signed quantity or volume, position change, costs, cash movement, source P&L, ending position, and account balance — and record which controls were unavailable.
Reconciliation status: exceptions must travel forward
A period should not be treated as simply “clean” or “dirty.” Useful methodology-level states include VERIFIED, EXCEPTION_OPEN, CORRECTED_AND_TRACEABLE, PARTIALLY_VERIFIED, and UNRELIABLE_FOR_ANALYSIS. These are not Costante product features; they are labels for the evidence state of the period under review.
If execution or transaction data remains unresolved, flag derived setup statistics, behavioral comparisons, win rate, expectancy, or P&L analysis that uses that period. An unresolved exception should propagate forward instead of being hidden by a polished aggregate.
Source of truth: keep raw, derived, and provenance separate
One principle underlies every check above: preserve the raw source record exactly as the source reported it, keep every normalized or derived field — a converted timestamp, an allocated cost, a recomputed P&L, a grouped trade — distinguishable from that raw field rather than overwriting it, and retain enough provenance (source, account, import period or run, and reconciliation status) to trace any figure back to where it came from. A correction to a record should itself be recorded as a correction, traceable to what it changed and why, rather than applied by silently overwriting the only surviving representation of the source data. Once the raw source evidence is gone, reconciling anything built on top of it against the actual source becomes permanently harder.
A pre-review data-quality checklist
Run this check before a review, not during it — mixing data verification with interpretation makes it easy to explain away a real data problem as an unusual trading day. The underlying sequence is: pull the finest-grained raw source records available, reconcile them at that granularity, normalize timestamps and identifiers, derive or group trades and positions from the reconciled records, and only then review.
| Check | Method | Fails if |
|---|---|---|
| Record and fill accuracy | Compare a representative sample at the source’s available granularity; when individual fills are exposed, include partial fills, preserve source-reported position effect when available, and label any position/accounting-derived effect as derived | A source record differs from the source, fill-level verification is implied without fill-level evidence, or a derived field is presented as raw |
| Cancel/correct handling | Confirm transactions previously reported by the source and later cancelled, reversed, or corrected are reflected in the ledger, and that never-filled orders are excluded from trade count | A source-reported transaction is missing its correction, or a cancelled order is counted as a trade |
| Cost attribution | Confirm transaction, position, and account-level costs are attached at the right level, with any allocated cost labeled as derived | A cost is missing, misattributed to the wrong level, or presented as broker-reported when it was allocated |
| Timestamp integrity | Preserve the source timestamp exactly as provided; preserve timezone, UTC offset, or another authoritative timezone convention when supplied or established; mark a naive timestamp without recoverable context as ambiguous | The source timestamp was overwritten, available timezone context was discarded, or an unsupported timezone was silently assigned to an ambiguous timestamp |
| Slippage vs. data error | Confirm the benchmark is predetermined, consistent, and reproducible — recorded at decision/order time or deterministically reconstructed from timestamped market data under a predefined method | An accurate fill that differs from an intended price is logged as an import error, or a benchmark is chosen retrospectively for a preferred result |
| Gross vs. net P&L | Confirm both the source-reported and journal-recomputed P&L are retained, with multiplier and FX treatment documented | Only one P&L figure survives, or the two were never reconciled against each other |
| Duplicates | Match on a stable source-scoped authoritative record identifier at the source’s available granularity; use execution identifiers for execution-level evidence and transaction/allocation/confirmation identifiers otherwise; use composite matching only when no stable identifier exists | A duplicate is accepted from an unknown identifier scope, or a legitimate pair of identical source records is merged into one |
| Missing records | Compare available independent controls — execution or transaction count, signed quantity or volume, position change, costs, cash movement, source P&L, ending position, or balance | A control total fails to match, or the period is treated as clean despite unavailable or unresolved controls |
A journal that passes this checklist is ready to support a trading-performance review, a structured post-trade review, or an AI-assisted review. A journal that fails one check should be corrected — with the correction traceable back to the source record it changed — or the affected period should be flagged as unreliable before it is used to draw a behavioral or performance conclusion.
Common trading-journal data-quality mistakes
Trusting a working dashboard as proof of accuracy. A dashboard can render normally on top of duplicated, missing, or misattributed executions. Rendering correctly is not the same as reconciling correctly.
Treating an aggregated trade as the only surviving record. Once a grouped trade or weighted-average fill replaces the individual executions that produced it, reconciling back against a broker statement that reports each fill separately becomes guesswork.
Fixing a record after seeing a surprising result. Correcting an execution because a number looks wrong, without independently reconciling it against the source, risks adjusting the data to match an expectation rather than the truth — and without a traceable correction, that adjustment can’t later be distinguished from the original source record.
Treating aggregate totals as sufficient. A matching trade count or a matching gross total can still hide one missing execution offset by one duplicate. Check at the granularity — and across the control totals — the eventual review will actually rely on.
Re-verifying only at setup. A platform’s export format, symbol convention, default time zone, or fee schedule can change without notice. Re-check after any change to the import source or method, not only on first setup. For stock records, a split, reverse split, or ticker change is the same kind of event: keep the raw fill and add an adjusted view, as described in the stock trading journal guide.
Where Costante fits
Costante’s supported workflow is separate from broker-ledger reconciliation: it supports session planning, self-defined behavioral guardrails, pre-trade and in-session checks, low-friction trade and behavioral logging, structured review, and reviewable behavioral patterns. Broker transaction reconciliation, cancellation and correction handling, duplicate detection, and missing-record investigation belong to the broker, FCM, platform, or transaction journal that holds that source evidence.
That distinction matters because the two records fail in different ways. A missing broker or platform source record is a data-integrity failure: the authoritative transaction record reports activity that the journal does not reflect, and only reconciliation against that source can catch it. A missing behavioral entry — a session that was never logged, a check that was skipped — is a completeness gap in self-reported evidence: the record is accurate as far as it goes, but it does not cover a period the trader didn’t record. These are not the same failure mode, and treating a gap in self-logged behavioral data as equivalent to a gap in source transaction evidence overstates what either verification method can catch.
For a trader who also maintains an imported transaction journal, the two records answer different questions once each is independently verified: the reconciled source ledger establishes what the authoritative transaction record reports the account did, and Costante’s guardrail and review layer establishes whether the intended process was followed. Neither substitutes for the other, and neither is trustworthy without its own form of verification.
Multi-leg and options positions need the same checks, applied per leg
A spread, hedge, or other multi-leg position adds one more layer to reconcile: multi-leg strategy/group → leg → one or more source records/executions. Each leg should remain separately identifiable and, where execution-level records exist, every execution within that leg should remain individually reconcilable, even when the journal displays the position as a single row. Options trading journal covers what to verify specifically for expiration, strike, type, and opening or closing side when those fields survive an import, since a multi-leg position can fail normalization in ways a single-instrument execution cannot.
Frequently asked questions
How do I know if my trading journal’s data is wrong?
Check it against the source, not against whether it looks reasonable. When individual executions or fills are exposed, reconcile a sample — including partial fills — against the broker or platform record for price, quantity, side, position effect, account, and timestamp. When the source exposes only transactions, confirmations, allocations, average-price records, or another coarser representation, reconcile those records at the available granularity without implying fill-level verification. Confirm any cancelled or corrected source transaction is reflected correctly and that never-filled orders are not counted as trades; confirm costs are attached at the right level; and compare available record counts, volume, and cost or P&L totals against an independent source such as a broker statement. A journal can look normal — populated fields, a working dashboard — and still fail any one of these.
How should partial fills be represented in a trading journal?
When the source exposes partial fills, each should remain individually traceable by its own price, quantity, and timestamp, even after the journal derives a weighted-average entry or exit price or groups them into one position for display. If the customer-facing source provides only an average-price transaction, preserve that record exactly; do not invent venue-level partials. An aggregated row is a convenience for review, not a replacement for source detail that is actually available.
How do I detect duplicate executions in a trading journal?
Match on a stable source-scoped authoritative record identifier at the source’s available granularity: use an execution identifier when execution-level evidence exists, or a transaction, allocation, or confirmation identifier when that is the authoritative source granularity, together with source, account, namespace, date, version, correction context, or other fields required by its documented uniqueness semantics. An order identifier is not interchangeable with an execution, transaction, or confirmation identifier, and a matching ID does not prove sameness unless its scope is known. Fall back to composite matching (instrument, timestamp, side, quantity, and price together) only when no stable authoritative record identifier is available, and treat it as a candidate-duplicate signal rather than automatic proof. Test duplicate handling using an importer’s preview, dry-run, or idempotency feature, or a sandbox account — not by re-importing a live period and hoping the journal catches its own duplicate.
Why do broker-reported and journal-recomputed P&L differ?
Because they can measure different things. Broker-reported P&L reflects whatever the specific statement already nets out, which varies by asset class and source, while a journal’s recomputed figure depends on which costs it subtracts, whether it applies the correct contract multiplier, and how it handles currency conversion for a position reported in another currency. A gap between the two is a reconciliation signal worth investigating, not a number to silently overwrite; preserving both values makes the source of the gap identifiable.
Why are imported trades missing or not matching my broker statement?
A few causes recur: a source record the import silently dropped (an unsupported order type, a sync gap, or an uncaptured cancellation or correction), a time-zone or session-boundary difference that shifts a record into a different comparison window, or a grouping difference where one side treats a multi-leg or scaled position as one trade and the other treats it as several. When individual fills are exposed, reconcile those fills; otherwise reconcile the transactions, confirmations, allocations, average-price records, or other source records actually available. Slippage is a separate comparison between an accurately imported fill and a defined execution benchmark; it does not make that fill fail reconciliation with the broker statement. Reconcile record count, volume, and cost totals at the source’s available granularity rather than relying on a matching trade count alone.
Costante provides educational workflow tools, not financial advice. Trading involves risk.