Knowledge Base/Does a Form T trade update a pre-market minute bar's high, low, open and close?

Does a Form T trade update a pre-market minute bar's high, low, open and close?

Yes. On Massive's pre-market and after-hours minute bars, a Form T trade can set the open, high, low and close unless it also carries a condition such as Odd Lot that cannot set prices, while a daily bar and a regular-hours minute bar never take a price from a Form T trade.

Form T, condition 12 in a US stock trade's conditions array, marks a trade executed outside regular trading hours, and the conditions endpoint lists it with updates_high_low and updates_open_close set to false. Massive's minute bars before 09:30 and after 16:00 ET take their prices from Form T trades anyway. Nearly every trade in those hours carries the condition. The two false values describe minute bars during regular hours and the daily bar.

Applies to

  • Plans: every Stocks plan returns minute and daily bars, per the custom bars documentation, and the conditions endpoint, per the condition codes documentation. Checking a bar against its trades needs /v3/trades, which Stocks Developer, Stocks Advanced and Stocks Business include, per the trades documentation.
  • Endpoints: /v2/aggs/ticker/{stocksTicker}/range/{multiplier}/{timespan}/{from}/{to} with minute and day, /v3/trades/{stockTicker} and /v3/reference/conditions. The minute_aggs_v1 and day_aggs_v1 stock flat files carry the same bars as the REST endpoint.
  • Asset classes: US stocks.

Pre-market and after-hours minute bars

Pre-market and after-hours minute bars, from 04:00 to 09:30 and from 16:00 to 20:00 ET, take their open, high, low and close from Form T trades. A Form T trade with no other condition can set those prices, and so can one that also carries Intermarket Sweep (14) or Trade Thru Exempt (41). A Form T trade that also carries a condition the conditions endpoint lists as unable to set prices, most often Odd Lot Trade (37), sets no price. It still adds to the bar's volume v and its trade count n. A minute that holds only odd-lot Form T trades therefore has no bar, and those shares still count in the daily bar's volume.

Every trade in this SPY minute, at 09:10 ET on 29 September 2026, carries condition 12:

curl -X GET "https://api.massive.com/v2/aggs/ticker/SPY/range/1/minute/1790687400000/1790687400000?adjusted=false&apiKey=YOUR_API_KEY"

Response

{
  "ticker": "SPY",
  "adjusted": false,
  "results": [
    { "v": 20805.69398, "vw": 765.5088, "o": 766.68, "c": 765.41, "h": 766.7, "l": 765.41, "t": 1790687400000, "n": 76 }
  ],
  "status": "OK"
}

t 1790687400000 is 09:10 ET (13:10 UTC) on 29 September 2026, in milliseconds. These are the minute's trades:

curl -X GET "https://api.massive.com/v3/trades/SPY?timestamp.gte=1790687400000000000&timestamp.lt=1790687460000000000&limit=50000&order=asc&sort=timestamp&apiKey=YOUR_API_KEY"

Response, trimmed to 4 of the 76 trades:

{
  "results": [
    { "conditions": [12], "price": 766.68, "sip_timestamp": 1790687400151709387, "decimal_size": "53.0" },
    { "conditions": [14, 12, 41], "price": 766.7, "sip_timestamp": 1790687429990419549, "decimal_size": "220.0" },
    { "conditions": [12], "price": 765.41, "sip_timestamp": 1790687451590758114, "decimal_size": "19600.0" },
    { "conditions": [12, 37], "price": 766.61, "sip_timestamp": 1790687456252366957, "decimal_size": "24.0" }
  ],
  "status": "OK"
}

The first trade, at 09:10:00.152 ET, set the open of 766.68. The 220-share trade at 09:10:29.990 set the high of 766.70; a 280-share Form T trade matched it 4 ms later, and odd-lot trades above 766.70 did not move it. The 19,600-share trade at 09:10:51.591 set both the low and the close of 765.41, because the four trades after it, the last at 09:10:56.252, are odd lots and cannot set the close. Each sip_timestamp is in nanoseconds.

The conditions endpoint lists Form T with both price rules false:

curl -X GET "https://api.massive.com/v3/reference/conditions?asset_class=stocks&data_type=trade&id=12&apiKey=YOUR_API_KEY"

Response

{
  "results": [
    {
      "id": 12,
      "name": "Form T/Extended Hours",
      "update_rules": {
        "consolidated": { "updates_high_low": false, "updates_open_close": false, "updates_volume": true }
      }
    }
  ],
  "status": "OK"
}

For a minute bar before 09:30 or after 16:00 ET, read the endpoint's updates_high_low and updates_open_close values for condition 12 as the regular-hours rule.

Regular-hours minute bars

A regular-hours minute bar, from 09:30 to 16:00 ET, does not take its open, high, low or close from a trade carrying Form T (12) or Extended Hours Sold Out Of Sequence (13), so the endpoint's updates_high_low and updates_open_close values for conditions 12 and 13 hold during regular hours. Form T trades that print during regular hours usually arrive in the first seconds after 09:30. Condition 13 marks an extended-hours trade reported more than 10 seconds after it was executed, per the UTP specification, so it can print later in the day.

Daily bars

The daily stock bar applies the conditions endpoint as published to every trade of the day, pre-market and after-hours included. Form T trades add to its volume and never set its open, high, low or close. So the daily volume includes pre-market and after-hours trading, while the daily prices come only from trades that do not carry Form T, including the closing print, which can carry a timestamp just after 16:00:00 ET. This is SPY's daily bar for 29 September 2026:

curl -X GET "https://api.massive.com/v2/aggs/ticker/SPY/range/1/day/2026-09-29/2026-09-29?adjusted=false&apiKey=YOUR_API_KEY"

Response

{
  "ticker": "SPY",
  "adjusted": false,
  "results": [
    { "v": 36910546.834623, "vw": 764.47, "o": 766.83, "c": 764.2, "h": 766.98, "l": 762.35, "t": 1790654400000, "n": 536118 }
  ],
  "status": "OK"
}

The same day's 07:49 ET pre-market minute bar has a higher high, set by Form T trades:

curl -X GET "https://api.massive.com/v2/aggs/ticker/SPY/range/1/minute/1790682540000/1790682540000?adjusted=false&apiKey=YOUR_API_KEY"

Response

{
  "ticker": "SPY",
  "adjusted": false,
  "results": [
    { "v": 48558.295682, "vw": 767.3493, "o": 766.69, "c": 767.69, "h": 767.88, "l": 766.58, "t": 1790682540000, "n": 792 }
  ],
  "status": "OK"
}

The daily high is 766.98 and the pre-market minute's high is 767.88. The daily bar's t, 1790654400000, is midnight ET on 29 September 2026, and the minute bar's t, 1790682540000, is 07:49 ET. Both are in milliseconds.

Why this happens

The UTP plan, one of the two plans that govern US stock trade reporting, applies Form T to trades executed from midnight to 09:30 and from 16:00:01 to 20:00 ET. Its sale condition matrix keeps a Form T trade from updating the consolidated high, low and last price, per the UTP specification. The conditions endpoint publishes that rule, and the daily bar follows it. Outside regular hours nearly every trade carries Form T, and Massive's minute bars in those hours take their prices from Form T trades, so the published rule describes the daily bar and regular-hours minute bars rather than extended-hours minute bars.

If you see an error

A pre-market or after-hours minute bar whose high or low sits far from the neighboring minutes usually comes from one Form T trade at that price. Pull the minute from /v3/trades and look for a trade carrying condition 12 and not 37.

A pre-market or after-hours minute bar with a high above the daily high, or a low below the daily low, is expected, because the daily bar's prices ignore Form T trades.

A pre-market minute that has trades and no bar held only trades that cannot set a price, usually odd-lot Form T trades.

Related


Was this article helpful?

Modernizing Wall St.

Reimagining financial market data for the 21st century.

Schedule a demo

Talk with our market data experts

Recommended

Can't find the answer you're looking for? Contact our team.
  • Title
    Are all indices available through the basic subscription tier?
    Data Coverage Category

    Data Coverage

    Indices Category

    Indices

    Description
    No, and the ones it withholds are the famous ones: SPX, DJI, RUT and VIX all need a paid Indices tier. Basic still reaches more than 10,000 of the 13,000-odd indices Massive publishes, and NDX and the Nasdaq Composite are among them.
  • Title
    Does Massive offer dark pool data?
    Data Coverage Category

    Data Coverage

    Stocks Category

    Stocks

    Description
    Yes. Off-exchange prints, which include dark pool executions, arrive on the ordinary trades feed and are identified by an exchange ID of 4. There is no separate dark pool endpoint, and no way to tell which individual venue a print came from.
  • Title
    Does Massive offer pre-market and after-hours data?
    FAQ Category

    FAQ

    Stocks Category

    Stocks

    Description
    Yes. Every extended-hours trade and quote is published, from 04:00 to 20:00 Eastern. There is no session parameter, so you select a session with timestamps, and expect far fewer aggregate bars outside regular hours because many extended-hours trades are odd lots that cannot set a price.