Handelsbedingungscodes erklärt
Warum drei Plattformen für dieselbe Aktie unterschiedliche Tageshochs zeigen: Handelsbedingungscodes steuern Hoch, Tief, Schlusskurs und Volumen.
Handelsbedingungscodes sind der Grund, warum drei Plattformen für dieselbe Aktie drei unterschiedliche Tageshochs anzeigen können, ohne dass eine davon falsch liegt. Jeder Print auf dem konsolidierten Tape trägt diese Kennzeichnungen. Sie bestimmen, ob ein Print den letzten Kurs, das Tageshoch und -tief, den offiziellen Eröffnungskurs, den offiziellen Schlusskurs und das konsolidierte Handelsvolumen aktualisieren darf. Ein Trade kann eine tatsächliche Ausführung zu einem tatsächlichen Preis sein und trotzdem für fast alle diese Felder gesperrt sein.
Was sind Handelsbedingungscodes?
Ein Handelsbedingungscode, auch Sale Condition genannt, ist eine Kennzeichnung, die der meldende Handelsplatz einem Trade-Report auf dem Weg zum Tape anhängt. Preis und Stückzahl zeigen, was gehandelt wurde. Die Bedingung zeigt, um welche Art von Meldung es sich handelt: ob sie rechtzeitig einging, ob ihr Preis aus anderen Ausführungen berechnet wurde statt in diesem Moment vereinbart worden zu sein, ob der Trade außerhalb der regulären Handelszeiten stattfand oder ob er weniger als die 100 Aktien eines Round Lot umfasste.
Mit jedem Code ist ein Satz von Zulässigkeitskennzeichen verknüpft. Genau diesen Teil sehen fast niemand. Jeder Code ist als zulässig oder unzulässig für den letzten Kurs, das Hoch und Tief, die Eröffnung, den Schluss und das konsolidierte Handelsvolumen markiert. Diese Kennzeichen sind voneinander unabhängig. Viele Prints, die das Hoch oder Tief nicht beeinflussen dürfen, zählen dennoch zum Volumen. Deshalb werden die gemeldete Aktienzahl und die gemeldeten Kursextreme einer Aktie aus sich überschneidenden, aber unterschiedlichen Trade-Mengen gebildet. Daneben gibt es einen zweiten Satz von Kennzeichen: Der eine gilt für das konsolidierte Tape, der andere für den einzelnen Handelsplatz. Der offizielle Schlusskurs einer Börse wird nur aus ihren eigenen Prints berechnet.
Handelsbedingungscodes treten in Gruppen auf. Nur eine dieser Gruppen bestimmt, welchen Wert ein Trade aktualisieren darf.
Das exakte SQL hinter jeder Zahl
SELECT
replaceAll(type, '_', ' ') AS condition_family,
countDistinct(id) AS codes
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
GROUP BY condition_family
ORDER BY codes DESCDas Aktienwörterbuch enthält 8 Gruppen. Die größte ist die Gruppe sale condition mit 40 verschiedenen Codes. Quote Conditions beschreiben Geld- und Briefkurs statt eines Trades. Indicator-Gruppen kennzeichnen Zustände wie eine geltende Short-Sale-Beschränkung. Die Sale-Condition-Gruppe enthält die Zulässigkeitskennzeichen. Alle nachfolgenden Zahlen stammen aus dieser Gruppe.
Was tatsächlich auf dem Tape erscheint
Das folgende Panel zeigt eine festgelegte Handelssitzung im Juni 2026: jeden AAPL-Print vom Beginn des vorbörslichen Handels um 4:00 Uhr bis zum Ende des nachbörslichen Handels um 20:00 Uhr, gruppiert nach der Sale Condition des jeweiligen Prints. Das Zeitfenster ist in der SQL-Abfrage festgelegt. Die Zahlen beschreiben daher ausschließlich diesen Tag. Ein Print kann mehrere Codes gleichzeitig tragen, viele tragen keinen. Deshalb summieren sich die Spalten nicht auf 100.
Das exakte SQL hinter jeder Zahl
WITH
(SELECT count()
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-17 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')) AS day_prints,
(SELECT sum(size)
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-17 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')) AS day_shares
SELECT
multiIf(t.code = -1, 'Regular way (no code)',
c.code_name = '', concat('Unmapped code ', toString(t.code)),
c.code_name) AS condition_name,
round(100 * count() / day_prints, 2) AS pct_of_prints,
round(100 * sum(t.size) / day_shares, 2) AS pct_of_shares
FROM
(
SELECT
size,
arrayJoin(if(empty(conditions),
[toInt32(-1)],
arrayMap(x -> toInt32(x), conditions))) AS code
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-17 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')
) AS t
LEFT JOIN
(
SELECT toInt32(id) AS code_id, any(name) AS code_name
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
GROUP BY code_id
) AS c ON c.code_id = t.code
GROUP BY condition_name
ORDER BY pct_of_prints DESC
LIMIT 12Die häufigste Kennzeichnung an diesem Tag war Odd Lot Trade. Sie entfiel auf 65.83% der Prints und 6.37% der gehandelten Aktien. Vergleichen Sie beide Spalten Zeile für Zeile. Überwiegt der Anteil der Prints deutlich den Volumenanteil, kennzeichnet der Code kleine Ausführungen. Ist es umgekehrt, weist der Code auf einige wenige sehr große Ausführungen hin. Die Anzahl der Prints und die Zahl der gehandelten Aktien beantworten unterschiedliche Fragen. Der Handelsbedingungscode trennt diese beiden Größen.
Warum zeigen zwei Plattformen unterschiedliche Tageshochs?
Vier Arten von Prints werden jeweils aus einer anderen Gruppe von Feldern ausgeschlossen.
- Verspätet gemeldet und außerhalb der Reihenfolge. Ein um 10:14 Uhr vereinbarter und um 10:31 Uhr gemeldeter Trade erreicht das Tape mit der Kennzeichnung „out of sequence“ oder mit einem Preis auf Basis eines früheren Referenzwerts. Er zählt zum Volumen. Er darf den letzten Kurs nicht setzen und das Tageshoch nicht erhöhen, selbst wenn sein Preis über allen anderen Trades der Sitzung liegt. Ausgehandelte Block-Trades und Prints, die über eine Trade Reporting Facility von Dark-Pool-Handelsplätzen gemeldet werden, fallen häufig in diese Kategorie.
- Derivativ bepreist. Ein Trade zum Durchschnittspreis oder ein VWAP-Fill trägt einen Preis, der aus vielen anderen Ausführungen berechnet wurde, statt in diesem Moment vereinbart worden zu sein. Er wird vom letzten Kurs und von den Extremen ausgeschlossen, weil der angezeigte Preis nie als Live-Quote existiert hat.
- Odd Lot. Weniger als 100 Aktien. Odd Lots sind für den letzten Kurs sowie für das Hoch und Tief unzulässig, zählen aber vollständig zum konsolidierten Volumen. Bis Ende 2013 wurden sie überhaupt nicht an das konsolidierte Tape gemeldet. Jeder Volumenvergleich, der über diese Grenze zurückreicht, vergleicht zwei unterschiedliche Definitionen des Begriffs. Unser Leitfaden zu durchschnittlichem Tagesvolumen behandelt dies ausführlich.
- Erweiterte Handelszeiten und Form T. Vorbörsliche und nachbörsliche Prints werden gekennzeichnet und vom Eröffnungskurs, Hoch, Tief und Schlusskurs der regulären Sitzung ausgeschlossen. Sie zählen jedoch weiterhin zum konsolidierten Volumen. Eine Plattform, die diese Trades im Chart zeigt, weist eine andere Tagesspanne aus als eine Plattform, die sie nicht berücksichtigt. Das erklärt, warum nachbörslicher und vorbörslicher Handel in einem Chart erscheint und in einem anderen nicht.
Die folgende Darstellung zeigt, welchen Anteil die einzelnen Gruppen an einer Sitzung bei fünf bekannten Aktien haben. Der Handelstag ist derselbe festgelegte Tag.
Das exakte SQL hinter jeder Zahl
WITH
(SELECT groupArray(toInt32(id))
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
AND name ILIKE '%odd lot%') AS odd_lot_codes,
(SELECT groupArray(toInt32(id))
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
AND multiSearchAnyCaseInsensitive(name,
['form t', 'extended trading hours'])) AS extended_codes,
(SELECT groupArray(toInt32(id))
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
AND multiSearchAnyCaseInsensitive(name,
['out of sequence', 'prior reference', 'derivatively priced',
'average price', 'price variation', 'seller'])
AND NOT multiSearchAnyCaseInsensitive(name,
['form t', 'extended trading hours'])) AS late_or_derived_codes
SELECT
ticker,
round(100 * countIf(hasAny(conditions, odd_lot_codes)) / count(), 2) AS odd_lot_pct,
round(100 * countIf(hasAny(conditions, late_or_derived_codes)) / count(), 2) AS late_or_derived_pct,
round(100 * countIf(hasAny(conditions, extended_codes)) / count(), 2) AS extended_hours_pct
FROM global_markets.stocks_trades
WHERE ticker IN ('AAPL', 'KO', 'MSFT', 'NVDA', 'SPY')
AND sip_timestamp >= toDateTime('2026-06-17 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')
GROUP BY ticker
ORDER BY odd_lot_pct DESCOdd-Lot-Prints machten bei den fünf Aktien 46.8% bis 85.14% aller Prints aus. Dieser Anteil folgt dem Aktienkurs eng, weil ein Auftrag mit festem Dollarwert bei einer höher bewerteten Aktie weniger Aktien kauft. NVDA lag mit 2.4% seiner Prints mit der Kennzeichnung „verspätet oder derivativ bepreist“ und 3.53% mit der Kennzeichnung „erweiterte Handelszeiten“ an der Spitze. Jeder Print in allen drei Gruppen ist ein tatsächlicher Trade zu einem tatsächlichen Preis. Dennoch darf keiner von ihnen das Hoch oder Tief setzen.
Ein Print, der das Hoch nicht erhöht
Das nächste Panel verwendet dieselbe festgelegte AAPL-Sitzung. Es teilt das reguläre Zeitfenster von 9:30 bis 16:00 Uhr in Fünfzehn-Minuten-Intervalle und zeichnet für jedes Intervall zwei Hochs. Die eine Linie zeigt den höchsten Preis aller Prints. Die andere zeigt den höchsten Preis der Prints, deren Bedingungen sie zur Festlegung des Hochs berechtigen.
Das exakte SQL hinter jeder Zahl
WITH
(SELECT groupArray(toInt32(id))
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
AND multiSearchAnyCaseInsensitive(name,
['odd lot', 'form t', 'extended trading hours', 'out of sequence',
'prior reference', 'derivatively priced', 'average price',
'price variation', 'seller'])) AS not_high_low_codes
SELECT
formatDateTime(toStartOfFifteenMinutes(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS et_time,
round(toFloat64(max(price)), 2) AS tape_high,
round(toFloat64(maxIf(price, NOT hasAny(conditions, not_high_low_codes))), 2) AS eligible_high
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-17 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')
AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60
+ toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60
+ toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) < 960
GROUP BY et_time
HAVING countIf(NOT hasAny(conditions, not_high_low_codes)) > 0
ORDER BY et_timeDie Sitzung beginnt bei 09:30 mit einem Tape-Hoch von $302.07 gegenüber einem zulässigen Hoch von $302.07 und umfasst bis zum Schluss 26 Intervalle. Die zulässige Linie kann nie über der Tape-Linie liegen, weil zulässige Prints eine Teilmenge aller Prints sind. Liegen beide Linien aufeinander, durfte jeder Print in diesem Viertelstundenintervall das Hoch setzen. Entfernt sich die obere Linie, wurde in diesem Zeitfenster mindestens ein Print über dem höchsten zulässigen Preis ausgeführt. Kein Chart, der die Zulässigkeitsregeln anwendet, wird diesen Print als Hoch anzeigen.
Diese Differenz liefert die sachliche Erklärung für die Abweichung. Eine Quelle, die den Höchstpreis jedes Prints verwendet, meldet ein Hoch. Eine Quelle, die die Zulässigkeitskennzeichen anwendet, meldet ein anderes. Eine Quelle, die zusätzlich die vorbörsliche und nachbörsliche Sitzung ausschließt, meldet ein drittes. Alle drei lesen dasselbe Tape.
Wie belastbar ist die Zulässigkeitsebene?
Nur eingeschränkt. Die Kennzeichen sind Referenzdaten, und Referenzdaten werden korrigiert. Ein kommerzieller Marktdatenanbieter veröffentlichte eine Korrektur für sein eigenes Bedingungswörterbuch. Dabei wurde die Zulässigkeit einer einzelnen Sale Condition zur Festlegung des offiziellen Eröffnungs- und Schlusskurses neu klassifiziert. Kein Trade änderte sich. Das Tape war für jeden betroffenen Tag vor und nach der Korrektur identisch. Geändert wurde ein einziges Kennzeichen in einer Lookup-Tabelle. Dadurch änderten sich der offizielle Eröffnungs- und Schlusskurs, die alle nachgelagerten Charts und Backtests auf Basis dieses Wörterbuchs angezeigt hatten.
Betrachten Sie die OHLC-Daten eines einzelnen Anbieters als eine Lesart des Tapes und nicht als unumstößliche Tatsache. Wenn zwei Quellen voneinander abweichen, prüfen Sie, welche Zulässigkeitsregeln sie jeweils angewendet haben. Verzögerte und konsolidierte Quote-Feeds können dasselbe Problem zusätzlich auf der Zeitachse verursachen, statt auf der Ebene der Zulässigkeit.
Wo die maßgebliche Liste der Handelsbedingungscodes zu finden ist
Die Tapes werden im Rahmen von zwei National Market System Plans betrieben: dem CTA Plan für an der NYSE gelistete Wertpapiere und dem UTP Plan für an der Nasdaq gelistete Wertpapiere. Beide veröffentlichen die Sale-Condition-Spezifikation für das von ihnen verwaltete Tape. Diese Spezifikationen sind maßgeblich. Alle nachgelagerten Darstellungen, einschließlich der Kennziffern hinter den Panels oben, sind Übertragungen dieser Vorgaben in die Nummerierung eines Anbieters. Eine Code-ID eines Anbieters muss daher bei einem anderen Anbieter nicht dasselbe bedeuten. Lernen Sie die Kategorien und nicht die Nummern. Die Kategorien sind seit Jahren stabil. Die Nummern sind eine Lookup-Tabelle, und Lookup-Tabellen werden geändert.
Datenhinweise
Die Bedingungsgruppen in den Panels oben werden direkt aus dem Wörterbuch gebildet und nicht aus fest codierten ID-Nummern. Jede Gruppe basiert auf einer Namensübereinstimmung innerhalb der Sale-Condition-Gruppe: Odd Lot, Form T und erweiterte Handelszeiten, out of sequence, früherer Referenzpreis, derivativ bepreist, Durchschnittspreis, Preisvariation und Verkäufer. Öffnen Sie die SQL-Abfrage unter einem Panel, um die exakten Muster zu sehen. Codes schließen sich nicht gegenseitig aus. Ein einzelner Print kann mehrere Codes tragen. Deshalb überschneiden sich die Gruppenanteile und summieren sich nicht auf die Sitzung. Beide AAPL-Panels und das Panel mit fünf Aktien beziehen sich auf eine festgelegte Sitzung im Juni 2026, die in der SQL-Abfrage fixiert ist. Die Seite ändert sich daher nicht, wenn neue Sitzungen hinzukommen.
FAQ
Was ist ein Handelsbedingungscode?
Ein Handelsbedingungscode ist eine Kennzeichnung an einem Trade-Report auf dem konsolidierten Tape. Er beschreibt die Art der Meldung, zum Beispiel verspätet gemeldet, derivativ bepreist, Odd Lot oder erweiterte Handelszeiten. Jeder Code enthält Kennzeichen dafür, ob der Trade den letzten Kurs, das Hoch und Tief, den Eröffnungs- und Schlusskurs sowie das konsolidierte Handelsvolumen aktualisieren darf.
Warum zeigen zwei Websites für dieselbe Aktie unterschiedliche Tageshochs?
Jede Website wendet andere Zulässigkeitsregeln auf dieselben Prints an. Eine kann den höchsten gemeldeten Trade-Preis verwenden. Eine andere kann Prints ausschließen, deren Handelsbedingungscodes das Setzen des Hochs nicht erlauben. Eine dritte kann zusätzlich die vorbörsliche und nachbörsliche Sitzung ausklammern. Alle lesen dasselbe Tape.
Zählen Odd-Lot-Trades zum Volumen?
Ja. Ein Odd Lot, also weniger als 100 Aktien, zählt zum konsolidierten Volumen. Es darf jedoch weder den letzten Kurs noch das Tageshoch oder -tief setzen. Odd Lots wurden vor Ende 2013 überhaupt nicht an das konsolidierte Tape gemeldet. Langfristige Volumenvergleiche überschreiten daher an diesem Punkt eine Änderung der Definition.
Zählen nachbörsliche Trades zum Tageshoch und -tief?
Nicht zum Hoch und Tief der regulären Sitzung. Vorbörsliche und nachbörsliche Prints tragen eine Kennzeichnung für erweiterte Handelszeiten oder Form T. Dadurch werden sie vom Eröffnungs-, Höchst-, Tiefst- und Schlusskurs der regulären Sitzung ausgeschlossen. Zum konsolidierten Tagesvolumen zählen sie weiterhin.
Wo befindet sich die offizielle Liste der Sale-Condition-Codes?
Der CTA Plan und der UTP Plan veröffentlichen die Sale-Condition-Spezifikationen für die von ihnen verwalteten Tapes. Diese Dokumente sind maßgeblich. Anbieter nummerieren die Bedingungen in ihrem eigenen ID-System neu. Ein numerischer Code eines Anbieters muss daher nicht derselben Nummer bei einem anderen Anbieter entsprechen.
Jedes Panel auf dieser Seite enthält die SQL-Abfrage, mit der es erstellt wurde. Öffnen Sie eine Abfrage, ersetzen Sie den Ticker oder das Datum und führen Sie dieselbe Aufschlüsselung der Handelsbedingungen für jede Sitzung im Strasmore-Terminal aus.