1 กันยายน 2026 · การดำเนินการของบริษัท

ข้อมูลที่ปรับตามการแตกพาร์ แกะดูทีละส่วน: การแตกพาร์ 10 ต่อ 1 ของ NVDA เปลี่ยนทุกรายการเบื้องหลังอย่างไร

ข้อมูลที่ปรับตามการแตกพาร์ แกะดูทีละส่วน: การแตกพาร์ 10 ต่อ 1 ของ NVDA เปลี่ยนทุกรายการเบื้องหลังอย่างไร

นี่คือตัวอย่างข้อมูล 1 แถวจากไฟล์หุ้นรายวัน NVDA วันศุกร์ที่ 7 มิถุนายน 2024 ซึ่งเป็นวันซื้อขายสุดท้ายก่อนการแตกพาร์ 10 ต่อ 1 มีผล

คอลัมน์ ค่า
วันที่ 2024-06-07
ราคาปิด 1208.88
ปริมาณซื้อขาย 42,800,000 (ปัดเศษ)
ปัจจัยการแตกพาร์ 1.0
เงินปันผล 0.00
ราคาปิดที่ปรับแล้ว 120.8781

ฉันจงใจไม่นำคอลัมน์ OHLC มาแสดงในมุมมองนี้ เดี๋ยวจะกลับมาพูดถึงช่วงท้าย และคอลัมน์เหล่านี้แหละที่ทำให้เกิดปัญหาแบบเงียบ ๆ

จุดที่น่าสนใจทั้งหมดของแถวนี้อยู่ในช่องว่างระหว่างคอลัมน์ที่ 2 กับคอลัมน์ที่ 6 ราคาซื้อขายในตลาดวันที่ 7 มิถุนายนอยู่ที่ 1208.88 ไม่มีใครซื้อขายที่ราคานั้นได้อีกแล้ว เพราะหน่วยหุ้นที่ราคานั้นอ้างถึงไม่มีอยู่อีกต่อไป ส่วน 120.8781 เป็นค่าที่คำนวณย้อนกลับขึ้นมา และไม่ได้มาจากการเอา 1208.88 หารด้วย 10 ตรง ๆ มาดูกันทีละคอลัมน์

10:1ตัวหารที่ใช้กับข้อมูลทุกแถวก่อนหน้า
0.99991789ปัจจัยเงินปันผลที่ใส่ไว้ 1 วันถัดมา
$90ค่าคอมมิชชันสมมติที่เกิดขึ้นต่อการซื้อขายไปกลับ 1 รอบ
5.6ppผลตอบแทนรายปีที่ตัวหารสร้างขึ้นมาเอง

วันที่: 2024-06-07 และอีก 2 วันที่สำคัญกว่า

การแตกพาร์ประกาศเมื่อวันที่ 22 พฤษภาคม 2024 พร้อมกับการรายงานผลประกอบการ วันขึ้นทะเบียนผู้ถือหุ้นคือ 6 มิถุนายน และเริ่มซื้อขายโดยปรับตามการแตกพาร์ในวันจันทร์ที่ 10 มิถุนายน มีทั้งหมด 3 วัน และคอลัมน์ split_factor ของผู้ให้บริการข้อมูลของคุณจะอ้างอิงเพียงวันเดียว ซึ่งโดยมากคือวันแรกที่ซื้อขายหลังปรับตามการแตกพาร์ การเลื่อนไป 1 วันคือบั๊กจากการดำเนินการของบริษัทที่ฉันเจอบ่อยที่สุด และมองไม่เห็นจากภาพรวม: เส้นทุนของคุณจะร่วงลง 90% หรือพุ่งขึ้น 900% ภายในวันเดียว ซึ่งแทบไม่สะท้อนในค่า Sharpe ที่คำนวณจาก 2,000 วัน แต่ส่งผลเต็ม ๆ ต่อการขาดทุนสูงสุดหรือกฎ stop-loss

วันที่ของเงินปันผลก็มีปัญหาในแบบของมันเอง และในปี 2024 ก็มีการเปลี่ยนแปลงที่กระทบทุกคน เงินปันผลรายไตรมาสหลังแตกพาร์ของ NVDA ที่ $0.01 มีวันขึ้นทะเบียนผู้ถือหุ้นเป็นวันที่ 11 มิถุนายน สหรัฐฯ เปลี่ยนรอบชำระราคาเป็น T+1 เมื่อวันที่ 28 พฤษภาคม 2024 ซึ่งหมายความว่าวันขึ้นเครื่องหมาย XD กับวันขึ้นทะเบียนผู้ถือหุ้นเป็นวันเดียวกันแล้ว ตัวโหลดใดก็ตามที่คำนวณวันขึ้นเครื่องหมาย XD ด้วยสูตร "วันขึ้นทะเบียนผู้ถือหุ้นลบวันทำการ 1 วัน" ซึ่งใช้ได้ถูกต้องมาหลายสิบปี จะเริ่มปรับเงินปันผลล่วงหน้าไป 1 วันโดยไม่มีสัญญาณเตือน ตั้งแต่เดือนมิถุนายน 2024 ไม่มีอะไรแจ้งข้อผิดพลาด ปัจจัยปรับแค่ไปตกอยู่ผิดแถว

ความผิดพลาดของโค้ดจัดการการดำเนินการของบริษัทไม่เคยเกิดเป็นข้อยกเว้น แต่เป็นตัวเลขที่คลาดไป 1 วันและดูสมเหตุสมผลทุกอย่าง

ราคาปิด: 1208.88 — ราคาที่ไม่มีอยู่ในไฟล์

นี่คือราคาที่เกิดขึ้นจริงในตลาด และในระบบวิจัยส่วนใหญ่จะมีอยู่แค่ในคอลัมน์ที่ไม่มีใครอ่าน สัญญาณจะคำนวณจาก adj_close และกฎใดก็ตามที่อ้างอิงระดับราคาต่อหุ้นเป็นดอลลาร์ ตอนนี้ก็อ้างอิงตัวเลขที่ผู้ร่วมตลาดไม่เคยเห็นจริง

การที่ NVDA ไต่เข้าใกล้ $1,000 ในฤดูใบไม้ผลิปี 2024 เป็นเหตุการณ์จริงที่มีคำสั่งซื้อขายจริงรองรับ ทั้งแรงดึงดูดของเลขกลม ราคาใช้สิทธิของออปชันที่กระจุกตัวแถว 950 และ 1000 และความเสี่ยงจากข่าวในทุกครั้งที่ราคาขยับเข้าใกล้ ในข้อมูลที่ปรับแล้ว เหตุการณ์ทั้งหมดเกิดขึ้นที่ $100 หากคุณกำลังทดสอบพฤติกรรมตามระดับราคาทางจิตวิทยา ตรรกะเติมช่องว่างราคาใกล้เลขกลม หรือฟีเจอร์วัดความใกล้กับราคาใช้สิทธิ คุณกำลังทดสอบกับอนุกรมราคาที่ถูกปรับสเกลด้วยเหตุการณ์ซึ่งตอนนั้นยังไม่เกิดขึ้น

หลักการเดียวกันนี้ใช้กับตัวกรองจักรวาลหุ้นด้วย "ตัดหุ้นที่ราคาต่ำกว่า $5 ออก" เป็นตัวแทนที่สมเหตุสมผลของปัญหาโครงสร้างตลาดที่มักเกิดร่วมกัน เช่น ส่วนต่างราคาเสนอซื้อขายสัมพัทธ์ที่กว้าง กฎว่าด้วยการใช้หุ้นเป็นหลักประกัน และช่วงราคาขั้นต่ำ หากใช้กับประวัติราคาที่ปรับแล้ว คุณจะตัดบริษัทออกในช่วงที่เคยซื้อขายกันที่ $30 แล้วค่อย reverse split ภายหลัง หากใช้เงื่อนไข "ราคาสูงกว่า $500" ก็จะตัด NVDA ออกจากทุกปีก่อนเดือนมิถุนายน 2024 ไปโดยไม่รู้ตัว ควรใช้ราคาซื้อขายที่ไม่ปรับกับตัวกรองราคา เท่านั้น

ปัจจัยการแตกพาร์: 1.0 — และค่า 0.1 ในแถวถัดไป

ปัจจัยนี้เป็นผลคูณสะสมที่ไล่ย้อนจากวันนี้ ทุกแถวก่อนวันที่ 10 มิถุนายน 2024 จะมีค่า 0.1 จากการแตกพาร์ครั้งนี้ คูณกับค่า 0.25 จากการแตกพาร์ 4 ต่อ 1 ในปี 2021 และคูณกับปัจจัยจากเหตุการณ์ก่อนหน้านั้น ประวัติราคาของ NVDA ก่อนปี 2021 ถูกปรับสเกลด้วย 0.025 ดังนั้นแท่งราคาที่เคยซื้อขายกันที่ $200 ในปี 2019 จึงแสดงเป็น $5.00

มี 2 ผลที่ควรจำไว้ ข้อแรก ประวัติราคาที่ปรับแล้วเปลี่ยนแปลงทุกครั้งที่มีการดำเนินการของบริษัทครั้งใหม่ การทดสอบย้อนหลังที่คุณรันในเดือนพฤษภาคม 2024 กับการรันวันนี้จะให้ตัวเลขต่างกัน แม้ใช้โค้ดชุดเดียวกันกับช่วงวันเดียวกัน และหากคุณแคชฟีเจอร์โดยใช้สัญลักษณ์และวันที่เป็นคีย์ แต่ไม่มีเลขเวอร์ชันข้อมูล ตอนนี้แคชก็ปะปนข้อมูลจาก 2 สเกลเข้าด้วยกัน เราใส่ยุคของการปรับข้อมูลไว้ในคีย์ฟีเจอร์ด้วยเหตุผลนี้เอง ใช้เวลาช่วงบ่ายที่ชวนสับสนอยู่ 1 รอบกว่าจะรู้ตัว

ข้อสอง เมื่อปรับสเกลเหลือ 0.025 หุ้นที่เคยขยับทีละ $0.01 จะขยับทีละ $0.00025 ตรรกะปัดเศษตามช่วงราคาขั้นต่ำ การเปรียบเทียบว่า "ทำจุดสูงสุดใหม่หรือยัง" และการตรวจสอบความเท่ากันของเลขทศนิยม ทั้งหมดกำลังทำงานในระดับที่ละเอียดกว่าความละเอียดที่ตลาดมีจริงมาก

เงินปันผล: 0.01 — ตัวเลขที่ทำให้ราคาทุกค่าก่อนหน้านั้นหลุดจากช่วงราคาทีละเพนนี

1 เซนต์ ดูเหมือนสัญญาณรบกวน แต่เป็นสาเหตุที่ทำให้ adj_close ได้ค่า 120.8781 แทนที่จะเป็น 120.888 แบบกลม ๆ

ราคาปิดวันที่ 10 มิถุนายนอยู่ที่ 121.79 ปัจจัยเงินปันผลคำนวณจาก (121.79 − 0.01) / 121.79 = 0.99991789 ปัจจัยนี้คูณกับราคาทุกค่าก่อนวันที่ 11 มิถุนายน ดังนั้นราคา 120.888 ที่ปรับตามการแตกพาร์จึงกลายเป็น 120.878074 ค่านี้เล็กน้อย แต่คงอยู่ถาวร และถูกนำไปคูณซ้ำทุกครั้งในวันขึ้นเครื่องหมาย XD ราว 60 กว่าวันตลอดประวัติของ NVDA สิ่งสำคัญคือผลคูณสะสม เพราะเมื่อย้อนดูถึงปี 2015 คุณกำลังดูราคาที่ถูกคูณด้วยปัจจัยที่ดูไม่ค่อยเป็นเหตุเป็นผลหลายสิบค่า ราคาในอดีตที่ปรับแล้วไม่มีค่าไหนอยู่บนช่วงราคาเพิ่มทีละเพนนีอีกต่อไป

นั่นหมายความว่าการเปรียบเทียบ == กับระดับราคากลม ๆ ทุกครั้งให้ผลผิด การตรวจสอบว่า "ราคาแตะราคา limit หรือยัง" ต้องมีค่าคลาดเคลื่อนเผื่อไว้ และ OHLC ที่คำนวณย้อนกลับมาก็ไม่เป็นไปตามเงื่อนไข low ≤ open ≤ high อีกต่อไป หากปัดเศษแบบตรง ๆ ให้เหลือ 4 ตำแหน่ง นอกจากนี้ยังหมายความว่า adj_close เป็นอนุกรมผลตอบแทนรวมเงินปันผล ขณะที่ close เป็นอนุกรมผลตอบแทนจากราคา และหากคำนวณผลตอบแทนจากอนุกรมหนึ่งแล้วคำนวณการขาดทุนสูงสุดจากอีกอนุกรม คุณก็เอานิยามของสิ่งที่เกิดขึ้น 2 แบบมาปะปนกัน

ปริมาณซื้อขาย: 42,800,000 — ตัวหารที่แต่ละเจ้าปรับไม่เหมือนกัน

ต้องคูณปริมาณหุ้นซื้อขายด้วย 10 เพื่อให้เทียบกับช่วงหลังแตกพาร์ได้ ผู้ให้บริการข้อมูลบางรายทำ บางรายไม่ทำ บางรายปรับ OHLC แต่ปล่อยปริมาณซื้อขายไว้ตามเดิม ซึ่งเป็นตัวเลือกที่แย่ที่สุด เพราะไฟล์ดูสอดคล้องกันภายในจนกว่าคุณจะเอาราคาคูณกับปริมาณซื้อขาย

ทางเลือกที่เหมาะสมคือเลิกใช้ปริมาณหุ้นซื้อขายเป็นฟีเจอร์ แล้วใช้มูลค่าซื้อขายเป็นดอลลาร์ ซึ่งไม่เปลี่ยนตามการแตกพาร์โดยธรรมชาติ ตัวกรองสภาพคล่องจากมูลค่าซื้อขายเฉลี่ย 20 วันไม่ต้องมีตรรกะปรับข้อมูลเลย และไม่อาจเสียหายจากการดำเนินการของบริษัท ความคงเดิมของฟีเจอร์ดีกว่าโค้ดปรับข้อมูลที่ถูกต้อง เพราะโค้ดที่ถูกต้องเป็นสิ่งที่คุณต้องคอยทำให้ถูกอยู่เสมอ

รูปแบบไฟล์จากผู้ให้บริการ 3 แบบ กับความผิดพลาด 3 แบบ

สิ่งที่ส่งมา สิ่งที่พัง
ปรับเฉพาะราคาปิด แต่ OHLC เป็นค่าดิบ การคำนวณช่องว่างราคาและตรรกะระหว่างแท่งใช้ข้อมูลจาก 2 สเกลราคา
ปรับ OHLC แต่ปริมาณซื้อขายเป็นค่าดิบ มูลค่าซื้อขายคลาดเคลื่อนตามอัตราส่วนการแตกพาร์ ตัวกรอง ADV จึงทำงานผิดพลาด
OHLCV ดิบพร้อมคอลัมน์ปัจจัยปรับ ไม่มีอะไรพังหากปรับอย่างถูกต้อง แต่พังหมดหากใส่ปัจจัยในแถวผิด

คอลัมน์ที่ไม่มีในนี้: adj_open, adj_high, adj_low

ทีนี้ใส่ OHLC กลับเข้าไป หากฟีดปรับเฉพาะราคาปิด แต่กลยุทธ์คำนวณช่องว่างข้ามคืนเป็น open / prev_adj_close − 1 ในวันที่ 10 มิถุนายน 2024 ก็จะคำนวณ 120.37 / 120.8781 − 1 ซึ่งเป็นตัวเลขที่ใช้ได้ อยู่ที่ราว −0.4% แต่หากรันโค้ดชุดเดียวกันย้อนหลังไปถึงวันที่ 7 มิถุนายน 2024 ก็จะนำราคาเปิดจากไฟล์ดิบ (ราว 1207) ไปเทียบกับราคาปิดที่ปรับด้วย 0.025 จากการแตกพาร์ครั้งก่อน ๆ แล้วได้ช่องว่างราคาหลายพันเปอร์เซ็นต์

การนำคอลัมน์ดิบมาปนกับคอลัมน์ที่ปรับแล้ว คือการคำนวณข้ามระบบพิกัด 2 แบบ ตอนนี้ฉันให้ตัวโหลดตรวจยืนยันการอ่านข้อมูลที่ใช้การปรับคนละแบบ แทนที่จะให้ผู้วิจัยจำเอง เพราะคนทำวิจัยจำไม่ได้แน่ รวมถึงฉันด้วย

สิ่งที่ไม่มีคอลัมน์ไหนบอกได้: คุณจะซื้อหุ้นจริงได้กี่หุ้น

นี่คือจุดที่ทำให้เงินจริงหายไปในแบบจำลองต้นทุนของการทดสอบย้อนหลัง และเป็นเหตุผลที่ฉันเขียนเรื่องการแตกพาร์หุ้นขึ้นมา

ค่าคอมมิชชันหุ้นสหรัฐฯ มักคิดเป็นรายหุ้น สมมติว่าคิด $0.005 โดยมีขั้นต่ำ $1.00 ต่อคำสั่ง ซึ่งเป็นระดับค่าธรรมเนียมคงที่ที่พบได้ทั่วไปในโบรกเกอร์รายย่อย ทีนี้ลองทดสอบย้อนหลังด้วยสถานะ NVDA มูลค่า $400,000 เมื่อ 1 ปีก่อนการแตกพาร์ ตอนนั้นราคาดิบอยู่ใกล้ $400 แต่ราคาในข้อมูลที่ปรับแล้วแสดงเป็น $40

จำนวนหุ้น ค่าคอมมิชชัน
สิ่งที่เกิดขึ้นจริง (ราคาดิบ $400) 1,000 $5.00
สิ่งที่การทดสอบย้อนหลังเห็น (ราคาที่ปรับแล้ว $40) 10,000 $50.00

มูลค่าการลงทุนเท่ากัน การซื้อขายเดียวกัน แต่ต้นทุนในแบบจำลองสูงขึ้น 10 เท่า นั่นคือตัวเลขสมมติ $45 ต่อขา รวม $90 ต่อการซื้อขายไปกลับ 1 รอบ และกลยุทธ์ที่หมุนเวียนพอร์ตทุกวันจะมีต้นทุนราว $22,000 ต่อปีที่ไม่เคยเกิดขึ้นจริง สำหรับพอร์ตมูลค่า $400k คิดเป็นผลตอบแทนรายปีที่หายไป 5.6 จุดเปอร์เซ็นต์ ซึ่งตัวหารสร้างขึ้นมาทั้งหมด กรณีนี้ทำให้ผลดูแย่กว่าความจริง ซึ่งยังพอรับมือได้

reverse split ทำให้เกิดผลในทิศทางตรงกันข้าม และเป็นทิศทางที่อันตราย การ reverse split 1 ต่อ 10 หมายความว่าประวัติราคาที่ปรับแล้วแสดงราคาให้สูงขึ้น 10 เท่า และจำนวนหุ้นให้ลดลง 10 เท่า เมื่อเทียบกับสิ่งที่คุณจะซื้อขายจริง แบบจำลองต้นทุนจะหารค่าคอมมิชชันต่อหุ้นด้วย 10 ไปอย่างเงียบ ๆ ในจักรวาลหุ้นที่ reverse split เกิดขึ้นบ่อย มักเป็นหุ้นขนาดเล็ก ราคาต่ำกว่า $5 และมีส่วนต่างราคาเสนอซื้อขายกว้าง ซึ่งค่าธรรมเนียมต่อหุ้นเป็นรายการต้นทุนที่ใหญ่ที่สุด แบบจำลองจึงทำให้หุ้นที่ควรถูกลงโทษดูดีเกินจริงพอดี

วิธีแก้ตรงไปตรงมาและต้องทำในโครงสร้างระบบ: กำหนดขนาดสถานะเป็นมูลค่าเงิน แปลงเป็นจำนวนหุ้นด้วยราคาที่ไม่ปรับของวันนั้น แล้วคิดค่าธรรมเนียมต่อหุ้นจากจำนวนดังกล่าว เก็บคอลัมน์ราคาดิบไว้ในตัวโหลดตลอดไป ไม่ใช่เพื่อใช้ตรวจสอบย้อนหลัง แต่เป็นข้อมูลป้อนเข้าของระบบจับคู่คำสั่งซื้อขายโดยตรง

  1. สัญญาณและผลตอบแทน: อนุกรมที่ปรับแล้ว
  2. จำนวนหุ้น ค่าธรรมเนียมต่อหุ้น การปัดเศษตามช่วงราคา และตัวกรองระดับราคา: อนุกรมที่ไม่ปรับ
  3. สภาพคล่องและความสามารถรองรับคำสั่งซื้อขาย: ใช้มูลค่าซื้อขาย ซึ่งไม่ต้องใช้อานุกรมทั้ง 2 แบบ

6 คอลัมน์ 1 แถว และการดำเนินการของบริษัทที่ค่อนข้างธรรมดา ซึ่งประกาศล่วงหน้า 3 สัปดาห์และไม่มีใครประหลาดใจ ตลาดจัดการเรื่องนี้เสร็จภายในเช้าวันเดียว แต่การสร้างข้อมูลนั้นกลับมาให้ถูกต้องในระบบวิจัยยากกว่ามาก และสัญญาณที่บอกว่าระบบยังทำไม่ได้ มักไม่ใช่ข้อความแจ้งข้อผิดพลาด

การดำเนินการของบริษัทการปรับตามการแตกพาร์หุ้นสหรัฐฯวิศวกรรมข้อมูลการทดสอบย้อนหลัง
แชร์XLinkedInFacebookRedditHacker NewsWhatsAppTelegramEmail
← บทความทั้งหมด