Backtest คือการจำลองกฎกับข้อมูลย้อนหลังเพื่อศึกษาพฤติกรรม ไม่ใช่การทำนายผลตอบแทนในอนาคต คุณภาพของข้อสรุปขึ้นอยู่กับข้อมูล สมมติฐาน ต้นทุน และวินัยในการไม่ปรับระบบตามผลเดิมมากเกินไป
ตรวจข้อมูลและสมมติฐาน
ตรวจ timezone ช่องว่างข้อมูล corporate action หรือ contract specification ตามตลาดที่ใช้ ความละเอียดของ tick มีผลต่อระบบที่ stop แคบหรือเทรดถี่ ส่วน spread คงที่อาจไม่สะท้อนช่วงข่าวหรือสภาพคล่องต่ำ
รวม commission, swap, slippage และ latency ตามสมควร หากระบบเหลือความได้เปรียบเพียงเล็กน้อย ต้นทุนที่คลาดเคลื่อนอาจเปลี่ยนข้อสรุปทั้งหมด
แยกข้อมูลและลด Overfitting
ใช้ข้อมูล in-sample สำหรับพัฒนาและกัน out-of-sample ไว้ตรวจสอบ หลีกเลี่ยงการดูช่วงทดสอบซ้ำแล้วปรับจนผ่าน เพราะข้อมูลนั้นจะกลายเป็นส่วนหนึ่งของการฝึกโดยปริยาย
ทดสอบความไวของพารามิเตอร์ ระบบที่ใช้ได้เฉพาะค่าจุดเดียวอาจเปราะบางกว่าระบบที่ให้พฤติกรรมใกล้เคียงกันในช่วงค่า ตรวจหลายสินทรัพย์หรือหลาย regime เมื่อสมเหตุสมผล
อ่านมากกว่ากำไรสุทธิ
พิจารณา maximum drawdown ระยะเวลาฟื้นตัว จำนวนครั้งที่เทรด การกระจายผลลัพธ์ และช่วงขาดทุนต่อเนื่อง แยกดูว่าผลมาจากดีลไม่กี่ครั้งหรือมีความสม่ำเสมอ
บันทึกเวอร์ชันโค้ด ค่าตั้งต้น ชุดข้อมูลและเกณฑ์ตัดสินใจก่อนเห็นผล เพื่อลดการเลือกเฉพาะรายงานที่ดูดี
เช็กลิสต์ 10 ข้อก่อนเชื่อผล Backtest
ก่อนสรุปอะไรจากรายงาน ให้ไล่เช็กรายการนี้ ข้อที่ยังไม่ได้ทำคือช่องโหว่ที่ทำให้ผลดูดีเกินจริงได้
- แหล่งข้อมูลและคุณภาพระบุที่มา ความละเอียด (tick หรือ M1) ช่วงเวลา และตรวจช่องว่างหรือแท่งผิดปกติ
- Timezone และ sessionข้อมูลกับกฎใช้ timezone เดียวกัน และ session filter ตรงกับที่จะใช้จริง
- Spread และ commissionใช้ spread แบบแปรผันหรือค่าที่สะท้อนช่วงข่าว และรวม commission ทุกขา
- Slippage และ latencyใส่ค่าประมาณที่สมเหตุสมผล โดยเฉพาะระบบที่ stop แคบหรือเทรดถี่
- Swap และ rolloverคิดต้นทุนถือข้ามคืนหากระบบถือสถานะหลายวัน
- Look-ahead biasตรวจว่ากฎไม่ได้ใช้ข้อมูลของแท่งที่ยังไม่ปิดหรือค่าที่ยังไม่รู้ ณ เวลานั้น
- In-sample / Out-of-sampleกันข้อมูลส่วนหนึ่งไว้ตรวจสอบ และไม่ปรับระบบหลังเห็นผล out-of-sample
- Parameter sensitivityทดสอบช่วงค่ารอบจุดที่เลือก ไม่ใช่ค่าจุดเดียว
- จำนวนตัวอย่างจำนวนเทรดมากพอที่จะไม่ถูกครอบงำด้วยดีลไม่กี่ครั้ง
- บันทึกเวอร์ชันโค้ด ค่าตั้งต้น ชุดข้อมูล และเกณฑ์ตัดสินที่กำหนดไว้ก่อนรันทดสอบ
ตัวอย่างการอ่านผลสองรอบ
วิธีอ่านที่ใช้ได้จริงคือวางผล in-sample กับ out-of-sample คู่กัน แล้วถามคำถามต่อแต่ละ metric แทนการดูกำไรสุทธิบรรทัดเดียว
ตัวอย่าง · เปรียบเทียบ metric สองรอบ (ตัวเลขสมมติ)
| Metric | รอบ A · in-sample | รอบ B · out-of-sample | คำถามที่ควรถาม |
|---|---|---|---|
| จำนวนเทรด | 420 | 95 | ตัวอย่างในรอบ B พอสรุปหรือไม่ |
| Profit factor | 1.6 | 1.1 | ความได้เปรียบหายไปเมื่อเจอข้อมูลใหม่หรือไม่ |
| Max drawdown | -12% | -18% | ผู้ใช้ทนช่วงขาดทุนขนาดนี้ได้จริงหรือไม่ |
| ระยะฟื้นตัวนานสุด | 3 เดือน | 7 เดือน | ระบบเงียบได้นานเท่าใดก่อนจะสงสัยว่าเสีย |
| กำไรจาก 5 ดีลสูงสุด | 35% ของกำไรรวม | 60% ของกำไรรวม | ผลขึ้นกับดีลไม่กี่ครั้งหรือไม่ |
ตัวเลขข้างต้นเป็นตัวอย่างสมมติเพื่อแสดงวิธีเปรียบเทียบ ไม่ใช่ผลของระบบใด ประเด็นคือรอบ B มักแย่กว่ารอบ A เสมอ คำถามที่ควรตอบไม่ใช่ว่าระบบยังกำไรหรือไม่ แต่คือความต่างนั้นอยู่ในช่วงที่ยอมรับได้และมีตัวอย่างพอที่จะสรุปหรือไม่
สัญญาณเตือนว่ากำลัง Overfit
หากพบข้อใดข้อหนึ่งต่อไปนี้ ควรถอยกลับไปตั้งคำถามกับกระบวนการก่อนเชื่อผล
- ผลดีผิดปกติกับพารามิเตอร์เพียงค่าเดียว แต่ตกลงชัดเมื่อขยับค่าเล็กน้อย
- มีการเพิ่มตัวกรองหลังเห็นช่วงขาดทุน โดยตัวกรองนั้นอธิบายด้วยเหตุผลของตลาดไม่ได้
- รอบ out-of-sample ถูกรันซ้ำหลายครั้งจนไม่ใช่ข้อมูลที่ระบบไม่เคยเห็นอีกต่อไป
- ผลรวมมาจากช่วงเวลาสั้นหรือสภาวะตลาดแบบเดียว
Backtest ที่ผ่านเช็กลิสต์ทั้งหมดยังคงเป็นเพียงหลักฐานว่ากฎทำงานตามที่เขียนบนข้อมูลในอดีต ไม่ใช่การรับประกันผลในอนาคต



