ยาวไปไม่อ่าน
ช่วงปลายปี 2020 ผมเริ่มเปลี่ยนจากการเทรดมือมาสนใจการเขียนโปรแกรมเทรดอย่างจริงจัง ส่วนหนึ่งเป็นเพราะอยากหาทางสร้างผลตอบแทนได้เหมือนตอนเฝ้าจอโดยไม่ต้องนั่งเฝ้าเอง นั่นทำให้ผมได้มารู้จักกับ Backtesting และ Algorithmic trading
Backtesting คืออะไร?
เวลาที่เราจะเข้าเทรดหรือซื้อขายอะไรสักอย่างเพื่อทำกำไร เทรดเดอร์แต่ละคนก็จะมี Logic การซื้อขายที่ไม่เหมือนกันใช่ไหมครับ? ยกตัวอย่างง่ายๆ เช่น กลยุทธ์ EMA 200 เทรดเดอร์จะ "ซื้อ" ก็ต่อเมื่อราคาสินค้าตัดขึ้นเส้นค่าเฉลี่ย 200 วัน และจะ "ขาย" ก็ต่อเมื่อมันตัดลงเส้น 200 วัน... ชุดคำสั่งพวกนี้แหละครับที่เราเรียกว่า "กลยุทธ์การเทรด" (Trading Strategy)
การที่เราแปลงกลยุทธ์การเทรดพวกนั้นให้เป็นระบบอัตโนมัติ เราเรียกการเทรดแบบนี้ว่า Algorithmic trading (การใช้โปรแกรมคอมพิวเตอร์และชุดคำสั่ง (อัลกอริทึม) ที่กำหนดไว้ล่วงหน้าให้ทำการซื้อขายหลักทรัพย์โดยอัตโนมัติ)
ทีนี้คำถามสำคัญที่ผมเชื่อว่าหลายคนก็มักจะถามและสงสัยเหมือนกันคือ...
"ทำไมต้องเลข 200?"
ทำไมไม่ใช้ 50? ทำไมไม่ใช้ 100? หรือเลข 200 มันแค่เป็นเลขมงคลที่เขาบอกต่อๆ กันมา?
นี่แหละครับคือหน้าที่ของการ Backtesting มันคือการนำ "Logic" (เช่น EMA 200) ไปรันย้อนหลังกับกราฟหรือข้อมูลในอดีต (Historical Data) เพื่อพิสูจน์ว่า
"ถ้าเราเทรดด้วยวิธีนี้เมื่อ 5 ปีก่อน... วันนี้เราจะรวยขึ้นหรือหมดตัว? มันใช้ได้จริงๆ ใช่มั้ย"
ทั้งหมดนี้ตั้งขึ้นมาเพราะสมมุติฐานที่ว่า "ถ้า Setting นี้มันเคย Work ในอดีต ปัจจุบันมันก็ควรจะทำงานได้สิ" สรุปก็คือ Backtesting ก็คือการนำกลยุทธ์การเทรดที่มีกฎเกณฑ์ชัดเจน ไปทดสอบย้อนหลังกับราคาในอดีต เพื่อประเมินว่าถ้าเทรดจริงในช่วงนั้น จะได้ผลลัพธ์เป็นอย่างไร จากนั้นจึงเลือกใช้ strategy ที่ให้ผลลัพธ์ดีที่สุด
ภาพลวงตาที่หอมหวาน: ทำไมผล Backtest ส่วนใหญ่ถึงเชื่อถือไม่ได้?
ตอนนั้น ด้วยความที่เป็นวัยรุ่นใจร้อน ผมตื่นเต้นมาก ผมใช้เวลาประมาณ 2 วัน เรียนเขียนโค้ดให้คอมพิวเตอร์ลองเปลี่ยนตัวเลขไปเรื่อยๆ (เราเรียกขั้นตอนนี้ว่า Optimize) จาก 200 เป็น 190, 150, ไปจนถึงเลขแปลกๆ เพื่อหาว่าเลขไหนที่เราใช้กับระบบ EMA Cross แล้วกำไรเยอะสุด
ผลปรากฏว่า... ผมก็เจอค่าตั้งค่านั้นครับ! Backtest ออกมากำไร +423.98% กราฟพุ่งชันสวยงาม ชนะ Buy and Hold (ซื้อแล้วถือเฉยๆ) ตอนนั้นผมมั่นใจมากว่าเจอ "Holy Grail" เข้าให้แล้ว 🏆
ผมตัดสินใจเอาบอทตัวนั้นลงสนามจริงทันทีพร้อมกับเงินประมาณ 100 USD... ผลลัพธ์เหรอครับ? ...ผ่านไป 1 เดือน พอร์ตผมหายไปเกือบ 50% แพ้คน Buy and Hold ด้วยซ้ำ มันเกิดอะไรขึ้นอ่ะ????
ทำไมบอทเทพถึงกลายเป็นบอทกาก? กับดักที่ต้องระวัง
กราฟของจริงไม่เหมือนใน Backtest เลยสักนิด มันทำให้ผมได้เรียนรู้ความจริงที่เจ็บปวดว่า
"ผล Backtest ส่วนใหญ่นั้นเชื่อถือไม่ได้"
ตอนนั้นผมยังไม่รู้ว่า... ปัญหาไม่ได้อยู่ที่บอท แต่อยู่ที่วิธีที่ผม Backtest มันมี 2 กับดักใหญ่ๆ ที่ทำให้ผล Backtest หลอกเราได้ครับ
1. กับดัก Overfitting (การจำข้อสอบ)
นี่คือสิ่งที่ผมทำพลาดเต็มๆ ตอนที่ผมสั่งให้คอมพิวเตอร์หาเลขที่กำไรเยอะที่สุด (Optimize) คอมพิวเตอร์ไม่ได้เข้าใจตลาดหรอกครับ มันแค่พยายามยัดเยียดตัวเลขให้เข้ากับกราฟในอดีตให้ได้กำไรสูงสุด เหมือนเด็กนักเรียนที่ท่องจำเฉลยข้อสอบไปสอบ
- ตอน Backtest มันคือกราฟที่เฉลยออกมาแล้ว บอทเลยทำคะแนนเต็ม เอาอะไรที่เคยเกิดขึ้นแล้วมาให้ทำซ้ำๆ ยังไงๆ มันก็ต้องปรับตัวได้อย่างแน่นอน
- ตอนเทรดจริง ตลาดเปลี่ยนข้อสอบใหม่ (Market Regime Change หรือว่าโครงสร้างแนวโน้มตลาดเปลี่ยนไป) บอทที่ท่องจำมาก็เลย... สอบตกครับ
2. ต้นทุนแฝง (Hidden Cost)
ใน Backtest แรกที่ผมทำ ผมไม่ได้ใส่ค่า Slippage และค่า Commission พอเอาระบบ EMA Cross ไปเปิดบอทรันจริง ก็เจอค่าพวกนี้กินไปเรื่อยๆ บวกกับจังหวะที่ราคาไหลตอนกราฟกระชาก... กำไรที่เห็นในกระดาษก็หายวับไปกับตา
- Slippage คือ ความคลาดเคลื่อนของราคาระหว่างราคาที่เรา "กดส่งคำสั่ง" กับราคาที่คำสั่งนั้น "ถูกดำเนินการจริง" ในตลาด
- Commission คือ ค่าธรรมเนียมที่จะถูกเก็บจาก Order ทุกครั้ง เช่นถ้าเราเทรด Order มูลค่า 1,000 USDT มี Commission 0.07% ถ้าเราปิด Order นั้นไม่ว่าจะกำไรหรือขาดทุน เราก็ต้องจ่ายเพิ่มอีก 0.07% ของ 1,000 USDT หรือ 0.7 USDT เสมอ
Backtest อย่างไรให้เชื่อถือได้และใช้ได้จริง?
ถ้า Backtest เชื่อไม่ได้ แล้วเราจะทำไปทำไม? คำตอบคือ
เราทำเพื่อเช็ค Logic ว่า Make Sense ไหม ไม่ใช่เพื่อดูตัวเลขกำไร
เพื่อให้การ Backtest ไม่ใช่แค่การหลอกตัวเอง นี่คือ Checklist 3 ข้อแบบเร็วๆ ที่ผมใช้กรองระบบเทรดก่อนเอาเงินจริงลงเสี่ยงครับ
Checklist: 3 ขั้นตอนสู่ Backtest ที่น่าเชื่อถือ
1. เลิกจำข้อสอบ (Avoid Overfitting, Find Robust)
หยุด Optimize หาค่าที่ดีที่สุดเพียงค่าเดียว (เช่น EMA 14, 161) แต่ให้ทดสอบค่าบริเวณใกล้เคียงด้วย
ถ้าเปลี่ยนเป็น EMA 13, 160 หรือ 15, 162 แล้วระบบพังยับเยิน... แปลว่าไอ้ค่าเดิมที่กำไรคือ "ฟลุ๊ค" ครับ
ระบบเทรดที่ดีต้อง "เสถียร" (Robust) ไม่ใช่แค่แม่นยำ ระบบมันต้องทำงานได้ในสภาวะตลาดทั่วไปไม่ใช่เฉพาะทาง Keywords สำหรับสาย Hardcore ที่อยากหาอ่านต่อ: Walk Forward Analysis, Out-of-Sample Testing, Parameter Sensitivity Analysis Monte Carlo Permutation Test, p-value, t-statistic, Homoscedasticity, Stationarity
2. ใส่ความโหดร้ายลงไป (Factor in Realistic Costs)
เวลา Backtest ต้องตั้งค่า Slippage และ Commission ให้แพงกว่าความเป็นจริงเสมอ
- ถ้า Exchange เก็บ 0.07% ให้ตั้งใน Backtest เป็น 0.1% ไปเลย
- ถ้าระบบยังทำกำไรได้แม้โดนค่าต๋งโหดๆ แปลว่า Logic เทรดของเราเจ๋งจริง
3. ต้องมี Forward Test หรือ Out of Sample Test เสมอ
ก่อนลงเงินจริง ให้รันระบบแบบ Paper Trade ในตลาดปัจจุบันอย่างน้อย 1-3 เดือน หรือเอาระบบเทรดนี้ไปทดลองในชุดข้อมูลที่ไม่เคยเจอมาก่อน
- เพื่อดูว่าเวลากราฟมันวิ่งจริงๆ ไม่ใช่กราฟนิ่งๆ ในอดีต บอทเรายังทำงานถูกไหม?
- ขั้นตอนนี้จะช่วยกรอง Error ที่ Backtest มองไม่เห็นได้เกือบ 100%
สรุปและข้อคิดสำคัญ
การเห็นกราฟ Backtest เขียวๆ ขึ้นสวยๆ 45 องศา มันฟินครับ มันฟินมากผมรู้... แต่มันคือยาพิษที่หวานหอมที่สุดถ้าเราไม่รู้ทันมัน
จำไว้เสมอครับว่า Backtest โกงง่ายมาก แค่ปรับเลขไม่กี่ตัวก็ทำให้คุณรู้สึกว่าเป็นเทพเจ้าได้แล้ว ให้มอง Backtest เป็น เครื่องมือบริหารความเสี่ยง (Risk Management Tool) ไม่ใช่ เครื่องผลิตเงิน (Money Printer)
- ❌ ถ้า Backtest แย่ -> ระบบห่วยแน่นอน (ไม่ต้องเสียเวลาทำต่อ)
- ✅ ถ้า Backtest ดี -> ก็แค่ "มีลุ้น" (ต้องไปพิสูจน์ต่อด้วย Forward Test หรือ เงินจริงเท่านั้น)
ถ้าถามว่าโหดแค่ไหน? ผมขอแชร์สถิติจริงของผมให้ดูครับ
ปี 2024 ผมทำระบบเทรดไปประมาณ 40 ระบบเทรดครับ (1 ระบบเทรดคือ 1 ทรัพย์สิน 1 Timeframe) ทั้งหมดนั้น อันที่รอดถึงสิ้นปี 2025 มีแค่ 5 ระบบ
อีก 35 ระบบที่เหลือคือ "ตายกลางทาง" (Drawdown ทะลุ 30% ผมสั่งปิดทันที) ส่วนผู้รอดชีวิต 5 ตัวนั้นคือของจริงที่ยังทำเงินและ Drawdown ไม่ถึงเกณฑ์ นี่คือความจริงครับ Backtest คือรอบคัดเลือก แต่ Forward Test คือของจริง
ถ้าเราเข้าใจจุดนี้ เราจะนำหน้าเทรดเดอร์อีกเยอะ% มากก (ผมไม่รู้ว่าเท่าไรแต่ก็น่าจะเยอะมั้ง 55555) ที่กำลังวิ่งไล่ตามกราฟสวยๆ
หวังว่าบทความนี้จะทำให้ทุกคนที่อ่านอยากลุกขึ้นมาทำระบบเทรดของตัวเองกันนะครับ! 🚀