เรียนรู้ › EA และเทรดอัตโนมัติ
Monte Carlo ทดสอบระบบเทรด สลับลำดับเทรดเพื่อดู Drawdown ที่ควรเผื่อ
Backtest ให้ผลแค่เส้นทางเดียว Monte Carlo สลับและสุ่มรายการเทรดซ้ำหลายพันรอบ ให้เห็นช่วงของ Drawdown แพ้ติด กำไรสุทธิ และความเสี่ยงล้างพอร์ต
- Backtest คือเส้นทางเดียวจากหลายพันเส้นทางที่รายการเทรดชุดเดียวกันสร้างได้ Drawdown ที่เห็นอาจเป็นช่วงโชคดี
- สลับลำดับเทรดทำให้เห็นช่วงของ Max drawdown และแพ้ติด ส่วน Bootstrap ทำให้เห็นช่วงของกำไรสุทธิและค่าเฉลี่ยต่อไม้ด้วย
- วางขนาดความเสี่ยงจาก Drawdown ที่เปอร์เซ็นไทล์ 95 ไม่ใช่จาก Drawdown ในรายงาน backtest
- ช่วงความเชื่อมั่นของกำไรเฉลี่ยต่อไม้ที่คร่อมศูนย์ แปลว่ายังแยกระบบออกจากโชคไม่ได้
- Monte Carlo สมมติว่าแต่ละไม้ไม่เกี่ยวกัน จึงจับการเปลี่ยนสภาพตลาดไม่ได้
Monte Carlo ในงานเทรด คือการเอารายการเทรดจาก backtest มาสลับลำดับ หรือสุ่มหยิบซ้ำ หลายพันรอบ แล้วดูว่า Drawdown แพ้ติด และกำไรสุทธิกระจายตัวกว้างแค่ไหน ผล backtest ที่เห็นในรายงานเป็นแค่เส้นทางเดียวจากเส้นทางที่เป็นไปได้มากมาย ถ้าเผอิญไม้แพ้กระจายตัวดี Drawdown ในรายงานจะดูตื้นกว่าที่ควรคาดไว้ บทนี้ลองทำให้ดูทีละขั้นด้วยรายการเทรดตัวอย่าง 150 ไม้
Backtest เส้นเดียวบอกอะไรไม่ได้
สมมติระบบหนึ่งเทรดมา 150 ไม้ ชนะ 60 ไม้ แพ้ 90 ไม้ กำไรรวมเท่าไรก็ได้ตัวเลขเดียว แต่ Max drawdown (ระยะที่พอร์ตลดลงจากจุดสูงสุดลึกที่สุด) ขึ้นกับว่าไม้แพ้มาเรียงกันยังไง ถ้าแพ้ 8 ไม้ติดกัน Drawdown จะลึกกว่าแพ้กระจายสลับกับชนะ ทั้งที่เป็นไม้ชุดเดียวกัน
อนาคตไม่จำเป็นต้องเรียงไม้เหมือนอดีต คำถามที่ควรถามจึงไม่ใช่ “backtest มี Drawdown เท่าไร” แต่เป็น “ถ้าไม้ชุดนี้มาในลำดับอื่น Drawdown จะลึกได้แค่ไหน และบ่อยแค่ไหน” ถ้ายังไม่แม่นเรื่องการอ่าน Drawdown อ่าน Drawdown อ่านยังไง ก่อน
Monte Carlo 3 แบบที่ใช้บ่อย
- สลับลำดับ (Reshuffle) เอาไม้ทั้ง 150 ไม้มาสลับตำแหน่งแบบสุ่ม ทุกไม้ยังอยู่ครบ กำไรรวมจึงเท่าเดิมทุกรอบ สิ่งที่เปลี่ยนคือ Max drawdown และแพ้ติดยาวสุด
- สุ่มหยิบซ้ำ (Bootstrap) สุ่มหยิบจากรายการ 150 ครั้ง หยิบแล้วใส่คืน ไม้เดียวอาจถูกหยิบ 2 ครั้ง บางไม้ไม่ถูกหยิบเลย จำนวนไม้ชนะจึงต่างไปทุกรอบ กำไรรวมและกำไรเฉลี่ยต่อไม้แกว่งได้ด้วย ใกล้กับสิ่งที่เกิดจริงมากกว่า เพราะอนาคตไม่ได้สัญญาว่าจะชนะ 60 ไม้เท่าเดิม
- ตัดไม้และเพิ่มต้นทุน สุ่มข้ามไม้บางส่วน (เช่น สัญญาณที่พลาดเพราะเน็ตหลุด หรือ spread กว้างจนไม่เข้า) และหักต้นทุนเพิ่มทุกไม้ (slippage spread ที่กว้างกว่าใน backtest) เพื่อดูว่าระบบยังรอดไหมเมื่อของจริงแย่กว่าที่ทดสอบ
ทั้งสามแบบทำแค่กับรายการเทรด ไม่ต้องรัน backtest ใหม่ ใช้ Excel หรือสคริปต์สั้น ๆ ก็พอ
ตัวอย่าง: 150 ไม้ ชนะ 40% ที่ RR 1:2
รายการเทรดสมมติ (ไม่ใช่ผลของตลาดจริง) ชนะ 60 ไม้ ได้ไม้ละ +2R แพ้ 90 ไม้ เสียไม้ละ −1R R คือเงินที่เสี่ยงต่อไม้ ถ้าเสี่ยงคงที่ไม้ละ 1% ของทุนตั้งต้น 1R = 1% ของทุนตั้งต้น
- กำไรเฉลี่ยต่อไม้ (Expectancy) = 0.4 × 2 − 0.6 × 1 = 0.8 − 0.6 = +0.2R
- กำไรรวม = 60 × 2 − 90 × 1 = 120 − 90 = +30R
- ใน backtest ตามลำดับเดิม Max drawdown = 9R แพ้ติดยาวสุด 5 ไม้
ตัวเลข 9R ดูสบาย ๆ ถ้าเสี่ยงไม้ละ 1% ก็แค่ราว 9% ของทุน ทีนี้ลองสลับลำดับ 10,000 รอบ
| แบบจำลอง (10,000 รอบ) | Max DD มัธยฐาน | Max DD เปอร์เซ็นไทล์ 95 | กำไรรวม |
|---|---|---|---|
| Backtest ตามลำดับเดิม | 9R (เส้นเดียว) | – | +30R |
| สลับลำดับ | 11R | 18R | +30R ทุกรอบ |
| Bootstrap | 11R | 21R | 0R ถึง +60R (เปอร์เซ็นไทล์ 5–95) |
| Bootstrap + ข้าม 10% + หัก 0.1R ต่อไม้ | 13.8R | 27.6R | −14.3R ถึง +42.4R (มัธยฐาน +13.5R) |
เปอร์เซ็นไทล์ 95 คือค่าที่ 95% ของรอบจำลองไม่เกิน ในแบบสลับลำดับ 95% ของรอบมี Max drawdown ไม่เกิน 18R สองเท่าของที่ backtest แสดง และราว 72% ของรอบสลับเจ็บกว่า backtest แพ้ติดยาวสุดก็เช่นกัน มัธยฐาน 8 ไม้ เปอร์เซ็นไทล์ 95 อยู่ที่ 13 ไม้ ขณะที่ backtest เห็นแค่ 5 ไม้
Drawdown ใน backtest คือสิ่งที่เกิดกับลำดับไม้หนึ่งชุด ไม่ใช่เพดาน ให้วางแผนจากเปอร์เซ็นไทล์ 95 ของการจำลอง แล้วเผื่อเพิ่มอีกสำหรับของจริง
Bootstrap: กำไรรวมก็แกว่ง
แบบสลับลำดับยังสมมติว่าจะชนะครบ 60 ไม้ Bootstrap ปล่อยให้จำนวนไม้ชนะแกว่งตามโชค ผลคือเส้นทางเงินทุนกระจายเป็นรูปพัด
เส้นทางของ backtest จบที่ +30R เท่ามัธยฐานพอดี แต่ 5% ของรอบจบที่ 0R หรือต่ำกว่า ราว 4% ของรอบจบติดลบหลัง 150 ไม้ ทั้งที่ระบบนี้มีความได้เปรียบจริงตามที่เราสร้างไว้ ระบบดีก็มีช่วง 150 ไม้ที่ไม่ได้อะไรเลยได้
ช่วงความเชื่อมั่นของกำไรเฉลี่ยต่อไม้
จาก Bootstrap 10,000 รอบ กำไรเฉลี่ยต่อไม้ 95% ของรอบอยู่ระหว่าง −0.04R ถึง +0.44R คร่อมศูนย์ เช็กด้วยสูตรได้ใกล้กัน
- ความแกว่งต่อไม้ (SD) = (2 − (−1)) × √(0.4 × 0.6) = 3 × 0.49 ≈ 1.47R
- SE (Standard error ค่าคลาดเคลื่อนมาตรฐาน) ของค่าเฉลี่ย = 1.47 ÷ √150 = 1.47 ÷ 12.25 ≈ 0.12R
- ช่วง 95% ≈ 0.2 ± 1.96 × 0.12 = 0.2 ± 0.24 = −0.04R ถึง +0.44R
ความหมายคือ 150 ไม้ยังแยกระบบนี้ออกจากระบบที่ไม่มีความได้เปรียบไม่ได้อย่างมั่นใจ ถ้าอยากให้ขอบล่างพ้นศูนย์ ต้องมีจำนวนไม้ n ที่ 1.96 × 1.47 ÷ √n < 0.2 ได้ √n > 14.4 หรือราว 208 ไม้ขึ้นไป และนั่นยังเป็นกรณีที่ไม้ในอนาคตมาจากระบบเดียวกันจริง
แบบตัดไม้และหักต้นทุน 0.1R ต่อไม้ ทำให้ Expectancy ลดจาก 0.2R เหลือราว 0.1R ช่วงความเชื่อมั่นกว้างเป็น −0.15R ถึง +0.35R และราว 21% ของรอบจบติดลบ ต้นทุนเล็ก ๆ ต่อไม้กินความได้เปรียบครึ่งหนึ่ง ดูเรื่องต้นทุนที่หายไปใน backtest ได้ใน ทำไมผลจริงแย่กว่า backtest
ควรวางแผนที่เปอร์เซ็นไทล์ไหน
ไม่มีตัวเลขบังคับ แต่หลายคนใช้เปอร์เซ็นไทล์ 95 เป็นตัววางแผน ส่วนเปอร์เซ็นไทล์ 99 เป็นตัวทดสอบว่าทนได้ไหม ในตัวอย่างนี้ เปอร์เซ็นไทล์ 99 ของแบบสลับลำดับอยู่ที่ 21R
วิธีแปลงเป็นความเสี่ยงต่อไม้
- ตั้ง Drawdown สูงสุดที่รับได้ทั้งเงินและใจ เช่น 10% ของทุน
- หาร Drawdown เปอร์เซ็นไทล์ 95 จาก Bootstrap ซึ่งระวังกว่าแบบสลับ: 10% ÷ 21R ≈ 0.48% ต่อไม้
- ปัดลงอีกสำหรับต้นทุนและสภาพตลาดที่ backtest ไม่เห็น เช่น ใช้ราว 0.4%
ถ้าเสี่ยงไม้ละ 1% ตามความเคยชิน แผนนี้ต้องพร้อมเจอ Drawdown ราว 21% ใน 1 ช่วง 150 ไม้ ซึ่งเกิดได้ราว 1 ใน 20 แม้ระบบไม่ได้เสีย เทียบตัวเลขกับ เสี่ยงไม้ละ 1% และ แพ้ติดกันกี่ไม้ถึงปกติ
Risk of ruin จากการจำลอง
Risk of ruin ในทางปฏิบัติ คือโอกาสที่ Drawdown ไปถึงระดับที่คุณจะหยุดหรือพอร์ตเสียหายหนัก นับได้ตรง ๆ จากรอบจำลอง ใน Bootstrap 150 ไม้ของตัวอย่างนี้
| Drawdown ที่นับเป็น “ล้ม” | โอกาส |
|---|---|
| 15R ขึ้นไป | 25% |
| 20R ขึ้นไป | 8% |
| 30R ขึ้นไป | 0.6% |
| 20R ขึ้นไป หลังหักต้นทุน 0.1R และข้าม 10% | 19% |
ถ้าเสี่ยงไม้ละ 1% และหยุดเมื่อพอร์ตลง 20% มีโอกาสราว 8% ที่จะต้องหยุดใน 150 ไม้แรก ถ้าลดเหลือไม้ละ 0.5% ระดับเดียวกันคือ 40R ซึ่งเกิดใน 6 จาก 10,000 รอบ ความเสี่ยงต่อไม้คือคันโยกที่ใหญ่ที่สุดที่คุมได้เอง ตัวเลขนี้นับเฉพาะ 150 ไม้ ยิ่งเทรดนาน โอกาสเจอ Drawdown ลึกยิ่งสูงขึ้น
ในการทดสอบย้อนหลังของเรา
- ความแกว่งจากโชค: เราทดสอบการเปิดทองคำ (XAUUSD) วันละไม้ตอน 06:30 น. เวลาไทย ไม้ละ 0.10 lot ทุน 10,000 ดอลลาร์ Stop loss 50 ดอลลาร์ ทำกำไร 300 ดอลลาร์ (RR 1:6) ปี 2022–2025 ใช้ข้อมูลราคาราย 1 นาที มกราคมถึงกันยายน 2026 ใช้ tick จริง ปีละราว 250 ไม้ แค่โชคล้วน ๆ ก็ทำให้ผลรายปีแกว่งได้ราว ±2,000 ดอลลาร์ (1 SE) และกติกาเลือกทิศทั้ง 9 แบบที่ลอง ผลรวม 5 ปีอยู่ในช่วง ±2 SE จากศูนย์ทุกแบบ แยกจากโชคไม่ได้ เป็นหลักการเดียวกับช่วงความเชื่อมั่นด้านบน รายละเอียดอยู่ใน แพ้ติดกันกี่ไม้ถึงปกติ
- Drawdown จากการสลับลำดับ: ในงานวิจัยช่วงแรก เราสลับลำดับเทรด 1,000 รอบ กับระบบย่อตัว Fibonacci บนทองคำ H4 (ข้อมูลแท่ง H4 ไม่ใช่ tick) ที่ชนะราว 20% ที่ RR ราว 1:5 Drawdown ที่เปอร์เซ็นไทล์ 90 ออกมาราว 82% ของกำไรสุทธิทั้งช่วง ระบบชนะน้อยแบบนี้ต้องเสี่ยงต่อไม้น้อยมาก
ทั้งหมดเป็นผลทดสอบย้อนหลัง ผลในอดีตไม่ได้บอกผลในอนาคต และไม่ใช่ผลตอบแทนที่ควรคาดหวัง
ข้อจำกัดที่ต้องรู้
- สมมติว่าแต่ละไม้ไม่เกี่ยวกัน ถ้าระบบแพ้เป็นกระจุกจริง เช่น ระบบตามเทรนด์ที่แพ้ติดช่วงตลาดไซด์เวย์ การสลับแบบสุ่มจะกระจายไม้แพ้ออกจากกัน แล้วได้ Drawdown ตื้นกว่าความจริง เช็กง่าย ๆ ถ้า Drawdown ใน backtest อยู่สูงกว่าเปอร์เซ็นไทล์ 95 ของการสลับ ไม้แพ้น่าจะมาเป็นกลุ่ม ลองสุ่มเป็นก้อน (สุ่มทีละช่วง 10–20 ไม้ติดกัน) แทน
- จับการเปลี่ยนสภาพตลาดไม่ได้ Monte Carlo เขย่าได้แค่ไม้ที่เคยเกิด ถ้าตลาดเปลี่ยนจนระบบเลิกได้เปรียบ ไม่มีรอบจำลองไหนเห็น อ่านต่อใน เมื่อสภาพตลาดเปลี่ยน
- ขยะเข้า ขยะออก ถ้ารายการเทรดมาจากค่าที่ปรับจนเข้ากับอดีต ผลจำลองจะดีเกินจริงไปด้วย ต้องใช้คู่กับการทดสอบนอกช่วงข้อมูลแบบ Walk-forward และระวัง Overfitting
- ไม้ที่เปิดซ้อนกัน ถ้าระบบถือหลายไม้พร้อมกัน Drawdown ระหว่างไม้ที่ยังเปิดอยู่จะไม่อยู่ในรายการกำไรขาดทุนปิดไม้ ตัวเลขที่ได้จึงเป็น Balance drawdown ซึ่งตื้นกว่า Equity drawdown
Monte Carlo ไม่ได้ทำให้ระบบดีขึ้น มันแค่บอกว่ารายการเทรดชุดนี้เจ็บได้แค่ไหน ถ้ารายการเทรดเชื่อได้น้อย ผลจำลองก็เชื่อได้น้อยเท่ากัน
ลองทำเองกับรายการเทรดของคุณ
- ส่งออกกำไรขาดทุนรายไม้จากรายงาน backtest (ใน MT5 ดูตาราง Deals ในรายงาน) แปลงเป็นหน่วย R โดยหารด้วยเงินที่เสี่ยงต่อไม้ ถ้าระบบเสี่ยงไม่คงที่
- สลับลำดับ 1,000–10,000 รอบ เก็บ Max drawdown และแพ้ติดยาวสุดของทุกรอบ
- ทำ Bootstrap อีกชุด เก็บ Max drawdown กำไรรวม และกำไรเฉลี่ยต่อไม้
- ทำซ้ำโดยหักต้นทุนเพิ่มทุกไม้ เช่น เท่ากับ spread อีกหนึ่งเท่า
- อ่านมัธยฐาน เปอร์เซ็นไทล์ 95 และ 99 แล้วตั้งความเสี่ยงต่อไม้จากเปอร์เซ็นไทล์ 95 ของ Bootstrap
แกนของการสลับลำดับเขียนได้สั้น ๆ แบบนี้ (JavaScript)
function maxDD(trades) { // trades = กำไรขาดทุนรายไม้ หน่วย R
let eq = 0, peak = 0, dd = 0;
for (const r of trades) { eq += r; peak = Math.max(peak, eq); dd = Math.max(dd, peak - eq); }
return dd;
}
function shuffled(a) { // Fisher–Yates
a = a.slice();
for (let i = a.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [a[i], a[j]] = [a[j], a[i]]; }
return a;
}
const dds = Array.from({ length: 10000 }, () => maxDD(shuffled(trades))).sort((x, y) => x - y);
console.log('median', dds[5000], 'p95', dds[9500]);
Bootstrap เปลี่ยนแค่ shuffled เป็นการสุ่มหยิบ trades[Math.floor(Math.random() * n)] จำนวน n ครั้ง
ข้อผิดพลาดที่เจอบ่อย
- ใช้ Drawdown ในรายงาน backtest เป็นเพดาน ในตัวอย่าง backtest เห็น 9R แต่ 72% ของลำดับอื่นเจ็บกว่า และ 1 ใน 20 ลึกถึง 18R ขึ้นไป
- ทำแค่การสลับลำดับ กำไรรวมเท่าเดิมทุกรอบ ทำให้ลืมว่าจำนวนไม้ชนะในอนาคตก็แกว่ง Bootstrap ให้ภาพที่ระวังกว่า
- จำลองจากรายการไม้น้อย 30–50 ไม้ จำลองกี่รอบก็ได้ช่วงที่กว้างและเชื่อได้น้อย ช่วงความเชื่อมั่นที่คร่อมศูนย์คือสัญญาณว่ายังรู้ไม่พอ
- ลืมต้นทุน หัก 0.1R ต่อไม้ในตัวอย่าง ทำให้โอกาสจบติดลบจากราว 4% เป็นราว 21%
- คิดว่าผลจำลองที่ดีคือหลักฐานว่าระบบใช้ได้ Monte Carlo วัดความแกว่งของไม้ที่มีอยู่ ไม่ได้ทดสอบว่าความได้เปรียบยังอยู่ในตลาดวันนี้
คำถามที่พบบ่อย
ต้องจำลองกี่รอบถึงพอ
สำหรับดูมัธยฐานและเปอร์เซ็นไทล์ 95 ของ Drawdown ราว 1,000 ถึง 10,000 รอบก็นิ่งแล้ว เพิ่มรอบไม่ได้ทำให้ผลแม่นขึ้นกว่าคุณภาพของรายการเทรดที่ใส่เข้าไป ถ้ารายการเทรดมีแค่ 30 ไม้ จำลองล้านรอบก็ยังเชื่อได้น้อย
สลับลำดับกับ Bootstrap ใช้แบบไหน
ใช้ทั้งสองแบบ สลับลำดับตอบว่า กำไรรวมเท่าเดิม แต่ระหว่างทางอาจเจ็บได้แค่ไหน Bootstrap ตอบเพิ่มว่า ถ้าโชคเรื่องจำนวนไม้ชนะต่างไปเล็กน้อย กำไรรวมและกำไรเฉลี่ยต่อไม้จะแกว่งแค่ไหน ส่วนใหญ่ Bootstrap ให้ Drawdown ที่เปอร์เซ็นไทล์ 95 ลึกกว่า จึงเป็นด้านที่ระวังกว่า
ผล Monte Carlo ดีแล้ว เอาไปใช้เงินจริงได้เลยไหม
ยังไม่ควร Monte Carlo เขย่าได้แค่ไม้ที่อยู่ในรายการ ถ้ารายการมาจากการปรับค่าให้เข้ากับอดีต หรือมาจากสภาพตลาดแบบเดียว ผลจำลองก็ดีเกินจริงตามไปด้วย ควรผ่านการทดสอบนอกช่วงข้อมูลแบบ Walk-forward และทดลองด้วยเงินน้อยก่อน
เนื้อหานี้เป็นความรู้ทั่วไป ไม่ใช่คำแนะนำการลงทุน การเทรดมีความเสี่ยง อาจสูญเสียเงินลงทุนทั้งหมด