การออปติไมซ์พารามิเตอร์ใน MetaTrader 5 คือการค้นหา คุณประกาศช่วงค่าให้แต่ละอินพุต Strategy Tester รันทุกชุดค่า แล้วยื่นตารางที่เรียงตามตัวชี้วัดที่คุณเลือกมาให้ ส่วนที่ยากไม่ใช่การรันมัน ส่วนที่ยากคือตารางนั้นมีแถวบนสุดเสมอ และแถวบนสุดแทบจะผิดเสมอ
สิ่งที่คุณจะได้จากบทความนี้คือขั้นตอนที่ผลิตการตัดสินใจออกมา ไม่ใช่ผลิตตัวเลข คือการค้นหาที่คุณปกป้องได้ วิธีอ่านตารางผลการค้นหาที่รอดจากการเจอช่วงเวลาที่สอง และเงื่อนไขหยุด
| เงื่อนไขการทดสอบ | |
|---|---|
| รหัสการทดลอง | EXP-PARAM-SEARCH-OUTCOMES-001 |
| การทดลองแม่ | EXP-BUILDER-TEMPLATE-BASELINE-001 |
| แหล่งที่มา | ea-templates-manifest.js → bt.explored |
| ประชากร | 8 recorded searches of the 53 measured templates |
| สัญลักษณ์ / ไทม์เฟรม | USDJPYm, M5 and H1 |
| โมเดล | M1 OHLC (Model=1), Exness MT5, measured 2026-06-18 |
| พารามิเตอร์ที่เปลี่ยนค่า | stop loss and take profit only |
| ยืนยันล่าสุด | 2026-08-25 |
การตั้งค่า: กริด การแบ่งช่วง และข้อมูล
มีการตั้งค่าสามอย่างที่ตัดสินว่าการค้นหานั้นคุ้มจะรันหรือไม่ตั้งแต่ต้น ตั้งผิดเมื่อไร ตารางผลการค้นหาก็กลายเป็นเครื่องสุ่มตัวเลขที่แพงมาก
| ฟิลด์ | อยู่ที่ไหน | ตั้งเป็นอะไร | ทำไม |
|---|---|---|---|
| Optimisation | แท็บ Settings | Slow complete algorithm สำหรับกริดเล็ก | โหมดพันธุกรรมเก็บแค่ตัวอย่างของพื้นที่ค้นหา ถ้ามี 12–32 ชุดค่าคุณมีกำลังพอจะดูมันทั้งหมด |
| Start / Step / Stop | แท็บ Inputs แยกตามอินพุต | พารามิเตอร์สองตัว สเต็ปหยาบ | ทุกอินพุตที่คุณติ๊กคูณกริดให้ใหญ่ขึ้น ของเราขยับสองตัว |
| Forward | แท็บ Settings | 1/2, 1/3 หรือ 1/4 | แบ่งช่วงเวลาให้เทสเตอร์ให้คะแนนครึ่งหลังแยกต่างหาก นี่คือการตรวจที่เป็นเหตุผลของการรันการค้นหานี้ตั้งแต่แรก |
| Optimisation criterion | แท็บ Settings | ตัดสินใจก่อนจะเห็นตารางผล | มันคือตัวชี้วัดที่เทสเตอร์ใช้จัดอันดับผ่าน มันจึงเป็นตัวตัดสินว่าแถวไหนคือแถวบนสุด |
| Modelling | แท็บ Settings | ใช้โหมดหยาบเพื่อกวาด แล้วรันผู้รอดชีวิตซ้ำบนติกจริง | โหมดกวาดมีไว้จัดอันดับผู้สมัคร ไม่ใช่มีไว้สร้างตัวเลขที่จะเผยแพร่ |
| Period | แท็บ Settings | ยาวพอจะบรรจุสภาวะตลาดได้มากกว่าหนึ่งแบบ | การค้นหาภายในเทรนด์เดียวจะเจอค่าตั้งที่ขี่เทรนด์นั้น |
เกณฑ์นี้สมควรได้รับการตัดสินใจ ไม่ใช่ปล่อยไว้ตามค่าเริ่มต้น การจัดอันดับด้วยกำไรสุทธิให้รางวัลกับผ่านที่เสี่ยงมากที่สุด ส่วนการจัดอันดับด้วยตัวชี้วัดที่อิงดรอว์ดาวน์ให้รางวัลกับผ่านที่เทรดน้อยที่สุด ตัวประกอบการฟื้นตัวมีอยู่ก็เพราะคำตอบสองอันนั้นไม่ตรงกัน การค้นหาของเราเองไม่ได้ถูกตัดสินด้วยอันดับของเทสเตอร์เลย ผู้รอดชีวิตแต่ละตัวถูกให้คะแนนด้วย profit factor พาดข้ามสามหน้าต่างเวลาที่แยกจากกัน และอันดับภายในหน้าต่างใดหน้าต่างหนึ่งไม่เคยตัดสินอะไรเลย
คุณภาพข้อมูลมาก่อน เพราะการค้นหาบนติกที่แย่คือการออปติไมซ์ช่องว่างในข้อมูล พูดสั้น ๆ คือคุณภาพการจำลองที่ต่ำกว่า 90% ทำให้ตารางผลการค้นหาของระบบที่เทรดในวันใช้ไม่ได้ และการรันที่สร้างจากข้อมูลติกที่ประมาณค่าขึ้นมา ไม่สามารถแยกแยะจุดตัดขาดทุนที่วางอยู่ข้างในแท่งได้
- รันแบ็คเทสต์เดี่ยว ๆ ก่อนหนึ่งครั้งที่ค่าเริ่มต้น แล้วเก็บรายงานไว้ ถ้าไม่มีเส้นฐาน ตารางผลการค้นหาก็ไม่มีอะไรให้เอาชนะ — วิธีแบ็คเทสต์ ครอบคลุมผ่านนั้นตั้งแต่ต้นจนจบ
- ที่แท็บ Settings ตั้ง Optimisation เป็นการค้นหาแบบครบทุกชุดค่าสำหรับกริดเล็ก และตั้ง Forward เป็น
1/3เพื่อให้เทสเตอร์กันหนึ่งในสามท้ายของช่วงเวลาไว้ - ที่แท็บ Inputs ให้ติ๊กเฉพาะพารามิเตอร์ที่คุณกำลังทดสอบจริง ๆ แล้วให้ค่า Start, Step และ Stop กับแต่ละตัว อินพุตสองตัวที่สเต็ปหยาบดีกว่าสี่ตัวที่สเต็ปละเอียด
- กด Start แล้วปล่อยให้มันจบ อ่านแท็บ Optimisation Results เป็นตาราง และอ่าน Optimisation Graph เป็นรูปทรง ยอดแหลมเดี่ยวคือคำเตือน ที่ราบสูงคือการค้นพบ
- หยิบผู้รอดชีวิต ไม่ใช่ผู้ชนะ แล้วรันแต่ละตัวซ้ำเป็นแบ็คเทสต์ เดี่ยว บนช่วงเวลาก่อนหน้าต่างที่ใช้ออปติไมซ์ นี่คือขั้นตอนที่ผลิตคำตัดสินเชิงลบทุกอันในชุดของเรา และเป็นขั้นที่คนข้าม
อ่านผลลัพธ์: สามช่วงเวลา ไม่ใช่ช่วงเดียว
นี่คือชุดที่เราบันทึกไว้ทั้งหมด เรียงตาม profit factor ในกลุ่มตัวอย่างที่ดีที่สุดที่แต่ละการค้นหาทำได้ IS คือช่วงเวลาที่ค่าตั้งถูกฟิตเข้ากับมัน OOS คือโฮลด์เอาต์ และ prior คือหน้าต่างเวลาก่อนหน้าที่การค้นหาไม่เคยเห็น
| เทมเพลต | กริดที่ค้นหา | IS ดีที่สุด | OOS | ช่วงก่อนหน้า | คำตัดสิน |
|---|---|---|---|---|---|
ichimoku | 12 ชุดค่า × 3 หน้าต่างเวลา | 1.37 | 0.89 | 0.80 | no_robust_edge |
ma_crossover | 20 + 12 ชุดค่า สองไทม์เฟรม | 1.23 | 0.89–0.94 | 0.78 | no_robust_edge |
cci_level | 12 ชุดค่า × 3 หน้าต่างเวลา | 1.07 | 1.05 | 0.92 | no_robust_edge |
adx_trend | 12 ชุดค่า × 3 หน้าต่างเวลา | 1.04 | 0.91 | 0.80 | no_robust_edge |
breakout | 12 ชุดค่า × 3 หน้าต่างเวลา | 1.04 | 0.79–0.89 | 0.64–0.84 | no_robust_edge |
macd_signal | 12 ชุดค่า × 3 หน้าต่างเวลา | — | 1.14–1.15 | 0.74–0.77 | no_robust_edge |
rsi_reversal | 12 ชุดค่า × 3 หน้าต่างเวลา | 0.91 | — | — | no_robust_edge |
bb_bounce | 12 ชุดค่า × 3 หน้าต่างเวลา | 0.91 | — | — | no_robust_edge |
อ่านคอลัมน์ตัวเลขแรกลงมาก่อน แล้วค่อยอ่านตามแนวนอน ผลในกลุ่มตัวอย่างที่ใหญ่ที่สุดในชุดนี้คือตัวที่ร่วงหนักที่สุด ค่า 1.37 ของ ichimoku ตกลงมาที่ 0.89 แล้วต่อไปที่ 0.80 ลำดับนั้นไม่ใช่ความบังเอิญ เพราะค่าตั้งที่ฟิตกับหน้าต่างเวลาหนึ่งได้ดีที่สุด โดยโครงสร้างแล้วคือตัวที่ดูดซับสัญญาณรบกวนของหน้าต่างนั้นไว้มากที่สุด
ทีนี้ดูค่าตั้งที่เข้าใกล้ที่สุดจริง ๆ มันไม่อยู่ในตารางข้างบน เพราะมันไม่เคยเป็นแถวบนสุดของอะไรเลย บนกริด ichimoku เดียวกันนั้น SL50/TP150 ทำได้ 1.18 ในกลุ่มตัวอย่าง 0.99 นอกกลุ่มตัวอย่าง และ 1.00 บนหน้าต่างเวลาก่อนหน้า สามช่วงเวลา ราบเรียบพอ ๆ กันทั้งหมด มันถูกบันทึกไว้ว่าเป็นผู้สมัครที่ใกล้ที่สุด และก็ยังไม่ถูกรับมาใช้ เพราะการเสมอตัวพาดข้ามสามหน้าต่างเวลาไม่ใช่ความได้เปรียบ มันคือการไม่มีความได้เปรียบ ที่วัดมาอย่างระมัดระวัง
เทียบกับนั้น เส้นฐานที่การค้นหาเหล่านี้พยายามเอาชนะอยู่ระหว่าง 0.92 ถึง 1.03 ไม่มีการค้นหาสักครั้งที่ขยับค่าเริ่มต้นซึ่งเผยแพร่ไปแล้วได้
กับดักที่ต้องเลี่ยง
รูปแบบความล้มเหลวที่อยู่ใต้ทั้งห้าข้อคือแบบเดียวกัน การโอเวอร์ฟิตไม่ใช่ความผิดพลาดที่คุณทำตอนจบการค้นหา แต่คือผลลัพธ์เริ่มต้นของการรันการค้นหา และวินัยสามช่วงเวลามีอยู่เพื่อทำให้มันมองเห็นได้ก่อนที่คุณจะลงมือทำตามมัน
ปรับปรุงและวนซ้ำ: เปลี่ยนอะไร และหยุดเมื่อไร
เปลี่ยนทีละอย่าง รันใหม่ แล้วเทียบกับเส้นฐานที่คุณเก็บไว้ ลำดับที่เสียเวลาน้อยที่สุดคือ
- ขยายช่วงเวลาก่อนขยายกริด สภาวะตลาดที่มากขึ้นดีกว่าชุดค่าที่มากขึ้น การค้นหาที่ครอบคลุมเทรนด์เดียวจะเจอค่าตั้งที่ขี่เทรนด์นั้น ไม่ว่าความละเอียดจะเป็นเท่าไร
- จากนั้นทำสเต็ปให้หยาบขึ้น ไม่ใช่จูนให้ละเอียดขึ้น ถ้าผลลัพธ์มีอยู่เฉพาะที่
SL47แปลว่ามันไม่มีอยู่จริง - แล้วค่อยเพิ่มพารามิเตอร์ และเพิ่มก็ต่อเมื่อถึงตอนนั้นเท่านั้น ของเราไม่เคยมาถึงขั้นนี้ เพราะพารามิเตอร์สองตัวก็ไม่ผ่านเกณฑ์สามช่วงเวลาแล้ว
หยุดเมื่อข้อใดข้อหนึ่งเป็นจริง และเขียนไว้ด้วยว่าข้อไหน
- ผู้รอดชีวิตผ่านครบทั้งสามช่วงเวลา เอาไปใช้ได้ และให้บันทึกกริดทั้งหมดที่คุณค้นหาไว้ ไม่ใช่แค่ผ่านที่คุณเก็บไว้
- ผลที่ดีที่สุดในกลุ่มตัวอย่างต่ำกว่า 1.0 คุณได้คำตอบจริง ๆ แล้ว สองในแปดการค้นหาของเราจบลงตรงนี้ และการจบตรงนี้หลังจาก 36 รอบประเมินคือของถูก
- ผู้รอดชีวิตผ่านหน้าต่างหนึ่งแล้วตกอีกหน้าต่างหนึ่งซ้ำ ๆ กฎนั้นขึ้นกับสภาวะตลาด การค้นหาต่อไปก็จะได้แต่ค่าตั้งที่ขึ้นกับสภาวะตลาดมากขึ้นเท่านั้น
- คุณเริ่มอธิบายว่าทำไมหน้าต่างเวลาก่อนหน้า “ไม่ควรนับ” นั่นคือวินาทีที่การค้นหาหยุดเป็นการทดสอบ
บันทึกที่ซื่อสัตย์ของการค้นหาคือช่วงที่คุณกวาด และ คำตัดสิน อยู่ด้วยกันทั้งสองอย่าง ทั้งแปดอันของเราถูกเก็บไว้แบบนั้น ซึ่งเป็นเหตุผลว่าทำไมบทความนี้จึงเขียนขึ้นจากมันได้ตั้งแต่แรก ถ้าเก็บแต่ผู้ชนะไว้อย่างเดียว ก็คงไม่ได้พิสูจน์อะไรเลย
ขั้นตอนถัดไป: ฟอร์เวิร์ดเทสต์ แล้วจึงตัดสินใจ
การออปติไมซ์คือขั้นที่สองจากสี่ขั้น ลำดับคือแบ็คเทสต์ → ออปติไมซ์ → walk-forward → บัญชีทดลอง และแต่ละขั้นกำจัดวิธีที่จะผิดคนละแบบออกไปหนึ่งแบบ
- ฝึกลูปนี้บนอะไรที่คุณควบคุมเอง สร้างกลยุทธ์ใน Builder แล้วค้นหาจุดตัดขาดทุนกับจุดทำกำไรของมันด้วยตัวเอง เพราะกริดที่คุณประกาศเองอ่านอย่างซื่อสัตย์ได้ง่ายกว่ากริดที่คุณรับต่อมามาก
- เวอร์ชันที่เป็นทางการของการตรวจสามช่วงเวลาคือการวิเคราะห์ walk-forward ซึ่งกลิ้งจุดแบ่งไปข้างหน้าแทนที่จะตรึงมันไว้ที่เดียว
- ไม่ว่าการค้นหาจะยื่นอะไรกลับมา รายงานที่มันยื่นกลับมาก็ยังต้องถูกอ่านอยู่ดี การอ่านรายงานแบ็คเทสต์ MT5 ครอบคลุมว่าตัวเลขพาดหัวแต่ละตัวเป็นคำกล่าวอ้างเกี่ยวกับประชากรชุดไหนกันแน่
- ถ้าอยากเห็นว่าบันทึกที่เสร็จสมบูรณ์หน้าตาเป็นอย่างไรเมื่อตัวเลขรอดมาได้จริง ๆ EA ที่เผยแพร่แล้วแต่ละตัวพกรายการเทรดที่ปิดแล้วทั้งหมดและ run manifest มาด้วย
- ทั้งหมดนี้เราทดสอบ ให้คะแนน และบันทึกอย่างไร ระบุไว้ในวิธีการทดสอบของเรา