Skip to content

Business license routes TickType.Trade to the FMV channel: live TradeBars are modeled fair-value with zero volume, not traded prices #43

Description

@AlexCatarino

Summary

The Polygon live data adapter delivers opening-bar Trade ticks with non-standard trade conditions (opening-auction prints, FINRA/ATS off-exchange ticks) that are not filtered in the real-time pipeline, causing live consolidated bars to differ significantly from the historical (AlgoSeek-based) bars for the same period.

This produces incorrect opening-range readings in live algorithms — the live bar's High/Low reflect off-exchange or auction prints that the offline bar builder excludes via the Excluded/Suspicious Ticks filter.

Behaviour observed

  • Symbol: SNDK
  • Date: 2026-07-31
  • Resolution: 1-minute / 5-minute bars
  • 09:30–09:35 bar received live: Low 1321.25, High 1354.40
  • Actual regular-session range: ~1365–1405
  • Data provider: PolygonDataProvider (Business license), streamed via WebSocket (FMV.SNDK topic)
  • Polygon license: Business (confirmed in syslog: Using license type = 'Business')

The gap between the live bar's High (1354.40) and the regular-session Low (1365) indicates the live bar incorporated prints from before or outside the regular-session open — most likely opening-auction fills or FINRA/dark-pool prints without a valid primary-exchange code.

The historical bar for this period shows the correct range (backtest re-run is clean), confirming the discrepancy is a live filtering gap, not a vendor data error.

Related

Intercom conversation ID: 215475307209088

This is a specific instance of the known gap documented in the US Equities Suspicious Ticks section:
https://www.quantconnect.com/docs/v2/cloud-platform/datasets/quantconnect/us-equities#05-Suspicious-Ticks

The offline bar builder applies the Excluded Ticks and Suspicious Ticks filters; the Polygon real-time adapter's PolygonDataProvider does not yet apply the equivalent filter for the T (trade) WebSocket channel — so auction/FINRA prints pass through to the live consolidator.

Proposed fix

Apply the same trade-condition exclusion logic used by the offline AlgoSeek bar builder to the Polygon WebSocket trade message handler. Specifically, exclude ticks whose c (conditions) array contains codes mapped to off-exchange or auction-only trade conditions before passing them to the consolidator.

Reference: Polygon trade-conditions dictionary — https://polygon.io/docs/stocks/get_v3_reference_conditions

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions