NORMSTrading Platform
← กลับคลังความรู้

Point-in-time
ทำไม "แอบดูอนาคต" ถึงทำให้ backtest โกหก

ชั้น 3 · คิดแบบ quant · อ่าน ~6 นาที · บั๊กข้อมูลที่ไม่ทำให้ระบบพัง — มันทำให้ระบบมั่นใจในสิ่งที่ผิด
สมมติหลิวออกแบบระบบที่ "ทำกำไรปีแรกอย่างสวยงาม" — แต่พอเอาไปใช้จริง ผลห่างกันคนละโลก
บางทีปัญหาไม่ใช่กฎเทรด แต่คือ ระบบแอบดูอนาคตตอน backtest โดยที่เราไม่รู้ตัว

1. "แอบดูอนาคต" หมายความว่าอะไรกันแน่

Look-ahead bias คือตอน backtest ระบบใช้ข้อมูลที่ ณ เวลานั้นยังไม่มีอยู่ในโลกจริง — ฟังดูเหมือนข้อผิดพลาดงี่เง่า แต่มันซ่อนตัวในรูปแบบที่น่ากลัวมาก เพราะโค้ดรันได้ ไม่มี error ผลออกมาสวย และเราก็ดีใจจนลืมตรวจสอบ

ตัวอย่างที่เจอบ่อยสุด:

แท่งเทียนวันจันทร์ยัง "ไม่ปิด" แต่ระบบใช้ราคาปิดของวันจันทร์
เพื่อ "ตัดสินใจเข้าไม้" ระหว่างวันจันทร์นั้นเอง

→ โลกจริง: ราคาปิดวันจันทร์รู้ได้ก็ต่อเมื่อวันจันทร์ สิ้นสุดแล้ว
→ backtest ปลอม: ใช้ราคาปิดจันทร์ เข้าไม้ "ระหว่าง" วันจันทร์ = แอบดูเฉลย

ระบบที่เจอ look-ahead จะเห็น "ผลดีผิดมนุษย์แบบไม่มีเหตุผล" — ถ้า backtest แรกออกมาเทพทันที ให้สงสัยบาปนี้ก่อนดีใจ

2. สามรูปแบบที่ซ่อนตัวเนียนที่สุด

รูปแบบที่ 1 — Indicator ที่คำนวณจากแท่งที่ยังไม่ปิด
RSI, ATR หรือ MA ที่ใช้ "แท่งปัจจุบัน" เข้าคำนวณ แล้วให้สัญญาณระหว่างแท่งนั้นเลย — ค่า indicator จะ เปลี่ยนไปจนกว่าแท่งจะปิด สัญญาณที่เห็นใน backtest คือค่า ณ ตอนปิดจริง ไม่ใช่ค่าที่จะเห็นตอนตัดสินใจจริง
รูปแบบที่ 2 — ตัวเลขเศรษฐกิจฉบับ "แก้ไขแล้ว"
GDP ไตรมาส 1 ที่ประกาศวันที่ 30 เมษา = ตัวเลขเบื้องต้น (first release)
แต่ตัวเลข GDP ที่เห็นใน database วันนี้ คือฉบับแก้ไขครั้งที่ 3 ที่ออกมา 3 เดือนหลังจากนั้น
ใช้ตัวเลข "แก้แล้ว" ย้อนหลัง = แอบดูเฉลยที่ยังไม่ออก
รูปแบบที่ 3 — Timezone เหลื่อมกัน
ข้อมูลทอง (GMT+0) + ข้อมูลดอลลาร์ (GMT-5) join กันโดยไม่ normalize
"วันเดียวกัน" ของทั้งสองฝั่งอาจห่างกัน 5 ชั่วโมง
ระบบจะเห็น "ราคาทองพรุ่งนี้" คู่กับ "ดอลลาร์วันนี้" โดยไม่รู้ตัว

3. ราคา Adjusted — กับดักที่คนไม่คาดคิด

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

ตัวอย่าง:
หุ้น A แตกพาร์ 2:1 เมื่อปี 2022 — ราคาก่อนแตกพาร์ที่เห็นในตลาดวันนั้น = 200 บาท
แต่ข้อมูล adjusted ในปี 2026 บันทึกว่าวันนั้นราคา = 100 บาท (ปรับแล้ว)

→ แนวรับ/ต้านที่คนวิเคราะห์ไว้ว่า "200 บาท" ในชาร์ต adjusted จะ ไม่มีอยู่จริง
→ breakout signal จากข้อมูล adjusted คือ breakout ที่ ไม่เคยเกิด ในโลกจริง

ข่าวดีคือ forex ทอง และ crypto ของเราไม่มีปัญหานี้ — ไม่มีปันผล ไม่มีแตกพาร์ · แต่ถ้าวันหนึ่งขยายไปหุ้นรายตัว ต้องจำเรื่องนี้ไว้เสมอ

4. วิธีป้องกันที่ระบบเราใช้จริง

กฎเหล็กเดียวที่ป้องกันได้สุดโต่ง:

ตัดสินใจที่ข้อมูลถึงแท่ง t · execute ที่ open ของ t+1

แปลว่า: รอแท่งจันทร์ ปิดสนิท ก่อน แล้วค่อยตั้งออเดอร์เข้าที่ open วันอังคาร
แบบนี้ไม่มีทางแอบดูเฉลย เพราะเราใช้แค่ข้อมูลที่ปิดแล้วแน่นอนในโลกจริง

ระบบ R2/R3 ของเราใช้ shift มาตรฐานนี้ทุกไม้ — และเขียนแถลงไว้ในรายงานทุกครั้ง

เช็คเพิ่มเติมที่ควรทำหลังเขียนโค้ด backtest ใหม่ทุกครั้ง: สุ่มหยิบ 5-10 วัน เปรียบเทียบสัญญาณกับชาร์ตจริงด้วยตา — ถ้าสัญญาณ "ล้ำหน้า" ชาร์ตแม้แต่ก้าวเดียว = มีบั๊กซ่อนอยู่

5. อาการของระบบที่โดน Look-ahead

• ผล backtest ดีผิดปกติตั้งแต่รอบแรก — winrate เกิน 70-80% โดยไม่มีเหตุผล
• เส้น equity เนียนเกือบตลอด ไม่มีช่วงขาดทุนหนักๆ เลย
• ระบบ "รู้" ทิศทางใหญ่ได้เกือบทุกครั้ง แทบไม่เคยผิด
• พอเอาไปเทรดจริงหรือเทรดกระดาษ ผลต่างจาก backtest คนละโลก

อาการสุดท้ายคือที่แพงที่สุด — เพราะใช้เงินจริงทดสอบไปแล้ว

6. เชื่อมกับระบบเราในห้องผลสอบ

ทุกกลยุทธ์ที่ผ่านการทดสอบใน ห้อง Lab ของเราผ่านกฎ t/t+1 นี้ทั้งหมด — spring ที่เห็น +0.045R หลังต้นทุน คือตัวเลขที่คำนวณโดยไม่มีการแอบดูอนาคตแม้แต่นิดเดียว

ถ้าอยากเช็คตัวเองว่าระบบที่อ่านจากที่ไหนก็ตามโดน look-ahead ไหม — ถามคำเดียวพอ: "สัญญาณนี้ใช้ข้อมูลอะไรบ้าง และข้อมูลพวกนั้นรู้ได้จริงเมื่อไหร่ในโลกจริง?"

จำแค่นี้พอ: Look-ahead = ใช้ข้อมูลที่ยังไม่เกิด · ยาแก้ = ตัดสินใจที่ t ออเดอร์ที่ t+1 · อาการ = backtest เทพตั้งแต่รอบแรก · ระบบเราใช้กฎนี้ทุกการทดสอบแล้ว
หน้าถัดไปในชั้น 3: Survivorship bias — กับดักที่ทำให้เราเห็นแต่ผู้ชนะ
← กลับคลังความรู้