Apa itu trade markout dan cara mengukur kualiti
Ketahui maksud trade markout dalam dagangan serta cara mengukur pergerakan harga pasaran dari satu saat hingga lima minit selepas transaksi dilaksanakan untuk menilai kualiti eksekusi.
Trade markout ialah perubahan harga pertengahan (mid price) dalam tempoh masa tetap selepas sesuatu transaksi (fill), diukur dari saat transaksi tersebut dilaksanakan. Nilai positif bermakna pasaran bergerak memihak kepada anda selepas anda berdagang. Nilai negatif bermakna pasaran bergerak menentang anda, yang dipanggil oleh trading desk sebagai adverse selection. Tempoh masa yang anda pilih, sama ada satu saat atau lima minit, menentukan persoalan yang dijawab oleh angka tersebut.
Apakah itu trade markout?
Mulakan dengan harga pertengahan: titik tengah antara best bid dan best offer, iaitu titik tengah bagi NBBO. Markout mengambil harga pertengahan tersebut pada tempoh masa yang dipilih selepas transaksi anda, menolaknya dengan harga rujukan, dan memberikan tanda (positif atau negatif) berdasarkan pihak yang anda dagangkan.
**markout pada tempoh h = pihak * (harga pertengahan pada t+h - harga rujukan)**, di mana pihak adalah tambah satu jika anda membeli dan tolak satu jika anda menjual.
Konvensyen tanda biasanya menjadi punca kekeliruan. Pembelian yang diikuti dengan kejatuhan harga pertengahan mempunyai markout negatif: anda membeli, harga turun, dan pihak yang menjual kepada anda mendapat keuntungan daripada transaksi tersebut. Itulah adverse selection yang ditulis dalam bentuk angka. Jualan yang diikuti dengan kejatuhan harga pertengahan mempunyai markout positif, kerana tandanya berubah mengikut pihak. Setiap transaksi mempunyai dua pihak, dan markout bagi satu pihak adalah markout pihak yang satu lagi dengan tanda yang diterbalikkan.
Tiga harga rujukan
Harga rujukan yang anda tolak menentukan apa yang diukur oleh markout tersebut.
- Harga transaksi (fill price). Markout menjadi nilai wang: nilai posisi pada t+h berbanding dengan apa yang anda bayar. Spread yang anda bayar atau peroleh terkandung di dalamnya.
- Harga pertengahan pada saat transaksi. Ini membuang spread dan mengasingkan bagaimana pasaran bergerak selepas anda berdagang, yang merupakan bacaan paling tepat mengenai adverse selection.
- Sebut harga (quote) pada pihak yang anda dagangkan. Mengukur terhadap touch yang anda ambil, atau touch yang anda paparkan, menjawab bagaimana transaksi tersebut dibandingkan dengan harga yang sebenarnya tersedia.
Kerja kualiti pelaksanaan lebih bergantung pada yang kedua untuk adverse selection dan yang pertama untuk untung rugi. Kedua-duanya muncul dalam panel pertama di bawah, merentasi satu set transaksi.
Keluk markout dan maksud bentuknya
Jalankan statistik yang sama pada banyak tempoh masa dan anda akan mendapat satu keluk. Bentuknya membawa lebih banyak makna daripada mana-mana angka tunggal.
- Keluk yang jatuh dengan curam dalam saat pertama dan kekal rendah menggambarkan aliran yang "dipetik" (picked off): harga bergerak menentang transaksi tersebut hampir serta-merta.
- Keluk yang terus jatuh selama beberapa minit menggambarkan aliran yang membawa maklumat sebenar tentang ke mana arah harga seterusnya.
- Keluk rata berhampiran sifar menggambarkan aliran yang tidak berbahaya. Selepas lima minit, harga pertengahan kelihatan seperti semasa transaksi dilakukan.
- Keluk yang bermula negatif dan naik semula ke arah sifar adalah bentuk yang dicari oleh passive maker yang mengumpul rebat. Penurunan awal adalah spread ditambah impak serta-merta, dan pemulihan adalah pasaran yang kembali stabil.
Pemilihan tempoh masa itu sendiri adalah keputusan tentang apa yang anda ukur. Di bawah satu saat, markout kebanyakannya membaca kependaman (latency) dan kedudukan baris gilir. Jika dipanjangkan kepada satu minit, ia membaca maklumat jangka pendek dalam aliran tersebut. Melebihi lima minit, hanyutan pasaran biasa mula mengatasi transaksi itu sendiri.
Keluk markout sebenar, transaksi demi transaksi
Panel di bawah mengambil setiap print INTC daripada sesi biasa 10 Jun 2026, mengelaskan setiap satu sebagai dimulakan oleh pembeli atau dimulakan oleh penjual berbanding sebut harga terakhir saat sebelum ia dicetak, dan mengira purata markout bertanda pada tempoh 5. Dua siri berjalan merentasi transaksi yang sama: satu diukur daripada harga pertengahan semasa transaksi, satu lagi daripada harga transaksi.
SQL tepat di sebalik setiap nombor
WITH
mid_by_second AS
(
SELECT
dateDiff('second', toDateTime('2026-06-10 13:30:00', 'UTC'), sip_timestamp) AS sec,
argMax((toFloat64(bid_price) + toFloat64(ask_price)) / 2, sip_timestamp) AS mid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'INTC'
AND sip_timestamp >= toDateTime('2026-06-10 13:30:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-10 20:00:00', 'UTC')
AND bid_price > 0
AND ask_price > bid_price
GROUP BY sec
),
signed_fills AS
(
SELECT
t.sec AS sec,
t.fill_price AS fill_price,
q.mid AS ref_mid,
if(t.fill_price > q.mid, 1, -1) AS side
FROM
(
SELECT
dateDiff('second', toDateTime('2026-06-10 13:30:00', 'UTC'), sip_timestamp) AS sec,
sec - 1 AS ref_sec,
toFloat64(price) AS fill_price
FROM global_markets.stocks_trades
WHERE ticker = 'INTC'
AND sip_timestamp >= toDateTime('2026-06-10 13:30:01', 'UTC')
AND sip_timestamp < toDateTime('2026-06-10 19:55:00', 'UTC')
AND price > 0
AND size > 0
) AS t
INNER JOIN mid_by_second AS q ON q.sec = t.ref_sec
WHERE t.fill_price != q.mid
)
SELECT
multiIf(f.horizon_s < 60,
concat(toString(f.horizon_s), ' sec'),
concat(toString(intDiv(f.horizon_s, 60)), ' min')) AS horizon,
round(avg(f.side * (fut.mid - f.ref_mid) / f.ref_mid) * 10000, 3) AS mid_basis_bps,
round(avg(f.side * (fut.mid - f.fill_price) / f.fill_price) * 10000, 3) AS fill_basis_bps,
count() AS fill_count
FROM
(
SELECT
sec,
fill_price,
ref_mid,
side,
horizon_s,
sec + horizon_s AS future_sec
FROM signed_fills
ARRAY JOIN [1, 5, 15, 60, 300] AS horizon_s
) AS f
INNER JOIN mid_by_second AS fut ON fut.sec = f.future_sec
GROUP BY f.horizon_s
ORDER BY f.horizon_sMerentasi 900593 transaksi yang dikelaskan, siri asas harga pertengahan mencatatkan 3.068 mata asas pada 1 sec dan 2.977 mata asas pada 5 min. Satu mata asas adalah satu peratus daripada satu peratus harga, jadi satu transaksi hanya menggerakkan ralat pembundaran manakala sejuta saham menggerakkan wang sebenar.
Siri asas transaksi bermula pada -0.488 mata asas. Jarak antara kedua-dua siri pada tempoh masa terpendek ialah separuh spread berkesan: sejauh mana print tersebut mendarat dari harga pertengahan. Pihak pengambil (taker) membayar jumlah itu semasa masuk dan pihak pembuat (maker) memperolehnya. Segala-galanya selepas tempoh pertama adalah pergerakan pasaran.
Saiz transaksi dan bentuk keluk
Adverse selection tidak mendarat secara sekata merentasi semua transaksi. Membahagikan sesi yang sama mengikut saiz print meletakkan transaksi kecil dan blok seribu saham atau lebih pada paksi yang sama.
SQL tepat di sebalik setiap nombor
WITH
mid_by_second AS
(
SELECT
dateDiff('second', toDateTime('2026-06-10 13:30:00', 'UTC'), sip_timestamp) AS sec,
argMax((toFloat64(bid_price) + toFloat64(ask_price)) / 2, sip_timestamp) AS mid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'INTC'
AND sip_timestamp >= toDateTime('2026-06-10 13:30:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-10 20:00:00', 'UTC')
AND bid_price > 0
AND ask_price > bid_price
GROUP BY sec
),
signed_fills AS
(
SELECT
t.sec AS sec,
t.fill_size AS fill_size,
q.mid AS ref_mid,
if(t.fill_price > q.mid, 1, -1) AS side
FROM
(
SELECT
dateDiff('second', toDateTime('2026-06-10 13:30:00', 'UTC'), sip_timestamp) AS sec,
sec - 1 AS ref_sec,
toFloat64(price) AS fill_price,
size AS fill_size
FROM global_markets.stocks_trades
WHERE ticker = 'INTC'
AND sip_timestamp >= toDateTime('2026-06-10 13:30:01', 'UTC')
AND sip_timestamp < toDateTime('2026-06-10 19:55:00', 'UTC')
AND price > 0
AND size > 0
) AS t
INNER JOIN mid_by_second AS q ON q.sec = t.ref_sec
WHERE t.fill_price != q.mid
)
SELECT
multiIf(f.horizon_s < 60,
concat(toString(f.horizon_s), ' sec'),
concat(toString(intDiv(f.horizon_s, 60)), ' min')) AS horizon,
round(avgIf(f.side * (fut.mid - f.ref_mid) / f.ref_mid, f.fill_size < 1000) * 10000, 3) AS small_fill_bps,
round(avgIf(f.side * (fut.mid - f.ref_mid) / f.ref_mid, f.fill_size >= 1000) * 10000, 3) AS block_fill_bps,
countIf(f.fill_size >= 1000) AS block_fill_count
FROM
(
SELECT
sec,
fill_size,
ref_mid,
side,
horizon_s,
sec + horizon_s AS future_sec
FROM signed_fills
ARRAY JOIN [1, 5, 15, 60, 300] AS horizon_s
) AS f
INNER JOIN mid_by_second AS fut ON fut.sec = f.future_sec
GROUP BY f.horizon_s
HAVING countIf(f.fill_size < 1000) > 0
AND countIf(f.fill_size >= 1000) > 0
ORDER BY f.horizon_sPada tempoh 5 min, print di bawah seribu saham mencatatkan purata 2.983 mata asas, manakala 11588 print seribu saham atau lebih mencatatkan purata 2.495. Dua sebut harga yang memenuhi jumlah volum yang sama terhadap kedua-dua kumpulan tersebut tidak berakhir pada kedudukan yang sama pada penghujung hari.
Bagaimana markout menjadi angka spread dalam laporan pelaksanaan
Markout adalah istilah yang hilang dalam penguraian spread standard. Spread berkesan ialah apa yang sebenarnya dibayar oleh pengambil: dua kali ganda jarak bertanda dari harga pertengahan ke print. Bahagikan itu kepada dua. Satu bahagian ialah realized spread, apa yang disimpan oleh pembuat sebaik sahaja pasaran bergerak. Bahagian lain ialah adverse selection, iaitu markout asas harga pertengahan didarab dengan dua. Identitinya tepat: effective spread = realized spread + adverse selection.
SQL tepat di sebalik setiap nombor
WITH
mid_by_second AS
(
SELECT
dateDiff('second', toDateTime('2026-06-10 13:30:00', 'UTC'), sip_timestamp) AS sec,
argMax((toFloat64(bid_price) + toFloat64(ask_price)) / 2, sip_timestamp) AS mid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'INTC'
AND sip_timestamp >= toDateTime('2026-06-10 13:30:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-10 20:00:00', 'UTC')
AND bid_price > 0
AND ask_price > bid_price
GROUP BY sec
),
signed_fills AS
(
SELECT
t.sec + 60 AS future_sec,
t.et_time AS et_time,
t.fill_price AS fill_price,
q.mid AS ref_mid,
if(t.fill_price > q.mid, 1, -1) AS side
FROM
(
SELECT
dateDiff('second', toDateTime('2026-06-10 13:30:00', 'UTC'), sip_timestamp) AS sec,
sec - 1 AS ref_sec,
toFloat64(price) AS fill_price,
formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), toIntervalMinute(30)), '%H:%i') AS et_time
FROM global_markets.stocks_trades
WHERE ticker = 'INTC'
AND sip_timestamp >= toDateTime('2026-06-10 13:30:01', 'UTC')
AND sip_timestamp < toDateTime('2026-06-10 19:55:00', 'UTC')
AND price > 0
AND size > 0
) AS t
INNER JOIN mid_by_second AS q ON q.sec = t.ref_sec
WHERE t.fill_price != q.mid
)
SELECT
f.et_time AS et_time,
round(avg(2 * f.side * (f.fill_price - f.ref_mid) / f.ref_mid) * 10000, 3) AS effective_spread_bps,
round(avg(2 * f.side * (f.fill_price - fut.mid) / f.ref_mid) * 10000, 3) AS realized_spread_bps,
round(avg(2 * f.side * (fut.mid - f.ref_mid) / f.ref_mid) * 10000, 3) AS adverse_selection_bps,
count() AS fill_count
FROM signed_fills AS f
INNER JOIN mid_by_second AS fut ON fut.sec = f.future_sec
GROUP BY f.et_time
ORDER BY f.et_timeDalam tempoh setengah jam bermula 09:30 waktu Timur, effective spread mencatatkan purata 10.651 mata asas, yang mana 8.313 adalah istilah adverse selection pada tempoh enam puluh saat dan 2.338 adalah apa yang dikekalkan oleh pembuat. Panel ini meliputi 13 baldi setengah jam.
Komponen tersebut adalah kuantiti yang diringkaskan mengikut tempat dalam laporan pelaksanaan Rule 605 dan 606, dan ia merupakan aritmetik di sebalik tuntutan penambahbaikan harga yang bergantung pada peraturan sub-penny dan penambahbaikan harga. Rebat adalah kredit tetap setiap saham. Adverse selection adalah kos berubah setiap saham pada transaksi yang sebenarnya diterima oleh sebut harga. Menimbang satu dengan yang lain merentasi keluk yang diukur, bukannya melalui kad kadar tajuk utama, adalah pemeriksaan di sebalik yuran dan rebat maker-taker, dan ia terletak bersama mekanik dalam mengapa market maker kehilangan wang.
Bagaimana angka ini dikira
Setiap panel membaca sebut harga dan print INTC daripada sesi biasa 10 Jun 2026, 09:30 hingga 16:00 waktu Timur. Sebut harga diruntuhkan kepada satu harga pertengahan setiap saat, yang terakhir dicetak dalam saat itu. Print dikelaskan sebagai dimulakan oleh pembeli apabila ia mendarat di atas harga pertengahan saat sebelumnya dan dimulakan oleh penjual apabila ia mendarat di bawah, yang merupakan peraturan sebut harga standard. Print yang berada tepat pada harga pertengahan tersebut digugurkan dan bukannya diteka, jadi pelaksanaan pada titik tengah berada di luar sampel. Menggunakan harga pertengahan saat sebelumnya sebagai rujukan menghalang rujukan daripada melihat ke hadapan. Tempoh masa adalah saat penuh yang dikira dari saat print, dan transaksi hanya memasuki tempoh masa apabila sebut harga wujud dalam saat sasaran.
Soalan Lazim
Apakah itu markout dalam perdagangan?
Markout ialah perubahan bertanda dalam harga pertengahan sepanjang tempoh masa tetap selepas sesuatu transaksi. Nilai positif bermakna pasaran bergerak ke arah perdagangan anda selepas anda mendapat transaksi tersebut. Nilai negatif bermakna ia bergerak ke arah sebaliknya, yang merupakan definisi adverse selection.
Adakah markout negatif sentiasa bermakna transaksi yang buruk?
Tidak. Markout negatif pada satu saat bagi pesanan boleh pasaran (marketable order) kebanyakannya adalah spread yang dibayar oleh pesanan tersebut, iaitu harga untuk diselesaikan dengan segera. Apa yang lebih penting ialah sama ada keluk tersebut terus jatuh pada tempoh masa yang lebih lama atau menjadi rata.
Apakah perbezaan antara markout dan slippage?
Slippage membandingkan transaksi dengan harga keputusan atau harga ketibaan, jadi ia menilai keseluruhan laluan sesuatu pesanan. Markout membandingkan transaksi dengan harga pertengahan pada tempoh masa selepas transaksi, jadi ia menilai apa yang berlaku seterusnya. Satu memberi skor kepada pesanan induk, yang satu lagi memberi skor kepada transaksi individu.
Tempoh masa manakah yang perlu digunakan oleh markout?
Ia bergantung kepada tujuan transaksi tersebut. Tempoh masa bawah satu saat menilai pelaksanaan yang sensitif terhadap kependaman, manakala satu minit adalah lalai biasa untuk adverse selection pada nama yang cair. Menerbitkan tempoh masa di sebelah angka adalah perkara yang menjadikan dua markout boleh dibandingkan.
Bagaimanakah markout berkaitan dengan effective spread?
Effective spread terbahagi kepada realized spread ditambah komponen adverse selection, dan komponen itu adalah markout asas harga pertengahan didarab dengan dua. Tukar tempoh masa dan pembahagian antara kedua-duanya akan berubah bersamanya, itulah sebabnya statistik spread yang diterbitkan tidak lengkap tanpa tempoh masanya disertakan.
Setiap panel di sini dihantar bersama SQL yang menghasilkannya. Buka satu, tukar ticker atau tarikh, dan keluk markout yang sama akan dibina semula dari awal pada terminal Strasmore.