ผ่านการทดสอบ 5 กลุ่ม, สถานะจริงคือ 1 ชิ้น――สิ่งที่การทดสอบย้อนหลัง 129 ครั้งสอนเรา
สิ่งที่คุณจะเข้าใจจากบทความนี้
- วิธีการ固定 “วิธีค้นหา” และ “เงื่อนไขการรับเข้าทำงาน” ก่อนรัน backtest
- ผลลัพธ์จากการตรวจสอบ 129 ครั้งที่ 5 บทที่จริงเป็นปรากฏการณ์เดียวกัน
- เหตุผลที่ไม่เลือกกฎที่มีผลการทดสอบดีที่สุด
เริ่มต้น: กำหนดวิธีค้นหาก่อน
เมื่อค้นหากฎ EA ผู้คนส่วนใหญ่จะทำการทดลอง หากดูแล้วดีให้เพิ่มเงื่อนไข แล้วทดลองใหม่ ฉันก็เคยทำแบบนั้น แต่ข้อบกพร่องของวิธีนี้คือยิ่งลองมาก โอกาสที่จะเข้าใจว่ากฎที่ให้ผลดีโดยบังเอิญเป็นของจริงมีมากขึ้น
ดังนั้นคราวนี้จึงกลับทิศทาง กล่าวคือ ก่อนรัน backtest หนึ่งครั้ง ให้บันทึกและกำหนดทั้งหมดไว้ล่วงหน้า
- เลือกคู่สกุลเงินและกรอบเวลาในการค้นหา
- เลือกประเภทกลยุทธ์ที่ลอง
- ลองพารามิเตอร์กี่แบบ
- เงื่อนไขอะไรบ้างที่จะนำมาใช้งาน
- สิ่งที่ไม่ควรทำ
เราเรียกสิ่งนี้ว่า “การประกาศล่วงหน้า” บทความนี้จะบอกเรื่องราวว่า หลังประกาศล่วงหน้าแล้วทำการตรวจสอบ 129 ครั้ง ผลลัพธ์ที่ผ่าน 5 บทนั้นจริงๆ แล้วเป็นปรากฏการณ์เดียวกัน
กำหนดขอบเขตการค้นหาล่วงหน้า
ขอบเขตการค้นหาที่กำหนดไว้มีดังนี้
| รายการ | เนื้อหาที่กำหนดไว้ |
|---|---|
| คู่สกุลเงิน | คู่สกุลเงินหลัก 2 คู่ |
| กรอบเวลา | กรอบ 15 นาที และ 30 นาที (คู่แรก), 1 ชั่วโมง (คู่ที่สอง) |
| ประเภทกลยุทธ์ | 8 แบบ (Breakout แนวร้ง, mean reversion, ความเบี่ยงเบนตามช่วงเวลา ฯลฯ) |
| พารามิเตอร์ | สูงสุด 12 แบบต่อแต่ละกลยุทธ์ |
| การหยุดขาดทุน/กำไร | Stop loss 2 เท่า ATR, take profit 2 เท่า ของระยะ stop loss ไม่ค้นหา |
| วิธีแบ่งช่วงเวลา | วันที่ก่อนเรียนรู้, หลังตรวจสอบ |
ขั้นต่ำ 5 นาทีหรือต่ำกว่าไม่ได้ถูกพิจารณาเป้าหมายตั้งแต่เริ่ม เนื่องจากเมื่อคำนวณต้นทุนจริงแล้ว ระยะ stop loss ใดๆ ก็มิอาจสร้างกำไรให้เพียงพอและไม่สำเร็จ
มีบางประเด็นที่ทำให้สับสนระหว่างทาง ผมคิดจะลอง width ของ stop loss และ take profit หลายแบบ แต่เมื่อคำนวณจำนวนชุดทดสอบทั้งหมดจะกลายเป็น 516 แบบ ซึ่งเกินขีดจำกัดที่ประกาศไว้ 288 แบบ เมื่อจำนวนการทดลองมากขึ้น ความบังเอิญที่ผ่านก็มีมากขึ้น ดังนั้นจึงยืนยันและกลับไป fixed ตามประกาศ สุดท้ายจำนวนการทดสอบรวมคือ 43 แบบ × 3 (คู่สกุลเงินและกรอบเวลา) เท่ากับ 129 แบบ
เงื่อนไขการนำมาใช้งานก็ต้องกำหนล่วงหน้า
เงื่อนไขการนำมาใช้งานมี 7 ข้อ และทุกข้อจะต้องผ่านทั้งหมดก่อนเข้าสู่ขั้นตอนถัดไป (การสังเกตการณ์โดยไม่ใช้งบจริง)
| # | เงื่อนไข | เป้าหมาย |
|---|---|---|
| 1 | Profit Factor ของช่วงทดสอบมากกว่า 1.2 | ฐานในการนำมาใช้งาน |
| 2 | จำนวนการเทรดในช่วงทดสอบมากกว่า 30 ครั้ง | ขจัดความบังเอิญที่เกิดจากจำนวนคำสั่งน้อย |
| 3 | ความถี่มากกว่า 10 ครั้งต่อเดือน | หากการตัดสินใจใช้เวลามากกว่า 1 ปี จะไม่เลือกตั้งแต่ต้น |
| 4 | กำไรเฉลี่ยมากกว่าต้นทุนอย่างน้อย 3 เท่า | ขจัดการเสียต้นทุนล่วงหน้า |
| 5 | Profit Factor ของช่วงเรียนรู้มากกว่า 1.0 | หากช่วงเรียนรู้ขาดทุน การทำกำไรในช่วงทดสอบอาจเป็นความบังเอิญ |
| 6 | เฉลี่ยยังบวกอย่างน้อย 1 แถว แม้อย่างน้อยจะมี 1 ชนะใหญ่ | ไม่พึ่งพาชนะใหญ่เพียงครั้งเดียว |
| 7 | Profit Factor อย่างน้อย 1.0 ในกรอบเวลาใกล้เคียง หรืออีกคู่ | ลดความบังเอิญในการทดสอบหลายๆ แบบ |
โดยเฉพาะข้อ 7 เป็นกุญแจสำคัญ หากลอง 129 ครั้ง อาจพบกฎที่ไม่มีความได้เปรียบใดๆ แต่เงื่อนไขข้อ 1–6 ผ่าน จะมีกรณีที่ผ่านได้เกิดขึ้น ฉะนั้นจึงขอให้ตรวจสอบว่า “ถ้าเปลี่ยนเงื่อนไขนิดหน่อย ก็ยังรอดอยู่หรือไม่”
พร้อมกันนี้ได้ตัดสินใจเรื่องที่ไม่ทำด้วย เช่น ไม่เพิ่มกลยุทธ์เมื่อดูผลลัพธ์เสร็จ ไม่เปลี่ยนค่าของเงื่อนไข ไม่รับ candidate ที่ผ่านแค่หนึ่งรายการเป็นพิเศษ หากไม่มีผ่านเลย ก็ยอมรับว่า “ขอบเขตนี้ไม่สามารถหาความได้เปรียบได้”
ผลลัพธ์: ผ่าน 5 บท แต่เนื้อหาทั้งหมดเป็นปรากฏการณ์เดียว
จาก 129 แบบ ผ่านเงื่อนไขข้อ 1–6 ได้ 5 บท และทั้ง 5 บทผ่านข้อ 7 ด้วย
| # | กรอบเวลา | พารามิเตอร์ | PF ของช่วงทดสอบ | จำนวนการเทรด | PF ของช่วงเรียนรู้ |
|---|---|---|---|---|---|
| 1 | 15 นาที | อ้างอิง 4 บท, เกณฑ์ 0.8 | 1.58 | 65 | 1.23 |
| 2 | 30 นาที | อ้างอิง 4 บท, เกณฑ์ 0.5 | 1.48 | 67 | 1.10 |
| 3 | 15 นาที | อ้างอิง 8 บท, เกณฑ์ 0.8 | 1.44 | 72 | 1.09 |
| 4 | 30 นาที | อ้างอิง 8 บท, เกณฑ์ 0.8 | 1.35 | 56 | 1.06 |
| 5 | 30 นาที | อ้างอิง 4 บท, เกณฑ์ 0.8 | 1.34 | 58 | 1.10 |
เมื่อดูเนื้อหาของ 5 บททั้งหมด พบว่าเป็นการเปิดตลาดในคู่สกุลเงินเดียวกัน และในช่วงเวลาที่ตลาดเปิด ทำตามทิศทางของ 4-5 บทก่อนหน้า วิธีคิดของ 2 แบบต่างกันเพียงชื่อ แต่การใช้งานจริงแทบจะเหมือนกัน ในกรณีของคู่สกุลเงินอีกคู่หนึ่ง Profit Factor ของกฎที่คล้ายกันอยู่ที่ 0.86–0.98 ไม่ผ่าน
ดังนั้น การค้นพบที่เป็นอิสระจากการทดสอบ 129 ครั้งจริงๆ แล้วมีเพียง 1 ปรากฏการณ์
นี่ไม่ใช่ข่าวร้ายทั้งหมด หาก 5 บทเหล่านี้ไม่มีความสัมพันธ์กันและกระจายไปทั้งหมด ก็ต้องสงสัยว่าเป็นการบังเอิญ แต่ปรากฏการณ์เดียวกันที่ปรากฏในกรอบเวลาหลายรายการและพารามิเตอร์ที่ต่างกัน จะเป็นหลักฐานที่ไม่ใช่บังเอิญ ในขณะเดียวกัน ปรากฏการณ์นี้เป็นเฉพาะคู่สกุลเงินและช่วงเวลา ไม่ใช่กฎที่ใช้ได้ทั่วไป
จะเลือกไปใช้อันไหน: ไม่เลือกอันที่มีผลงานดีที่สุด
จาก 5 บท เลือกใช้งานไม่ใช่อันที่มี Profit Factor สูงสุดเป็นอันดับ 1 แต่เป็นอันที่ 3
เหตุผลคือความมั่นคงของผลเมื่อเปลี่ยนกรอบเวลา การตั้งค่าอ้างอิง 8 บทบน 15 นาทีให้ PF 1.44, บน 30 นาทีให้ 1.35 ซึ่งแตกต่างกัน 0.09 การตั้งค่าอ้างอิง 4 บทให้ 1.58 และ 1.34 ซึ่งต่างกัน 0.24 เวลาเปลี่ยนกรอบเวลาผลลัพธ์ไม่ผันผวนมาก จึงถือว่าใกล้เคียงกับความจริงมากกว่า
ทางสถิตยังไม่ตัดสินใจ
หลังนำไปใช้งานแล้ว ใช้ค่าอ้างอิงด้วย Bootstrap (การสุ่มเทรดซ้ำ 10,000 ครั้ง) เพื่อดูความมั่นคง ผลลัพธ์พบว่า 5 บททั้งหมด “แตกต่างจากศูนย์ไม่ได้”
| # | ช่วงความเชื่อมั่นของกำไรเฉลี่ย 95% (R) | ความน่าจะเป็นที่ค่าเฉลี่ยเป็นบวก |
|---|---|---|
| 1 | −0.042 〜 +0.679 | 96% |
| 2 | −0.082 〜 +0.635 | 95% |
| 3(ใช้งาน) | −0.074 〜 +0.593 | 94% |
| 4 | −0.165 〜 +0.585 | 83% |
| 5 | −0.171 〜 +0.581 | 85% |
※R คือผลกำไรขาดทุนโดยหน่วยเป็น “การหยุดขาดทุนหนึ่งครั้ง”
อย่างไรก็ตาม เหตุผลไม่ใช่เพราะมีจำนวนการเทรดยังไม่มาก แต่ไม่ขึ้นกับค่าผิดปกติ ใครที่เป็นตัวเลือกผ่าน 5 อันดับจะไม่กลับทิศทางรวมของสัญญาณทั้งหมด เว้นแต่จำนวนเหตุการณ์ที่ต้องการเพื่อให้มั่นใจจะถึงประมาณ 118 รายการ ในตอนนี้มี 72 รายการ
สิ่งสำคัญอีกข้อหนึ่งคือ การตรวจความมั่นคงนี้ทำหลังจากเลือกผู้สมัคร หากดูผลแล้วข้อ 1 ใกล้จะมีข้อสรุป (ต้องการจำนวนกรณี 81 รายการ) แต่การดูผลแล้วจะเปลี่ยนการเลือกเป็นการตัดสินใจหลังจากเห็นผล ฉะนั้นจึงยังคงไม่เปลี่ยนการเลือก และบันทึกไว้เป็นค่าอ้างอิงเท่านั้น ในการค้นหาครั้งถัดไปจะบรรจุการตรวจนี้ไว้ตั้งแต่ต้นเป็นการประกาศล่วงหน้า
Data เพิ่มอีก 2 วัน ทำให้ผู้สมัครลดลง
อีกข้อมูลหนึ่งที่ควรบันทึก เมื่อครั้งแรกมีผู้สมัคร 7 ราย แต่หลังเพิ่มข้อมูล 2 วันกลับพบเหลือ 5 ราย
การลดลง 2 บทในเวลาเพียงสองวันบ่งชี้ว่าการค้นหานี้อยู่ใกล้เงื่อนไขการรับใช้งานมากเกินไป ทั้งคู่ที่นำมาใช้งานยังคงอยู่ในเงื่อนไขส่วนใหญ่ แต่ข้อเท็จจริงว่าเงื่อนไขผ่านแล้วไม่ได้แปลว่าเป็นความได้เปรียบ
ข้อสรุปต้นทุนผิดไป
สุดท้าย บันทึกความล้มเหลว ก่อนการตรวจสอบ ค่าใช้จ่ายในการเทรดเดิมคือ 600 เยนต่อ 1 ล็อต แบบ Round-trip แต่หลังตรวจสอบพบว่าเป็น 900 เยน
เมื่อปรับค่าใช้จ่าย ต้นทุนจริงของคู่สกุลเงินที่ใช้งานลดลงจาก 0.38 pips เป็น 0.621 pips ประมาณเพิ่มขึ้น 64% หนึ่งในนั้นซึ่งผ่านได้ตามเงื่อนไขข้อ 4 (กำไรเฉลี่ยมากกว่าต้นทุน 3 เท่า) ก็ลดลงจากเดิม 2.7 เท่ามาเป็น 1.7 เท่า จึงจำเป็นต้องตรวจข้อมูลจากแหล่งข้อมูลต้นทางเพื่อความแม่นยำ
สรุป: 5 วิธีทดสอบที่ควรรู้เพื่อทำงานกับการตรวจสอบหลายครั้ง
- กำหนดขอบเขตการค้นหา จำนวนที่จะลอง เงื่อนไขการรับเข้าทำงาน ก่อนรัน backtest
- กำหนดขีดจำกัดจำนวนการลอง หากเกินให้ลดขอบเขตการค้นหา
- ให้มั่นใจว่าเงื่อนไขที่ผ่านจะยังผ่านเมื่อปรับเปลี่ยนเล็กน้อย
- นับชนิดปรากฏการณ์ที่ผ่าน มากกว่าการนับจำนวนบทที่ผ่าน
- การตรวจที่ทำในภายหลังไม่ควรโค่นล้มการตัดสินใจที่ทำไว้ก่อนหน้า
หลังจากลอง 129 ครั้ง ปรากฏการณ์ที่เหลืออยู่คือหนึ่งเรื่องนี้เท่านั้น ยังไม่ทราบว่าบทนี้จริงหรือไม่ ต้องรอสะสมจำนวนกรณีเพียงพอในสถานการณ์ที่ไม่ใช้งบจริง ก่อนครั้งหน้า จะบรรยายเรื่องกฎอื่นที่ผ่านเงื่อนไขทั้งหมดแต่ไม่ได้เลื่อนขั้น
(เพิ่มเติม) บทความต่อไป「ทั้งหมดยังเขียวก็ไม่เลื่อนขั้น — เหตุผลที่ละทิ้งหลังผ่านเงื่อนไขการรับเข้าทำงาน」ได้เผยแพร่แล้ว
พิเศษ: ตรวจสอบด้วยการ backtest ของตัวเอง
การตรวจสอบ เช่น “ตรวจสอบว่าแม้จะไม่รวมส่วนบนก็ยังมีสัญญาณเปลี่ยนทิศ” “ช่วงความเชื่อมั่นของค่าเฉลี่ย 95%” และ “จำนวนชุดทดสอบที่ลอง” และ “ความยืดหยุ่นของต้นทุน” สามารถสรุปได้ในชุดเครื่องมือการตรวจสอบของ MT5“การตรวจสอบความมั่นคงของ EA”ได้แปลงให้เป็นรูปแบบแล้ว การตัดสินใจมีเงื่อนไขคงที่ และไม่สามารถอ่อนลงเพียงดูผลลัพธ์ หากคุณสนใจ ลองดูได้
※บทความนี้เป็นการนำเสนอแนวทางการทดสอบของผู้เขียนเอง ไม่สนับสนุนการซื้อขายของคู่สกุลเงิน กลยุทธ์ หรือ EA ใดๆ ผลทดสอบในอดีตไม่ใช่การรับประกันผลในอนาคต