⚠️ บันทึกการวิจัยและการเทรดส่วนตัว — ไม่ใช่คำแนะนำการลงทุน ผู้เขียนไม่ได้ให้บริการที่ปรึกษาการลงทุนที่มีใบอนุญาต
เมื่อผมเริ่มเปรียบเทียบระบบเทรดเวอร์ชันต่างๆ ของตัวเอง ผมทำผิดพลาดที่ใช้เวลาหลายเดือนกว่าจะจับได้ ผมจะรัน backtest สองชุด ดูสถิติสรุป แล้วสรุปว่าเวอร์ชันหนึ่งดีกว่าอีกเวอร์ชัน ตัวเลขสนับสนุนมัน การวิเคราะห์ดูสะอาด
ปัญหา: backtest ทั้งสองครอบคลุมช่วงเวลาที่ต่างกัน
Setup ที่ดูชัดเจนจนกว่าคุณจะอยู่ในนั้น
สมมติคุณทดสอบ System A ในปี 2561-2566 และได้ Sharpe 0.85 จากนั้นรัน System B ในปี 2563-2568 และได้ Sharpe 0.72 คุณสรุปว่า System A ดีกว่า
แต่คุณไม่ได้เปรียบเทียบสิ่งเดียวกัน ช่วงของ System A รวมปี 2561-2562 สองปีของตลาดที่ส่วนใหญ่เป็น trending ช่วงของ System B รวมปี 2565-2566 ซึ่งรวม bear market ที่มีนัยสำคัญในหุ้น growth Market regime ต่างกัน การเปรียบเทียบที่ยุติธรรมต้องให้ทั้งสองระบบรันบนวันที่เดียวกัน
ฟังดูชัดเจนเมื่อพูดตรงๆ ในทางปฏิบัติมันพลาดได้ง่าย
เหตุผล: walk-forward backtests มีความซับซ้อน มี start dates, end dates, lookback periods, training windows, out-of-sample windows เมื่อคุณกำลัง iterate ระบบ — ปรับ parameter ที่นี่ เพิ่ม filter ที่นั่น — คุณมักจะแค่รัน test อีกครั้งและดู Sharpe ใหม่ ถ้า date range ที่อยู่เบื้องหลังเลื่อนเพราะคุณเปลี่ยน data source, อัปเดตไฟล์ราคา, หรือปรับ minimum lookback คุณกำลังเปรียบเทียบสิ่งที่ต่างกัน
สิ่งที่ผมพบเมื่อตรวจสอบ
ผมรัน 6-window comparison ของ system variants สองตัว (2563-2568, 6 out-of-sample windows แยกกัน) สถิติสรุปแสดง version 2 เหนือกว่า version 1 ด้วย Sharpe 0.12 ผมกำลังจะ adopt version 2
แล้วผมตรวจสอบ metadata ของ backtest แต่ละชุด: start date, end date, จำนวน windows ที่เสร็จสมบูรณ์, จำนวน trades ทั้งหมดต่อ window
backtest มี start dates ต่างกันเพราะ variant หนึ่งต้องการ warmup 50 bars เพิ่มสำหรับ indicator ใหม่ window แรกใน version 2 เริ่มช้ากว่า version 1 2.5 เดือน ความต่าง 2.5 เดือนนั้นบังเอิญยกเว้นช่วงขาดทุนในช่วงปลายปี 2563 ที่ version 1 จับได้ การเปรียบเทียบมีข้อบกพร่อง
เมื่อผม align ทั้งสอง tests ให้ใช้ start และ end date เดียวกัน (ตัด warmup period ต่างกัน) ข้อได้เปรียบของ version 2 หายไป ความต่าง Sharpe จาก 0.12 ลดเหลือ 0.02 — ไม่สามารถแยกแยะทางสถิติได้
ทำไม Walk-Forward Comparisons จึงเปราะบางเป็นพิเศษ
Backtest ช่วงเดียวง่ายต่อการ align: start เดียวกัน, end เดียวกัน เสร็จ
Walk-forward backtests ยากกว่าเพราะมีแหล่งที่มาหลายอย่างของการเลื่อนวันที่:
ความยาว training window: ถ้าคุณเปลี่ยนจำนวน bars ที่ใช้ calibrate ระบบก่อนเทรดแต่ละ window, ช่วง out-of-sample จะเลื่อน
Lookback indicators: ถ้า version 2 เพิ่ม moving average 200 วันที่ต้องการ 200 bars ในการคำนวณ วันที่เทรดที่ valid แรกจะช้ากว่า version 1 ~200 วัน
ความพร้อมของข้อมูล: ถ้า version 2 ใช้ data source เพิ่มเติมที่มีเฉพาะตั้งแต่ปี 2553 เป็นต้นไป การเปรียบเทียบของคุณจะเริ่มช้ากว่าแม้ทั้งสอง versions จะรันจากปี 2548 ตามทฤษฎี
ช่องว่างในตลาด: ตลาดไทยมีช่องว่างข้อมูลรอบวันหยุดและการระงับ circuit-breaker ที่แตกต่างจากปฏิทินตลาดสหรัฐ ระบบที่เทรดทั้งสองตลาดใน walk-forward จะมีจำนวน "valid window" ต่างกันขึ้นอยู่กับว่าปฏิทินใดขับ splits
การเลื่อนแต่ละอย่างนี้เปลี่ยนช่วงการเปรียบเทียบจริงโดยไม่เปลี่ยน label วันที่ในตาราง summary อาจบอก "2563-2568" สำหรับทั้งคู่ — แต่ trades out-of-sample จริงครอบคลุมวันปฏิทินต่างกัน
Protocol
ก่อนเปรียบเทียบผล walk-forward สองชุดใดๆ:
1. พิมพ์ metadata สำหรับทุก window: start date, end date, n_trades, n_wins, และ market regime ที่แต่ละ window ครอบคลุม (bull/bear/flat) ต้องการ logging code เพิ่ม 5 นาที
2. ตรวจสอบว่าจำนวน windows ตรงกัน: ถ้า version A มี 12 windows และ version B มี 11 windows พวกมันไม่ใช่ test เดียวกัน window ที่ขาดหายไปไม่ใช่ neutral — มันเป็น exposure ต่างกันต่อช่วงตลาดบางอย่าง
3. ตรวจสอบวันที่ trade แรกและสุดท้าย: สถิติ summary อาจบอก range เดียวกัน แต่ trade แรกจริงใน version B อาจช้ากว่า 3 เดือนถ้า indicator ใหม่เพิ่ม warmup requirements
4. เปรียบเทียบตาม window ไม่ใช่รวม: แทนที่จะเปรียบเทียบ "Sharpe รวม 0.85 vs 0.72" เปรียบเทียบ window-by-window: Window 1: A ได้ 0.8, B ได้ 0.7 Window 2: A ได้ 1.2, B ได้ 1.1 ซึ่งบังคับให้คุณสังเกตว่า windows ขาดหายไปหรือไม่
5. รันทั้งสองบน date range เดียวกันเป็น sanity check: แม้ test สุดท้ายของคุณจะใช้ประวัติที่มีทั้งหมด รันเวอร์ชันที่ constrained ที่ทั้งคู่ share start date ที่เข้มงวดเดียวกันและยืนยันว่าการเปรียบเทียบยังคงอยู่
Protocol นี้ใช้เวลา 30 นาทีเพิ่มในการเปรียบเทียบใดๆ มันช่วยผมจากข้อสรุปที่ผิดอย่างน้อยสามครั้งว่า "เวอร์ชันนี้ดีกว่า"
บทเรียนที่กว้างกว่า
Walk-forward testing เป็นวิธีที่ซื่อสัตย์ที่สุดในการประเมินระบบเทรด มันยังซับซ้อนที่สุดด้วย และความซับซ้อนสร้าง surface area สำหรับข้อผิดพลาดที่ละเอียด
ข้อผิดพลาดที่ผมกำลังอธิบายไม่ใช่เรื่องของเจตนาไม่ดีหรืองานที่ไม่ระมัดระวัง แต่เกี่ยวกับช่องว่างระหว่างสิ่งที่ label การวิเคราะห์บอกและสิ่งที่ข้อมูลครอบคลุมจริง labels บอก "2563-2568" ข้อมูลอาจครอบคลุม "2563-2568 ยกเว้น 5 เดือนแรกสำหรับ version B" สิ่งเหล่านี้ดูเหมือนกันบนกระดาษและให้ผลลัพธ์ที่เปรียบเทียบกันไม่ได้
ตรวจสอบ metadata ก่อนเชื่อ summary summary คือผลรวมของ windows ที่คุณอาจนับไม่ถูก
ตามรอย ศึกษา รอจังหวะ จู่โจม
บันทึกการวิจัยและการเทรดส่วนตัว — ไม่ใช่คำแนะนำการลงทุน ผู้เขียนไม่ได้ให้บริการที่ปรึกษาการลงทุนที่มีใบอนุญาต — MOEasymmetry
Draft 2026-06-12. แหล่งที่มา: 6-window WF comparison บน Thai paper system, 2563-2568 ข้อได้เปรียบ Version 2 (Sharpe 0.12) หายไปหลัง align start dates รูปแบบใช้ได้กว้าง: การเปรียบเทียบ WF ใดๆ ต้องการการตรวจสอบ metadata ระดับ window ก่อนที่จะเชื่อถือข้อสรุป