Adverse selection คืออะไร ทำไม Market Maker ถึงขาดทุน
ทำความเข้าใจสาเหตุที่ Market Maker ประสบภาวะขาดทุนจาก Adverse selection พร้อมวิธีวัดผลด้วย markout curves รวมถึงปัจจัยด้านความเสี่ยงจากสินค้าคงคลังและต้นทุนลำดับคิว
Market maker มักขาดทุนจาก adverse selection เนื่องจากเทรดเดอร์ที่เข้ามาจับคู่คำสั่งซื้อขาย (lift an offer) มักเป็นผู้ที่ทราบดีอยู่แล้วว่าราคาเสนอซื้อขายนั้นล้าสมัยไปแล้ว การจับคู่คำสั่งซื้อขาย (fill) แต่ละครั้งจะเริ่มต้นด้วยกำไรส่วนต่างเล็กน้อย ซึ่งโดยปกติจะอยู่ที่ประมาณครึ่งหนึ่งของ spread และวินาทีหลังจากนั้นจะเป็นตัวตัดสินว่ากำไรส่วนนี้จะเหลืออยู่เท่าใด เครื่องมือที่ใช้ในการวัดผลคือ markout ซึ่งเป็นการวัดการเปลี่ยนแปลงของราคาที่มีทิศทาง ณ ช่วงเวลาที่กำหนดหลังจากเกิดการจับคู่คำสั่งซื้อขาย และแผงข้อมูลด้านล่างนี้จะสร้างเส้นกราฟ markout จากข้อมูลการซื้อขายและราคาเสนอซื้อขายจริง บทความคู่ขนานของเราในหัวข้อ วิธีที่ market maker ทำกำไร จะอธิบายถึงฝั่งรายได้ของบัญชีประเภทเดียวกันนี้
Adverse selection ในการเทรดคืออะไร?
Market maker จะตั้งราคาเสนอซื้อและเสนอขายพร้อมกันสองด้าน โดยระบุจำนวนหุ้นที่ต้องการซื้อหรือขายในแต่ละราคา ช่องว่างระหว่างราคาเสนอซื้อและเสนอขายเรียกว่า bid ask spread และธุรกิจนี้คือเรื่องของตัวเลขทางคณิตศาสตร์ การซื้อที่ราคา bid และขายที่ราคา offer หากทำซ้ำหลายหมื่นครั้งต่อวัน ผลตอบแทนเฉลี่ยต่อรอบการซื้อขายจะใกล้เคียงกับค่า spread
คณิตศาสตร์ดังกล่าวตั้งอยู่บนสมมติฐานว่าคำสั่งซื้อและขายจะเข้ามาในปริมาณที่สมดุลกัน แต่ในความเป็นจริงไม่เป็นเช่นนั้น ราคาเสนอซื้อขายที่ค้างอยู่ในกระดานเปรียบเสมือนออปชันที่ใครก็ตามสามารถใช้สิทธิได้ทุกเมื่อที่ต้องการ และเทรดเดอร์ที่ติดตามตลาดอย่างใกล้ชิดที่สุดจะเป็นผู้เลือกจังหวะที่ดีที่สุด กองทุนที่กำลังทยอยส่งคำสั่งซื้อขนาดใหญ่จะเข้าซื้ออย่างต่อเนื่องในขณะที่ราคาเสนอขายยังคงถูกอยู่ หรือระบบที่ตรวจพบการเคลื่อนไหวของสินทรัพย์ที่มีความสัมพันธ์กันจะเลือกฝั่งที่ยังไม่ได้ปรับราคาตาม
Adverse selection คือชื่อเรียกของความไม่สมดุลในส่วนผสมนี้ กล่าวคือ การจับคู่คำสั่งซื้อขายที่ market maker ได้รับนั้น มักมาจากเทรดเดอร์ที่ต้องการจับคู่คำสั่งนั้นมากที่สุด สัญญาณบ่งชี้คือช่องว่างระหว่าง spread ที่ market maker เสนอ กับ spread ที่ market maker เก็บได้จริง
Markout ในการทำหน้าที่ market making คืออะไร?
Markout ตอบคำถามหนึ่งข้อที่เกิดขึ้นหลังจากการจับคู่คำสั่งซื้อขายทุกครั้ง นั่นคือ ราคาอยู่ที่เท่าใดหลังจากผ่านไปจำนวนวินาทีที่กำหนด โดยวัดจากฝั่งที่ market maker ถือสถานะอยู่ สมมติว่า market maker ขายหุ้น 100 หุ้นที่ราคา $50.02 ในขณะที่ราคา midpoint อยู่ที่ $50.00 การจับคู่คำสั่งนี้เริ่มต้นด้วยกำไร 2 เซนต์ต่อหุ้น หรือ 20 mils ในหน่วยของ desk (โดย 1 mil เท่ากับหนึ่งในสิบของเซนต์) หากราคา midpoint ขยับไปอยู่ที่ $50.04 ในอีก 60 วินาทีต่อมา markout ที่ 60 วินาทีจะเท่ากับลบ 20 mils ซึ่งหมายความว่ากำไรเริ่มต้นได้หายไปหมดแล้วและยังขาดทุนเพิ่มอีกเท่าตัว
เมื่อนำค่าเฉลี่ยของทุกการจับคู่คำสั่งซื้อขายในช่วงเวลาหนึ่งมาพล็อตเทียบกับช่วงเวลาที่กำหนด ผลลัพธ์ที่ได้คือเส้นกราฟ markout แผงข้อมูลด้านล่างนี้สร้างกราฟสำหรับ AAPL ในช่วงเวลาสามชั่วโมงช่วงกลางวันของวันพฤหัสบดีที่ 14 มิถุนายน 2026 โดยการซื้อขายแต่ละรายการจะถูกระบุทิศทางเทียบกับราคา midpoint ในวินาทีที่เกิดการซื้อขายนั้น: การซื้อขายที่สูงกว่าราคา midpoint ถือว่า taker เป็นฝ่ายซื้อ ซึ่งทำให้ market maker อยู่ในฝั่งขาย
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH
qs AS (
SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
avg((toFloat64(bid_price) + toFloat64(ask_price)) / 2) AS mid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-05-14 14:00:00'
AND sip_timestamp < '2026-05-14 17:06:00'
AND bid_price > 0 AND ask_price > bid_price
GROUP BY ts
),
fills AS (
SELECT t.ts AS ts, t.px AS px, t.shares AS shares, q.mid AS mid_at_fill,
if(t.px > q.mid, 1, -1) AS taker_side
FROM (
SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
toFloat64(price) AS px, toUInt64(size) AS shares
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-05-14 14:00:00'
AND sip_timestamp < '2026-05-14 17:00:00'
AND size > 0
) AS t
INNER JOIN qs AS q ON q.ts = t.ts
WHERE t.px != q.mid AND abs(t.px / q.mid - 1) < 0.02
)
SELECT
concat('+', toString(e.secs), 's') AS horizon,
round(1000 * avg(e.taker_side * (e.px - e.mid_at_fill)), 2) AS edge_at_fill_mils,
round(1000 * avg(e.taker_side * (e.px - f.mid)), 2) AS edge_after_mils
FROM (
SELECT toUInt32(ts + secs) AS future_ts, secs, px, mid_at_fill, taker_side
FROM (SELECT *, arrayJoin([1, 5, 15, 30, 60, 300]) AS secs FROM fills)
) AS e
INNER JOIN qs AS f ON f.ts = e.future_ts
GROUP BY e.secs
ORDER BY e.secsชุดข้อมูลแรกคือส่วนต่างกำไร ณ วินาทีที่เกิดการจับคู่คำสั่งซื้อขาย ซึ่งเป็นระยะห่างระหว่างราคาซื้อขายกับราคา midpoint โดยมีค่าเฉลี่ยอยู่ที่ 19.66 mils ต่อหุ้น ชุดข้อมูลที่สองคือมูลค่าของคำสั่งซื้อขายเหล่านั้นเมื่อราคา midpoint มีเวลาปรับตัว: 20.5 mils ที่หนึ่งวินาทีถัดมา และ 9.81 mils ที่ห้านาทีถัดมา ระยะห่างระหว่างสองชุดข้อมูลนี้ ณ ช่วงเวลาใดก็ตามคือค่า markout ซึ่งเป็นส่วนที่ถูกหักออกจาก spread ที่ market maker เสนอไว้
เส้นกราฟที่ตกลงอย่างรวดเร็วแล้วค่อยราบเรียบแสดงถึง market maker ที่กำลังจ่ายต้นทุนสำหรับการปรับราคาในทันทีและเก็บส่วนที่เหลือไว้ ส่วนเส้นกราฟที่ยังคงลาดเอียงไปในทิศทางเดิมในทุกช่วงเวลาแสดงถึงการจับคู่คำสั่งซื้อขายที่ตกอยู่ในฝั่งที่ผิดของราคาที่ยังคงเคลื่อนที่ต่อไป รูปแบบแรกคือต้นทุนในการทำธุรกิจ ส่วนรูปแบบที่สองคือราคาเสนอที่จำเป็นต้องปรับเปลี่ยน
คำสั่งซื้อขายแบบใดที่เป็น toxic flow?
คำว่า toxic ในที่นี้มีความหมายในเชิงเทคนิค Flow จะถือว่าเป็น toxic เมื่อเส้นกราฟ markout มีความลาดเอียงสวนทางกับ market maker ที่รับคำสั่งนั้นในทุกช่วงเวลาจากการสุ่มตัวอย่างจำนวนมาก ฝ่ายเทรดจะคัดแยกคำสั่งซื้อขายตามป้ายกำกับที่มองเห็นได้ เช่น ขนาดการซื้อขาย, สถานที่ซื้อขาย, ประเภทคำสั่ง และรหัสคู่สัญญา โดยขนาดการซื้อขายเป็นป้ายกำกับที่ปรากฏในข้อมูลการซื้อขายสาธารณะ
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH
qs AS (
SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
avg((toFloat64(bid_price) + toFloat64(ask_price)) / 2) AS mid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-05-14 14:00:00'
AND sip_timestamp < '2026-05-14 17:06:00'
AND bid_price > 0 AND ask_price > bid_price
GROUP BY ts
),
fills AS (
SELECT t.ts AS ts, t.px AS px, t.shares AS shares, q.mid AS mid_at_fill,
if(t.px > q.mid, 1, -1) AS taker_side
FROM (
SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
toFloat64(price) AS px, toUInt64(size) AS shares
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-05-14 14:00:00'
AND sip_timestamp < '2026-05-14 17:00:00'
AND size > 0
) AS t
INNER JOIN qs AS q ON q.ts = t.ts
WHERE t.px != q.mid AND abs(t.px / q.mid - 1) < 0.02
)
SELECT
multiIf(s.shares < 100, 'under 100 shares',
s.shares < 500, '100 to 499',
s.shares < 1000, '500 to 999',
'1,000 or more') AS size_bucket,
count() AS fills_count,
round(1000 * avg(s.taker_side * (s.px - s.mid_at_fill)), 2) AS edge_at_fill_mils,
round(1000 * avg(s.taker_side * (s.px - f.mid)), 2) AS edge_after_60s_mils
FROM (SELECT *, toUInt32(ts + 60) AS future_ts FROM fills) AS s
INNER JOIN qs AS f ON f.ts = s.future_ts
GROUP BY size_bucket
ORDER BY min(s.shares)คำสั่งซื้อขายที่ต่ำกว่า 100 หุ้นเริ่มต้นด้วยกำไร 19.47 mils ต่อหุ้น และมีมูลค่า 15.22 mils ในหนึ่งนาทีถัดมา ส่วนคำสั่งซื้อขายที่ 1,000 หุ้นขึ้นไปเริ่มต้นด้วย 36.26 mils และมีมูลค่า 21.34 mils ในช่วงเวลาเดียวกัน สินทรัพย์เดียวกัน ช่วงเวลาสามชั่วโมงเดียวกัน แต่มีผลตอบแทนต่อหุ้นที่แตกต่างกัน คำสั่งซื้อขายขนาดใหญ่ที่สุดมักหลีกเลี่ยงคิวสาธารณะโดยสิ้นเชิง ซึ่งเป็นสิ่งที่ block trade ถูกจัดขึ้นเพื่อดำเนินการ
ความเสี่ยงด้านสินค้าคงคลัง สถานะที่ไม่สามารถป้องกันความเสี่ยงได้ทันเวลา
ช่วงเวลา markout เปรียบเสมือนนาฬิกาเช่นกัน Market maker ที่ซื้อหุ้น 5,000 หุ้นที่ราคา bid จะถือหุ้น 5,000 หุ้นนั้นไว้ และจนกว่าสถานะจะถูกป้องกันความเสี่ยงหรือขายออกไป ก็จะมีความเสี่ยงต่อการเคลื่อนไหวของราคาในลำดับถัดไป การป้องกันความเสี่ยงมักไม่เกิดขึ้นในทันที สถานะหุ้นตัวเดียวสามารถชดเชยได้ด้วย ETF ที่มีความสัมพันธ์กันหรือสถานะออปชัน ซึ่งแต่ละอย่างก็มีค่า spread ของตัวเอง ความเสี่ยงด้านสินค้าคงคลังคือขนาดของการเคลื่อนไหวที่เกิดขึ้นภายในช่วงเวลานั้น และวัดด้วยวิธีเดียวกันสำหรับทุกหลักทรัพย์ ราคาเคลื่อนที่ไปไกลแค่ไหนโดยปกติในช่วงนาทีถัดไปและชั่วโมงถัดไป?
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH
bars AS (
SELECT ticker, window_start,
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
toFloat64(close) AS px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'NVDA')
AND window_start >= '2026-05-01 00:00:00'
AND window_start < '2026-06-01 00:00:00'
AND transactions >= 50
AND close > 0
),
starts AS (
SELECT ticker, et_date, px, mins,
window_start + toIntervalMinute(mins) AS future_start
FROM (SELECT *, arrayJoin([1, 2, 5, 15, 30, 60]) AS mins FROM bars)
)
SELECT
concat(toString(s.mins), ' min') AS hold_horizon,
round(avgIf(abs(f.px / s.px - 1) * 10000, s.ticker = 'SPY'), 1) AS spy_drift_bps,
round(avgIf(abs(f.px / s.px - 1) * 10000, s.ticker = 'NVDA'), 1) AS nvda_drift_bps
FROM starts AS s
INNER JOIN bars AS f
ON f.ticker = s.ticker AND f.et_date = s.et_date AND f.window_start = s.future_start
GROUP BY s.mins
HAVING countIf(s.ticker = 'SPY') > 0 AND countIf(s.ticker = 'NVDA') > 0
ORDER BY s.minsตลอดเดือนพฤษภาคม 2026 การเคลื่อนไหวสัมบูรณ์เฉลี่ยของ SPY ในหนึ่งนาทีอยู่ที่ 1.9 basis points (โดย 1 basis point เท่ากับหนึ่งในร้อยของหนึ่งเปอร์เซ็นต์) ส่วน NVDA อยู่ที่ 5.5 ในช่วงเวลาหนึ่งนาทีเดียวกัน หากขยายเวลาเป็นหนึ่งชั่วโมง ตัวเลขทั้งสองจะกลายเป็น 14.1 และ 40.4 Market maker ที่สามารถปิดสถานะได้ภายในหนึ่งนาทีจะอยู่กับคู่ตัวเลขแรก ส่วน market maker ที่ถือสถานะนานหนึ่งชั่วโมงจะอยู่กับคู่ตัวเลขที่สอง โดยที่กำไรที่เก็บได้จากการจับคู่คำสั่งซื้อขายนั้นเท่ากันไม่ว่าจะกรณีใดก็ตาม
เหตุใด market maker จึงขาดทุนที่ปลายแถวของคิว
ตลาดหลักทรัพย์จะจับคู่คำสั่งซื้อขายที่ค้างอยู่ในกระดานในราคาเดียวตามลำดับเวลาที่เข้ามา: ราคามาก่อน เวลามาก่อน คำสั่งซื้อที่อยู่ท้ายคิว 40,000 หุ้นที่ราคา bid จะต้องรอให้หุ้น 40,000 หุ้นข้างหน้าถูกจับคู่ไปก่อน และ การประมาณตำแหน่งในคิว เป็นวินัยเฉพาะทางอย่างหนึ่ง
ส่วนที่ยุ่งยากคือความหมายของการเคลียร์คิว คิวจะว่างลงได้สองทาง คือผู้ขายเทขายใส่ราคา bid จนหมดระดับราคา หรือราคาเคลื่อนที่ต่ำลงผ่านระดับนั้นไป คำสั่งซื้อที่อยู่ใกล้ต้นแถวจะมีส่วนร่วมในทั้งสองกรณี ส่วนคำสั่งซื้อที่อยู่ท้ายแถวจะถูกจับคู่ส่วนใหญ่ในกรณีที่สอง ในจังหวะที่ระดับราคานั้นกำลังจะกลายเป็นราคาเก่า Market maker สองรายสามารถเทรดสินทรัพย์เดียวกันในราคาเดียวกันแต่เก็บกำไรได้ไม่เท่ากัน ตำแหน่งในคิวไม่เคยปรากฏใน spread ที่เสนอ เนื่องจากทั้งสองรายเสนอราคาเดียวกัน แต่จะปรากฏในเส้นกราฟ markout
เหตุใดการขยาย spread จึงไม่ใช่ทางแก้ที่ฟรี
คำตอบที่ชัดเจนสำหรับเส้นกราฟ markout ที่แย่คือการเสนอราคาที่กว้างขึ้น ราคาเสนอที่กว้างขึ้นจะทำกำไรต่อการจับคู่คำสั่งซื้อขายได้มากขึ้น แต่จะได้รับคำสั่งซื้อขายที่น้อยลง ทั้งสองส่วนของการเทรดนี้อยู่ในข้อมูลการซื้อขายของวันเดียวกัน โดยคัดแยกตามระยะห่างที่แต่ละคำสั่งซื้อขายเกิดขึ้นจากราคา midpoint
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH
qs AS (
SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
avg((toFloat64(bid_price) + toFloat64(ask_price)) / 2) AS mid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-05-14 14:00:00'
AND sip_timestamp < '2026-05-14 17:06:00'
AND bid_price > 0 AND ask_price > bid_price
GROUP BY ts
),
fills AS (
SELECT t.ts AS ts, t.px AS px, t.shares AS shares, q.mid AS mid_at_fill,
if(t.px > q.mid, 1, -1) AS taker_side
FROM (
SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
toFloat64(price) AS px, toUInt64(size) AS shares
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-05-14 14:00:00'
AND sip_timestamp < '2026-05-14 17:00:00'
AND size > 0
) AS t
INNER JOIN qs AS q ON q.ts = t.ts
WHERE t.px != q.mid AND abs(t.px / q.mid - 1) < 0.02
)
SELECT
multiIf(s.cents <= 0.5, '0.5 cents or less',
s.cents <= 1.0, '0.5 to 1 cent',
s.cents <= 2.0, '1 to 2 cents',
'over 2 cents') AS distance_from_mid,
round(100 * sum(s.shares) / sum(sum(s.shares)) OVER (), 2) AS share_of_volume_pct,
round(1000 * avg(s.taker_side * (s.px - f.mid)), 2) AS edge_after_60s_mils
FROM (
SELECT *, toUInt32(ts + 60) AS future_ts, abs(px - mid_at_fill) * 100 AS cents
FROM fills
) AS s
INNER JOIN qs AS f ON f.ts = s.future_ts
GROUP BY distance_from_mid
ORDER BY min(s.cents)คำสั่งซื้อขายที่อยู่ภายในครึ่งเซนต์จากราคา midpoint คิดเป็น 27.58 เปอร์เซ็นต์ของหุ้นในช่วงเวลานั้น และมีมูลค่า 0.95 mils ต่อหุ้นในหนึ่งนาทีถัดมา คำสั่งซื้อขายที่ห่างออกไปมากกว่าสองเซนต์คิดเป็น 33.19 เปอร์เซ็นต์ของหุ้น ที่มูลค่า 46.86 mils ราคาเสนอที่ตั้งห่างจากราคา midpoint มากขึ้นจะถูกเข้าถึงโดยปริมาณการซื้อขายที่น้อยลงของวัน
อัตราการจับคู่คำสั่งซื้อขาย (fill rate) คือต้นทุนแรกของการขยับราคาออกไป ส่วน Rebate จากตลาดหลักทรัพย์คือต้นทุนที่สอง เนื่องจากสถานที่ซื้อขายหลายแห่งจ่ายค่าตอบแทนให้ market maker ต่อหุ้นที่จับคู่ได้ และรายได้นั้นจะแปรผันตามจำนวนหุ้นมากกว่าความกว้างของราคาเสนอ ระดับปริมาณการซื้อขายที่กำหนดอัตรา Rebate จะถูกนับเป็นรายเดือน ดังนั้นเดือนที่ตลาดเงียบเหงาจะส่งผลต่อราคาของทุกการจับคู่คำสั่งซื้อขายในเดือนถัดไป การสละตำแหน่งในคิวคือต้นทุนสุดท้าย ซึ่งต้องจ่ายทั้งในตอนที่ถอยออกมาและต้องจ่ายอีกครั้งที่ท้ายแถวตอนที่กลับเข้าไปใหม่ Market maker ทุกรายอยู่บนเส้นกราฟนี้ และผู้ที่วัดค่า markout ของตนเองได้อย่างแม่นยำที่สุดจะสามารถอยู่ใกล้ราคาตลาดได้มากที่สุดและยังคงเก็บกำไรไว้ได้ การวัดผลนั้นคือความได้เปรียบที่ market maker รายใหญ่ที่สุด ปกป้องไว้
คำถามที่พบบ่อย
Market maker ขาดทุนจากการเทรดรายรายการหรือไม่?
เป็นเรื่องปกติ บัญชีของ market maker คือการกระจายตัวของกำไรเล็กน้อยและขาดทุนเล็กน้อย โดยคำสั่งซื้อขายที่ขาดทุนจะกระจุกตัวอยู่ในช่วงเวลาก่อนที่ราคาจะเคลื่อนไหว ธุรกิจนี้ตั้งอยู่บนค่าเฉลี่ยจากการจับคู่คำสั่งซื้อขายหลายล้านครั้ง
Markout ในการเทรดคืออะไร?
Markout คือการเปลี่ยนแปลงของราคาตลาด ณ ช่วงเวลาที่กำหนดหลังจากเกิดการจับคู่คำสั่งซื้อขาย โดยวัดจากมุมมองของฝั่งหนึ่ง ซึ่งตัวเลขที่เป็นบวกหมายความว่าฝั่งนั้นได้กำไร ฝ่ายเทรดหุ้นจะระบุ markout เป็น mils ต่อหุ้น และฝ่ายเทรดออปชันจะระบุเป็น ticks ต่อสัญญา
Toxic order flow หมายถึงอะไร?
หมายถึง flow ของคำสั่งซื้อขายที่มีเส้นกราฟ markout ลาดเอียงสวนทางกับ market maker ที่รับคำสั่งนั้นอย่างต่อเนื่อง ซึ่งหมายความว่าราคาเคลื่อนที่ห่างออกไปเรื่อยๆ หลังจากจับคู่คำสั่งซื้อขายแต่ละครั้ง ป้ายกำกับนี้เป็นคุณสมบัติทางสถิติของกระแสคำสั่งซื้อขาย และไม่ได้เป็นการตัดสินเทรดเดอร์รายใดรายหนึ่ง
เหตุใด market maker จึงขยาย spread แทนที่จะถอนราคาเสนอ?
ราคาเสนอที่กว้างขึ้นช่วยให้ market maker ยังคงอยู่ในตลาดที่ราคาซึ่งคุ้มค่ากับเส้นกราฟ markout ที่แย่ลง การถอนราคาเสนอออกไปไม่ได้รายได้ใดๆ และยังต้องเสียตำแหน่งในคิวไปด้วย ฝ่ายเทรดมักทำทั้งสองอย่าง โดยการตัดสินใจขึ้นอยู่กับว่าราคาเสนอคาดว่าจะล้าสมัยนานแค่ไหน
Adverse selection วัดได้อย่างไร?
วัดด้วย markout โดยระบุทิศทางของคำสั่งซื้อขายแต่ละรายการตามฝั่งที่ market maker ถือสถานะอยู่ จากนั้นหาค่าเฉลี่ยการเปลี่ยนแปลงของราคา midpoint ณ ช่วงเวลาที่กำหนดหลังจากนั้น ช่องว่างระหว่างกำไรที่จุดจับคู่คำสั่งซื้อขายกับมูลค่า ณ แต่ละช่วงเวลาคือต้นทุนของ adverse selection ในหน่วยเดียวกับ spread
วิธีการคำนวณตัวเลขเหล่านี้
แผงข้อมูล AAPL ทุกแผงอ่านบันทึกสาธารณะสองรายการ: ข้อมูลการซื้อขาย (trade tape) และข้อมูลราคาเสนอ (quote tape) คำสั่งซื้อขายแต่ละรายการระหว่างเวลา 14:00 ถึง 17:00 UTC ของวันที่ 14 มิถุนายน 2026 จะถูกจับคู่กับค่าเฉลี่ย national best bid and offer midpoint ของวินาทีที่เกิดการซื้อขายนั้น จากนั้นจึงระบุทิศทาง การซื้อขายที่สูงกว่า midpoint นั้นถือเป็น taker buy ซึ่งทำให้ market maker อยู่ในฝั่งขาย คำสั่งซื้อขายที่ราคา midpoint พอดีจะไม่มีการระบุฝั่งและถูกตัดออก รวมถึงคำสั่งซื้อขายใดๆ ที่ห่างจาก midpoint มากกว่า 2 เปอร์เซ็นต์ บันทึกราคาเสนอที่ราคา bid เท่ากับหรือสูงกว่าราคา offer จะถูกยกเว้น เนื่องจาก locked or crossed market ไม่มีราคา midpoint ที่ใช้งานได้
การจับคู่ระดับวินาทีจะประมาณราคาเสนอที่เกิดขึ้น ณ ไมโครวินาทีของการจับคู่คำสั่งซื้อขาย และช่วยให้การอัปเดตที่รวดเร็วที่สุดมีความราบรื่น ราคา ณ ช่วงเวลาที่กำหนดมาจาก midpoint ระดับวินาทีเดียวกัน แผงข้อมูลสินค้าคงคลังใช้แท่งกราฟหนึ่งนาทีและเก็บเฉพาะแท่งที่มีคำสั่งซื้อขายอย่างน้อย 50 รายการ ซึ่งเป็นการรวมกลุ่มตัวอย่างในช่วงเวลาที่มีการซื้อขายหนาแน่นที่สุดของวัน
แผงข้อมูลทุกแผงที่นี่มี SQL ที่สร้างมันขึ้นมา ดังนั้นคณิตศาสตร์ของ markout จึงเปิดเผยให้ตรวจสอบได้ทีละบรรทัด หากต้องการสร้างเส้นกราฟใหม่สำหรับหลักทรัพย์อื่นหรือวันอื่น สามารถขอได้โดยใช้ภาษาอังกฤษทั่วไปที่เทอร์มินัล Strasmore