backtest กี่ไม้ถึงเชื่อได้? คำตอบสั้น ๆ คือ ตัวเลขไม้ดิบตอบคำถามนี้ไม่ได้เลย เพราะไม้ที่ทับซ้อนกันไม่ใช่หลักฐานอิสระ เราเคย backtest ขาย option ได้ 9,113 ไม้ ฟังดูหนักแน่นเหมือนหลักฐานชั้นดี แต่พอหักผลของไม้ทับซ้อนออก ขนาดตัวอย่างที่มีผลจริง (effective n) เหลือแค่ประมาณ 400 — น้อยจนสรุปไม่ได้ด้วยซ้ำว่าระบบนี้มี edge

บทความนี้เป็นบันทึกชันสูตรว่าตัวเลข 9,113 หลอกเราได้ยังไง และวิธีเช็ค sample size เทรดของตัวเองก่อนจะหลงเชื่อผลเทสสวย ๆ

ความเชื่อ “ยิ่งเยอะไม้ ยิ่งเชื่อได้” สัญญาอะไรกับเรา

ตำราสถิติเบื้องต้นสอนว่ายิ่ง n มาก ค่าเฉลี่ยยิ่งนิ่ง ช่วงความเชื่อมั่นยิ่งแคบ เทรดเดอร์เลยแปลต่อเองว่า backtest หลักพันไม้ = ผลเทสแม่น = เทรดจริงได้เลย

ตรรกะนี้มีเงื่อนไขซ่อนอยู่หนึ่งข้อที่คนชอบลืม: ตัวอย่างแต่ละตัวต้อง อิสระต่อกัน ถ้าไม่อิสระ n หลักพันอาจมีค่าเท่า n หลักร้อย และความมั่นใจที่เกินจริงนี่แหละคือประตูหลังของ overfitting — เรานึกว่ามีหลักฐานล้นมือ ทั้งที่จริงถือหลักฐานซ้ำ ๆ ชุดเดิม

เราเทสเรื่องนี้ยังไง

เคสตั้งต้นคือ backtest กลยุทธ์ขาย option ของเราเอง ซึ่งได้ผลเทสรวม 9,113 ไม้ จุดสำคัญคือโครงสร้างการเปิดไม้: ระบบเปิดไม้ใหม่ทุกวัน แต่แต่ละไม้ถือหลายวัน

แปลว่า ณ วันใดวันหนึ่ง มีไม้หลายไม้ถืออยู่พร้อมกัน และทุกไม้โดนตลาดวันเดียวกันกระแทกเหมือนกันหมด เราจึงคำนวณผลของ autocorrelation จากการทับซ้อนนี้ แล้วปรับ standard error ให้สะท้อนความจริง ไม่ใช่สูตร n ดิบตรง ๆ

ผลที่เจอ: 9,113 ไม้ที่จริง ๆ เหลือ 400

ตัวเลขค่าที่ได้
จำนวนไม้ดิบใน backtest9,113
standard error จริงพองขึ้น~4.8 เท่า
effective sample size (n_eff)~400
ช่วงความเชื่อมั่นของกำไรต่อไม้คร่อมศูนย์

อ่านตารางนี้แล้วขำแห้ง ๆ ได้เลย: หลักฐาน “เก้าพันไม้” ที่เราภูมิใจ หดเหลือหลักสี่ร้อยเมื่อนับเฉพาะส่วนที่อิสระจริง และพอ standard error พองขึ้นเกือบ 5 เท่า ช่วงความเชื่อมั่นของกำไรต่อไม้ก็กว้างจนคร่อมศูนย์

คร่อมศูนย์แปลว่าอะไร? แปลว่าข้อมูลเท่าที่มี ยังแยกไม่ออกระหว่าง “ระบบมี edge” กับ “ระบบเสมอตัวแล้วฟลุกช่วงที่เทส” — ทั้งที่ n ดิบดูมโหฬารขนาดนั้น

ทำไมไม้ทับซ้อนถึงหลอกเราได้

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

สูตร standard error ปกติหาร √n โดยเชื่อว่าทุกไม้อิสระ พอไม้ไม่อิสระ ตัวหารนั้นโกหก ความแปรปรวนจริงของค่าเฉลี่ยสูงกว่าที่สูตรบอก — ในเคสเราสูงกว่า ~4.8 เท่า ปัญหาตระกูลเดียวกับการคูณ √252 แปลง Sharpe แบบมักง่าย คือสูตรถูก แต่สมมติฐานเบื้องหลังตายไปแล้ว

ผลข้างเคียงที่อันตรายกว่าคือ มันเปิดทางให้ overfitting เนียน ๆ: เมื่อเรามั่นใจเกินจริงว่า “n เยอะ ผลนี้ไม่ฟลุกแน่” เราก็หยุดตั้งคำถาม ทั้งที่ควรเอาผลไปเทียบกับเส้นฐานแบบสุ่มก่อนเสมอ และหลาย anomaly ที่เคยดังก็ตายมาแล้วด้วยเหตุผลทำนองนี้ อย่างที่เราชำแหละไว้ในเคส PEAD

บทเรียนที่เอาไปใช้ได้

  • ไม้ที่ทับซ้อนกันไม่ใช่หลักฐานอิสระ — ระบบถือหลายวันแต่เปิดทุกวัน คือโรงงานผลิตไม้ซ้ำซ้อนชั้นดี
  • ถามหา n_eff ไม่ใช่ n — ก่อนเชื่อ backtest ใคร (รวมถึงของตัวเอง) ถามว่าหักการทับซ้อนแล้วเหลือหลักฐานอิสระกี่ชิ้น
  • CI คร่อมศูนย์ = “ยังไม่รู้” ไม่ใช่ “กำไรน้อย” — สองคำนี้นำไปสู่การตัดสินใจคนละโลก อย่างแรกคือหาข้อมูลเพิ่ม อย่างหลังคือหลอกตัวเองว่าพร้อมเทรด
  • ความมั่นใจเกินจริงคือปุ๋ยของ overfitting — n ดิบก้อนโตทำให้เราเลิกสงสัยเร็วเกินไป

เทส sample size เทรดของตัวเองได้ยังไง

  1. นับก่อนว่าระบบของคุณถือไม้เฉลี่ยกี่วัน และเปิดไม้ถี่แค่ไหน — ถ้าถือนานกว่าความถี่ที่เปิด แปลว่าไม้ทับซ้อนแน่นอน
  2. เช็ค autocorrelation ของผลตอบแทนรายไม้ที่เรียงตามเวลา ถ้าไม้ข้างเคียงสัมพันธ์กันชัด n ดิบของคุณโกหกอยู่
  3. ปรับ standard error ให้สะท้อนการทับซ้อน (เช่นวิธีตระกูล Newey–West หรือ block bootstrap) แล้วคำนวณ n_eff ออกมาดูตรง ๆ
  4. สร้างช่วงความเชื่อมั่นของกำไรต่อไม้จาก SE ที่ปรับแล้ว — ถ้าคร่อมศูนย์ ให้บันทึกว่า “ยังสรุปไม่ได้” ไม่ใช่ปัดเป็น “มี edge นิดหน่อย”
  5. ถ้าอยากได้หลักฐานเพิ่ม ให้หาข้อมูลช่วงเวลาอิสระเพิ่ม ไม่ใช่ซอยไม้ให้ถี่ขึ้นในช่วงเดิม — อย่างหลังเพิ่มแต่ n ดิบ ไม่เพิ่ม n_eff

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