บัญชีทดลอง การทดสอบย้อนหลัง การทดสอบเดินหน้า และการเล่นตลาดย้อนหลัง
คุณตรวจสอบกลยุทธ์ได้ด้วยบัญชีทดลอง การทดสอบข้อมูลในอดีต การทดสอบแบบเวลาจริง หรือการเล่นตลาดย้อนหลัง แต่ละสภาพแวดล้อมตอบคำถามต่างกันและมีข้อจำกัดเฉพาะ เราอธิบายว่าผลลัพธ์ยืนยันอะไรได้ วิธีรวมต้นทุน และวิธีแยกการเลือกพารามิเตอร์ออกจากการประเมินอย่างอิสระ บทความยังแสดงให้เห็นว่าข้อผิดพลาดของข้อมูลและการจำลองทำให้เส้นผลการดำเนินงานดูดีขึ้นได้อย่างไร ก่อนที่กฎจะเผชิญการดำเนินการคำสั่งจริง

- การทดสอบที่ไม่ระบุสภาพแวดล้อมย่อมตรวจสอบไม่ได้ ตราสาร ช่วงเวลา แหล่งข้อมูลและคุณภาพข้อมูล แบบจำลอง tick แบบจำลองต้นทุน และการแบ่งชุด in-sample กับ out-of-sample หากไม่มีสิ่งเหล่านี้ ผลลัพธ์ก็เป็นเพียงตัวเลขที่ไม่มีหน่วย
- การทดสอบย้อนหลังที่ไม่มีต้นทุนอธิบายระบบคนละระบบกับที่คุณตั้งใจจะเทรด ในการคำนวณด้านล่าง ชุดธุรกรรมเดียวกันให้ผล +12,000 USD เมื่อไม่คิดต้นทุน และเหลือพอดี 0 USD เมื่อรวมสเปรด ค่าคอมมิชชัน และ slippage
- การหาค่าที่เหมาะที่สุดคือการค้นหา ไม่ใช่การยืนยันความถูกต้อง ชุดพารามิเตอร์ที่ดีที่สุดจากการลองหนึ่งพันแบบคือชุดที่ดีที่สุดบนข้อมูลในอดีตนั้น จำนวนรูปแบบที่ตรวจสอบเป็นส่วนหนึ่งของผลลัพธ์พอ ๆ กับตัวผลลัพธ์เอง
- Walk-forward ได้ผลตราบใดที่ชุด out-of-sample ยังไม่ถูกแตะต้อง หากคุณเปลี่ยนกลยุทธ์หลังจากดูผล out-of-sample ช่วงข้อมูลนั้นจะไม่ใช่ out-of-sample สำหรับการปรับทุกรอบหลังจากนั้นอีกต่อไป
- การมองอนาคตแฝงเข้ามาทางที่ไม่ทันสังเกต เช่น เข้าซื้อขายที่ราคาปิดของแท่งเทียนซึ่งสร้างสัญญาณ ใช้อินดิเคเตอร์ที่คำนวณย้อนกลับใหม่ หรือใช้ข้อมูลเศรษฐกิจมหภาคฉบับแก้ไขแล้ว
- Demo และ paper trading ไม่ใช่การทดสอบการดำเนินการคำสั่ง ทั้งสองตรวจสอบกลไกและการปฏิบัติตามกฎ โบรกเกอร์เป็นผู้กำหนดว่าเซิร์ฟเวอร์ทดลองจำลองต้นทุนการดำเนินการได้มากเพียงใด จึงต้องอ่านเอกสารของบัญชีนั้นโดยเฉพาะ ส่วนที่เหลือวัดได้บนบัญชีเงินจริงเท่านั้น และผลวัดนั้นใช้กับขนาดสถานะที่นำมาวัด
- ผลทดสอบเดินหน้าที่เป็นบวกไม่ใช่การรับประกัน มันยืนยันว่ากฎผ่านช่วงข้อมูลที่ไม่เคยเห็นมาแล้ว แต่ไม่ได้ยืนยันว่าจะผ่านสภาวะตลาดถัดไปได้
1. Demo, paper trading, backtest, forward test, replay และ live — หกคำถามที่แตกต่างกัน
ความเข้าใจผิดเรื่องการทดสอบส่วนใหญ่มาจากการคิดรวบรัดเพียงข้อเดียวว่า “ฉันตรวจสอบกลยุทธ์แล้ว” ตรวจสอบที่ไหน และในแง่ใด? สภาพแวดล้อมเหล่านี้ไม่ได้เป็นขั้นต่อเนื่องบนมาตรวัดความแม่นยำเดียวกัน แต่ละแบบวัดคนละสิ่ง
บัญชีทดลอง คือบัญชีบนเซิร์ฟเวอร์ของโบรกเกอร์ที่ใช้เงินเสมือน โดยปกติราคาเสนอจะมาจากฟีดเดียวกับบัญชีจริง แต่ฝั่งเซิร์ฟเวอร์ทดลองจำลองการดำเนินการตามกฎที่เรียบง่ายกว่า โบรกเกอร์เป็นผู้กำหนดกฎเหล่านั้น ไม่ใช่แพลตฟอร์ม และกฎอาจต่างกันตามประเภทบัญชี ดังนั้นทุกข้อความที่ว่า “demo ไม่จำลองสิ่งนี้” จะใช้ได้หลังจากตรวจสอบเอกสารของบัญชีนั้นโดยเฉพาะแล้วเท่านั้น ไม่ใช่กฎสากล (รายการที่ 16 ในบรรณานุกรมแสดงตัวอย่างคำอธิบายจากผู้ให้บริการรายหนึ่ง) แบบจำลองการดำเนินการและวิธีที่โบรกเกอร์จัดการกระแสคำสั่งมีอธิบายใน หมวดการเลือกโบรกเกอร์.
Paper trading หมายถึงการบันทึกการตัดสินใจโดยไม่ส่งคำสั่งให้โบรกเกอร์ดำเนินการจริง สเปรดชีต สคริปต์ หรืออีมูเลเตอร์ในระบบกราฟเป็นผู้กำหนดราคาเติมคำสั่ง ความแตกต่างนี้มักถูกมองข้ามทั้งที่สำคัญ หากอีมูเลเตอร์เติมคำสั่งเสมือน กฎของมันจะเป็นตัวกำหนดราคาเข้า ไม่ใช่ตลาด Paper trading ตรวจสอบตรรกะการตัดสินใจ ไม่ใช่คุณภาพการดำเนินการ เว้นแต่คุณจะอธิบายและให้เหตุผลรองรับกฎของอีมูเลเตอร์แยกต่างหาก
Backtest นำกฎมาเล่นซ้ำกับข้อมูลในอดีต โดยตอบคำถามแบบมีเงื่อนไขว่าจะได้ผลอย่างไร หากข้อมูล แบบจำลอง tick และแบบจำลองต้นทุนตรงกับความเป็นจริง คุณภาพของคำตอบไม่อาจสูงกว่าคุณภาพของสมมติฐาน
Forward test ตรวจสอบกฎนอกช่วงที่ใช้ปรับแต่ง อาจเป็นช่วงข้อมูลในอดีตที่กันไว้และตัวปรับค่าไม่เคยเห็น หรือเป็นการสังเกตแบบเวลาจริงทีละแท่งโดยย้อนกลับไปแก้ไม่ได้
Market replay เล่นข้อมูลในอดีตซ้ำโดยซ่อนอนาคต และให้คุณตัดสินใจด้วยตนเอง เป็นเครื่องมือฝึกกลยุทธ์แบบใช้ดุลยพินิจ ไม่ใช่สิ่งเทียบเท่าบัญชีเงินจริง
บัญชีจริง เป็นสภาพแวดล้อมเดียวที่วัดต้นทุนการดำเนินการจริงได้ ได้แก่ slippage สเปรดที่กว้างขึ้น การปฏิเสธคำสั่ง และการเติมคำสั่งบางส่วน
| สภาพแวดล้อม | คำถามที่ตอบได้ | สิ่งที่ตัดสินไม่ได้ | ผู้กำหนดเงื่อนไข |
|---|---|---|---|
| บัญชีทดลอง | คุณใช้งานแพลตฟอร์มเป็นหรือไม่ และระบบอัตโนมัติค้างระหว่างการทำงานปกติหรือไม่ | ต้นทุนการดำเนินการและพฤติกรรมเมื่อสภาพคล่องต่ำ | โบรกเกอร์ (เซิร์ฟเวอร์ทดลอง) |
| Paper trading | คุณใช้กฎของตนเองอย่างสม่ำเสมอได้หรือไม่ | ราคาเติมคำสั่ง ซึ่งอีมูเลเตอร์หรือข้อตกลงที่คุณตั้งเองเป็นผู้กำหนด | คุณหรืออีมูเลเตอร์ของเครื่องมือ |
| Backtest | จะได้ผลอย่างไรบนข้อมูลในอดีตที่กำหนด ภายใต้สมมติฐานที่ระบุชัดเจน | อนาคต ต้นทุนการดำเนินการ และความถูกต้องของสมมติฐาน | ผู้จัดทำการทดสอบ (ข้อมูล แบบจำลอง tick ต้นทุน) |
| Forward test | กฎผ่านช่วงข้อมูลที่ตัวปรับค่าไม่เคยเห็นได้หรือไม่ | สภาวะตลาดถัดไป และไม่ได้แก้ปัญหาตัวอย่างขนาดเล็ก | การแบ่งข้อมูลหรือเวลาที่ผ่านไป |
| Market replay | คุณจำแนกสถานการณ์ตามลำดับโดยไม่มองไปทางขวาได้หรือไม่ | ต้นทุนการดำเนินการและแรงกดดันจากการขาดทุนจริง | ผู้จัดทำเซสชัน replay |
| บัญชีจริง (ความเสี่ยงที่เปิดไว้ขั้นต่ำ) | การดำเนินการมีต้นทุนจริงเท่าใดสำหรับขนาดสถานะนั้น | ต้นทุนการดำเนินการเมื่อขนาดใหญ่ขึ้นมาก | โบรกเกอร์และสภาพตลาด |
2. สิ่งที่ demo และ paper trading วัดไม่ได้
บางครั้งบัญชีทดลองถูกอธิบายว่าเป็น “บัญชีจริงที่ไม่ใช้เงิน” ซึ่งไม่จริงในหลายประเด็นที่เป็นรูปธรรมและตรวจสอบได้ ตารางด้านล่างแสดงองค์ประกอบที่เซิร์ฟเวอร์ทดลองอาจไม่มีหรือจำลองแบบง่าย และแต่ละองค์ประกอบจะส่งผลโดยตรงต่อผลลัพธ์เมื่อเปลี่ยนไปใช้เงินจริง คอลัมน์ “บนบัญชีทดลอง” อธิบายการลดทอนที่พบบ่อย ไม่ใช่กฎที่ผูกพันโบรกเกอร์ทุกราย ผู้ให้บริการบัญชีเป็นผู้กำหนดขอบเขตการจำลอง และแม้แต่บัญชีต่างประเภทของโบรกเกอร์เดียวกันก็อาจต่างกันได้
| องค์ประกอบ | บนบัญชีทดลอง | บนบัญชีจริง |
|---|---|---|
| Slippage | หลายโบรกเกอร์กำหนดเป็นศูนย์หรือจำลองด้วยค่าคงที่ ผู้ให้บริการบัญชีเป็นผู้กำหนดขอบเขตการจำลอง | ผันแปรตามช่วงเวลาและสภาพคล่อง มักสูงที่สุดรอบการประกาศข้อมูลและตอนเปิดเซสชัน |
| การขยายตัวของ สเปรด | มักคงที่หรือเปลี่ยนแปลงเพียงเล็กน้อย | สเปรดกว้างขึ้นเมื่อสภาพคล่องต่ำและรอบเหตุการณ์สำคัญ บัญชีทดลองมักทำให้รูปแบบนี้ราบเรียบลง |
| การปฏิเสธคำสั่งและ requote | เกิดน้อยหรือไม่มี | เกิดขึ้นตามแบบจำลองการดำเนินการและประเภทบัญชี เป็นคุณสมบัติของโบรกเกอร์ ไม่ใช่แพลตฟอร์ม |
| การเติมคำสั่งบางส่วน | โดยมากเติมเต็มจำนวน | อาจเกิดเมื่อขนาดใหญ่และสภาพคล่องแย่ โดยทั่วไปไม่มีนัยสำคัญสำหรับสถานะขนาดไมโคร |
| สภาพคล่องที่มีอยู่ | โดยปกติเซิร์ฟเวอร์ทดลองไม่ปฏิเสธ ส่วนจะปฏิเสธได้หรือไม่ขึ้นกับกฎของผู้ให้บริการนั้นโดยเฉพาะ | มีจำกัด คู่เงินแปลกใหม่และนอกเซสชันอาจไม่มีสภาพคล่องที่ระดับราคาของคุณ |
| ช่องว่างราคา (gap) | บางครั้งจำลองต่างจากบัญชีจริง | Stop loss ที่อยู่ใน gap ทำงานเหมือนคำสั่งตลาด คือดำเนินการที่ราคาแรกที่มี ไม่ใช่ระดับ stop |
| ผลได้เสียทางจิตใจ | ศูนย์ — การขาดทุนไม่มีผลตามมาจริง | มีจริง และส่งผลว่าคุณจะทำตามแผนหรือไม่ |
แถวสุดท้ายอาจทำให้แผนที่มีเหตุผลกลายเป็นการตัดสินใจเฉพาะหน้า แต่ไม่ใช่หัวข้อของบทความนี้ กลไกพฤติกรรมภายใต้แรงกดดันอธิบายไว้ใน บทความเรื่องกระบวนการและผลลัพธ์ ที่นี่เราสนใจส่วนที่วัดได้คือต้นทุนการดำเนินการ

วิธีวัด slippage แทนการประมาณ บันทึกแต่ละธุรกรรมว่า ราคาตอนเกิดสัญญาณ ราคาที่ขอ ราคาดำเนินการ สเปรดตอนคลิก สเปรดตอนเติมคำสั่ง ความหน่วง เซสชัน ข้อมูลเหตุการณ์เศรษฐกิจมหภาค และเวลาเซิร์ฟเวอร์โบรกเกอร์เป็นเท่าใด เมื่อได้ตัวอย่างแล้วให้คำนวณค่ามัธยฐานและส่วนหางของการแจกแจง ไม่ใช่ค่าเฉลี่ยอย่างเดียว ค่าเฉลี่ยที่รวมการเติมคำสั่งสุดโต่งเพียงไม่กี่ครั้งอาจทำให้เข้าใจผิดได้ทั้งสองทิศทาง มีเพียงตัวเลขที่ได้เช่นนี้จึงเหมาะจะใส่ในแบบจำลองต้นทุนของ backtest
กรณีอ้างอิง: 3 มกราคม 2019 การเคลื่อนไหวรุนแรงของเยน ระหว่างสภาพคล่องเบาบางของเซสชันเอเชีย คู่เงินเยนเคลื่อนไหวกระโดดภายในไม่กี่นาที เหตุการณ์นี้อธิบายในกรอบข้อความแยกของรายงานธนาคารกลางออสเตรเลีย (รายการที่ 12 ในบรรณานุกรม เข้าถึงเนื้อหาเมื่อ 22.08.2026) รายงานระบุว่า “เวลา 9:36 น. AEDT ภายในประมาณ 30 วินาที และไม่มีข่าวสำคัญใด เยนแข็งค่าขึ้น 3 เปอร์เซ็นต์เมื่อเทียบกับดอลลาร์สหรัฐ” และส่วนต่าง bid กับ ask กว้างขึ้น “จากราว 2 pip เป็น 100–300 pip” สองข้อความในกรอบเดียวกันสำคัญต่อบทความนี้ ได้แก่ “สภาพคล่องตลาดต่ำตามฤดูกาลในช่วงเวลาและช่วงปีนั้น” และโบรกเกอร์รายย่อยปิดสถานะโดยอัตโนมัติด้วยคำสั่ง stop loss เมื่อขาดทุนเกินระดับที่กำหนด นั่นหมายความว่าในช่วงนี้กลไกดังกล่าวถูกกระตุ้นพอดี ขณะที่ tester จำลองต้นทุนของมันได้เพียงเท่าที่โหมดจำลองที่เลือกอนุญาต และในโหมดแบบง่ายจะไม่จำลองเลย เพราะเติมคำสั่งที่ราคาที่ระบุในคำสั่ง (ดูหัวข้อย่อยเรื่องการเติม pending order) ขนาดการเคลื่อนไหวและราคาเติมคำสั่งต่างกันตามผู้ให้ข้อมูลและโบรกเกอร์ จึงไม่มีค่า pip “จริง” ค่าเดียวในที่นี้ และเราจะไม่ระบุค่าเช่นนั้น สำหรับการทดสอบกลยุทธ์ ข้อสรุปมีขอบเขตชัดเจน: แบบจำลองต้นทุนที่สมมติให้สเปรดคงที่และ slippage เป็นศูนย์ไม่จำลองช่วงเช่นนี้เลย และกลยุทธ์ที่ตั้ง stop แคบจะไวต่อเหตุการณ์เหล่านี้ที่สุด ลำดับเหตุการณ์และเบื้องหลังตลาดอยู่ใน หมวดเซสชันและเวลาซื้อขาย.
3. องค์ประกอบของผล backtest: ข้อมูล แบบจำลอง tick และแบบจำลองต้นทุน
ผลของ tester ขึ้นกับสามสิ่งที่ผู้ใช้อาจตัดสินใจโดยไม่รู้ตัว ได้แก่ โหลดข้อมูลใด จำลองการเคลื่อนไหวภายในแท่งเทียนอย่างไร และเพิ่มอะไรให้แต่ละธุรกรรม
แบบจำลองการสร้าง tick
เอกสาร MetaTrader 5 ระบุโหมด tester ห้าแบบ: ทุก tick, ทุก tick โดยอิง tick จริง, OHLC 1 นาที, เฉพาะราคาเปิด และ การคำนวณทางคณิตศาสตร์ ความแตกต่างระหว่างแบบแรกกับแบบที่สองสำคัญที่สุดในที่นี้ ในโหมด ทุก tick ระบบสร้าง tick ด้วยอัลกอริทึมจากข้อมูลรายนาที ในโหมด ทุก tick โดยอิง tick จริง การทดสอบใช้ tick ที่โบรกเกอร์เก็บไว้ นั่นคือบันทึกกระแสข้อมูลหนึ่งชุด ไม่ใช่การสร้างตลาดทั้งหมดขึ้นใหม่ OHLC 1 นาที จำลองสี่ราคาต่อนาที เฉพาะราคาเปิด ประมวลผลตรรกะเมื่อเปิดแท่ง และ การคำนวณทางคณิตศาสตร์ ไม่โหลดข้อมูลในอดีตเลยและใช้หาค่าที่เหมาะที่สุดของฟังก์ชันคณิตศาสตร์ ชื่อและลำดับโหมดยืนยันได้จากหน้าการตั้งค่า tester (รายการที่ 2 ในบรรณานุกรม เข้าถึงเมื่อ 22.08.2026) บางครั้งโหมด tester เปลี่ยนตามเวอร์ชันเทอร์มินัล จึงควรตรวจหน้าช่วยเหลือของเวอร์ชันที่คุณใช้ก่อนอาศัยโหมดเหล่านี้
อย่างไรก็ตาม การเลือกโหมด tick จริงไม่ได้ประกาศว่าจะไม่มี tick ที่คำนวณขึ้นอยู่ในผลทดสอบเลย เอกสารอธิบายพฤติกรรมสำรองไว้อย่างชัดเจนว่า “หากประวัติของสัญลักษณ์มีแท่งรายนาทีแต่ไม่มีข้อมูล tick ของแท่งนั้น tester จะสร้าง tick ด้วยโหมด »ทุก tick«” และในกรณีตรงข้าม “หากประวัติไม่มีแท่งรายนาทีแต่มีข้อมูล tick ของนาทีนั้น tick เหล่านั้นจะถูกละเลย” (รายการที่ 1 ในบรรณานุกรม เข้าถึงเมื่อ 22.08.2026) กล่าวคือ เมื่อคลังข้อมูลของโบรกเกอร์มีช่องว่างหรือความไม่สอดคล้อง บางช่วงของการทดสอบจะใช้ tick ที่จำลองขึ้น และรายงานไม่ได้ทำเครื่องหมายช่วงเหล่านั้นแยกไว้ หน้าเดียวกันยังระบุว่าเมื่อใช้ tick จริง “สเปรดอาจเปลี่ยนภายในแท่งรายนาที” ส่วน tick ที่สร้างขึ้นจะใช้สเปรดคงที่ของแท่งนั้น ดังนั้นโหมดข้อมูลเปลี่ยนทั้งเส้นทางราคาและแบบจำลองสเปรด
ผลในทางปฏิบัตินั้นเรียบง่ายแต่ชวนลำบาก หากกฎขึ้นกับลำดับที่ราคาแตะ high กับ low ภายในแท่ง ซึ่งทุกกลยุทธ์ที่มี stop และเป้าหมายทำงานพร้อมกันย่อมขึ้นกับลำดับนี้ การทดสอบด้วย tick ที่สร้างจากข้อมูลรายนาทีจึงเป็นการคาดเดาลำดับ ไม่ใช่บั๊กของโปรแกรม แต่เป็นคุณสมบัติของแบบจำลอง ใน MetaTrader 4 tester รายงานตัววัดความครอบคลุมของข้อมูลในอดีตแยกไว้ แต่การเคลื่อนไหวภายในแท่งยังคำนวณขึ้น ไม่ได้อ่านจากบันทึกกระแสข้อมูลจริง เอกสารอธิบายการจำลองสามโหมด ได้แก่ เฉพาะราคาเปิด, จุดควบคุม และ ทุก tick โดยแบบสุดท้าย “ใช้สร้างข้อมูลจากทั้งกรอบเวลาย่อยที่ใกล้ที่สุดและกรอบเวลาใกล้เคียงทั้งหมดที่มี” หากไม่มีข้อมูลกรอบเวลาย่อย tester จะใช้แม่แบบคลื่นสำเร็จรูป (รายการที่ 14 ในบรรณานุกรม เข้าถึงเมื่อ 22.08.2026) แถบคุณภาพการจำลองแสดงว่าจริง ๆ ใช้กรอบเวลาใด ยิ่งกรอบเวลาย่อยลงก็ยิ่งคาดเดาเส้นทางราคาน้อยลง การมี tick จริงและความลึกของประวัติขึ้นกับโบรกเกอร์และระยะเวลาที่จัดเก็บ
Tester เติม pending order อย่างไร
แบบจำลอง tick กำหนดว่า tester จะเห็นราคาใดบ้าง สมมติฐานอีกชั้นที่แยกออกมาคือ tester ทำอะไรกับราคาเหล่านั้นเมื่อมี pending order รออยู่ในตลาด สมมติฐานนี้มักไม่ปรากฏในหน้าตั้งค่าและต้องค้นในเอกสารของเครื่องมือ โดยซ่อนคำถามสองข้อไว้ และต้องแยกออกจากกันจึงจะคำนวณได้ถูกต้อง: เมื่อใด ที่คำสั่งดำเนินการ และ ที่ราคาเท่าใด คำตอบข้อหลังใน tester ของ MetaTrader 5 ขึ้นกับสองแกนแยกกัน ได้แก่ ประเภทตราสารและโหมดจำลองข้อมูล การสับสนสองแกนนี้เป็นวิธีที่ง่ายที่สุดที่จะนำข้อความถูกต้องจากเอกสารไปใช้ในบริบทที่ไม่จริง
ความหน่วง การจำลองความหน่วงใน tester ของ MetaTrader 5 ครอบคลุมการวางคำสั่งโดยระบบอัตโนมัติ ไม่ใช่การดำเนินการภายหลังบนเซิร์ฟเวอร์: “หาก EA ใช้ pending order จะใช้ความหน่วงกับการวางคำสั่งเท่านั้น ไม่ใช่การดำเนินการคำสั่ง (ในสภาพจริง การดำเนินการเกิดบนเซิร์ฟเวอร์โดยไม่มีความหน่วงเครือข่าย)” (รายการที่ 2 ในบรรณานุกรม เข้าถึงเมื่อ 22.08.2026) ดังนั้นการเติมคำสั่งที่รออยู่ในตลาดแล้วจึงไม่มีความหน่วงเครือข่ายในการทดสอบ ซึ่งถูกต้อง เพราะในความเป็นจริงก็ไม่มีเช่นกัน
แกนแรก: ประเภทตราสาร การไม่มีความหน่วงไม่ได้หมายความว่าจะเติมคำสั่งที่ระดับราคาซึ่งเขียนไว้ เอกสารแยกเรื่องนี้ตามประเภทตราสารก่อน สัญลักษณ์ OTC FX/CFD ที่กล่าวถึงที่นี่เป็นตราสารนอกตลาดจัดตั้ง ส่วนสัญญาสกุลเงินที่ซื้อขายในตลาดจัดตั้งอยู่คนละประเภท กฎสำหรับตราสารนอกตลาดจัดตั้งระบุว่า “การกระตุ้น pending order ทุกประเภทและ SL/TP ใช้ราคา Bid และ Ask การดำเนินการใช้ราคา Bid และ Ask ในตลาด ณ ขณะที่ถูกกระตุ้น” (รายการที่ 13 ในบรรณานุกรม หัวข้อ การกระตุ้นและดำเนินการคำสั่ง ย่อหน้าแรก เข้าถึงเมื่อ 22.08.2026) ดังนั้น pending order ทุกประเภท รวมทั้ง limit order ตลอดจน stop loss และ take profit จะดำเนินการที่ bid หรือ ask ปัจจุบันเมื่อถูกกระตุ้น ไม่ใช่ระดับที่เขียนในคำสั่ง สำหรับ limit order ส่วนต่างที่เป็นประโยชน์จากราคาที่กำหนดคือการได้ราคาดีขึ้น ไม่ได้อนุญาตให้เติมเกิน limit ในทิศทางเสียเปรียบ
ข้อความที่ว่า limit order เติมโดยไม่มี slippage ใช้กับตราสารในตลาดจัดตั้ง ย่อหน้าถัดไปในหัวข้อเดียวกันอธิบายหุ้นและสัญญาในตลาดจัดตั้งแยกไว้ โดยมีกฎต่างกันว่า “สำหรับตราสารในตลาดจัดตั้ง กราฟและการกระตุ้น stop order ใช้ราคาธุรกรรมล่าสุด (Last) ส่วน limit order ถูกกระตุ้นด้วย Bid และ Ask และดำเนินการที่ราคาซึ่งระบุในคำสั่ง (ไม่มี slippage) ขณะที่คำสั่งประเภทอื่นดำเนินการที่ Bid และ Ask ในตลาดปัจจุบัน (อาจมี slippage)” (รายการที่ 13 ย่อหน้าที่สองของหัวข้อเดียวกัน วันที่เข้าถึงเดียวกัน) บางครั้งมีการอ้างข้อความนี้เป็นกฎทั่วไปของ tester ซึ่งเป็นความผิดพลาดด้านขอบเขต ไม่ใช่การคัดข้อความผิด “limit ไม่มี slippage” ใช้กับตราสารในตลาดจัดตั้ง ส่วนสัญลักษณ์ FX นอกตลาดจัดตั้งใช้ย่อหน้าก่อนหน้า และสัญญาสกุลเงินที่ซื้อขายในตลาดจัดตั้งใช้กฎของตราสารในตลาดจัดตั้ง
แกนที่สอง: โหมดจำลอง ประเภทตราสารกำหนดสิ่งที่เกิดขึ้นในโหมดละเอียด ได้แก่ ทุก tick และ ทุก tick โดยอิง tick จริง โหมดจำลองเป็นอีกแกนหนึ่ง และในโหมดแบบง่ายจะปิดกฎนั้นไปทั้งหมด: “ในโหมดทดสอบ »เฉพาะราคาเปิด« และ »OHLC 1 นาที« pending order รวมถึง SL และ TP จะดำเนินการที่ราคาที่ระบุในคำสั่ง อัลกอริทึมดำเนินการที่ราคาตลาดซึ่งใช้ในโหมดละเอียด (ทุก tick และ tick จริง) ไม่เหมาะกับโหมดที่ละเอียดน้อยกว่า” (รายการที่ 13 วันที่เข้าถึงเดียวกัน) ผู้พัฒนายังให้เหตุผลและข้อสรุปว่า “บางโหมดไม่สร้าง tick ระหว่างทาง จึงอาจมีส่วนต่างมากระหว่างราคาคำสั่งที่ขอกับราคาปัจจุบัน (Open หรือ OHLC) การดำเนินการที่ราคาที่ขอใน »เฉพาะราคาเปิด« และ »OHLC 1 นาที« ให้ผลทดสอบแม่นยำกว่า” ตรรกะตรงนี้สวนทางกับความรู้สึก: ในโหมดแบบง่าย tester ไม่มีแหล่งราคาตลาดหลังการกระตุ้น จึงเติมที่ราคาที่เขียนไว้ เพราะการเติมที่ราคาเปิดของแท่งถัดไปจะผิดพลาดมากกว่าการเติมที่ระดับนั้น
นำสองแกนมาพิจารณาร่วมกัน สำหรับสัญลักษณ์ FX นอกตลาดจัดตั้งใน tester ของ MetaTrader 5 จะได้สภาพแวดล้อมการดำเนินการสองแบบที่สับสนกันง่าย เพราะรายงานหน้าตาเหมือนกัน:
- โหมดละเอียด (ทุก tick, ทุก tick โดยอิง tick จริง) — pending order ทุกประเภท รวมถึง SL และ TP เติมที่ bid หรือ ask ปัจจุบันเมื่อถูกกระตุ้น มีการจำลอง slippage แต่จำกัดอยู่ในเส้นทางราคาที่ tester จำลองขึ้น ไม่ว่าจะสร้างจากข้อมูลรายนาทีหรือมาจากคลัง tick ของโบรกเกอร์
- โหมดแบบง่าย (OHLC 1 นาที, เฉพาะราคาเปิด) — pending order ทุกประเภท รวมถึง SL และ TP เติมตรงราคาที่เขียนไว้ในคำสั่ง Slippage หายจากการคำนวณทั้งหมดพร้อมกันทุกประเภทคำสั่ง
กลไกการลดทอนนี้ต่างกันระหว่างคำสั่งสองประเภท แม้ผลจะไปทางเดียวกัน หลังถูกกระตุ้น stop order จะทำงานเหมือนคำสั่งตลาด ในความจริงราคาดำเนินการคือราคาแรกที่มีหลังทะลุระดับ ไม่ใช่ตัวระดับนั้น การเติมที่ระดับอย่างที่โหมดแบบง่ายทำจึงลบต้นทุนจากการกระโดดทั้งหมดออกจากการคำนวณและทำให้ผลสูงเกินจริง ส่วน limit order คือการซื้อต่ำกว่าตลาดหรือขายสูงกว่าตลาด การเติมตรงระดับที่เขียนไว้สมมติว่ามีสภาพคล่องเพียงพอสำหรับทั้งสถานะที่ระดับนั้น ทั้งที่ราคาแตะไม่ได้รับประกันว่ามีสภาพคล่องพอ ในตลาดจัดตั้งลำดับคิวก็สำคัญ ส่วน OTC FX/CFD ใช้กฎของผู้ให้บริการ Tester ไม่จำลองทั้งคิวและปริมาณที่มีในระดับนั้น มันรู้เพียงเส้นทางราคา การลดทอนทั้งสองจึงช่วยให้ผลดูดี แต่จะเข้ามาในผลคำนวณเฉพาะเมื่อโหมดที่เลือกเปิดให้เกิดเท่านั้น
อีกเงื่อนไขที่แยกกันคือฝั่งของตลาด ระดับถูกแตะด้วยชุดราคาที่ตรงกับฝั่งคำสั่ง จึงซื้อโดยอิง ask และขายโดยอิง bid การทดสอบบนชุดราคาเดียวซึ่งมักเป็น bid จำลองอีกฝั่งด้วยการบวกสเปรด และเอกสาร MQL5 ระบุว่า “ระหว่างทดสอบ สเปรดไม่ได้ถูกจำลอง แต่ดึงมาจากข้อมูลในอดีต” (รายการที่ 3 ในบรรณานุกรม เข้าถึงเมื่อ 22.08.2026) เวลากระตุ้นจึงขึ้นกับสเปรดที่บันทึกไว้ในข้อมูล ไม่ใช่สเปรดที่จะเกิดบนบัญชีของคุณ ความหนาแน่นของเส้นทางราคาก็สำคัญ หน้าอธิบาย tick เตือนว่า “Stop Level และ pending order อาจถูกกระตุ้นที่ราคาต่างจากที่กำหนด โดยเฉพาะเมื่อทดสอบกรอบเวลาสูง” (รายการที่ 1 ในบรรณานุกรม)
ความหมายต่อการอ่านรายงาน รายงาน tester ไม่ได้บอกว่าสร้างจากสภาพแวดล้อมใดในสองแบบนี้ คุณต้องอ่านจากการตั้งค่ารอบทดสอบ กฎชุดเดียวกันที่รันในโหมดละเอียดและแบบง่ายจะให้การคำนวณต่างกัน ไม่ใช่เรื่องความละเอียดทางคอมพิวเตอร์ แต่เป็นกฎเติมคำสั่งคนละแบบ กลยุทธ์ที่กำไรเฉลี่ยต่อธุรกรรมเล็กและกลยุทธ์ที่ stop แคบไวที่สุด เพราะต้นทุนจากการกระโดดที่ถูกลบออกเป็นสัดส่วนมากของผลลัพธ์ ดังนั้นกฎเติม pending order ต้องอยู่ในคำอธิบายสภาพแวดล้อมเทียบเท่าแบบจำลอง tick และต้นทุน และรายงานที่ไม่เปิดเผยต้องตรวจเทียบเอกสารของเครื่องมือ การทดสอบควบคุมทำได้ไม่ยาก: รันซ้ำในโหมดละเอียด แล้วรันอีกครั้งโดยทำให้ราคาเติมแย่ลงประมาณ slippage เฉลี่ย และดูว่าผลลัพธ์เหลือเท่าใด
แบบจำลองต้นทุน
มีสี่รายการที่หน่วยต่างกันเพิ่มในแต่ละธุรกรรม และห้ามปะปนกัน:
- สเปรด — หน่วย pip หรือ point คำถามสำคัญคือใช้สเปรดคงที่ สเปรดที่บันทึกในข้อมูล หรือสเปรดปัจจุบันตอนเริ่มทดสอบ คำตอบต่างกันสามแบบให้ผลต่างกันสามแบบ ใน tester ของ MetaTrader 5 เอกสารที่อ้างแล้วให้คำตอบไว้ ส่วนเครื่องมืออื่นต้องค้นในคำอธิบายของ tester นั้น
- ค่าคอมมิชชัน — หน่วยสกุลเงินบัญชี โดยมากคิดต่อล็อตต่อข้าง หากจะเทียบกับสเปรดต้องแปลงเป็น pip ด้วยมูลค่า pip ของตราสารและขนาดสถานะนั้น
- จุดสวอป — คิดเมื่อถือสถานะข้ามวันชำระบัญชี และคิดสามเท่าในวันหนึ่งของสัปดาห์ ไม่เกี่ยวกับกลยุทธ์จบในวัน แต่สำหรับกลยุทธ์ถือสถานะบางครั้งมากกว่าสเปรด
- Slippage — หน่วย pip หรือ point เป็นส่วนต่างราคาที่ขอกับราคาดำเนินการ ใน tester จะเข้าคำนวณเฉพาะเมื่อกฎเติมคำสั่งอนุญาต สำหรับคู่เงินในโหมดละเอียดของ MetaTrader 5 ใช้กับ pending order ทุกประเภทพร้อม SL และ TP แต่ในโหมด OHLC 1 นาที และ เฉพาะราคาเปิด จะไม่เข้าคำนวณเลย เพราะเติมที่ราคาในคำสั่ง (รายการที่ 13 ในบรรณานุกรม)
เราไม่นำความหน่วงมาไว้ในรายการนี้โดยตั้งใจ แม้บางครั้งถูกเพิ่มเป็นรายการที่ห้า ความหน่วงวัดเป็นมิลลิวินาที ไม่ใช่ pip และไม่ได้บวกเป็นต้นทุนต่อธุรกรรม แต่เป็นพารามิเตอร์ของแบบจำลองการดำเนินการ กล่าวคือส่งผลว่า ราคาใด จะถูกใช้ ไม่ใช่ เท่าใด ที่จะถูกหัก Tester ของ MetaTrader 5 ให้จำลองได้ด้วยโหมด ไม่มีความหน่วง และ ความหน่วงแบบสุ่ม รวมทั้งความหน่วงคงที่ โดยตามหัวข้อการเติม pending order การจำลองครอบคลุมการวางคำสั่งของระบบอัตโนมัติ ไม่ใช่การดำเนินการคำสั่งที่รออยู่ในตลาดแล้ว (รายการที่ 2 ในบรรณานุกรม) การนำสองปริมาณนี้มาปะปนในแถวเดียวของการคำนวณต้นทุนคือความผิดพลาดด้านหน่วย ไม่ใช่การปัดเศษ
ควรแยกความผิดพลาดสองอย่างที่ดูคล้ายกัน ความหน่วงเครือข่ายที่วัดด้วยคำสั่ง ping ไปยังที่อยู่เซิร์ฟเวอร์ไม่ใช่เวลาที่ใช้ดำเนินการคำสั่ง ระหว่างนั้นยังมีการตรวจสอบฝั่งโบรกเกอร์ การเข้าคิว และจังหวะดำเนินการจริง เรื่องโครงสร้างพื้นฐาน เซิร์ฟเวอร์เสมือน และการให้ระบบอัตโนมัติทำงานต่อเนื่องอธิบายใน บทความเรื่องระบบอัตโนมัติ EA และ VPS ที่นี่ประเด็นคือ ต้องกำหนดสมมติฐานความหน่วงในทดสอบอย่างชัดเจน ไม่ใช่ถือว่าเป็นศูนย์โดยไม่กล่าวถึง
คุณภาพตัวข้อมูล
ก่อนผลลัพธ์จะมีความหมาย ต้องตรวจข้อมูลเรื่องช่องว่างและความไม่ต่อเนื่องของชุดข้อมูล ข้อมูลซ้ำ ค่านอกกลุ่ม ลำดับเวลา เขตเวลาและการเปลี่ยนเวลาออมแสง วิธีประทับเวลาแท่งว่าใช้ตอนเปิดหรือปิด รวมถึงสร้างชุดจาก bid, ask หรือราคากลาง ข้อสุดท้ายมักถูกมองข้ามทั้งที่ตัดสินว่าระดับถูกแตะหรือไม่ สถานะ short ปิดที่ ask แท่งที่สร้างจาก bid จึงอาจไม่เคยแสดงราคาที่กระตุ้น stop
4. Backtest ที่สมบูรณ์แบบแต่ไม่สมจริง — กายวิภาคของเส้นผลตอบแทนที่สวยงาม
ผล tester ที่สวยมักไม่ได้มาจากการหลอกลวงครั้งใหญ่ครั้งเดียว แต่จากการผ่อนปรนเล็ก ๆ สี่ข้อที่ดูไม่เป็นพิษภัยเมื่อแยกกัน ต่อไปนี้คือแต่ละข้อพร้อมวิธีตรวจพบ
ข้อผ่อนปรนแรก: เข้าที่ราคาที่ยังรู้ไม่ได้
กฎบอกว่า “เข้าเมื่อแท่งปิดเหนือค่าเฉลี่ย” แต่การทดสอบเข้าที่ราคาปิดของแท่งเดียวกัน สัญญาณที่ต้องอาศัยราคาปิดสุดท้ายจะสร้างคำสั่งได้หลังยืนยันการปิดแล้วเท่านั้น โดยใช้ราคาที่มีในขณะนั้น ในแบบจำลองทั่วไปที่คำนวณหนึ่งครั้งตอนปิด นั่นคือ tick แรกของแท่งถัดไป ราคาเติมอาจบังเอิญเท่ากับราคาปิดก่อนหน้า แต่จะสมมติว่าราคานั้นใช้ได้ไม่ได้หากไม่ระบุแบบจำลอง การแก้สมมติฐานนี้อาจเปลี่ยนผลอย่างมีนัยสำคัญ
การทดสอบความไว ไม่ใช่คำตัดสิน: เลื่อนจุดเข้าไปหนึ่งแท่งแล้วรันใหม่ หากผลลัพธ์หายไป คุณรู้เพียงว่าระบบทนต่อการเลื่อนจุดเข้าหนึ่งช่วงไม่ได้ ข้อมูลรั่วจากอนาคตเป็นคำอธิบายที่เป็นไปได้หนึ่งข้อ แต่ไม่ใช่ข้อเดียว สัญญาณอาจมีอายุสั้นหรือไวต่อราคาดำเนินการก็ได้ สิ่งที่ตัดสินคือการตรวจว่าตัวแปรทุกตัวมีให้ใช้ ณ เวลาตัดสินใจหรือไม่ ขั้นตอนทั้งหมดพร้อมสิ่งที่การทดสอบนี้พิสูจน์ไม่ได้อยู่ในกรอบท้าย หัวข้อ look-ahead.
ข้อผ่อนปรนที่สอง: ไม่มีต้นทุน
การทดสอบที่ไม่มีสเปรด ค่าคอมมิชชัน และ slippage ไม่ใช่ระบบเดิมฉบับง่าย แต่เป็นอีกระบบที่มีค่าคาดหมายและจุดคุ้มทุนต่างกัน ขนาดการเปลี่ยนแปลงคำนวณได้ และหัวข้อถัดไปจะแสดงให้เห็น
ข้อผ่อนปรนที่สาม: เลือกหนึ่งชุดจากหนึ่งพันครั้ง
ตัวปรับค่าให้ผลเป็นอันดับ การนำแถวบนสุดมาแสดงเป็นผลกลยุทธ์ทำให้ข้อมูลจำนวนรูปแบบที่ตรวจสอบหายไป เมื่อมีการลองมากพอ ผลดีที่สุดจะสูงจากสถิติของการค้นหาเพียงอย่างเดียว แม้เป็นกฎที่ไร้เหตุผล การอธิบายปรากฏการณ์นี้อย่างเป็นทางการอยู่ใน รายการที่ 8 ของบรรณานุกรม จำนวนรูปแบบที่ทดสอบต้องอยู่ในคำอธิบายผลเช่นเดียวกับช่วงเวลาและต้นทุน
ข้อผ่อนปรนที่สี่: ประเมินด้วยข้อมูลที่ใช้ปรับแต่ง
หากเลือกพารามิเตอร์บนช่วงเดียวกับที่นำมารายงานผล นั่นไม่มีการยืนยันความถูกต้องเลย มีเพียงคำอธิบายการฟิตข้อมูล และเป็นข้อผิดพลาดที่ตรวจง่ายที่สุด เพียงถามว่าช่วงใดใช้ปรับแต่ง และช่วงใดใช้ประเมินอย่างเดียว
ข้อผ่อนปรนสี่ข้อในการคำนวณเดียว — เส้นสวยเหลืออยู่เท่าใด
การแจกแจงสี่ข้อยังไม่แสดงขนาด การคำนวณต่อไปนี้แสดงขนาด โดยออกแบบให้ตรวจแต่ละขั้นด้วยการคำนวณเพียงหนึ่งครั้ง
สภาพแวดล้อมเหมือนการคำนวณในหัวข้อ การทดสอบความไวต่อต้นทุน: EUR/USD สถานะ 1.00 ล็อตมาตรฐาน มูลค่า pip 10.00 USD สกุลเงินบัญชี USD
ข้อมูล: ราคารายนาทีจากโบรกเกอร์หนึ่งราย 36 เดือน แบ่งเป็น in-sample 24 เดือนและ out-of-sample 12 เดือน โดยกำหนดเส้นแบ่งก่อนปรับแต่ง
จำนวนธุรกรรมใน in-sample: 1,000 ส่วน out-of-sample ประมาณ 500 เพราะเมื่อความถี่เท่ากัน ช่วงประเมินยาวเพียงครึ่งเดียว คอลัมน์ดอลลาร์ปรับทุกแถวเป็น 1,000 ธุรกรรมเพื่อเปรียบเทียบกัน ดังนั้นแถวที่สี่เป็นค่าปรับฐาน ไม่ใช่เงินที่จะเกิดบน out-of-sample โดยตรง จำนวนชุดพารามิเตอร์ที่ตรวจสอบ: 1,200
ต้นทุนไปกลับเต็มรอบในรูปแบบตัวอย่าง: สเปรด 0.30 + คอมมิชชัน 0.70 + slippage 0.20 = 1.20 pip นี่ไม่ใช่ค่าที่วัดได้หรือค่าทั่วไปของตลาด แต่เลือกเพื่อให้ตรวจคำนวณในใจได้
จุดสวอป: ศูนย์ เพราะตัวอย่างสมมติชัดเจนว่าเป็นกลยุทธ์ภายในวันซึ่งปิดทุกสถานะก่อนเปลี่ยนวันชำระบัญชี หากกลยุทธ์ผ่าน rollover แถวนี้จะไม่เป็นศูนย์และต้องเพิ่มแยก
ไม่มีตัวเลขใดมาจาก tester ที่รันจริง นี่เป็นการสร้างตัวอย่างเพื่อแสดงทิศทางและระดับขนาดของข้อผ่อนปรนทั้งสี่ ตรวจได้ด้วยเครื่องคิดเลข แต่แทนการทดสอบของคุณเองไม่ได้
| ขั้น | สิ่งที่ตัดออก | ผลลัพธ์ (pip/ธุรกรรม) | 1,000 ธุรกรรม (USD, 1 ล็อต) |
|---|---|---|---|
| 0. รายงานจากตัวปรับค่า | ไม่ตัดอะไร — เข้าตอนปิดแท่งสัญญาณ ต้นทุนศูนย์ เลือกอันดับสูงสุด ประเมินบนช่วงปรับแต่ง | +2.60 | +26,000 |
| 1. จุดเข้าที่ดำเนินการได้จริง | look-ahead: เลื่อนเข้าไปตอนเปิดแท่งถัดไป | +1.20 | +12,000 |
| 2. เพิ่มต้นทุน | สมมติฐานว่าสเปรด คอมมิชชัน และ slippage เป็นศูนย์ | 0.00 | 0 |
| 3. ไม่มีสิทธิพิเศษของอันดับสูงสุด | ใช้มัธยฐานของ 1,200 รูปแบบแทนค่าดีที่สุด โดยช่วงเวลาและต้นทุนเดิม | −0.45 | −4,500 |
| 4. ประเมินนอกช่วงปรับแต่ง | ใช้พารามิเตอร์ชุดเดิมที่ตรึงไว้กับข้อมูล out-of-sample | −0.30 | −3,000 |
วิธีตรวจแต่ละแถว คอลัมน์ดอลลาร์คือผลหน่วย pip คูณ 10.00 USD และคูณ 1,000 ธุรกรรม ขั้น 0, 1 และ 2 ใช้พารามิเตอร์รูปแบบเดียวกัน โดยตัดสมมติฐานทีละข้อ จึงลบตามแนวตั้งได้: 2.60 − 1.40 = 1.20 และ 1.20 − 1.20 = 0.00 ส่วนขั้น 3 และ 4 ไม่ใช่การลบต่อ แต่ตอบคนละคำถามเกี่ยวกับผลเดียวกัน จึงคำนวณแยก ไม่ใช่ต่อท้ายขั้น 2
ขั้น 1 หักออก 1.40 pip ซึ่งเป็นส่วนของการเคลื่อนแท่งสัญญาณที่กฎอ้างสิทธิ์ด้วยการเข้าที่ราคาซึ่งรู้ได้ตอนปิดเท่านั้น การเหลือกำไรขั้นต้นพอดี 1.20 pip หลังแก้ไม่ได้เป็นเรื่องบังเอิญ นี่คือระบบเดียวกับที่หัวข้อถัดไปแยกความไวต่อต้นทุน ขั้น 2 แสดงผลของความไวนั้น เมื่อเพิ่มต้นทุนไปกลับ 1.20 pip ผลจะเหลือศูนย์ตรงถึงระดับเซนต์
ขั้น 3 แสดงช่องว่างระหว่างผลที่เลือกกับมัธยฐานของรูปแบบที่ทดสอบ อันดับหนึ่งจาก 1,200 รูปแบบคือค่าสูงสุดของ 1,200 ค่า ส่วนที่เหนือมัธยฐาน ซึ่งในที่นี้คือ 0.45 pip ต่อธุรกรรม แสดงผลการเลือก แต่ไม่ได้วัด overfitting โดยตัวมันเอง มัธยฐานติดลบของทั้งอันดับก็ไม่ได้พิสูจน์ว่าจุดที่เลือกเป็นยอดแหลมโดดเดี่ยว ต้องประเมินบริเวณข้างเคียงและข้อมูลอิสระ ขั้น 4 ประเมินชุดเดิมที่ตรึงไว้บน 12 เดือนซึ่งตัวปรับค่าไม่เคยเห็น ได้ −0.30 pip ต่อธุรกรรม
ในการคำนวณสมมตินี้ การตัดสามในสี่ข้อเปลี่ยน +26,000 USD เป็น −3,000 USD เมื่อเทียบที่ 1,000 ธุรกรรมเท่ากัน โดยไม่เปลี่ยนกฎกลยุทธ์แม้แต่ข้อเดียว ข้อที่สี่ คือสิทธิพิเศษในการแสดงอันดับสูงสุด ยังอยู่ในแถวที่สี่ เพราะใช้ชุดพารามิเตอร์เดิมที่ตรึงไว้บน out-of-sample ส่วนต่างจากมัธยฐานแสดงแยกในแถวที่สามซึ่งตอบอีกคำถาม สิ่งที่เปลี่ยนมีเพียงสมมติฐานว่าเข้าได้เมื่อใด ธุรกรรมมีต้นทุนเท่าใด แสดงรูปแบบใดได้ และประเมินด้วยข้อมูลใดได้
5. การทดสอบความไวต่อต้นทุน — คำนวณทีละขั้น
นี่คือจุดที่กลยุทธ์ส่วนใหญ่ใช้การไม่ได้ การคำนวณต่อไปนี้ไม่ใช่ผลทดสอบที่รันจริง แต่เป็นตัวอย่างบนสมมติฐานที่ระบุชัดและตรวจได้ด้วยเครื่องคิดเลข นั่นจึงเหมาะกับการแสดงกลไก เพราะไม่มีตัวเลขใดที่ติดตามที่มาไม่ได้
ตราสาร: EUR/USD, 1 pip = 0.0001 ของราคา สกุลเงินบัญชี: USD
ขนาดสถานะ: 1.00 ล็อตมาตรฐาน หรือมูลค่าสัญญา 100,000 EUR มูลค่า pip = 100,000 × 0.0001 = 10.00 USD (สำหรับ EUR/USD สกุลเงินอ้างอิงคือ USD มูลค่า pip จึงคงที่ในสกุลเงินบัญชี)
การแจกแจงผลขั้นต้นก่อนต้นทุน: 1,000 ธุรกรรม โดย 600 รายการกำไร +8.00 pip และ 400 รายการขาดทุน −9.00 pip
กำไรขั้นต้นรวม: 600 × 8.00 − 400 × 9.00 = 4,800 − 3,600 = 1,200 pip หรือ 1.20 pip ต่อธุรกรรม.
Profit factor ขั้นต้น = 4,800 / 3,600 = 1.33 (ผลรวมกำไรขั้นต้นหารด้วยค่าสัมบูรณ์ของผลรวมขาดทุนขั้นต้น)
คำนวณต้นทุนสำหรับรอบไปกลับเต็มรอบ ทั้งเข้าและออก และเพิ่มในทุกธุรกรรม
แปลงคอมมิชชันเป็น pip: 3.50 USD ต่อล็อตต่อข้าง เท่ากับ 7.00 USD ต่อรอบไปกลับ หรือ 7.00 / 10.00 = 0.70 pip อัตราคอมมิชชันขึ้นกับโบรกเกอร์และประเภทบัญชี ที่นี่เป็นค่าที่สมมติ ไม่ใช่ค่าที่วัด
จุดสวอป: ศูนย์ ซึ่งเป็นสมมติฐาน ไม่ใช่การวัด ตัวอย่างเป็นกลยุทธ์ภายในวันที่ไม่ถือผ่านการเปลี่ยนวันชำระบัญชี หากถือผ่าน ต้องเพิ่มอีกแถวในคอลัมน์ต้นทุน และการคิดสามเท่าในวันหนึ่งของสัปดาห์อาจมากกว่าสเปรด
ไม่มีตัวเลขในตารางนี้มาจาก tester ที่รันจริงหรือการวัดบนบัญชี ทั้งหมดเป็นค่าตัวอย่างเพื่อแสดงว่าต้นทุนกินความได้เปรียบเล็กน้อยต่อธุรกรรมรวดเร็วเพียงใด
| แบบจำลองต้นทุน | สเปรด (pip) | คอมมิชชัน (pip) | Slippage (pip) | ต้นทุนรวม (pip) | ผลสุทธิ (pip/ธุรกรรม) | Profit factor สุทธิ | 1,000 ธุรกรรม (USD, 1 ล็อต) |
|---|---|---|---|---|---|---|---|
| ไม่มีต้นทุน | 0.00 | 0.00 | 0.00 | 0.00 | +1.20 | 1.33 | +12,000 |
| เฉพาะสเปรด | 0.30 | 0.00 | 0.00 | 0.30 | +0.90 | 1.24 | +9,000 |
| สเปรดและคอมมิชชัน | 0.30 | 0.70 | 0.00 | 1.00 | +0.20 | 1.05 | +2,000 |
| สเปรด คอมมิชชัน slippage | 0.30 | 0.70 | 0.20 | 1.20 | 0.00 | 1.00 | 0 |
| เงื่อนไขแย่กว่าสมมติฐาน | 0.60 | 0.70 | 0.50 | 1.80 | −0.60 | 0.86 | −6,000 |
วิธีตรวจแต่ละแถว คอลัมน์ “ต้นทุนรวม” คือผลรวมสามคอลัมน์ด้านซ้าย “ผลสุทธิ” คือ 1.20 pip ลบต้นทุนรวม คอลัมน์ดอลลาร์คือผลสุทธิคูณ 10.00 USD และคูณ 1,000 ธุรกรรม Profit factor สุทธิคำนวณจากการแจกแจงเดิมหลังเพิ่มต้นทุนทุกธุรกรรม เช่น ต้นทุน 1.20 pip ทำให้กำไรต่อรายการลดจาก 8.00 เป็น 6.80 pip และขาดทุนเพิ่มจาก 9.00 เป็น 10.20 pip จึงมีกำไร 600 × 6.80 = 4,080 pip และขาดทุน 400 × 10.20 = 4,080 pip หรือ profit factor เท่ากับ 1.00 พอดี ต้นทุนรวมของแถวนั้นคือ 1,000 × 1.20 = 1,200 pip เท่ากับกำไรขั้นต้นทั้งหมด ผลจึงเป็นศูนย์ตรงถึงเซนต์
สองตัวเลขที่ควรจำจากการคำนวณนี้ ข้อแรก ส่วนต่างแถวสามกับแถวสี่เป็น slippage เพียง 0.20 pip แต่ต่างถึง 2,000 USD ในผลสุดท้าย ข้อสอง ระหว่างทดสอบไม่มีต้นทุนกับมีต้นทุนตามตัวอย่าง ไม่ใช่การแก้เล็กน้อย แต่เป็นความต่างระหว่างระบบที่กำไรกับระบบที่ไม่กำไร ค่า 1.20 pip สมจริงสำหรับกลยุทธ์คุณหรือไม่ ต้องตัดสินด้วยการวัดบนบัญชีของคุณเท่านั้น ที่นี่เป็นเลขที่เลือกให้เข้ากับการคำนวณ ไม่ได้อ่านจากตลาด ยิ่งผลขั้นต้นเฉลี่ยต่อธุรกรรมเล็กและความถี่สูง การเปลี่ยนผ่านยิ่งฉับพลัน สำหรับกลยุทธ์ถือสถานะที่ผลเฉลี่ยหลายสิบ pip ต้นทุนเปลี่ยนเท่ากันมีผลเพียงเล็กน้อย จึงต้องคำนวณความไวสำหรับกลยุทธ์ตนเอง ไม่ใช่ยืมจากตัวอย่างคนอื่น
6. Look-ahead และข้อมูลรั่วไหล — การรั่วไหลจากอนาคต
Look-ahead bias คือการใช้ข้อมูลที่ยังไม่มี ณ เวลาตัดสินใจ Data leakage มีความหมายกว้างกว่า คือทุกวิธีที่ความรู้อนาคตรั่วเข้ากระบวนการสร้างหรือประเมินกฎ ทั้งสองอันตรายเพราะไม่ได้ดูเหมือนข้อผิดพลาด แต่ดูเหมือนผลที่ดี
จุดที่เกิดการรั่วไหล:
- เข้าที่ราคาปิดของแท่งสัญญาณ อธิบายในหัวข้อสี่ วิธีแก้คือเข้าเร็วที่สุดเมื่อเปิดแท่งถัดไป หรือคำนวณสัญญาณจากข้อมูลที่ปิดแล้วเท่านั้น
- อินดิเคเตอร์ที่คำนวณย้อนกลับใหม่ เอกสาร Pine Script นิยาม repainting ว่าพฤติกรรมสคริปต์ทำให้ “การคำนวณหรือการวาดในอดีตเทียบกับเวลาจริง” ทำงานต่างกัน (รายการที่ 4 ในบรรณานุกรม เข้าถึงเมื่อ 22.08.2026) ไม่ใช่ทุกพฤติกรรมเช่นนี้เป็นการหลอกลวง แต่ต้องอธิบายทุกกรณีก่อนถือว่าผลน่าเชื่อถือ กลไก alert และความต่างของอดีตกับเวลาจริงอธิบายใน บทความ TradingView
- อินดิเคเตอร์แบบมีศูนย์กลาง โครงสร้างใดก็ตามที่ใช้ค่าที่สังเกตจาก t+k เพื่อหาค่าที่จุด t ใช้เทรดไม่ได้ แม้จะดูดีมากบนกราฟในอดีต
- ข้อมูลเศรษฐกิจมหภาคหลังแก้ไข ค่าตัวชี้วัดฉบับที่แก้ไขหลายปีภายหลังไม่ใช่ค่าที่รู้ตอนประกาศ หากกฎใช้ข้อมูลเศรษฐกิจมหภาค ต้องใช้ฉบับข้อมูลที่มี ณ เวลาตัดสินใจ รวมการแก้ไขที่ประกาศแล้วตอนนั้น และเวลาเผยแพร่จริง การตีความตัวประกาศอธิบายใน บทความการเทรดรอบการประกาศข้อมูล
- เลือกตราสารโดยรู้อนาคต การทดสอบเฉพาะตราสารที่อยู่รอดถึงปัจจุบัน หรือรู้แล้วว่าขึ้น เป็นการเลือกด้วยอนาคต ในตลาดเงินเกี่ยวข้องเป็นพิเศษกับคู่เงินแปลกใหม่และช่วงที่ระบบอัตราแลกเปลี่ยนเปลี่ยน
- เตรียมข้อมูลก่อนแบ่งตัวอย่าง การทำ normalization ปรับสเกล หรือเลือกคุณลักษณะโดยคำนวณจากทั้งชุด นำข้อมูล out-of-sample เข้าส่วน in-sample การแบ่งสองชุดต้องเป็นขั้นแรก ไม่ใช่ขั้นสุดท้าย
สมมติฐาน ใช้กฎ พารามิเตอร์ ตราสาร ช่วงเวลา โหมดสร้าง tick และแบบจำลองต้นทุนเดิมเหมือนรอบฐาน เปลี่ยนเพียงเวลาเข้า บันทึกเวอร์ชันโค้ด เวอร์ชันแพลตฟอร์ม และรหัสรายงานทั้งสอง มิฉะนั้นเปรียบเทียบซ้ำไม่ได้
ขั้นตอน หน่วงสัญญาณทั้งหมดหนึ่งช่วงตัดสินใจเต็ม แล้วทดสอบใหม่โดยไม่เปลี่ยนอย่างอื่น ทำซ้ำด้วยความหน่วงสองช่วง จุดเดียวไม่แสดงรูปความสัมพันธ์
ผลที่สังเกต สิ่งที่ตีความคือการเทียบสามค่า ได้แก่ ผลต่อธุรกรรมเมื่อไม่หน่วง หลังหนึ่งช่วง และหลังสองช่วง ไม่มีค่าตายตัวในที่นี้ เพราะไม่ได้รันทดสอบเพื่อบทความนี้ ให้กรอกสามช่องจากรายงานของคุณเอง
ข้อจำกัด การที่ผลลัพธ์หายหลังหน่วง ไม่ได้พิสูจน์ ว่ามีข้อมูลรั่วจากอนาคต ภาพเดียวกันเกิดได้จากสัญญาณอายุสั้นที่ความได้เปรียบหมดในไม่กี่นาที และสัญญาณไวต่อราคาดำเนินการซึ่งต่างหนึ่งแท่งก็เท่ากับความได้เปรียบการเข้าที่คาดไว้ทั้งหมด การทดสอบแยกระบบที่ทนต่อจังหวะเข้าออกจากระบบที่ไม่ทนได้เท่านั้น
สิ่งที่ตัดสินได้จริง การตัดการรั่วไหลออกต้องตรวจความพร้อมของข้อมูล โดยเขียนว่าตัวแปรแต่ละตัวที่ใช้ตัดสินใจรู้ค่าเมื่อใด และเทียบกับเวลาตัดสินใจ ตัวแปรที่ประทับเวลาหลังการตัดสินใจคือข้อมูลรั่ว ไม่ว่าผลทดสอบหน่วงจะเป็นอย่างไร ในทางกลับกัน การตรวจที่ไม่มีข้อกังขาก็ปิดประเด็นนี้ได้ แม้ผลลดลงหลังหน่วง
7. In-sample, out-of-sample และ walk-forward
หลักการยาวเพียงประโยคเดียวและไม่ผ่อนปรน: ข้อมูลที่ใช้ปรับแต่งจะใช้เป็นการยืนยันอิสระพร้อมกันไม่ได้ สิ่งอื่นล้วนตามมาจากหลักนี้
ชุด in-sample (IS) คือช่วงอดีตที่เลือกพารามิเตอร์ ทดสอบรูปแบบ และเปลี่ยนกฎได้ ส่วน out-of-sample (OOS) คือช่วงที่ไม่ดูระหว่างทำงานนั้น ต้องแยกตามเวลา การสุ่มสลับข้อมูลจากทั้งช่วงไม่ใช่การแบ่ง IS กับ OOS เพราะอนุกรมเวลามีความทรงจำ และการสลับนำข้อมูลไปทั้งสองทิศทาง
ผลสำคัญที่สุดของการแบ่งนี้: ชุด out-of-sample สูญเสียความเป็นอิสระเมื่อผลของมันมีอิทธิพลต่อการเปลี่ยนแปลงถัดไป หากดูผล OOS เห็นว่าอ่อนแล้วเปลี่ยนกลยุทธ์ ช่วงนั้นก็ไม่ใช่ OOS สำหรับสิ่งที่ทำหลังจากนั้นอีกต่อไป ยังใช้ได้ แต่ในฐานะส่วนหนึ่งของ in-sample ไม่ใช่หลักฐานอิสระ ไม่มีข้อมูลว่ากลไกนี้ทำลายการยืนยันบ่อยเพียงใดในทางปฏิบัติ และไม่ต้องแสร้งว่ามี ผลของมันชัดเจนอยู่แล้ว: ช่วง OOS ที่ใช้เปลี่ยนพารามิเตอร์ไม่ใช่หลักฐานอิสระสำหรับแบบจำลองที่แก้แล้ว
Tester ของ MetaTrader 5 มีการแบ่งนี้ในตัว การตั้งค่า Forward รับค่า ไม่ใช้, 1/2, 1/3, 1/4 และ กำหนดเอง โดยกันส่วนที่สองซึ่งเป็นช่วงหลังไว้เสมอ (รายการที่ 2 ในบรรณานุกรม) สะดวกเพราะทำให้เผลอแอบดู OOS ยากขึ้น แต่ไม่เลื่อนหน้าต่างอัตโนมัติ walk-forward หลายรอบต้องประกอบเองหรือใช้เครื่องมือภายนอก ตรวจสถานะเอกสารเมื่อ 22 สิงหาคม 2026
Walk-forward: หน้าต่างที่เลื่อนไป
Walk-forward คือการทำขั้นตอนเดิมซ้ำบนช่วงอดีตต่อเนื่องที่เลื่อนออกไป จุดประสงค์คือแทนที่จะได้คำตัดสินครั้งเดียว คุณได้ลำดับคำตัดสิน และช่วงประเมินที่นำมาต่อกันจะเป็นผลต่อเนื่องที่ตัวปรับค่าไม่เคยเห็นทั้งหมดพร้อมกัน
- กำหนดความยาวหน้าต่างก่อนรันครั้งแรก — เช่น in-sample 12 เดือนและ out-of-sample 3 เดือน การเลือกความยาวหลังดูผลเป็นการปรับแต่งอีกแบบ
- หาค่าที่เหมาะที่สุดบนหน้าต่าง in-sample เท่านั้น และบันทึกจำนวนรูปแบบที่ตรวจสอบ
- ใช้พารามิเตอร์ที่เลือกบนหน้าต่าง out-of-sample โดยไม่เปลี่ยนใด ๆ
- เลื่อนหน้าต่างทั้งคู่ เท่าความยาวหน้าต่าง out-of-sample แล้วทำซ้ำ
- ประเมินช่วงยืนยันที่นำมาต่อกัน ไม่ใช่ผลการหาค่าที่เหมาะที่สุด ดูว่ากี่ช่วงเป็นบวก ช่วงแย่ที่สุดเป็นอย่างไร และพารามิเตอร์ที่เลือกแต่ละรอบคล้ายกันหรือไม่
ประสิทธิภาพ Walk-Forward เป็นมาตรวัดที่ Pardo เสนอ (รายการที่ 7 ในบรรณานุกรม) บางครั้งใช้เป็นตัวชี้วัดย่อว่าผลคงอยู่ภายนอก in-sample ดีเพียงใด:
WFE = อัตราผลตอบแทน OOS ปรับเป็นรายปีอัตราผลตอบแทน IS ปรับเป็นรายปี × 100%
เพื่อให้ค่านี้มีความหมาย อัตราทั้งสองต้องหักต้นทุนเหมือนกัน ใช้สกุลเงินเดียวกันและกฎขนาดสถานะเดียวกัน หากผล IS เป็นศูนย์ อัตราส่วนจะไม่นิยาม หากติดลบก็ไม่ช่วยอธิบายการรักษาความได้เปรียบเชิงบวก การเทียบ WFE ระหว่างระบบที่นิยามผลตอบแทนต่างกันไร้ความหมาย และข้อควรระวังสำคัญกว่า: WFE ไม่ใช่ด่านผ่านหรือไม่ผ่าน WFE สูงจากสิบสองธุรกรรม out-of-sample บอกน้อยกว่าค่าปานกลางจากสี่ร้อยธุรกรรม ต้องดูพร้อมจำนวนธุรกรรม การแจกแจงผลแต่ละรอบ drawdown และพฤติกรรมเมื่อเพิ่มต้นทุน
8. การหาค่าที่เหมาะที่สุด ความเสถียรของพารามิเตอร์ และ Monte Carlo
การปรับค่าตอบว่าพารามิเตอร์ชุดใดให้ผลดีที่สุดบนข้อมูลนี้ ไม่ได้ตอบว่าชุดใดจะดีภายหลัง นี่ไม่ใช่ความต่างเล็กน้อยทางภาษา แต่เป็นความต่างระหว่างบรรยายอดีตกับพยากรณ์ หากไม่มีบันทึกการใช้งานจริง บทความนี้ระบุไม่ได้ว่ากี่ระบบล้มเหลวเพราะเหตุนี้ ตัวปรับค่าจัดอันดับผลจากข้อมูลที่ป้อน ผลเหล่านั้นไม่ได้ยืนยันผลงานในอนาคต
ยอดแหลมและที่ราบ
แทนที่จะดูแถวดีที่สุด ให้ดูบริเวณข้างเคียง หากค่าพารามิเตอร์ใกล้กันให้ผลคล้ายกัน คุณมีที่ราบ คือบริเวณที่กฎทำงานคล้ายกันแม้ตั้งค่าเปลี่ยนเล็กน้อย หากขยับหนึ่งขั้นแล้วผลพัง นั่นคือยอดแหลม ซึ่งน่าจะเป็นการบังเอิญตรงกับโครงสร้างข้อมูลในอดีต การเลือกกลางที่ราบมักมีเหตุผลกว่ายอดสูงสุด ความต่างนี้และวิธี walk-forward ทั้งหมดมาจากผลงาน Pardo (รายการที่ 7 ในบรรณานุกรม)
ควรทดสอบเช่นเดียวกันกับพารามิเตอร์ที่ปกติไม่ปรับ เช่น เวลาซื้อขาย ระยะ stop ขั้นต่ำ และตัวกรองวันในสัปดาห์ หากผลขึ้นกับว่าจะเทรดถึง 22:00 หรือ 23:00 เวลาเซิร์ฟเวอร์ ให้ตรวจเหตุผลทางเศรษฐศาสตร์ของตัวกรองและความเสถียรนอกช่วงปรับแต่ง ความต่างระหว่างชั่วโมงเพียงอย่างเดียวไม่พิสูจน์ overfitting
จำนวนรูปแบบเป็นส่วนหนึ่งของผล
เมื่อรายงาน backtest ให้ระบุจำนวนชุดผสมที่ตรวจพร้อมผล นิสัยข้อนี้แยกคำอธิบายการทดสอบจากโฆษณา งานของ Bailey, Borwein, López de Prado และ Zhu อธิบายปัญหาการทดสอบหลายครั้งและความน่าจะเป็นที่ผลดีที่สุดเกิดจากการค้นหาอย่างเป็นระบบ (รายการที่ 8 ในบรรณานุกรม) ส่วน Aronson อธิบายการเลือกตามผลอย่างเป็นระบบ (รายการที่ 9).
Monte Carlo ในฐานะทดสอบความทนทาน ไม่ใช่พยากรณ์
วิธีเรียบง่ายที่มีประโยชน์ซึ่ง Tomasini และ Jaekle เป็นผู้หนึ่งที่อธิบายไว้ (รายการที่ 10 ในบรรณานุกรม): นำชุดผลธุรกรรมจากช่วงประเมินมาสุ่มเรียงใหม่หลายครั้ง แล้วคำนวณการแจกแจง maximum drawdown สิ่งที่สนใจคือ หางขวาของการแจกแจงนั้น เช่น เปอร์เซ็นไทล์ที่ 95 ของ maximum drawdown หรือค่าที่ 95 เปอร์เซ็นต์ของรอบจำลองไม่เกิน หากค่านี้เกินขีดจำกัด drawdown ในแผนความเสี่ยง แบบจำลองที่สมมติและขนาดสถานะไม่ผ่านเกณฑ์นั้น แม้ค่าเฉลี่ยดูดี
ต้องระบุข้อจำกัดสองข้ออย่างชัดเจน การสุ่มลำดับสมมติว่าธุรกรรมเป็นอิสระ ซึ่งไม่จริงเมื่อเปิดสถานะสัมพันธ์กันหรือปรับขนาดตามผลล่าสุด อีกข้อที่มักพูดกว้างเกินไปคือ การสุ่มใช้ผลที่เคยเกิดแล้ว จึงไม่สร้าง ธุรกรรมรายตัว ที่อยู่นอกการแจกแจงที่สังเกต แต่นั่นไม่ได้จำกัด maximum drawdown ตรงกันข้าม จุดประสงค์คือให้ลำดับใหม่รวมขาดทุนเดิมเป็นชุดเดียวจน drawdown มากกว่าที่เคยเห็น Monte Carlo จึงตรวจความไวต่อลำดับเหตุการณ์ ไม่ใช่ขอบเขตเหตุการณ์รายตัวที่เป็นไปได้ ขีดจำกัด drawdown และกลไกหยุดเทรดอยู่ใน บทความ drawdown และ kill switch.
9. Forward test, demo และ market replay ยืนยันอะไรได้แน่
บางครั้ง forward test ถูกเรียกว่าหลักฐานขั้นสุดท้าย ซึ่งไม่ใช่ มันเป็นขั้นยืนยันที่รับรองเรื่องแคบและเฉพาะเจาะจงมาก
Forward test บนช่วงอดีตที่กันไว้ ยืนยันว่ากฎพร้อมพารามิเตอร์คงที่ได้ผลบางอย่างบนข้อมูลที่ตัวปรับค่าไม่เคยเห็น ไม่ได้ยืนยันต้นทุนดำเนินการหรือพฤติกรรมในสภาวะตลาดอื่น
Forward test แบบเวลาจริงบนบัญชีทดลอง เพิ่มสองเรื่อง คือการตรวจว่าการนำไปใช้ทำงานถูกระหว่างเทอร์มินัลทำงานปกติ และคุณทำตามกฎโดยไม่ปรับเฉพาะหน้าได้หรือไม่ มันไม่ได้วัดต้นทุนส่วนที่เซิร์ฟเวอร์ทดลองไม่จำลอง ส่วนจำลองอะไรจริงต้องดูเอกสารโบรกเกอร์และประเภทบัญชีนั้น ไม่ใช่หลักทั่วไป ก่อนตรวจ ผล demo อธิบายการจำลองที่ยังไม่ยืนยันสมมติฐานการดำเนินการ
Forward test บนบัญชีเงินจริงด้วยขนาดขั้นต่ำ เพิ่มการวัดต้นทุนการดำเนินการ โดยมีข้อจำกัดจากหัวข้อสองว่ามันวัดสำหรับขนาดที่คุณเทรด การเพิ่มความเสี่ยงไม่ใช่ส่วนของขั้นตอนทดสอบ แต่เป็นส่วนของ แผนบริหารความเสี่ยง และเฉพาะเมื่อแผนนั้นอนุญาตเท่านั้น
Market replay
Replay เล่นอดีตโดยซ่อนอนาคต คุณเลื่อนทีละแท่ง ตัดสินใจ แล้วจึงเห็นสิ่งที่เกิด สำหรับกลยุทธ์ใช้ดุลยพินิจ วิธีนี้ให้เก็บการฝึกซ้ำจำนวนมากโดยไม่รอเวลาจริงและไม่เขียนกฎเป็นโค้ด สภาพแวดล้อมแบ่งเป็นโปรแกรมจำลองเฉพาะที่มีแผงคำสั่งและสถิติ กับโหมดในแพลตฟอร์มกราฟ ซึ่งแบบหลังไม่ใช่แค่เลื่อนกราฟอีกแล้ว ปัจจุบัน TradingView อธิบายโหมด Replay Trading แยกว่า “เปิดสถานะและวาง limit, stop และ stop-limit order ได้เหมือนกับโบรกเกอร์จริง” และรวมผลเซสชันในแท็บ ภาพรวม, ผลการดำเนินงาน, วิเคราะห์ธุรกรรม, อัตราส่วนความเสี่ยง/ผลงาน และ รายการธุรกรรม โดย “ผลการดำเนินงานและรายการธุรกรรมส่งออกเพื่อวิเคราะห์หรือเก็บบันทึกเพิ่มเติมได้” (รายการที่ 5 ในบรรณานุกรม เข้าถึงเมื่อ 22.08.2026)
สิ่งที่ replay ไม่ให้: ไม่ให้ต้นทุนดำเนินการ เพราะ simulator กำหนดราคาเติมตามกฎตนเอง และต้องรู้กฎก่อนถือว่าผลเซสชันเป็นมากกว่าการฝึก อีกทั้งไม่ให้แรงกดดันจากขาดทุนจริง มีข้อเสียเฉพาะคือโกงโดยไม่รู้ตัวได้ง่าย การย้อนการตัดสินใจล่าสุด เล่นช่วงเดิมซ้ำ หรือ “อีกครั้งเพราะคราวนี้เห็นต่าง” ทำให้การทดสอบเป็นเรื่องเล่า หากจะใช้เซสชันเป็นข้อมูล ต้องเขียนกฎก่อนเริ่มและบันทึกทุกการตัดสินใจ รวมที่ผิดด้วย
10. เครื่องมือทดสอบ — เปรียบเทียบตามเกณฑ์
ไม่มีเครื่องมือใดปิดครบทุกขั้น ตารางนี้เทียบตามเกณฑ์ที่ตัดสินการเลือกจริง ไม่ใช่จำนวนฟีเจอร์
| เครื่องมือ | สิ่งที่ทดสอบ | แหล่งข้อมูล | การแบ่ง in-sample / out-of-sample | ต้องใช้โค้ด | ข้อจำกัดหลัก |
|---|---|---|---|---|---|
| MetaTrader 4 — Strategy Tester | ระบบอัตโนมัติ MQL4 บนตราสารเดียว | สามโหมดจำลอง: เฉพาะราคาเปิด, จุดควบคุม, ทุก tick (รายการที่ 14) | แบ่งเองด้วยช่วงวันที่ | ต้องใช้ (MQL4) | คำนวณการเคลื่อนไหวในแท่งจากกรอบเวลาย่อย ไม่ได้อ่านจากกระแส tick แถบคุณภาพบอกกรอบเวลาที่ใช้ |
| MetaTrader 5 — Strategy Tester | ระบบอัตโนมัติ MQL5 รวมแบบหลายตราสาร | ห้าโหมดสร้าง tick รวม tick ที่โบรกเกอร์เก็บ (รายการที่ 2) | มีในตัว (Forward: 1/2, 1/3, 1/4, กำหนดเอง) (รายการที่ 2) | ต้องใช้ (MQL5) | การมีและความลึกของ tick จริงขึ้นกับโบรกเกอร์ เมื่อคลังมีช่องว่าง tester เติมด้วย tick จำลอง (รายการที่ 1) หน้าต่าง walk-forward ไม่เลื่อนเอง |
| cTrader — backtest ของ cBot | ระบบอัตโนมัติในสภาพแวดล้อม cTrader Algo | สี่โหมด: ข้อมูล tick จากเซิร์ฟเวอร์, แท่ง M1 จากเซิร์ฟเวอร์, แท่ง M1 ในไฟล์ CSV, แท่ง H1 จากเซิร์ฟเวอร์ (รายการที่ 6) | แบ่งเองด้วยช่วงวันที่ | ต้องใช้ | ตั้งคอมมิชชันต่อล้านหน่วยซื้อขาย สเปรดเป็นค่าคงที่หรือสุ่มจากช่วงที่กำหนด แบบจำลองต้นทุนจึงลดทอนและต้องตั้งอย่างตั้งใจ |
| TradingView — กลยุทธ์ Pine และ Replay Trading | กฎ Pine Script และการฝึกตัดสินใจบนกราฟ พร้อมบันทึกสถานะและส่งออกผลเซสชัน (รายการที่ 5) | ข้อมูลของผู้ให้บริการที่เลือกบนกราฟ | แบ่งเอง | บางส่วน (กลยุทธ์ใช้ Pine ส่วน replay ไม่ต้องใช้โค้ด) | อีมูเลเตอร์กำหนดการเติม พฤติกรรมบนอดีตกับเวลาจริงอาจต่างกัน (รายการที่ 4) กราฟไม่มาตรฐานใช้ราคาเติมสังเคราะห์ โดยทั่วไปผลไม่อธิบายตลาดจริง (รายการที่ 15) |
| Replay simulator เฉพาะทาง | กลยุทธ์ใช้ดุลยพินิจ ทีละการตัดสินใจ | ชุดข้อมูลที่มากับเครื่องมือ เอกสารผู้ให้บริการรายหนึ่งที่ตรวจระบุ tick พร้อมสเปรดผันแปร รายอื่นอาจต่างกันและต้องอ่านแยก (รายการที่ 11) | แบ่งเอง | ไม่ต้อง | อีมูเลเตอร์กำหนดการเติม จึงไม่วัดต้นทุนดำเนินการจริง แม้ตั้งสเปรดผันแปรและคอมมิชชันได้ เอกสารผู้ให้บริการที่ตรวจไม่ได้อธิบายกฎเติมโดยตรง (รายการที่ 11) อีกทั้งเล่นช่วงซ้ำจนตัวอย่างเสียได้ง่าย |
| เครื่องมือวิเคราะห์ผล (นำเข้ารายงาน) | รายงานสำเร็จจาก tester หรือบัญชี | ไฟล์นำเข้า | ขึ้นกับเครื่องมือ | ไม่ต้อง | ไม่ได้รันทดสอบเอง แต่รับข้อผิดพลาดทั้งหมดจากต้นทาง |
| Python (ไลบรารี backtesting) | ตรรกะใดก็ได้ ควบคุมการแบ่งตัวอย่างเต็มที่ | แหล่งใดก็ได้ พร้อมรับผิดชอบคุณภาพ | เต็มที่ รูปแบบใดก็ได้ | ต้องใช้ | ความถูกต้องทางวิธีวิทยาทั้งหมดอยู่ที่คุณ ดู บทความ Python ในการเทรด |
การเลือกเหลือสามคำถาม กฎของคุณเขียนเป็นโค้ดได้หรือไม่ หากไม่ได้ ต้องใช้ replay ไม่ใช่ tester ต้องการ tick จริงหรือไม่ หากกฎขึ้นกับลำดับเหตุการณ์ในแท่ง คำตอบคือใช่และเป็นตัวตัดสิน ต้องการควบคุมวิธีแบ่งตัวอย่างหรือไม่ หากใช่ สักวันจะต้องใช้โค้ดตนเอง เพราะการแบ่งที่มีในตัวตั้งใจให้เรียบง่าย
11. ขั้นตอนการทำซ้ำและรายการตรวจสอบความน่าเชื่อถือ
การทดสอบที่ทำซ้ำไม่ได้คือความคิดเห็นที่เขียนเป็นตัวเลข ช่องต่อไปนี้เป็นขั้นต่ำที่คุณในอีกหกเดือนหรือคนอื่นใช้ทำรอบเดิมซ้ำได้ตรงกัน หากกู้ช่องใดไม่ได้ ต้องระบุเป็นข้อจำกัด ไม่ใช่ข้าม
1. เวอร์ชันกฎหรือโค้ดและวันที่ตรึงไว้ 2. พารามิเตอร์ทั้งหมด 3. ตราสารและสัญลักษณ์ที่โบรกเกอร์ใช้อย่างตรงตัวรวม suffix 4. แหล่งข้อมูลและวิธีได้มา 5. ช่วงวันที่ 6. เขตเวลาข้อมูลและเวลาเซิร์ฟเวอร์ 7. วิธีประทับเวลาแท่ง 8. โหมดสร้าง tick 9. แบบจำลองสเปรด 10. อัตราคอมมิชชันและวิธีคิด 11. จุดสวอปหากถือผ่านวัน 12. slippage และความหน่วงการดำเนินการที่สมมติ 13. กฎเติม pending order ของเครื่องมือ ได้แก่ เมื่อใดถือว่า limit เติมแล้ว ราคาเติม และการจัดการการกระโดดสำหรับ stop order 14. เงินเริ่มต้นและสกุลเงินบัญชี 15. กฎขนาดสถานะ 16. เวอร์ชันแพลตฟอร์มหรือไลบรารีทดสอบ 17. การแบ่ง in-sample กับ out-of-sample พร้อมวันที่เส้นแบ่ง 18. จำนวนรูปแบบพารามิเตอร์ที่ตรวจ 19. รหัสรายงานหรือไฟล์ผลลัพธ์
รายการตรวจความน่าเชื่อถือของ backtest
สิบเอ็ดคำถามที่ใช้กับผลคนอื่นและตนเองอย่างเดียวกัน คำตอบ “ไม่รู้” ถือเป็นคำตอบปฏิเสธ
- ระบุตราสาร สัญลักษณ์ตรงตัว ช่วงเวลา และแหล่งข้อมูลหรือไม่?
- ระบุโหมดสร้าง tick และตรงกับกรอบเวลาของกลยุทธ์หรือไม่?
- รู้หรือไม่ว่า tester เติม limit และ stop ที่ราคาใด และตรวจจากเอกสารเครื่องมือแทนการสมมติหรือไม่?
- ผลรวมสเปรด คอมมิชชัน จุดสวอป และ slippage ที่สมมติ พร้อมระบุหน่วยแต่ละอย่างหรือไม่?
- ผลยังอยู่เมื่อเพิ่มต้นทุนประมาณ slippage เฉลี่ยที่วัดบนบัญชีหรือไม่?
- บันทึกเวลาที่รู้ค่าตัวแปรทุกตัวในการตัดสินใจ และไม่มีเวลาใดหลังการตัดสินใจหรือไม่? การทดสอบหน่วงจุดเข้าเสริมการตรวจนี้ ไม่ได้แทนมัน
- ระบุการแบ่ง in-sample/out-of-sample พร้อมวันที่เส้นแบ่งหรือไม่?
- ดู out-of-sample เพียงครั้งเดียวหลังตรึงพารามิเตอร์หรือไม่?
- ระบุจำนวนรูปแบบพารามิเตอร์ที่ตรวจหรือไม่?
- ผลคงอยู่ในบริเวณรอบพารามิเตอร์ที่เลือก ไม่ใช่เพียงจุดเดียวหรือไม่?
- จำนวนธุรกรรมและช่วงเวลาครอบคลุมมากกว่าหนึ่งสภาวะตลาดหรือไม่ เมื่อข้อสรุปตั้งใจใช้ทั่วไป?
วิธีที่แย่ที่สุดในการทำให้ขั้นตอนเสียไม่ใช่ละข้อหนึ่ง แต่ทำผิดลำดับ คือเอาผลก่อนแล้วค่อยหาเหตุผล ลำดับเป็นเงื่อนไขให้มีความหมาย ไม่ใช่ความชอบ ข้อเจ็ดและแปดที่กำหนดหลังดูผลจะกำหนดอย่างซื่อตรงไม่ได้อีก การเขียนกฎก่อนทดสอบ กำหนดเส้นแบ่งก่อนปรับค่า และจดจำนวนรูปแบบไปด้วยใช้เวลาราวหนึ่งในสี่ชั่วโมง และแยกการยืนยันออกจากการค้นหากราฟสวย
เมื่อเขียนขั้นตอนแล้ว ก้าวถัดไปมักย้ายจากการคลิกใน tester ไปสู่โค้ดที่ทำซ้ำและดูแลการแบ่งตัวอย่างเอง จากจุดนั้นเริ่มหัวข้อของอีกบทความคือ Python ในการเทรด ซึ่งการทำซ้ำสภาพแวดล้อมสำคัญเท่ากับการทำซ้ำตัวทดสอบ
FAQ — ทดสอบกลยุทธ์ก่อนเข้าสู่ตลาด
บัญชีทดลองเพียงพอจะยืนยันว่ากลยุทธ์ทำกำไรหรือไม่?
ต้องมีกี่ธุรกรรมผลจึงมีความหมาย?
Walk-forward กำจัด overfitting หรือไม่?
Backtest ไม่คิดต้นทุนหมายความว่าอย่างไรแน่?
Market replay แทนการทดสอบบนบัญชีเงินจริงได้หรือไม่?
Tick จริงแก้ปัญหาคุณภาพ backtest หรือไม่?
แหล่งข้อมูลและบรรณานุกรม
- MetaQuotes — คู่มือ MetaTrader 5: Tick จริงและ tick ที่สร้างขึ้น, metatrader5.com/en/terminal/help/algotrading/tick_generation (เข้าถึงเมื่อ 22.08.2026) — โหมดสร้าง tick และหลักแทน tick จริงที่ขาดด้วย tick จำลอง: “หากประวัติสัญลักษณ์มีแท่งรายนาทีแต่ไม่มีข้อมูล tick tester จะสร้าง tick ในโหมด »ทุก tick«”
- MetaQuotes — คู่มือ MetaTrader 5: ทดสอบกลยุทธ์ — ตั้งค่า tester ทดสอบเดินหน้า และจำลองความหน่วง, metatrader5.com/en/terminal/help/algotrading/testing (เข้าถึงเมื่อ 22.08.2026) — การตั้งค่า Forward มีตัวเลือก ไม่ใช้, 1/2, 1/3, 1/4, กำหนดเอง และหลักว่า “หาก EA ใช้ pending order จะหน่วงเฉพาะการวางคำสั่ง ไม่ใช่การดำเนินการ”
- MetaQuotes — คู่มืออ้างอิง MQL5: ทดสอบกลยุทธ์การเทรด, mql5.com/en/docs/runtime/testing (เข้าถึงเมื่อ 22.08.2026) — “ระหว่างทดสอบ สเปรดไม่ได้ถูกจำลอง แต่ดึงมาจากข้อมูลในอดีต”
- TradingView — คู่มือผู้ใช้ Pine Script: Repainting, tradingview.com/pine-script-docs/concepts/repainting (เข้าถึงเมื่อ 22.08.2026)
- TradingView — ศูนย์ช่วยเหลือ: เรียนเทรดบนข้อมูลในอดีต (Replay Trading), tradingview.com/support/solutions/43000691889 (เข้าถึงเมื่อ 22.08.2026) — “เปิดสถานะและวาง limit, stop และ stop-limit order ได้เหมือนกับโบรกเกอร์จริง” แท็บ ภาพรวม, ผลการดำเนินงาน, วิเคราะห์ธุรกรรม, อัตราส่วนความเสี่ยง/ผลงาน และ รายการธุรกรรม โดย “ผลการดำเนินงานและรายการธุรกรรมส่งออกเพื่อวิเคราะห์หรือเก็บบันทึกเพิ่มเติมได้”
- Spotware — cTrader Algo: ทดสอบ cBot ย้อนหลัง, help.ctrader.com/ctrader-algo/documentation/cbots/backtest-a-cbot (เข้าถึงเมื่อ 22.08.2026) — สี่โหมดข้อมูล: “ข้อมูล tick จากเซิร์ฟเวอร์” “แท่ง M1 จากเซิร์ฟเวอร์” “แท่ง M1 ในไฟล์ CSV” “แท่ง H1 จากเซิร์ฟเวอร์” คอมมิชชันเป็น “อัตราต่อล้านหน่วยซื้อขาย” สเปรดแบบ “ค่าคงที่” และ “สุ่ม”
- Pardo, R. — การประเมินและหาค่าที่เหมาะที่สุดของกลยุทธ์การเทรด, Wiley, ฉบับที่ 2, 2008 — walk-forward, ประสิทธิภาพ Walk-Forward, ที่ราบพารามิเตอร์ และวิธีทดสอบระบบ
- Bailey, D.H., Borwein, J.M., López de Prado, M., Zhu, Q.J. — ความน่าจะเป็นของการฟิต backtest มากเกินไป, Journal of Computational Finance, 2017 — การทดสอบหลายครั้งและความน่าจะเป็นที่ผลดีที่สุดเป็นผลพวงการค้นหา
- Aronson, D.R. — การวิเคราะห์ทางเทคนิคโดยอิงหลักฐาน, Wiley, 2007 — data mining bias การเลือกตามผล และการยืนยันเชิงสถิติ
- Tomasini, E., Jaekle, U. — ระบบการเทรด: แนวทางใหม่ในการพัฒนาระบบและปรับพอร์ตให้เหมาะที่สุด, Harriman House, 2009 — walk-forward, Monte Carlo และการทดสอบระดับพอร์ต
- Forex Tester Software — Forex Tester Online: ศูนย์สนับสนุน, help.forextester.com (เข้าถึงเมื่อ 22.08.2026) — ขอบเขตข้อมูลที่มากับเครื่องมือ: “เรามีข้อมูล tick และสร้างแท่งเทียนจากข้อมูลนั้น” “ข้อมูลการเปลี่ยนราคาต่อนาที รวม Open, High, Low, Close และ Volume (กิจกรรมซื้อขาย) ข้อมูล tick ให้รายละเอียดทุกการเปลี่ยนราคาของสัญลักษณ์การเงิน พร้อมสเปรดลอยตัว” พารามิเตอร์ต้นทุน: “Forex Tester Online รองรับการทดสอบกลยุทธ์ด้วยสเปรดผันแปรและคอมมิชชัน” เอกสารนี้ไม่อธิบายกฎที่อีมูเลเตอร์ใช้กำหนดราคาเติม ที่อยู่ซึ่งเคยอ้างคือ forextester.com/documentation ส่งกลับหน้า 404 (ตรวจเมื่อ 22.08.2026) จึงเปลี่ยนแล้ว
- Reserve Bank of Australia — แถลงการณ์นโยบายการเงิน กุมภาพันธ์ 2019 กรอบ B: เหตุการณ์เยนญี่ปุ่นเคลื่อนไหวฉับพลันล่าสุด, rba.gov.au/publications/smp/2019/feb/box-b-the-recent-japanese-yen-flash-event.html (เข้าถึงเนื้อหาเมื่อ 22.08.2026) — “เวลา 9:36 น. AEDT ภายในประมาณ 30 วินาที และไม่มีข่าวสำคัญ เยนแข็งขึ้น 3 เปอร์เซ็นต์ต่อดอลลาร์สหรัฐ” “สเปรด bid-ask กว้างขึ้นมากจากราว 2 pip เป็น 100–300 pip” “สภาพคล่องตลาดต่ำตามฤดูกาลในช่วงเวลาและช่วงปีนั้น”
- MetaQuotes — คู่มือ MetaTrader 5: คุณลักษณะการทดสอบ, metatrader5.com/en/terminal/help/algotrading/testing_features (เข้าถึงเมื่อ 22.08.2026) — หัวข้อ การกระตุ้นและดำเนินการคำสั่ง มีสองย่อหน้าต่อกันที่ขอบเขตแยกกัน ย่อหน้าแรกใช้กับตลาดเงิน: “ตราสารนอกตลาดจัดตั้งใช้ Bid และ Ask กระตุ้น pending order ทุกประเภทและ SL/TP และดำเนินการที่ Bid และ Ask ตลาดปัจจุบันขณะกระตุ้น” ย่อหน้าที่สองเฉพาะตราสารในตลาดจัดตั้ง: “Limit order ดำเนินการที่ราคาซึ่งระบุ (ไม่มี slippage) ส่วนประเภทอื่นดำเนินการที่ Bid และ Ask ตลาดปัจจุบัน (อาจมี slippage)” หน้าเดียวกันอธิบายโหมดแบบง่ายว่า “ใน »เฉพาะราคาเปิด« และ »OHLC 1 นาที« pending order รวม SL และ TP ดำเนินการที่ราคาซึ่งระบุในคำสั่ง”
- MetaQuotes — คู่มือ MetaTrader 4: Strategy Tester — ตั้งค่า tester, metatrader4.com/en/trading-platform/help/autotrading/tester/tester_parameters (เข้าถึงเมื่อ 22.08.2026) — โหมด เฉพาะราคาเปิด, จุดควบคุม และ ทุก tick แบบสุดท้าย “ใช้สร้างจากทั้งกรอบเวลาย่อยใกล้สุดและกรอบเวลาใกล้เคียงทั้งหมดที่มี” แถบคุณภาพแสดงกรอบเวลาที่ใช้
- TradingView — ศูนย์ช่วยเหลือ: กลยุทธ์ให้ผลไม่สมจริงบนกราฟประเภทไม่มาตรฐาน, tradingview.com/support/solutions/43000481029 (เข้าถึงเมื่อ 22.08.2026) — “เนื่องจากระดับราคาในกราฟไม่มาตรฐานมีลักษณะสังเคราะห์โดยเนื้อแท้ ผล backtest ที่คำนวณบนกราฟเหล่านี้โดยทั่วไปจะไม่สะท้อนสภาพตลาดจริง”
- IG — บัญชีทดลองต่างจากบัญชีจริงอย่างไร?, ig.com/uk/help-and-support/articles/687034 (บทความวันที่ 29.05.2026 เข้าถึงเมื่อ 22.08.2026) — อธิบายเฉพาะบัญชีทดลองผู้ให้บริการนี้: “ธุรกรรม demo ไม่เผชิญ slippage การปรับดอกเบี้ยและเงินปันผล หรือการเคลื่อนไหวราคานอกเวลาทำการ” และ “ธุรกรรมอาจถูกปฏิเสธหากเงินไม่พอเปิด แต่ต่างจากบัญชีจริงที่จะไม่ปฏิเสธด้วยเหตุขนาดหรือราคา”