Backtesting & Optimization
ทดสอบ EA ย้อนหลัง วิเคราะห์ผล และ Optimize พารามิเตอร์
Backtest คืออะไร
Backtesting คือการ ทดสอบกลยุทธ์การเทรดกับข้อมูลราคาในอดีต เพื่อดูว่ากลยุทธ์นั้นจะทำกำไรได้หรือไม่ ถ้าเราเอาไปใช้ในอดีต
ลองนึกภาพว่าคุณมี ไทม์แมชชีน ที่พาคุณกลับไปในอดีต 5 ปี แล้วเทรดด้วยกลยุทธ์ที่คิดไว้ ผลลัพธ์เป็นอย่างไร? กำไรหรือขาดทุน? Drawdown เท่าไหร่? Win Rate เท่าไหร่? นั่นคือสิ่งที่ Backtest ทำ
"If your strategy doesn't work on historical data, why would it work with real money?"
ทำไมต้อง Backtest
เหตุผลที่ต้อง Backtest ก่อนเทรดจริง:
1. ไม่เทรดสุ่ม: คุณจะรู้ว่ากลยุทธ์มี Edge (ข้อได้เปรียบ) จริงหรือไม่
2. ประหยัดเงิน: แทนที่จะเสียเงินจริงทดสอบ ใช้ข้อมูลอดีตแทน
3. สร้างความมั่นใจ: เมื่อรู้ว่ากลยุทธ์ทำกำไรในอดีต จะเทรดด้วยความมั่นใจมากขึ้น
4. รู้จักกลยุทธ์: เข้าใจ Win Rate, Drawdown, ช่วงที่ดี/แย่
5. หาค่า Parameter ที่เหมาะสม: SL กี่ points? MA กี่ Period? TP เท่าไหร่?
สิ่งที่ Backtest บอกได้:
- กลยุทธ์ มีกำไร ในอดีตหรือไม่
- Drawdown สูงสุด เท่าไหร่ (จิตใจรับได้ไหม?)
- Win Rate เท่าไหร่
- ช่วงเวลา ที่กลยุทธ์ทำงานดี/ไม่ดี
สิ่งที่ Backtest บอกไม่ได้:
- กลยุทธ์ จะ ทำกำไรในอนาคต (อดีตไม่ได้การันตีอนาคต)
- สภาพจิตใจของคุณตอนเทรดจริง (Backtest ไม่มีอารมณ์)
- Slippage และ Spread ที่แท้จริง (จำลองได้แต่ไม่เหมือนจริง 100%)
Strategy Tester ใน MT5
MetaTrader 5 มี Strategy Tester ในตัวที่ทรงพลังมาก ใช้ Backtest EA ได้ง่าย
วิธีเปิด Strategy Tester:
1. ไปที่ View → Strategy Tester หรือกด Ctrl+R
2. จะเปิดหน้าต่าง Strategy Tester ที่ด้านล่างของ MT5
ตั้งค่า Backtest:
เลือก EA:
- ช่อง Expert: เลือก EA ที่ต้องการทดสอบ
เลือก Symbol:
- เลือกคู่เงินที่จะทดสอบ (เช่น EURUSD)
- ตรวจสอบว่ามีข้อมูลราคาเพียงพอ
เลือก Period (Timeframe):
- เลือก Timeframe ที่ EA ใช้ (เช่น H1)
เลือก Date Range:
- กำหนดช่วงเวลาที่จะทดสอบ
- แนะนำ: อย่างน้อย 2-3 ปี เพื่อให้ครอบคลุมสภาพตลาดต่างๆ
- ควรครอบคลุมทั้ง Trending และ Ranging Market
Modeling Mode:
- Every tick based on real ticks: แม่นที่สุด ใช้ Tick จริงจาก Broker (ช้าที่สุด)
- Every tick: แม่นมาก จำลอง Tick (ช้า)
- 1 minute OHLC: ใช้ข้อมูล 1 นาที (เร็วกว่า แต่แม่นน้อยกว่า)
- Open prices only: เร็วที่สุด แต่แม่นน้อยที่สุด (เหมาะกับ EA ที่เทรดเมื่อแท่งเทียนเปิดเท่านั้น)
แนะนำ: ใช้ Every tick สำหรับผลลัพธ์ที่น่าเชื่อถือ ใช้ Open prices only สำหรับทดสอบเร็วๆ เบื้องต้น
Visual Mode:
- ติ๊ก "Visual mode" เพื่อดูกราฟขณะ Backtest
- จะเห็น EA เปิด/ปิด Trade บนกราฟจริงๆ
- ปรับความเร็วได้ด้วย Slider
- มีประโยชน์มากตอน Debug หรืออยากเข้าใจว่า EA ทำงานอย่างไร
- ข้อเสีย: ช้ามาก ไม่เหมาะกับการทดสอบระยะยาว
อ่านผล Backtest
เมื่อ Backtest เสร็จ จะมีผลลัพธ์หลายค่าที่ต้องดู:
ค่าสำคัญที่ต้องวิเคราะห์:
Net Profit (กำไรสุทธิ)
- ค่าบวก = กลยุทธ์ทำกำไร
- ค่าลบ = กลยุทธ์ขาดทุน
- ดูเป็น เปอร์เซ็นต์ ของ Initial Deposit ด้วย
- ตัวอย่าง: เริ่มต้น $10,000 → Net Profit $5,000 = +50%
Profit Factor
- สูตร: Gross Profit / Gross Loss
- ค่าที่ดี:
- ตัวอย่าง: Gross Profit = $15,000, Gross Loss = $8,000 → PF = 1.875
Max Drawdown (การขาดทุนสูงสุด)
- Drawdown คือ: การลดลงของ Equity จากจุดสูงสุดไปยังจุดต่ำสุด
- ยิ่งน้อยยิ่งดี
- ค่าที่ยอมรับได้:
Tip: ถ้า Backtest มี Max Drawdown 20% ในการเทรดจริงอาจถึง 30-40% เผื่อไว้เสมอ
Sharpe Ratio
- วัด ผลตอบแทนเทียบกับความเสี่ยง
- ค่าที่ดี:
- ยิ่งสูง = ผลตอบแทนดีเมื่อเทียบกับความผันผวน
Recovery Factor
- สูตร: Net Profit / Max Drawdown
- วัดว่ากลยุทธ์ ฟื้นตัว จาก Drawdown ได้เร็วแค่ไหน
- ค่าที่ดี: > 3.0 (กำไรมากกว่า Drawdown 3 เท่า)
Total Trades & Win Rate
- Total Trades: จำนวน Trade ทั้งหมด
- Win Rate:
Equity Curve
- กราฟ Equity แสดงการเปลี่ยนแปลงของ Equity ตลอดช่วง Backtest
- Equity Curve ที่ดี:
- Equity Curve ที่ไม่ดี:
Optimization — หาค่า Parameter ที่ดีที่สุด
Optimization คือกระบวนการ ลองค่า Parameter หลายๆ ค่า เพื่อหาค่าที่ให้ผลลัพธ์ดีที่สุด
วิธี Optimize ใน Strategy Tester:
1. เปิด Strategy Tester (Ctrl+R)
2. เลือก EA และตั้งค่าเหมือน Backtest
3. เปลี่ยน Mode เป็น "Optimization"
4. ไปที่ Tab "Inputs"
5. ตั้งค่า Parameter ที่จะ Optimize:
- Start: ค่าเริ่มต้น
- Step: ค่าที่เพิ่มทีละ
- Stop: ค่าสูงสุด
ตัวอย่าง:
| Parameter | Start | Step | Stop |
|-----------|-------|------|------|
| FastMA | 5 | 5 | 30 |
| SlowMA | 20 | 5 | 60 |
| StopLoss | 30 | 10 | 100 |
| TakeProfit | 50 | 10 | 200 |
Algorithm:
Slow Complete Algorithm:
- ลอง ทุกค่าที่เป็นไปได้ ทั้งหมด
- แม่นยำ 100% แต่ ช้ามาก
- เหมาะกับ Parameter น้อยๆ (2-3 ตัว)
Fast Genetic Algorithm:
- ใช้ Genetic Algorithm หาค่าที่ดีโดยไม่ต้องลองทุกค่า
- เร็วกว่ามาก แต่อาจพลาดค่าที่ดีที่สุด
- เหมาะกับ Parameter เยอะ (4+ ตัว)
แนะนำ: เริ่มด้วย Fast Genetic เพื่อหาช่วงค่าที่ดี แล้วค่อยใช้ Slow Complete ใน Range แคบๆ เพื่อ Fine-tune
อ่าน Optimization Report:
- ผลลัพธ์จะแสดงเป็น ตาราง เรียงตามค่าที่เลือก (เช่น Profit, Profit Factor)
- 2D/3D Graph: แสดงความสัมพันธ์ระหว่าง Parameter กับ Result
- ดู Heat Map เพื่อหาช่วงค่าที่ดี
หา "Robust" Parameter:
อย่าเลือกค่าที่กำไรสูงสุดอย่างเดียว ให้ดูสิ่งเหล่านี้ด้วย:
- ค่าที่อยู่ใน "เกาะ" ของค่าดีๆ: ถ้าค่ารอบข้างก็ดี แสดงว่า Robust
- ค่าที่ Profit Factor > 1.5 และ Max Drawdown < 20% พร้อมกัน
- ค่าที่ให้ Equity Curve สม่ำเสมอ ไม่ใช่กำไรจากช่วงเดียว
- ค่าที่ Trade จำนวนมากพอ (> 100 Trades)
- ค่า FastMA = 12, SlowMA = 26 → กำไร $5,000 (ค่ารอบข้าง FastMA 10-14 ก็กำไรดี)
- ค่า FastMA = 7, SlowMA = 53 → กำไร $8,000 (แต่ค่ารอบข้างขาดทุน)
- เลือกค่าแรก เพราะ Robust กว่า ถึงแม้กำไรน้อยกว่า
Over-fitting — อันตรายที่สุดของ Optimization
Over-fitting คืออะไร
Over-fitting (หรือ Curve-fitting) คือการที่กลยุทธ์ ถูกปรับแต่งจนเข้ากับข้อมูลอดีตสมบูรณ์แบบ แต่ ใช้ไม่ได้ในอนาคต
เปรียบเหมือนนักเรียนที่ ท่องจำข้อสอบเก่า ได้ทุกข้อ แต่พอเจอข้อสอบใหม่ ทำไม่ได้เลย
สัญญาณของ Over-fitting:
- Backtest กำไรมหาศาล แต่ Demo/Real ขาดทุน
- Profit Factor สูงผิดปกติ (> 5.0) ใน Backtest
- Win Rate สูงผิดปกติ (> 80%)
- ใช้ Parameter เยอะ และแต่ละค่าเฉพาะเจาะจงมาก
- Equity Curve สวยเกินจริง (เรียบเหมือนเส้นตรง)
- ผลลัพธ์เปลี่ยนแปลงมาก เมื่อเปลี่ยน Parameter เพียงเล็กน้อย
วิธีหลีกเลี่ยง Over-fitting:
1. Walk-Forward Testing:
- แบ่งข้อมูลเป็นหลายช่วง
- Optimize ด้วยช่วงแรก (In-sample)
- ทดสอบ ค่าที่ได้กับช่วงถัดไป (Out-of-sample)
- ทำซ้ำหลายรอบ
- ถ้าผลลัพธ์ Out-of-sample ดีคงเส้นคงวา = กลยุทธ์ Robust
ตัวอย่าง Walk-Forward:
| รอบ | Optimize (In-sample) | Test (Out-of-sample) |
|-----|---------------------|---------------------|
| 1 | 2019-2020 | 2021 (Q1) |
| 2 | 2019-2021 Q1 | 2021 (Q2-Q3) |
| 3 | 2019-2021 Q3 | 2021 Q4-2022 Q1 |
2. Out-of-Sample Test:
- แบ่งข้อมูลเป็น 2 ส่วน:
- 30% Out-of-sample: ใช้ทดสอบ (ห้ามแตะ)
- ถ้าผลลัพธ์ Out-of-sample ดีพอสมควร (ไม่ต้องดีเท่า In-sample) = OK
3. กฎอื่นๆ:
- ใช้ Parameter น้อย: ยิ่งน้อย ยิ่งลดโอกาส Over-fit
- อย่า Optimize ทุกค่า: Fix บางค่าที่สมเหตุสมผล
- ทดสอบหลาย Symbol: ถ้ากลยุทธ์ทำงานได้กับหลายคู่เงิน = Robust
- ทดสอบหลาย Timeframe: ไม่ควรทำงานได้แค่ Timeframe เดียว
ขั้นตอนที่ถูกต้อง: จาก Backtest สู่เงินจริง
Backtest → Forward Test (Demo) → Small Real → Scale Up
1. Backtest (2-4 สัปดาห์):
- ทดสอบกับข้อมูลอย่างน้อย 3 ปี
- Optimize ด้วย Walk-Forward Testing
- ผลลัพธ์: Profit Factor > 1.5, Max DD < 25%, Trades > 100
2. Forward Test บน Demo (1-3 เดือน):
- รัน EA บนบัญชี Demo
- ดูว่าผลลัพธ์ใกล้เคียง Backtest หรือไม่
- ตรวจสอบ Slippage, Spread ที่แท้จริง
- เป้าหมาย: ผลลัพธ์อย่างน้อย 70% ของ Backtest
3. Small Real Account (3-6 เดือน):
- เทรดด้วย Lot เล็กที่สุด (0.01)
- ดูว่า EA ทำงานได้กับ Execution จริงหรือไม่
- ตรวจสอบ:
- SL/TP Hit ถูกต้อง?
- ไม่มี Error?
- เป้าหมาย: ไม่ขาดทุนเกิน Max DD ที่ Backtest บอก
4. Scale Up (ค่อยๆ เพิ่ม):
- เพิ่ม Lot Size ทีละ 2x-3x
- ติดตามผลทุกเดือน
- ถ้าผลลัพธ์ดีต่อเนื่อง ค่อยเพิ่มต่อ
- ถ้าผลลัพธ์แย่ลง ลด Size หรือหยุดตรวจสอบ
คำเตือน: อย่ากระโดดจาก Backtest ไปเทรดเงินจริง Lot ใหญ่ทันที ให้ผ่านทุกขั้นตอนอย่างอดทน
สรุป
Backtesting และ Optimization เป็น ขั้นตอนที่ขาดไม่ได้ ในการพัฒนา Trading System
สิ่งสำคัญที่ต้องจำ:
- Backtest ก่อนเทรดจริงเสมอ อย่าเทรดสุ่ม
- ดูหลายค่าประกอบกัน: ไม่ใช่แค่กำไร แต่ดู Drawdown, Profit Factor, Equity Curve
- ระวัง Over-fitting: ใช้ Walk-Forward Testing เสมอ
- ผ่านทุกขั้นตอน: Backtest → Demo → Small Real → Scale Up
- อดีตไม่การันตีอนาคต: Backtest เป็นแค่จุดเริ่มต้น ไม่ใช่คำตอบสุดท้าย
"Backtest tells you the best possible outcome. Reality will always be worse. Plan accordingly."
