กลไกการบันทึกรายการหุ้นส่วนย่อยในเทปข้อมูลซื้อขาย
การบันทึกหุ้นส่วนย่อยในรูปแบบหุ้นเต็มจำนวนส่งผลให้เกิดรอยต่อของข้อมูลปริมาณการซื้อขายตั้งแต่วันที่ 23 กุมภาพันธ์ 2026 ส่งผลให้ตัวเลขในอดีตมีความคลาดเคลื่อนในทุกชุดข้อมูล
หุ้นส่วนย่อย (fractional shares) จะถูกบันทึกในเทปข้อมูลรวม (consolidated tape) ในรูปแบบของรายการซื้อขายหุ้นเต็มจำนวน และจนถึงวันที่ 23 กุมภาพันธ์ 2026 การแปลงข้อมูลดังกล่าวทำงานในสองทิศทางพร้อมกัน รายการซื้อขายที่มีจำนวนน้อยกว่าหนึ่งหุ้นจะถูกปัดเศษขึ้นเป็นหนึ่งหุ้นเต็ม ส่วนรายการซื้อขายที่มีจำนวนมากกว่าหนึ่งหุ้นจะถูกตัดเศษทิ้ง ข้อมูลปริมาณการซื้อขายหุ้นใดก็ตามที่ครอบคลุมช่วงวันดังกล่าวจะมีรอยต่อของข้อมูล และในหุ้นที่มีการส่งคำสั่งซื้อขายหุ้นส่วนย่อยบ่อยครั้ง ตัวเลขในอดีตจะมีความคลาดเคลื่อนในทั้งสองทิศทางพร้อมกัน
คำสั่งซื้อขายหุ้นส่วนย่อยกลายเป็นรายการซื้อขาย (print) ได้อย่างไร
หากคุณต้องการซื้อหุ้นมูลค่า 50 ดอลลาร์ ในหุ้นที่มีราคาเสนอซื้อขายอยู่ที่ 180 ดอลลาร์ คุณกำลังสั่งซื้อหุ้นจำนวน 0.2778 หุ้น ไม่มีสมุดคำสั่งซื้อ (order book) ของตลาดหลักทรัพย์แห่งใดที่ยอมรับจำนวนดังกล่าว ตลาดหลักทรัพย์จะจับคู่คำสั่งซื้อขายเป็นหุ้นเต็มจำนวนเท่านั้น และราคาเสนอซื้อและเสนอขายที่ดีที่สุดในระดับประเทศ (national best bid and offer) ซึ่งเป็นราคาเสนอซื้อที่สูงที่สุดและราคาเสนอขายที่ต่ำที่สุดที่ทุกคนเข้าถึงได้ จะนับเฉพาะจำนวนหุ้นที่เป็นรอบล็อต (round lot) คือ 100 หุ้นเท่านั้น หน้า odd lot quote ของเราครอบคลุมกฎข้อที่สองนี้
โบรกเกอร์จะเป็นผู้ปิดช่องว่างนี้ในสมุดบัญชีของตนเอง โดยจะนำความต้องการหุ้นส่วนย่อยของลูกค้าทั้งหมดมาหักลบกลบหนี้กัน (net) จากนั้นจึงส่งส่วนที่เป็นหุ้นเต็มจำนวนเข้าสู่ตลาดในฐานะคำสั่งซื้อเดียว และจัดสรรหุ้นส่วนย่อยกลับไปยังบัญชีของลูกค้าในรูปแบบการซื้อขายกับโบรกเกอร์โดยตรง (principal fill) ซึ่งหมายความว่าโบรกเกอร์คือคู่สัญญาในส่วนที่เป็นเศษหุ้นของคุณ รายการซื้อขายที่ปรากฏบนเทปข้อมูลสาธารณะจะแสดงจำนวนหุ้นเต็มตามที่โบรกเกอร์ส่งเข้าไป ส่วนหุ้นจำนวน 0.2778 หุ้นของคุณจะปรากฏอยู่ในใบแจ้งยอดบัญชีของคุณเท่านั้น ไม่ได้รวมอยู่ในปริมาณการซื้อขายที่เผยแพร่ประจำวัน
โปรดจำข้อเท็จจริงแรกนี้ไว้ว่า กิจกรรมส่วนใหญ่ที่เกี่ยวข้องกับหุ้นส่วนย่อยไม่เคยปรากฏให้เห็นในปริมาณการซื้อขายสาธารณะเลย สิ่งที่ปรากฏคือคำสั่งซื้อขายหุ้นเต็มจำนวนที่รวบรวมมาเพื่อรองรับคำสั่งเหล่านั้น บวกกับรายการซื้อขายหุ้นส่วนย่อยจำนวนน้อยที่ถูกส่งเข้าสู่เทปข้อมูลโดยตรง
สิ่งที่เปลี่ยนแปลงในวันที่ 23 กุมภาพันธ์ 2026
รูปแบบของฟิลด์จำนวนหุ้นได้เปลี่ยนไป รายงานการซื้อขายในปัจจุบันแสดงจำนวนหุ้นด้วยทศนิยมหกตำแหน่ง โดยใช้วิธีตัดเศษทิ้งแทนการปัดเศษ ดังนั้นรายงานการซื้อขายหุ้นจำนวน 0.142857 หุ้นจึงสามารถเผยแพร่ได้ตามจำนวนจริง ก่อนหน้านี้จำนวนหุ้นในรายงานทุกรายการต้องเป็นจำนวนเต็ม และกฎการปัดเศษก็ไม่สมมาตรกัน
- สำหรับจำนวนที่น้อยกว่าหนึ่งหุ้น ปริมาณจะถูกปัดเศษขึ้นเป็น 1 ทำให้เกิดปริมาณการซื้อขายที่ไม่ได้เกิดขึ้นจริง
- สำหรับจำนวนตั้งแต่หนึ่งหุ้นขึ้นไป เศษหุ้นจะถูกตัดทิ้ง รายงานการซื้อขายหุ้นจำนวน 2.7 หุ้นจะถูกเผยแพร่เป็น 2 หุ้น
ความคลาดเคลื่อนทั้งสองรูปแบบนี้เกิดขึ้นในฟิลด์เดียวกันแต่ในทิศทางที่ตรงกันข้าม จำนวนครั้งของการซื้อขายได้รับผลกระทบจากกรณีแรก กล่าวคือ รายงานหุ้นส่วนย่อยที่ถูกปัดเศษขึ้นจะถูกนับเป็นหนึ่งรายการซื้อขายเต็มจำนวนในยอดรวมธุรกรรมประจำวัน หากนำตัวเลขเหล่านี้มารวมกันในหุ้นที่มีการซื้อขายหุ้นส่วนย่อยสูงตลอดระยะเวลาหลายปี ข้อมูลที่เผยแพร่อาจสูงเกินจริง ต่ำเกินจริง หรือบังเอิญถูกต้อง โดยไม่มีสิ่งใดในชุดข้อมูลที่จะบอกคุณได้ว่ากรณีใดเป็นกรณีใด
การเปลี่ยนแปลงนี้จะเห็นได้ชัดจากการกระจายตัวของขนาดรายการซื้อขายขนาดเล็ก แผงข้อมูลด้านล่างนับจำนวนรายการซื้อขาย AAPL ทุกรายการที่มีขนาดต่ำกว่า 26 หุ้น ในช่วงเวลาห้าวันทำการสองช่วง คือช่วงต้นเดือนมกราคม 2026 และช่วงต้นเดือนกรกฎาคม 2026 แถวที่ศูนย์แสดงรายการซื้อขายทุกรายการที่มีขนาดน้อยกว่าหนึ่งหุ้น
SQL เบื้องหลังตัวเลขแต่ละตัว
SELECT
scaffold.shares AS shares,
toUInt64(ifNull(t.jan_prints, 0)) AS prints_early_january,
toUInt64(ifNull(t.jul_prints, 0)) AS prints_early_july
FROM
(
SELECT toUInt32(arrayJoin(range(0, 26))) AS shares
) AS scaffold
LEFT JOIN
(
SELECT
toUInt32(floor(toFloat64(size))) AS shares,
countIf(sip_timestamp < '2026-02-01 00:00:00') AS jan_prints,
countIf(sip_timestamp >= '2026-07-01 00:00:00') AS jul_prints
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND ((sip_timestamp >= '2026-01-05 00:00:00' AND sip_timestamp < '2026-01-10 00:00:00')
OR (sip_timestamp >= '2026-07-06 00:00:00' AND sip_timestamp < '2026-07-11 00:00:00'))
AND toFloat64(size) < 26
GROUP BY shares
) AS t ON t.shares = scaffold.shares
ORDER BY sharesช่องหนึ่งหุ้นมีจำนวน 1360015 รายการในช่วงเดือนมกราคม และ 331200 รายการในช่วงเดือนกรกฎาคม เมื่อเทียบกับ 132674 รายการที่ขนาดสองหุ้นในเดือนกรกฎาคม แถวที่น้อยกว่าหนึ่งหุ้นมีจำนวน 2 รายการในเดือนมกราคม และ 1191620 รายการในเดือนกรกฎาคม รายการใดก็ตามที่น้อยกว่าหนึ่งหุ้นซึ่งถูกรายงานในช่วงเดือนมกราคมจะถูกเลื่อนขึ้นไปหนึ่งแถวและนับเป็นหนึ่งหุ้นเต็ม
หุ้นส่วนย่อยเทียบกับ odd lot
ทั้งสองสิ่งนี้มักถูกนำมาปะปนกันเสมอ แต่เป็นการยกเว้นที่แตกต่างกัน Odd lot คือคำสั่งซื้อขายหุ้นเต็มจำนวนที่มีจำนวนน้อยกว่า 100 หุ้น ส่วน Round lot คือ 100 หุ้น ซึ่งเป็นหน่วยที่ใช้สร้างราคาเสนอซื้อขายที่ได้รับการคุ้มครอง Odd lot จะปรากฏบนเทปข้อมูลสาธารณะ มี trade condition code ของตนเอง และถูกนับรวมในปริมาณการซื้อขาย เพียงแต่ไม่ได้ส่งผลต่อราคาเสนอซื้อและเสนอขายที่ดีที่สุดในระดับประเทศ ส่วนจำนวนหุ้นส่วนย่อยเป็นแนวคิดที่แยกต่างหาก คือจำนวนที่น้อยกว่าหนึ่งหุ้น
รายการซื้อขายหุ้นส่วนย่อยทุกรายการถือเป็น odd lot ด้วย แต่แทบไม่มี odd lot รายการใดที่เป็นหุ้นส่วนย่อย แผงข้อมูลด้านล่างจัดอันดับหุ้นชื่อดังหกตัวตามสัดส่วนของรายการซื้อขายที่เป็น odd lot ในช่วงสามวันทำการของเดือนกรกฎาคม 2026
SQL เบื้องหลังตัวเลขแต่ละตัว
SELECT
ticker,
round(100 * countIf(toFloat64(size) >= 1 AND toFloat64(size) < 100) / count(), 1) AS odd_lot_pct,
round(100 * countIf(toFloat64(size) >= 100) / count(), 1) AS round_lot_pct,
countIf(toFloat64(size) < 1) AS sub_one_share_prints
FROM global_markets.stocks_trades
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'KO', 'PG', 'SPY')
AND sip_timestamp >= '2026-07-08 00:00:00'
AND sip_timestamp < '2026-07-11 00:00:00'
GROUP BY ticker
ORDER BY odd_lot_pct DESCเมื่อจัดเรียงตามสัดส่วน odd lot รายการจะเริ่มจาก SPY ที่ 74.1% ของรายการซื้อขายทั้งหมด ไปจนถึง KO ที่ 39% คอลัมน์สุดท้ายนับจำนวนรายการซื้อขายที่ต่ำกว่าหนึ่งหุ้น คือ 211801 รายการใน SPY ในช่วงสามวันทำการเดียวกัน Odd lot เป็นเรื่องปกติทั่วไป แต่รายการซื้อขายหุ้นส่วนย่อยเป็นเพียงส่วนน้อยที่แทรกอยู่เท่านั้น
เหตุใดคอลัมน์ปริมาณการซื้อขายจึงกลายเป็นทศนิยม
จำนวนหุ้นเคยเป็นจำนวนเต็มมาตลอดสามสิบปี และระบบปลายทางทั้งหมดได้เรียนรู้ตามนั้น ทศนิยมหกตำแหน่งทำลายสมมติฐานดังกล่าวอย่างเงียบๆ โปรแกรมอ่านข้อมูลที่ตีความฟิลด์นี้เป็นจำนวนเต็มจะปฏิเสธแถวนั้นหรือปัดเศษ 0.5 ลงเป็น 0 และคอลัมน์ที่กำหนดประเภทเป็นจำนวนเต็มก็จะจัดเก็บข้อมูลในลักษณะเดียวกัน หากคุณจัดเก็บข้อมูลการซื้อขายของคุณเอง ฟิลด์จำนวนหุ้นจำเป็นต้องใช้ประเภทข้อมูลที่มีทศนิยมอย่างน้อยหกตำแหน่ง และผลรวมทุกรายการที่คำนวณจากฟิลด์นี้จำเป็นต้องมีความกว้างเท่ากัน
การตรวจสอบความถูกต้องของชุดข้อมูลปริมาณการซื้อขายที่ง่ายที่สุดคือขนาดรายการซื้อขายเฉลี่ย (average print size) ซึ่งคำนวณจากปริมาณหุ้นหารด้วยจำนวนครั้งของการซื้อขายในวันนั้น ค่านี้มีความเสถียรภายในหุ้นแต่ละตัวในช่วงเวลาสั้นๆ ซึ่งทำให้การเปลี่ยนแปลงที่ฉับพลันสังเกตเห็นได้ง่าย นี่คือข้อมูล AAPL ในช่วงสองสัปดาห์ที่คร่อมช่วงเวลาการเปลี่ยนแปลง
SQL เบื้องหลังตัวเลขแต่ละตัว
SELECT
toString(date) AS session_date,
formatDateTime(date, '%b %e') AS session_label,
round(sum(toFloat64(volume)) / sum(transactions), 1) AS shares_per_print,
round(sum(toFloat64(volume)) / 1000000, 1) AS volume_millions
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'AAPL'
AND date >= '2026-02-09'
AND date <= '2026-03-06'
GROUP BY date
HAVING sum(transactions) > 0
ORDER BY dateAAPL มีขนาดรายการซื้อขายเฉลี่ย 61.3 หุ้นต่อรายการในวันที่ Feb 9 โดยมีปริมาณการซื้อขาย 44.6 ล้านหุ้น และมีขนาด 66.2 หุ้นต่อรายการในวันที่ Mar 6 การเคลื่อนไหวในแต่ละวันด้วยขนาดดังกล่าวถือเป็นเรื่องปกติ วันที่ 23 กุมภาพันธ์ เปลี่ยนแปลงวิธีการบันทึกจำนวนหุ้น ไม่ใช่ปริมาณหุ้นที่มีการซื้อขายจริง
ตัวเลขใดบ้างที่เปลี่ยนแปลงเมื่อชุดข้อมูลข้ามรอยต่อ
ทุกสิ่งที่ถูกปรับค่าด้วยปริมาณการซื้อขายจะได้รับผลกระทบจากรอยต่อนี้ มีสี่สิ่งที่ควรตรวจสอบ:
- ปริมาณการซื้อขายสัมพัทธ์ (Relative volume) คือปริมาณการซื้อขายของวันนี้เทียบกับค่าเฉลี่ยของช่วงก่อนหน้า เมื่อการย้อนดูข้อมูลไปไกลกว่าวันที่ 23 กุมภาพันธ์ 2026 ทั้งสองฝั่งของอัตราส่วนจะถูกนับภายใต้กฎที่แตกต่างกัน หน้า relative volume ของเรามีสูตรคำนวณดังกล่าว
- VWAP (Volume-weighted average price) จะถ่วงน้ำหนักทุกรายการซื้อขายด้วยจำนวนหุ้น รายการซื้อขายหุ้นส่วนย่อยที่ถูกปัดเศษขึ้นจะมีน้ำหนักมากกว่าที่ควรจะเป็น ดู how VWAP is calculated
- กราฟแท่งรายนาทีและรายวัน ซึ่งสร้างจากการรวมขนาดรายการซื้อขายภายในช่วงเวลาหนึ่ง How OHLCV bars are built อธิบายขั้นตอนการรวมข้อมูลดังกล่าว
- มาตรวัดมูลค่าการซื้อขาย (Turnover) และสภาพคล่อง ซึ่งหารการเปลี่ยนแปลงของราคาด้วยมูลค่าการซื้อขายในประวัติศาสตร์หลายปี
จงปฏิบัติต่อวันที่ 23 กุมภาพันธ์ 2026 เหมือนกับการจัดการเหตุการณ์องค์กร (corporate action) ในประวัติราคา คือเป็นจุดเปลี่ยนที่ต้องระบุไว้ ไม่ใช่ข้อผิดพลาดที่ต้องปรับให้เรียบ ประวัติราคาก็ประสบปัญหาเดียวกันในรูปแบบที่ต่างออกไป ซึ่งครอบคลุมอยู่ในหน้า split adjusted price history ของเรา อย่าแสดงปริมาณการซื้อขายก่อนและหลังการเปลี่ยนแปลงบนแกนเดียวกันโดยไม่ระบุตำแหน่งของรอยต่อ
ขนาดรายการซื้อขายเฉลี่ยในระยะยาวแสดงให้เห็นประเด็นสุดท้ายนี้ ค่านี้จะเปลี่ยนแปลงไปตามโครงสร้างตลาดของหุ้นแต่ละตัวตามกำหนดเวลาของมันเอง
SQL เบื้องหลังตัวเลขแต่ละตัว
SELECT
toString(m) AS month,
formatDateTime(m, '%b %Y') AS month_label,
round(sumIf(vol, sym = 'AAPL') / sumIf(trades, sym = 'AAPL'), 1) AS aapl_shares_per_print,
round(sumIf(vol, sym = 'MSFT') / sumIf(trades, sym = 'MSFT'), 1) AS msft_shares_per_print,
round(sumIf(vol, sym = 'KO') / sumIf(trades, sym = 'KO'), 1) AS ko_shares_per_print
FROM
(
SELECT
toStartOfMonth(date) AS m,
ticker AS sym,
toFloat64(volume) AS vol,
transactions AS trades
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'KO')
AND date >= '2025-09-01'
AND date < '2026-08-01'
)
GROUP BY m
ORDER BY mAAPL มีขนาดรายการซื้อขายเฉลี่ย 91.4 หุ้นต่อรายการในเดือน Sep 2025 และ 54.9 ในเดือน Jul 2026 ในขณะที่ KO มีค่า 61.8 ในเดือนสุดท้ายนั้น ทั้งสามชุดข้อมูลอยู่ในระดับที่แตกต่างกันโดยไม่มีจุดเปลี่ยนร่วมกันในตลอดช่วงเวลา ชุดข้อมูลปริมาณการซื้อขายรายเดือนจะไม่แสดงให้คุณเห็นว่ากฎการรายงานเปลี่ยนแปลงที่ใด ปฏิทินต่างหากที่บอกเรื่องนั้น ซึ่งเป็นเหตุผลว่าทำไมวันที่นี้จึงควรค่าแก่การบันทึกไว้
ช่วงเวลาและการยกเว้น
- ช่วงเวลาเดือนมกราคมครอบคลุมห้าวันทำการ ตั้งแต่วันที่ 5 มกราคม ถึง 9 มกราคม 2026 ช่วงเวลาเดือนกรกฎาคมครอบคลุมห้าวันทำการ ตั้งแต่วันที่ 6 กรกฎาคม ถึง 10 กรกฎาคม 2026 ทั้งสองช่วงถูกกำหนดไว้ใน SQL ดังนั้นแผงข้อมูลจะไม่เปลี่ยนแปลงเมื่อมีข้อมูลใหม่เข้ามา
- แผงข้อมูลหุ้นหกตัวครอบคลุมสามวันทำการ ตั้งแต่วันที่ 8 กรกฎาคม ถึง 10 กรกฎาคม 2026 และนับทุกรายการซื้อขายโดยไม่คำนึงถึงสถานที่หรือเงื่อนไข
- ข้อมูลการซื้อขายจะเข้ามาพร้อมความล่าช้าเล็กน้อย ดังนั้นทุกช่วงเวลาที่นี่จึงเป็นข้อมูลในอดีตที่สมบูรณ์แล้ว
คำถามที่พบบ่อย
คุณสามารถซื้อหุ้นส่วนย่อยในตลาดหลักทรัพย์ได้หรือไม่?
ไม่ได้ สมุดคำสั่งซื้อของตลาดหลักทรัพย์ยอมรับเฉพาะหุ้นเต็มจำนวนเท่านั้น คำสั่งซื้อหุ้นส่วนย่อยจะถูกเติมเต็มโดยโบรกเกอร์ของคุณจากคลังหุ้นของตนเอง หลังจากที่โบรกเกอร์หักลบความต้องการของลูกค้าแล้วส่งส่วนที่เป็นหุ้นเต็มจำนวนเข้าสู่ตลาด หุ้นส่วนย่อยคือการซื้อขายโดยตรงระหว่างคุณกับโบรกเกอร์
หุ้นส่วนย่อยเริ่มปรากฏบนเทปข้อมูลเมื่อใด?
วันที่ 23 กุมภาพันธ์ 2026 ตั้งแต่วันนั้นเป็นต้นมา รายงานการซื้อขายจะแสดงจำนวนหุ้นด้วยทศนิยมหกตำแหน่ง โดยใช้วิธีตัดเศษทิ้งแทนการปัดเศษ ก่อนหน้านั้นจำนวนหุ้นในรายงานทุกรายการเป็นจำนวนเต็ม
ตัวเลขปริมาณการซื้อขายในอดีตผิดพลาดหรือไม่?
ในหุ้นที่มีกิจกรรมหุ้นส่วนย่อยสูง ตัวเลขจะผิดพลาดในทั้งสองทิศทางพร้อมกัน รายงานหุ้นส่วนย่อยที่น้อยกว่าหนึ่งหุ้นถูกปัดเศษขึ้นเป็นหนึ่งหุ้นเต็ม ซึ่งเพิ่มปริมาณการซื้อขาย และรายงานที่มากกว่าหนึ่งหุ้นถูกตัดเศษทิ้ง ซึ่งลดปริมาณการซื้อขาย ทั้งสองกรณีนี้ไม่ได้หักลบกันตามกำหนดเวลาที่คาดการณ์ได้
การซื้อขายหุ้นส่วนย่อยเหมือนกับ odd lot หรือไม่?
ไม่ Odd lot คือจำนวนหุ้นเต็มจำนวนที่น้อยกว่า 100 หุ้น และ odd lot ปรากฏบนเทปข้อมูลมานานหลายทศวรรษแล้ว ส่วนจำนวนหุ้นส่วนย่อยคือจำนวนที่น้อยกว่าหนึ่งหุ้น รายการซื้อขายหุ้นส่วนย่อยทุกรายการถือเป็น odd lot แต่ในทางกลับกันแทบจะไม่เป็นความจริงเลย
วิธีที่ปลอดภัยที่สุดในการทำกราฟปริมาณการซื้อขายข้ามช่วงวันที่กุมภาพันธ์ 2026 คืออะไร?
ระบุให้ชัดเจน จัดเก็บจำนวนหุ้นในรูปแบบทศนิยมที่มีความกว้างเพียงพอสำหรับหกตำแหน่ง ระบุวันที่บนชุดข้อมูลใดก็ตามที่ข้ามช่วงเวลานี้ และระบุให้ชัดเจนทุกครั้งที่มีการคำนวณค่าเฉลี่ยย้อนหลังที่ครอบคลุมทั้งสองฝั่ง
แผงข้อมูลทุกรายการที่นี่มีคำสั่ง SQL อยู่ด้านล่าง เปิดดู เปลี่ยนชื่อหุ้น (ticker) หรือช่วงเวลา และนับรายการซื้อขายด้วยตัวคุณเองบนเทอร์มินัล Strasmore