Trade markout ni nini na jinsi ya kupima ubora wa biashara
Elewa dhana ya trade markout na jinsi inavyopima ubora wa utekelezaji wa biashara. Jifunze mbinu ya kutathmini mabadiliko ya bei kuanzia sekunde moja hadi dakika tano.
Trade markout ni mabadiliko ya bei ya wastani (mid price) katika muda uliopangwa baada ya agizo kutekelezwa, yakipimwa kuanzia wakati wa utekelezaji huo. Chanya inamaanisha soko lilisonga kwa faida yako baada ya kufanya biashara. Hasi inamaanisha lilisonga kinyume nawe, jambo ambalo madawati ya biashara (trading desks) huita adverse selection. Muda unaochagua, sekunde moja au dakika tano, huamua swali ambalo namba hiyo inajibu.
Trade markout ni nini?
Anza na bei ya wastani (mid price): hatua ya katikati kati ya bid bora na offer bora, katikati ya NBBO. Markout huchukua wastani huo katika muda uliopangwa baada ya utekelezaji wako, hutoa bei ya rejea, na kuweka alama kulingana na upande ulioufanya biashara.
**markout katika muda h = upande * (wastani katika t+h - bei ya rejea)**, ambapo upande ni chanya moja ikiwa ulinunua na hasi moja ikiwa uliuza.
Mkataba wa alama ndipo mkanganyiko unapopatikana. Ununuzi unaofuatiwa na kushuka kwa bei ya wastani una markout hasi: ulinunua, bei ikashuka, na yeyote aliyekuuzia alipata faida zaidi katika biashara hiyo. Hiyo ndiyo adverse selection iliyoandikwa kama namba. Uuzaji unaofuatiwa na kushuka kwa bei ya wastani una markout chanya, kwa sababu alama hubadilika kulingana na upande. Kila utekelezaji una pande mbili, na markout ya upande mmoja ni ile ya upande mwingine ikiwa na alama iliyogeuzwa.
Bei tatu za rejea
Bei ya rejea unayotoa huamua kile ambacho markout inapima.
- Bei ya utekelezaji (fill price). Markout inakuwa fedha: thamani ya nafasi uliyonayo katika t+h dhidi ya ulicholipa. Spread uliyolipa au kupata imo ndani yake.
- Wastani wakati wa utekelezaji. Hii huondoa spread na kutenga jinsi soko lilivyosonga baada ya kufanya biashara, ambayo ndiyo njia sahihi zaidi ya kusoma adverse selection.
- Quote ya upande ulioufanya biashara. Kupima dhidi ya touch uliyochukua, au touch uliyoweka, hujibu jinsi utekelezaji unavyolingana na bei iliyokuwa inapatikana.
Kazi ya ubora wa utekelezaji hutegemea ya pili kwa ajili ya adverse selection na ya kwanza kwa ajili ya faida na hasara. Zote zinaonekana katika paneli ya kwanza hapa chini, kwa seti moja ya utekelezaji.
Mkondo wa markout na maana ya umbo lake
Endesha takwimu hiyo hiyo katika muda mwingi na utapata mkondo. Umbo lake lina maana zaidi kuliko namba yoyote moja.
- Mkondo unaoshuka kwa kasi ndani ya sekunde ya kwanza na kubaki chini unaelezea mtiririko unaochukuliwa (picked off): bei inasonga kinyume na utekelezaji karibu mara moja.
- Mkondo unaoendelea kushuka kwa dakika unaelezea mtiririko uliokuwa na taarifa halisi kuhusu mahali bei ilipokuwa inaelekea.
- Mkondo tambarare karibu na sifuri unaelezea mtiririko usio na madhara. Baada ya dakika tano, wastani unaonekana kama ulivyokuwa wakati wa utekelezaji.
- Mkondo unaoanza kwa hasi na kupanda kuelekea sifuri ndio umbo ambalo mtengenezaji wa soko (market maker) anayekusanya rebates anatafuta. Kushuka kwa awali ni spread pamoja na athari ya haraka, na nafuu ni soko kurudi.
Uchaguzi wa muda wenyewe ni uamuzi kuhusu kile unachopima. Chini ya sekunde, markout husoma zaidi latency na nafasi ya foleni. Ipanue hadi dakika na husoma taarifa za muda mfupi katika mtiririko. Zaidi ya dakika tano, mabadiliko ya kawaida ya soko huanza kuzidi utekelezaji wenyewe.
Mkondo halisi wa markout, utekelezaji kwa utekelezaji
Paneli iliyo hapa chini inachukua kila print ya INTC kutoka kikao cha kawaida cha Juni 10, 2026, inaainisha kila moja kama iliyoanzishwa na mnunuzi au muuzaji dhidi ya quote ya mwisho ya sekunde kabla ya kuchapishwa, na kupata wastani wa markout iliyotiwa alama katika 5 muda. Mfululizo mbili huendeshwa juu ya utekelezaji sawa: moja ikipimwa kutoka wastani wakati wa utekelezaji, moja kutoka bei ya utekelezaji.
SQL halisi nyuma ya kila namba
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_sKatika 900593 utekelezaji ulioainishwa, mfululizo wa msingi wa wastani unasoma 3.068 basis points katika 1 sec na 2.977 basis points katika 5 min. Basis point ni sehemu ya mia moja ya asilimia ya bei, kwa hivyo utekelezaji mmoja husogeza kosa la kuzungusha na hisa milioni moja husogeza fedha halisi.
Mfululizo wa msingi wa utekelezaji huanza katika -0.488 basis points. Umbali kati ya mfululizo mbili katika muda mfupi zaidi ni nusu spread halisi: umbali ambao print ilitua kutoka wastani. Mchukuzi hulipa hiyo wakati wa kuingia na mtengenezaji huipata. Kila kitu baada ya muda wa kwanza ni soko linalosonga.
Ukubwa wa utekelezaji na umbo la mkondo
Adverse selection haitui sawasawa katika utekelezaji wote. Kugawanya kikao hicho hicho kwa ukubwa wa print huweka utekelezaji mdogo na vitalu vya hisa elfu moja au zaidi kwenye mhimili mmoja.
SQL halisi nyuma ya kila namba
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_sKatika muda wa 5 min, prints chini ya hisa elfu moja zina wastani wa 2.983 basis points, wakati 11588 prints za hisa elfu moja au zaidi zina wastani wa 2.495. Quotes mbili zinazotekeleza jumla ya kiasi sawa dhidi ya makundi hayo mawili hazimalizi siku katika sehemu moja.
Jinsi markouts zinavyokuwa namba za spread katika ripoti za utekelezaji
Markout ni neno linalokosekana katika mgawanyo wa kawaida wa spread. Effective spread ni kile ambacho mchukuzi alilipa kweli: mara mbili ya umbali uliotiwa alama kutoka wastani hadi print. Igawanye hiyo katika mbili. Sehemu moja ni realized spread, kile ambacho mtengenezaji hubaki nacho soko likishasonga. Sehemu nyingine ni adverse selection, ambayo ni mid basis markout iliyozidishwa kwa mbili. Utambulisho ni sahihi: effective spread = realized spread + adverse selection.
SQL halisi nyuma ya kila namba
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_timeKatika nusu saa inayoanza 09:30 Eastern, effective spread ina wastani wa 10.651 basis points, ambayo 8.313 ni neno la adverse selection katika muda wa sekunde sitini na 2.338 ni kile ambacho mtengenezaji hubaki nacho. Paneli inashughulikia 13 ndoo za nusu saa.
Vipengele hivyo ni kiasi kilichofupishwa kwa kila ukumbi katika ripoti za utekelezaji za Rule 605 na 606, na ndiyo hesabu nyuma ya madai ya uboreshaji wa bei yanayotokana na kanuni ya sub penny na uboreshaji wa bei. Rebate ni mkopo uliowekwa kwa kila hisa. Adverse selection ni gharama inayobadilika kwa kila hisa kwenye utekelezaji ambao quote hupokea. Kupima moja dhidi ya nyingine juu ya mkondo uliopimwa, badala ya kadi ya viwango ya kichwa cha habari, ndiyo ukaguzi nyuma ya ada na rebates za maker taker, na inakaa kando ya mechanics katika kwa nini watengenezaji wa soko hupoteza fedha.
Jinsi namba hizi zilivyohesabiwa
Kila paneli inasoma quotes na prints za INTC kutoka kikao cha kawaida cha Juni 10, 2026, 09:30 hadi 16:00 Eastern. Quotes huanguka hadi wastani mmoja kwa sekunde, ile ya mwisho iliyochapishwa ndani ya sekunde hiyo. Print inaainishwa kama iliyoanzishwa na mnunuzi ilipotua juu ya wastani wa sekunde iliyotangulia na iliyoanzishwa na muuzaji ilipotua chini, ambayo ndiyo kanuni ya kawaida ya quote. Prints zilizokaa sawasawa kwenye wastani huo huachwa badala ya kukisiwa, kwa hivyo utekelezaji wa katikati hukaa nje ya sampuli. Kutumia wastani wa sekunde iliyotangulia kama rejea huzuia rejea hiyo kuangalia mbele. Muda ni sekunde nzima zilizohesabiwa kutoka sekunde ya print, na utekelezaji huingia kwenye muda tu wakati quote ipo katika sekunde inayolengwa.
FAQ
Markout katika biashara ni nini?
Markout ni mabadiliko yaliyotiwa alama ya bei ya wastani katika muda uliopangwa baada ya utekelezaji. Chanya inamaanisha soko lilisonga katika mwelekeo wa biashara yako baada ya kutekelezwa. Hasi inamaanisha lilisonga upande mwingine, ambayo ndiyo ufafanuzi wa adverse selection.
Je, markout hasi ni utekelezaji mbaya kila wakati?
Hapana. Markout hasi katika sekunde moja kwenye agizo linaloweza kuuzwa ni zaidi ya spread ambayo agizo hilo lililipa, ambayo ndiyo bei ya kumaliza mara moja. Kinachojali zaidi ni kama mkondo unaendelea kushuka katika muda mrefu zaidi au unakuwa tambarare.
Kuna tofauti gani kati ya markout na slippage?
Slippage hulinganisha utekelezaji dhidi ya bei ya uamuzi au bei ya kuwasili, kwa hivyo hupima njia nzima ya agizo. Markout hulinganisha utekelezaji dhidi ya wastani katika muda baada ya utekelezaji, kwa hivyo hupima kile kilichotokea baadaye. Moja hupima agizo kuu, nyingine hupima utekelezaji binafsi.
Ni muda gani markout inapaswa kutumia?
Inategemea utekelezaji ulikuwa wa nini. Muda wa chini ya sekunde hupima utekelezaji unaozingatia latency, wakati dakika moja ndiyo chaguo-msingi la kawaida kwa adverse selection kwenye majina ya kioevu. Kuchapisha muda kando ya namba ndiko kunakofanya markouts mbili kulinganishika.
Markout inahusianaje na effective spread?
Effective spread hugawanyika katika realized spread pamoja na kipengele cha adverse selection, na kipengele hicho ni mid basis markout iliyozidishwa kwa mbili. Badilisha muda na mgawanyo kati ya mbili hizo husonga nayo, ndiyo sababu takwimu ya spread iliyochapishwa haijakamilika bila muda wake kuambatanishwa.
Kila paneli hapa inakuja na SQL iliyoizalisha. Ifungue, badilisha ticker au tarehe, na mkondo huo huo wa markout utajijenga upya kutoka mwanzo kwenye terminal ya Strasmore.