Backtesting Without Fooling Yourself
A step-by-step path from what your backtest really optimizes to proving an edge survives overfitting, multiple testing, and live execution. Read top to bottom — each part builds on the last.
- 01
Jul 2, 2026 #algotradingการออกแบบ Objective Function: ตัวชี้วัดที่คุณ Optimize แอบเลือกกลยุทธ์ให้คุณ
การจะค้นหากลยุทธ์ที่ 'ดีที่สุด' คุณต้องนิยาม 'ดีที่สุด' ก่อน — และตัวเลขสเกลาร์ตัวนั้นเป็นผู้เลือกผู้ชนะอย่างเงียบ ๆ บนข้อมูล synthetic ที่มี edge จริงที่รู้ค่า (600 seed, T=2000, 80 threshold) per-trade Sharpe แบบ naive สวมมงกุฎให้ lottery: มันเลือกผู้ชนะที่ exposure ต่ำกว่า 5% ใน 56% ของ seed และเสื่อมสภาพ (degenerate) ใน 57% — บน seed ที่ชัดเจนที่สุด มี 8 เทรดที่ทำ in-sample Sharpe ได้ 21.09 แล้วยุบลงเหลือ 0.13 นอก sample การแก้ไขที่ซื่อสัตย์นั้นเกือบจะน่าเบื่อ: วัดบน full timeline ซึ่งไม่เคยเสื่อมสภาพเลย (out-of-sample 1.71) trade-count shrinkage (conf_k) และ exposure floor สามารถซ่อมแซม per-trade metric ได้ แต่แม้จะซ่อมเต็มที่แล้วก็ยังแค่เท่ากับ full-timeline Sharpe (1.70 เทียบกับ 1.71) — ไม่เคยเอาชนะมันได้เลย กฎของ Goodhart ในบริบทของ backtest พร้อม ground truth ที่ควบคุมได้
- 02
Mar 15, 2026 #algotradingWalk-Forward Optimization: การทดสอบกลยุทธ์ที่ซื่อสัตย์เพียงวิธีเดียว
ทำไมการแบ่งข้อมูล train/test ครั้งเดียวถึงไม่สามารถป้องกัน overfitting ได้ WFO ช่วยตรวจสอบความแข็งแกร่งของพารามิเตอร์อย่างเป็นระบบได้อย่างไร และทำไมกลยุทธ์ที่มี PnL@ML +3342% บน 21 พารามิเตอร์จึงเป็น time bomb ที่รอระเบิดหากไม่ผ่าน WFO
- 03
Mar 12, 2026 #algotradingการวิเคราะห์ Plateau: วิธีแยกแยะจุดที่เหมาะสมที่แข็งแกร่งออกจาก Overfitting
เหตุใดการค้นหาพารามิเตอร์ที่ดีที่สุดของกลยุทธ์จึงเป็นเพียงครึ่งหนึ่งของงาน วิธีแยกแยะ plateau ที่เสถียรออกจากยอดแหลมที่เปราะบางทั้งในเชิงภาพและเชิงปริมาณ และเหตุใด contour plot ของ Optuna จึงเป็นขั้นตอนบังคับก่อนนำกลยุทธ์ที่ผ่านการปรับแต่งไปใช้งานจริง
- 04
Mar 6, 2026 #algotradingMonte Carlo Bootstrap: วิธีรับช่วงความเชื่อมั่นสำหรับ Backtest ใน 10 บรรทัดของโค้ด
เหตุใดการประมาณค่าจุดเดียวจาก backtest จึงเป็นภาพลวงตาที่อันตราย Monte Carlo bootstrap ใช้เวลาคำนวณ 2 วินาที ให้ช่วงความเชื่อมั่น 95% สำหรับ PnL และ MaxDD และเหตุใดขั้นตอนนี้จึงเป็นสิ่งบังคับก่อนนำกลยุทธ์ไปใช้งานจริง
- 05
Jul 2, 2026 #algotradingProbability of Backtest Overfitting: การค้นหาของคุณเอาชนะการโยนเหรียญหรือไม่?
Deflated Sharpe Ratio ตั้งราคาให้กลยุทธ์ผู้ชนะ; PBO ตั้งราคาให้การค้นหาที่เลือกมันขึ้นมา Combinatorially Symmetric Cross-Validation รัน C(16,8) = 12,870 train/test split บน performance matrix ขนาด 1000x200 แล้วถามว่า: ผู้ชนะแบบ in-sample ตกไปอยู่ครึ่งล่างของ out-of-sample หรือไม่? กับดักที่แทบทุกคนมองข้าม — null ของ PBO คือ 0.5 ไม่ใช่ 1 บนกลยุทธ์ zero-edge 200 ตัว best in-sample Sharpe ต่อปีที่ 1.98 ยุบลงเหลือ 0.06 นอก sample และ PBO = 0.476: การโยนเหรียญ overfit เต็มขั้น ปลูก edge จริง (Sharpe ต่อปี 2.38) แล้ว PBO ลดลงเหลือ 0.001, in-sample 3.73 รอดมาเป็น out-of-sample 2.34 moving-average grid บน pure random walk ก็ไม่มี out-of-sample skill เช่นกัน — PBO 0.463 เฉลี่ยข้าม 60 matrix แยกไม่ออกจาก null ทางสถิติ — และบน matrix ตัวแทนหนึ่งตัว ภาพลวงตาชัดเจนมาก: best in-sample Sharpe ที่ 2.33 ยุบลงเหลือ median out-of-sample -0.22, PBO 0.573, โอกาสขาดทุน 63%
- 06
Jul 2, 2026 #algotradingDeflated Sharpe Ratio: 'ผู้ชนะ' จาก Backtest ของคุณกี่ตัวที่รอดจาก Multiple Testing?
parameter search คือเครื่องจักรผลิตความโชคดี บน pure noise — กลยุทธ์ 1,000 ตัวที่ไม่มี edge จริงเลย — Sharpe ต่อปีที่ดีที่สุดเฉลี่ยอยู่ที่ 1.63 และ naive significance test ฟันธงว่าพบการค้นพบ 100% ของเวลา เราสร้าง ground truth ที่ควบคุมได้และแสดงให้เห็นว่า Deflated Sharpe Ratio, Harvey-Liu haircut และ White's Reality Check คืนความซื่อสัตย์กลับมา: false discovery ลดลงจาก 1.000 เหลือ 0.001-0.057, edge จริงที่อยู่เหนือ noise ceiling ถูกเก็บไว้ด้วย power ~1 — และกับดักจริงหนึ่งอย่าง (correlated grid) ที่ raw DSR over-deflate และคำตัดสินต้องอ่านข้าม band ทั้งหมดของ effective-trial estimator ไม่ใช่แค่ตัวเดียว
- 07
Mar 7, 2026 #algotradingBacktest-live parity: ทำไมบอทของคุณถึงเทรดต่างจาก Backtest
อนุกรมวิธานฉบับสมบูรณ์ของความแตกต่างระหว่างการ Backtesting และการเทรดสด: ตั้งแต่ Slippage และการเติมคำสั่งบางส่วน ไปจนถึงการขาดประสานของ Codebase รูปแบบสถาปัตยกรรมเพื่อบรรลุ Parity ตัวอย่าง Python ของโมดูลแกนร่วม และ Checklist การตรวจสอบในโปรดักชัน