Average Daily Volume คืออะไร
ปริมาณการซื้อขายเฉลี่ยต่อวัน หรือ ADV คือจำนวนหุ้นที่มีการซื้อขายเฉลี่ยต่อวันของหุ้นตัวหนึ่ง ซึ่งเป็นค่าฐานสำคัญในการคำนวณ Days to Cover และ Relative Volume
ปริมาณการซื้อขายเฉลี่ยต่อวัน หรือ ADV คือตัวเลขที่มีการใช้งานมากที่สุดแต่กลับไม่มีการให้คำนิยามไว้: มันคือจำนวนหุ้นที่มีการซื้อขายโดยเฉลี่ยต่อวันของหุ้นตัวหนึ่ง โดยคำนวณจากช่วงเวลาที่ผ่านมา ตัวเลขนี้เป็นตัวหารใน จำนวนวันที่ต้องใช้เพื่อปิดสถานะ เป็นค่าฐานใน ปริมาณการซื้อขายสัมพัทธ์ และเป็นตัวทดสอบสภาพคล่องในเครื่องมือคัดกรองหุ้นทุกประเภท ซึ่งหมายความว่าค่าเหล่านี้ล้วนได้รับผลกระทบจากการกำหนดค่าของ ADV ไม่ว่าจะเป็นการเลือกช่วงเวลา จำนวนเซสชัน หรือการใช้จำนวนหุ้นหรือมูลค่าดอลลาร์ หน้าเพจนี้จะให้คำนิยามที่ถูกต้อง แสดงวิธีการคำนวณอย่างละเอียด และวัดผลจากการเลือกค่าต่างๆ ผ่านข้อมูลการซื้อขายจริง
การวัดปริมาณการซื้อขายเฉลี่ยต่อวัน
ข้อมูลจากการซื้อขายในช่วงเวลาปกติ 20 เซสชัน ตั้งแต่วันที่ 11 มิถุนายน ถึง 10 กรกฎาคม 2026 ประกอบด้วยหุ้น 4 ตัวที่คุ้นเคย และหุ้นอีกหนึ่งตัวที่มีสภาพคล่องต่ำอย่างตั้งใจ ข้อมูลประกอบด้วยจำนวนหุ้น มูลค่าดอลลาร์ และ (สำหรับข้อมูลในภายหลัง) สัดส่วนของปริมาณการซื้อขายรวมของแต่ละหลักทรัพย์ที่เกิดขึ้นนอกเวลาทำการปกติ:
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH per_day AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') >= '09:30'
AND formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') < '16:00') AS rth_shares,
sumIf(toFloat64(close) * toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') >= '09:30'
AND formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') < '16:00') AS rth_dollars,
sum(toFloat64(volume)) AS all_shares
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'AAPL', 'MU', 'KO', 'CATO')
AND window_start >= toDateTime('2026-06-11 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
GROUP BY ticker, et_date
)
SELECT ticker,
round(avg(rth_shares) / 1e6, 2) AS adv_shares_m,
round(avg(rth_dollars) / 1e9, 2) AS adv_dollars_bn,
round(100 * (sum(all_shares) - sum(rth_shares)) / sum(all_shares), 1) AS extended_hours_pct,
count() AS sessions
FROM per_day
GROUP BY ticker
ORDER BY adv_shares_m DESCตารางนี้แสดงประเด็นสำคัญทั้งหมดของบทความนี้ MU และ AAPL มีปริมาณการซื้อขายหุ้นต่อวันใกล้เคียงกัน คือ 42.01M เทียบกับ 41.47M แต่ในช่องมูลค่าดอลลาร์มีความแตกต่างกันอย่างชัดเจน โดยมีมูลค่า $44.49B เทียบกับ $12.24B ต่อวัน จำนวนหุ้นใช้เพื่อวัดกิจกรรมการซื้อขาย ส่วนมูลค่าดอลลาร์ใช้เพื่อวัดเม็ดเงิน การจัดอันดับมีการสลับกันที่ลำดับต้นๆ โดย SPY นำในด้านจำนวนหุ้น (46.01M ตลอด 20 เซสชัน) ในขณะที่ MU นำในตารางนี้เมื่อพิจารณาจากมูลค่าดอลลาร์ และที่ลำดับสุดท้าย CATO มีปริมาณการซื้อขายหุ้นเพียง 0.05 ล้านหุ้นต่อวัน ซึ่งมีมูลค่าเงินน้อยมากจนช่องหลักพันล้านแสดงค่าเพียง 0 ในระดับสเกลนี้ นี่คือลักษณะของตลาดที่คำสั่งซื้อขายจากสถาบันเพียงคำสั่งเดียวอาจเท่ากับปริมาณการซื้อขายทั้งวัน และเป็นตลาดที่ ต้นทุนการซื้อขาย มีความแตกต่างจากตลาดทั่วไปอย่างสิ้นเชิง
วิธีการคำนวณปริมาณการซื้อขายเฉลี่ยต่อวัน
วิธีการคำนวณนั้นไม่ซับซ้อน คือการนำปริมาณหุ้นที่ซื้อขายในแต่ละวันในช่วงเวลาที่กำหนดมาบวกกัน แล้วหารด้วยจำนวนวันทั้งหมด ตัวอย่างเช่น ข้อมูลการซื้อขายในช่วงเวลาทำการปกติของ Coca-Cola เป็นเวลาหนึ่งสัปดาห์เต็ม (6 ถึง 10 กรกฎาคม 2026) โดยมีการคำนวณยอดรวมสะสมและค่าเฉลี่ยไว้ในคำสั่งซื้อข้อมูลเดียวกัน:
SQL เบื้องหลังตัวเลขแต่ละตัว
SELECT session_date,
shares_m,
round(sum(shares_m) OVER (), 1) AS five_day_total_m,
round(avg(shares_m) OVER (), 1) AS adv_m,
round(avg(shares_m) OVER () * 0.01 * 1000, 0) AS one_pct_of_adv_k
FROM (
SELECT formatDateTime(toDate(toTimeZone(window_start, 'America/New_York')), '%Y-%m-%d') AS session_date,
round(sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') >= '09:30'
AND formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') < '16:00') / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'KO'
AND window_start >= toDateTime('2026-07-06 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
GROUP BY session_date
)
ORDER BY session_dateนำจำนวนหุ้นทั้งห้าวันมาบวกกัน — 10.7 + 12.1 + 10.7 + 11 + 8.3 ล้านหุ้น — จะได้ยอดรวมเท่ากับ 52.8M เมื่อหารด้วยห้า จะได้ 10.6M หุ้น ซึ่งเป็นค่า ADV ระยะเวลา 5 เซสชันของ KO สำหรับ ADV ระยะเวลา 20 เซสชัน จะใช้วิธีคำนวณแบบเดียวกันกับข้อมูล 20 แถว ซึ่งก็คือตัวเลขในตารางแรก โปรดสังเกตสิ่งที่ค่าเฉลี่ยช่วยลดความผันผวน: 2026-07-07 มีปริมาณการซื้อขายที่ 12.1M และ 2026-07-10 มีปริมาณการซื้อขายที่ 8.3M ซึ่งความผันผวนรายวันเหล่านี้จะถูกปรับให้เรียบด้วยค่า ADV จนเหลือเพียงตัวเลขเดียว คอลัมน์สุดท้ายแสดงตัวอย่างการกำหนดขนาดสถานะ (position sizing): หนึ่งเปอร์เซ็นต์ของ ADV ของ KO คือประมาณ 106 พันหุ้น ซึ่งเป็นระดับที่คำสั่งซื้อเพียงคำสั่งเดียวเริ่มมีสัดส่วนที่สังเกตเห็นได้เมื่อเทียบกับปริมาณการซื้อขายรวมทั้งวัน
การเลือกช่วงเวลาส่งผลต่อความเร็วในการคำนวณค่า ADV
โดยทั่วไปมักใช้ระยะเวลา 20 session (หนึ่งเดือนซื้อขาย) แต่ก็มีการใช้ระยะเวลา 10, 30, 65 และ 90 session เช่นกัน ช่วงเวลาที่เลือกจะกำหนดความเร็วในการปรับค่า ADV ให้เป็นปัจจุบัน ตัวอย่างที่เห็นได้ชัดในปี 2026 คือ MU ซึ่งเป็นหุ้นที่มีการปรับราคาอย่างรุนแรงในช่วงกลางปี ส่งผลให้ค่า ADV ย้อนหลังหนึ่งเดือนและค่า ADV ย้อนหลังหนึ่งไตรมาสแสดงข้อมูลที่แตกต่างกันในช่วงฤดูใบไม้ผลิ ดังที่ปรากฏใน บทวิเคราะห์เจาะลึกเดือนมิถุนายน 2026 ต่อไปนี้คือข้อมูลหุ้นตัวเดียวกันในช่วงเจ็ดเดือนที่ผ่านมา โดยวัดผลด้วยทั้งสองช่วงเวลาพร้อมกัน:
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
sum(toFloat64(volume)) AS day_shares
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'MU'
AND window_start >= toDateTime('2025-08-01 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY et_date
),
rolled AS (
SELECT et_date,
avg(day_shares) OVER (ORDER BY et_date ROWS BETWEEN 19 PRECEDING AND CURRENT ROW) AS adv20,
avg(day_shares) OVER (ORDER BY et_date ROWS BETWEEN 89 PRECEDING AND CURRENT ROW) AS adv90,
row_number() OVER (ORDER BY et_date) AS rn,
count() OVER () AS total_rows
FROM daily
)
SELECT formatDateTime(et_date, '%Y-%m-%d') AS date,
round(adv20 / 1e6, 1) AS adv_20_session_m,
round(adv90 / 1e6, 1) AS adv_90_session_m
FROM rolled
WHERE rn > 90 AND (rn % 3 = total_rows % 3)
ORDER BY et_dateใน 2025-12-10 ข้อมูลจากทั้งสองช่วงเวลาตรงกัน โดยมีค่า 21.3M สำหรับการนับแบบ 20 session และ 19.9M สำหรับแบบ 90 session ต่อมาใน 2026-04-14 ค่าทั้งสองเริ่มแยกออกจากกันเป็น 45.6M เทียบกับ 31.9M ซึ่งหมายความว่ามีค่า ADV "อย่างเป็นทางการ" สองค่าสำหรับหุ้นตัวเดียวในวันเดียวกัน ส่งผลให้เครื่องมือคัดกรองหุ้น (screener) ค่า days-to-cover หรือค่า relative-volume ที่อ้างอิงช่วงเวลาหนึ่ง ไม่สอดคล้องกับเครื่องมือที่อ้างอิงอีกช่วงเวลาหนึ่ง จนกระทั่งถึง 2026-07-10 ค่าทั้งสองกลับมาบรรจบกันอีกครั้ง (42M เทียบกับ 41.9M) เนื่องจากระดับปริมาณการซื้อขายที่ถูกปรับราคาใหม่ได้ถูกคำนวณรวมเข้าไปในหน้าต่างระยะยาวแล้ว เมื่อแหล่งข้อมูลสองแห่งให้ค่า ADV ของหุ้นไม่ตรงกัน สาเหตุแรกที่ควรสงสัยคือการเลือกช่วงเวลา และสาเหตุที่สองคือการรวมปริมาณการซื้อขายในช่วง extended-hours หรือไม่
เกิดอะไรขึ้นกับ ADV ทันทีหลังจากเกิด volume shock
กราฟด้านบนแสดงให้เห็นถึงแนวโน้มดังกล่าว และนี่คือผลการวัดค่า โดยพิจารณาจากช่วงที่ MU มี volume shock รุนแรงที่สุดในปี 2026 ซึ่งเป็นวันที่ปริมาณการซื้อขายสูงกว่าค่า ADV ย้อนหลัง 20 วันของตนเองมากที่สุด แล้วนำค่า ADV ที่เครื่องมือคัดกรองแสดงก่อนถึงวันดังกล่าว มาเปรียบเทียบกับค่าที่แสดงในหนึ่งเดือนต่อมา:
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
sum(toFloat64(volume)) AS day_shares
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'MU'
AND window_start >= toDateTime('2025-11-01 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY et_date
),
ranked AS (
SELECT et_date, day_shares,
day_shares / avg(day_shares) OVER (ORDER BY et_date ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS shock_ratio,
row_number() OVER (ORDER BY et_date) AS rn
FROM daily
),
biggest AS (
SELECT et_date, day_shares, shock_ratio
FROM ranked
WHERE rn > 20 AND et_date >= toDate('2026-01-01')
ORDER BY shock_ratio DESC, et_date ASC
LIMIT 1
),
before AS (
SELECT avg(day_shares) AS adv FROM (
SELECT day_shares FROM daily WHERE et_date < (SELECT et_date FROM biggest) ORDER BY et_date DESC LIMIT 20
)
),
after AS (
SELECT avg(day_shares) AS adv FROM (
SELECT day_shares FROM daily WHERE et_date >= (SELECT et_date FROM biggest) ORDER BY et_date ASC LIMIT 20
)
)
SELECT formatDateTime((SELECT et_date FROM biggest), '%Y-%m-%d') AS event_date,
round((SELECT day_shares FROM biggest) / 1e6, 1) AS event_day_shares_m,
round((SELECT adv FROM before) / 1e6, 1) AS adv_20_before_m,
round((SELECT shock_ratio FROM biggest), 1) AS event_vs_prior_adv_x,
round((SELECT adv FROM after) / 1e6, 1) AS adv_20_after_m,
round(100 * ((SELECT adv FROM after) / (SELECT adv FROM before) - 1), 0) AS adv_shift_pctใน 2026-03-19 MU มีปริมาณการซื้อขายอยู่ที่ 64.7M หุ้น เมื่อเทียบกับ ADV ก่อนหน้าที่ 28.7M หรือคิดเป็น 2.3 เท่าของค่าฐานเดิม ในช่วง 20 วันถัดมา ค่าเฉลี่ย ADV ย้อนหลังอยู่ที่ 45M ซึ่งเป็นการเพิ่มขึ้น 57% เท่าในตัวหาร ตัวเลขทุกตัวที่คำนวณจาก ADV เปลี่ยนแปลงไปตามค่านี้ โดย relative volume ลดลง (เนื่องจากค่าฐานเพิ่มขึ้น) และ days to cover ลดลง (เนื่องจากตัวหารเพิ่มขึ้น) โดยที่ไม่มีการเปลี่ยนแปลงในสถานะการถือครองจริงของผู้ใดเลย ในกรณีของ MU ปริมาณการซื้อขายที่สูงยังคงดำเนินต่อไป ซึ่งเหตุการณ์ volume shock นี้เป็นการปรับระดับมูลค่าใหม่ (re-rating) ไม่ใช่เหตุการณ์ที่เกิดขึ้นเพียงวันเดียว แต่กลไกการคำนวณนั้นเหมือนกันไม่ว่าจะในกรณีใดก็ตาม กล่าวคือ หลังจากช่วงที่มีปริมาณการซื้อขายหนาแน่น ค่า ADV จะวัดผลจากเหตุการณ์นั้นแทนที่จะเป็นพฤติกรรมปกติของหุ้น เป็นระยะเวลาเท่ากับช่วงเวลาที่ใช้ในการคำนวณพอดี
การวัดค่าสภาพคล่อง
คำว่า "หลายล้านดอลลาร์ต่อวัน" มักถูกใช้เพื่ออธิบายความสามารถในการซื้อขายแบบคร่าวๆ ข้อมูลต่อไปนี้คือการกระจายตัวที่แท้จริง โดยพิจารณาจากสัญลักษณ์ที่จดทะเบียนใน US ทุกตัวที่มีมูลค่าการซื้อขายเฉลี่ยต่อวัน (ADV) ในระดับเดียวกันอย่างน้อย 15 จาก 20 session โดยเรียงลำดับตามมูลค่า ADV เป็นดอลลาร์:
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH per_ticker AS (
SELECT ticker, avg(day_dollars) AS adv_dollars
FROM (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
sumIf(toFloat64(close) * toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') >= '09:30'
AND formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') < '16:00') AS day_dollars
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= toDateTime('2026-06-11 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
AND match(ticker, '^[A-Z]+$')
GROUP BY ticker, et_date
)
GROUP BY ticker
HAVING count() >= 15
)
SELECT count() AS names,
round(quantileDeterministic(0.25)(adv_dollars, cityHash64(ticker)) / 1e6, 2) AS p25_m,
round(quantileDeterministic(0.50)(adv_dollars, cityHash64(ticker)) / 1e6, 1) AS median_m,
round(quantileDeterministic(0.75)(adv_dollars, cityHash64(ticker)) / 1e6, 1) AS p75_m,
round(quantileDeterministic(0.90)(adv_dollars, cityHash64(ticker)) / 1e6, 1) AS p90_m,
round(quantileDeterministic(0.99)(adv_dollars, cityHash64(ticker)) / 1e6, 0) AS p99_m,
countIf(adv_dollars >= 1e6) AS names_above_1m,
countIf(adv_dollars >= 10e6) AS names_above_10m,
countIf(adv_dollars >= 100e6) AS names_above_100m,
countIf(adv_dollars >= 1e9) AS names_above_1bn
FROM per_tickerจากสัญลักษณ์ทั้งหมดใน 10864 มีค่ามัธยฐานการซื้อขายอยู่ที่ 2.2M ต่อวัน ซึ่งหมายความว่าครึ่งหนึ่งของตลาด US มีมูลค่าการซื้อขายต่ำกว่าระดับดังกล่าว หนึ่งในสี่ของตลาดมีมูลค่าการซื้อขายต่ำกว่า 0.33M โดยค่าเปอร์เซ็นไทล์ที่ 75 อยู่ที่ 20.4M ค่าเปอร์เซ็นไทล์ที่ 90 อยู่ที่ 113.7M และค่าเปอร์เซ็นไทล์ที่ 99 อยู่ที่ 1333M เมื่อพิจารณาตามเกณฑ์ตัวเลขกลมๆ: มีหุ้น 6515 ตัวที่มีมูลค่าการซื้อขายเกิน 1 ล้านดอลลาร์ต่อวัน, 3535 ตัวเกิน 10 ล้านดอลลาร์ และ 1166 ตัวเกิน 100 ล้านดอลลาร์ โดยมีเพียง 130 ตัวเท่านั้นที่มีมูลค่าเกิน 1 พันล้านดอลลาร์ หุ้นที่สื่อทางการเงินให้ความสนใจส่วนใหญ่จะอยู่ในกลุ่มสุดท้ายนี้เกือบทั้งหมด ในขณะที่หุ้นที่มีรายการจดทะเบียนค่ามัธยฐานนั้นเป็นเครื่องมือทางการเงินที่แตกต่างออกไปอย่างสิ้นเชิง
เมื่อ ADV ส่งผลต่อตัวเลขอื่นอย่างเงียบๆ
- Days to cover = short interest ÷ ADV หากปริมาณการซื้อขายพุ่งสูงขึ้น อัตราส่วนนี้จะลดลงโดยที่สถานะ short ไม่มีการเปลี่ยนแปลง ซึ่งเป็นผลมาจากตัวหารที่เพิ่มขึ้น
- Relative volume = ปริมาณการซื้อขายวันนี้ ÷ ADV ใช้ตัวเลขเดียวกันแต่ทำหน้าที่ตรงกันข้าม โดยในที่นี้ ADV คือค่าฐานที่ถูกนำมาเปรียบเทียบ
- Liquidity screens ("เฉพาะหุ้นที่มี ADV สูงกว่า 1M") — การทำ backtest และการใช้ screener ทุกรูปแบบล้วนมีเงื่อนไขนี้ และส่งผลต่อ survivorship อย่างเงียบๆ โดยหุ้นจะ เข้าสู่ รายชื่อใน screener เหล่านี้เมื่อมีปริมาณการซื้อขายพุ่งสูงขึ้นอย่างโดดเด่นในช่วงสัปดาห์นั้นๆ
- Position sizing — การที่สถาบันมักซื้อขายเพียงไม่กี่เปอร์เซ็นต์ของ ADV ต่อวัน เป็นเหตุผลที่กองทุนขนาดใหญ่ไม่สามารถถือครองหุ้นขนาดเล็กบางตัวได้ เนื่องจากต้องใช้เวลาหลายสัปดาห์ของปริมาณการซื้อขายทั้งหมดเพื่อสร้างหรือปิดสถานะ
กรณีของ days-to-cover ควรพิจารณาด้วยตัวเลขจริง เนื่องจากแม้แต่ตัวเลข "อย่างเป็นทางการ" ก็มีการเลือกใช้ค่า ADV ของใครบางคนอยู่ด้วย FINRA เผยแพร่ค่า days to cover โดยใช้ปริมาณการซื้อขายของตนเองเป็นตัวหาร (แต่ละตลาดใช้ช่วงเวลาการรายงานของตนเอง และกำหนดค่าขั้นต่ำไว้ที่ 1.0 — ดู วิธีการได้มาซึ่งข้อมูลนั้น) หากคำนวณอัตราส่วนเดิมด้วยค่า ADV ในช่วงเวลาทำการปกติ 20 session ของหน้านี้ ผลลัพธ์จะเปลี่ยนไป:
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH our_adv AS (
SELECT ticker, avg(day_shares) AS adv
FROM (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') >= '09:30'
AND formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') < '16:00') AS day_shares
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('MU', 'KO')
AND window_start >= toDateTime('2026-06-11 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
GROUP BY ticker, et_date
)
GROUP BY ticker
),
si AS (
SELECT ticker,
max(short_interest) AS short_interest,
max(avg_daily_volume) AS finra_adv,
max(days_to_cover) AS finra_dtc
FROM global_markets.stocks_short_interest
WHERE settlement_date = '2026-06-30' AND ticker IN ('MU', 'KO')
GROUP BY ticker
)
SELECT si.ticker AS ticker,
round(si.short_interest / 1e6, 1) AS shares_short_m,
round(si.finra_adv / 1e6, 1) AS finra_adv_m,
round(si.finra_dtc, 2) AS finra_days_to_cover,
round(our_adv.adv / 1e6, 1) AS rth_adv_20_session_m,
round(si.short_interest / our_adv.adv, 2) AS days_to_cover_recomputed
FROM si
INNER JOIN our_adv ON si.ticker = our_adv.ticker
ORDER BY tickershort interest เท่าเดิม แต่ตัวหารต่างกัน สำหรับ KO ค่าที่ FINRA รายงานคือ 2.06 วัน โดยใช้ปริมาณการซื้อขายที่ 24.1M หุ้น แต่เมื่อเทียบกับ ADV ในช่วงเวลาทำการปกติที่ 12.4M ของหน้านี้ สถานะ short จำนวน 49.6M หุ้น จะคำนวณได้ 4 วัน ซึ่งมากกว่าเกือบสองเท่า สำหรับ MU ตัวเลขที่เผยแพร่คือค่าขั้นต่ำที่รายงานไว้คือ 1 แต่เมื่อคำนวณใหม่จะได้ 0.75 วัน ไม่มีตัวเลขใดผิดพลาด เพราะทั้งคู่ตอบคำถามด้วยตัวหารที่ต่างกัน บทเรียนนี้สามารถสรุปได้ว่า: อัตราส่วนใดก็ตามที่มี ADV เป็นตัวหาร กำลังอ้างอิงตามการเลือกช่วงเวลาและเซสชันของใครบางคนอยู่เงียบๆ
ADV ใช้กับ options ได้หรือไม่?
เทรดเดอร์ options ใช้แนวคิดเดียวกันแต่มีข้อแตกต่างหนึ่งประการ คือปริมาณการซื้อขายจะนับเป็นจำนวนสัญญา และแต่ละสัญญามาตรฐานของหุ้นจะควบคุมหุ้นจำนวน 100 หุ้น โดยใช้จำนวน 20 sessions และ four option tapes เช่นเดียวกัน แต่จะแปลงจำนวนสัญญาให้เป็นมูลค่าการซื้อขายที่เทียบเท่ากับจำนวนหุ้น (share-equivalent exposure):
SQL เบื้องหลังตัวเลขแต่ละตัว
WITH daily AS (
SELECT multiIf(ticker LIKE 'O:SPY2%', 'SPY', ticker LIKE 'O:AAPL2%', 'AAPL', ticker LIKE 'O:MU2%', 'MU', 'KO') AS underlying,
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
sum(toFloat64(volume)) AS contracts
FROM global_markets.options_minute_aggs
WHERE (ticker LIKE 'O:SPY2%' OR ticker LIKE 'O:AAPL2%' OR ticker LIKE 'O:MU2%' OR ticker LIKE 'O:KO2%')
AND window_start >= toDateTime('2026-06-11 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
GROUP BY underlying, et_date
)
SELECT underlying,
round(avg(contracts) / 1e3, 1) AS avg_daily_contracts_k,
round(avg(contracts) * 100 / 1e6, 1) AS share_equivalent_m,
count() AS sessions
FROM daily
GROUP BY underlying
ORDER BY avg_daily_contracts_k DESCความแตกต่างของขนาดข้อมูลนั้นสูงกว่าข้อมูลในตารางหุ้นอย่างมาก ข้อมูล options tape ของ SPY มีค่าเฉลี่ยอยู่ที่ 12543.2 พันสัญญาต่อวัน หรือเทียบเท่ากับ 1254.3M หุ้น ซึ่งสูงกว่าค่า ADV ของ SPY ที่อยู่ที่ 46.01M หุ้นอย่างมาก ในขณะที่ KO มีทิศทางตรงกันข้าม โดยมีจำนวน 64.6 พันสัญญา (เทียบเท่า 6.5M หุ้น) ซึ่งต่ำกว่าค่า ADV ที่ 12.4M หุ้น สภาพคล่องของ options จะกระจุกตัวอยู่ในหุ้นอ้างอิงเพียงไม่กี่ตัว และจะยิ่งเบาบางลงเมื่อพิจารณาตาม strike price และวันหมดอายุ ดังนั้น ตัวเลขรวมเช่นนี้จึงเป็นการแสดงค่าที่สูงเกินจริงเมื่อเทียบกับการซื้อขายของสัญญาใดสัญญาหนึ่ง ดังนั้นจึงยังจำเป็นต้องตรวจสอบปริมาณการซื้อขายต่อสัญญาและ open interest ก่อนที่จะกำหนดขนาดของคำสั่งซื้อขาย options
การอ่านค่า ADV แบบมืออาชีพ
นิสัย 3 ประการจะช่วยลดช่องว่างระหว่างการรู้ความหมายกับการนำไปใช้งานจริง ควรพิจารณา ADV ควบคู่กับ dollar ADV — ตารางแรกแสดงให้เห็นหุ้นสองตัวที่มีจำนวนหุ้นเกือบเท่ากัน แต่มีมูลค่าการซื้อขายต่างกันอย่างมาก ซึ่งมูลค่าการซื้อขายคือสิ่งที่คำสั่งซื้อขายให้ความสำคัญอย่างแท้จริง อย่าเพิ่งเชื่อถือค่า ADV ทันทีหลังจากเกิดเหตุการณ์สำคัญ — ข้อมูลจาก panel แสดงให้เห็นว่า ช่วงเวลาที่มีปริมาณการซื้อขายสูงเพียงช่วงเดียวสามารถทำให้ตัวหาร 57% เปลี่ยนแปลงไปในหนึ่งเดือน ซึ่งส่งผลให้ relative volume และ days to cover ลดลงตามกลไก จนกว่าปริมาณการซื้อขายที่พุ่งสูงขึ้นนั้นจะพ้นช่วงเวลาที่คำนวณ ตรวจสอบ ADV เทียบกับปฏิทิน — วันศุกร์ที่มีการหมดอายุสัญญา (expiration Fridays), วันที่มีการปรับสมดุลพอร์ต (rebalance days) และวันที่มีการเปลี่ยนแปลงดัชนี (index-change dates) จะทำให้ปริมาณการซื้อขายของทุกหลักทรัพย์เพิ่มขึ้นพร้อมกัน (โดยเฉพาะ witching days) ดังนั้น ปริมาณการซื้อขายที่สูงขึ้นทั้งตลาดจึงไม่ได้บ่งบอกถึงสถานการณ์เฉพาะของหุ้นตัวใดตัวหนึ่ง
คำถามที่พบบ่อยเกี่ยวกับปริมาณการซื้อขายเฉลี่ยต่อวัน
ปริมาณการซื้อขายเฉลี่ยต่อวันระดับใดที่ถือว่าดี?
จากการวัดค่าผ่านสัญลักษณ์ในตลาด US จำนวน 10864 ตัวอย่าง ตลอด 20 session ค่ามัธยฐานของมูลค่า ADV คือ $2.2M โดยมีหุ้น 3535 ตัวที่มีมูลค่าการซื้อขายเกิน $10M ต่อวัน และมีเพียง 130 ตัวเท่านั้นที่มีมูลค่าเกิน $1B สำหรับคำสั่งซื้อขายขนาดรายย่อย เกณฑ์ที่ควรพิจารณาคือมูลค่าเป็นดอลลาร์ ไม่ใช่จำนวนหุ้น โดยหุ้นในกลุ่มที่มีมูลค่าเกิน $10M จะสามารถซื้อขายได้โดยที่คำสั่งซื้อขายขนาดเล็กไม่ส่งผลกระทบต่อราคา
วิธีการคำนวณปริมาณการซื้อขายเฉลี่ยต่อวันทำอย่างไร?
ให้นำปริมาณหุ้นที่มีการซื้อขายรายวันในช่วงเวลาที่เลือกมาบวกกัน แล้วหารด้วยจำนวนวัน ตัวอย่างเช่น KO มีปริมาณการซื้อขายรวม 52.8M หุ้น ในช่วง 5 session ระหว่างวันที่ 6–10 กรกฎาคม 2026 เมื่อหารด้วยห้า จะได้ค่า ADV เท่ากับ 10.6M ส่วนการคำนวณ ADV แบบ 20 วัน จะใช้หลักการทางคณิตศาสตร์เดียวกันนี้กับจำนวน 20 session
การวัดค่า ADV ใช้ช่วงเวลาใด?
โดยทั่วไปนิยมใช้ 20 trading sessions (ประมาณหนึ่งเดือน) อย่างไรก็ตาม มีการใช้ช่วงเวลาแบบ 10, 30, 65 และ 90 วันเช่นกัน ซึ่งค่าเหล่านี้อาจมีความแตกต่างกันอย่างมากหลังจากเกิดเหตุการณ์ที่ทำให้ปริมาณการซื้อขายผันผวน ตัวอย่างเช่น ในวันที่ 2026-04-14 ค่า ADV แบบ 20 session ของ MU อยู่ที่ 45.6M ในขณะที่ค่า ADV แบบ 90 session อยู่ที่ 31.9M ควรตรวจสอบช่วงเวลาที่ใช้ก่อนนำข้อมูลจากแหล่งต่างๆ มาเปรียบเทียบกัน
ADV รวมปริมาณการซื้อขายช่วง premarket และ after-hours หรือไม่?
ขึ้นอยู่กับแหล่งที่มา โดยตัวเลขในหน้านี้แสดงเฉพาะช่วงเวลาทำการปกติเท่านั้น จากการวัดผลในช่วง 20 session เดียวกัน ปริมาณการซื้อขายในช่วง extended sessions คิดเป็น 18.3% ของปริมาณการซื้อขายทั้งหมดของ SPY, คิดเป็น 6.9% ของ AAPL และคิดเป็น 0.2% ของ CATO ซึ่งมีสภาพคล่องต่ำ โดยสามารถดูรายละเอียดการแบ่งช่วงเวลาได้ใน คู่มือการซื้อขายช่วง extended-hours
ADV วัดเป็นจำนวนหุ้นหรือมูลค่าดอลลาร์?
โดยดั้งเดิมจะวัดเป็นจำนวนหุ้น แต่การวัดด้วยมูลค่าดอลลาร์เป็นตัวชี้วัดสภาพคล่องที่ดีกว่าสำหรับหุ้นต่างๆ ในช่วง 20 session เดียวกัน MU และ AAPL มีปริมาณการซื้อขายเฉลี่ยต่อวันอยู่ที่ 42.01M และ 41.47M หุ้น ซึ่งมีจำนวนใกล้เคียงกันมาก แต่ค่า dollar ADV กลับอยู่ที่ $44.49B และ $12.24M ตามลำดับ แม้จำนวนหุ้นจะเท่ากัน แต่ขนาดของตลาดมีความแตกต่างกันอย่างมหาศาล
ตัวเลขทุกตัวมาจากการดึงข้อมูลผ่าน query ที่มีการจัดเก็บเวอร์ชันไว้ คุณสามารถขยายคำสั่ง SQL ภายใต้แผงควบคุมใดก็ได้ หรือคำนวณช่วงเวลาใดก็ได้สำหรับทุก ticker บน terminal ของ Strasmore