การทดสอบย้อนหลัง (Backtest) กลยุทธ์ — วิธีทำให้ถูกต้อง?
เมื่อผู้อ่านบอกผมว่าระบบของเขาให้ผลถูกต้องถึงเก้าสิบห้าเปอร์เซ็นต์ ผมรู้ทันทีว่าเรื่องนี้ไม่ได้จบดี การทดสอบย้อนหลัง (backtesting) ไม่ใช่คำทำนาย และไม่ใช่คำสัญญาว่าจะได้กำไร มันคือเครื่องมือสำหรับ "พิสูจน์ให้ล้มเหลว" ความคิดของคุณ เพื่อค้นหาว่ากฎของคุณรับมือกับสภาวะตลาดหลากหลายได้จริงหรือว่าแค่บังเอิญตรงกับช่วงเวลาที่ดีช่วงหนึ่ง บทความนี้จะอธิบายวิธีทดสอบอย่างซื่อสัตย์ กับดักที่พบบ่อยที่สุด และเหตุผลว่าทำไม backtest ที่ทำถูกต้องยังไม่รับประกันผลลัพธ์จริง
ทำไมต้องทดสอบกลยุทธ์บนข้อมูลย้อนหลัง?
ก่อนจะเสี่ยงเงินจริง คุณต้องตรวจสอบก่อนว่ากฎของคุณจะสร้างกำไรได้ไหมในช่วงหลายปีที่ผ่านมา หากกลยุทธ์ให้ผลกำไรสม่ำเสมอในสภาวะตลาดหลากหลายตลอดห้าปี แสดงว่ามีแนวโน้มว่ามี "ความได้เปรียบ" อยู่จริง แม้จะเปราะบาง เพราะตลาดเปลี่ยนแปลง นโยบายธนาคารกลางปรับทิศทาง สภาพคล่องย้ายไปมา แต่นี่คือสิ่งที่ดีที่สุดที่เรามี backtest ช่วยกรองไอเดียที่ใช้งานไม่ได้ออก และคัดเอาไว้เฉพาะสิ่งที่คุ้มค่าจะทดสอบต่อในบัญชีทดลอง (demo account) และในที่สุดในสถานะขนาดเล็กในบัญชีจริง ไม่มีอะไรมากกว่านั้น
กฎต้องชัดเจนสิ้นเชิง ไม่เช่นนั้นคุณกำลังทดสอบนิยาย
ขั้นตอนแรกนี้สะดุดผู้เริ่มต้นส่วนใหญ่ กลยุทธ์ต้องถูกเขียนในแบบที่คนแปลกหน้าอ่านแล้วสามารถเปิดสถานะเหมือนกันทุกประการ รายการเข้าออเดอร์ว่า "ผมซื้อเมื่อเห็นแนวโน้ม" ไม่ใช่กลยุทธ์ มันคือความรู้สึก ตัวอย่างที่ทดสอบได้จริง: "ซื้อ EUR/USD / สถานะ Long ที่ราคาปิดรายวัน เมื่อ EMA 50 อยู่เหนือ EMA 200, RSI 14 วันต่ำกว่า 70 และราคาแตะค่าเฉลี่ย 20 วันจากด้านบน; จุดตัดขาดทุน (Stop Loss) ที่ 1.5 ATR(14) ใต้จุดเข้า; จุดทำกำไร (Take Profit) ที่ 2.5 ATR เหนือจุดเข้า; ความเสี่ยง 1% ของทุนต่อสถานะ" เฉพาะกฎแบบนี้เท่านั้นที่สามารถทดสอบได้อย่างซื่อสัตย์
หัวข้อที่เกี่ยวข้องคือการค้นหาความได้เปรียบในการเทรด ในส่วน กลยุทธ์การเทรด Forex — หากคุณยังไม่รู้ว่าความได้เปรียบของคุณคืออะไร backtest จะบอกคุณอย่างตรงไปตรงมาและรวดเร็ว
จะหาข้อมูลย้อนหลังได้จากไหน และต้องการตัวอย่างเท่าไร?
ข้อมูลเป็นแหล่งที่สองของข้อผิดพลาดสำคัญ ประวัติ tick จากโบรกเกอร์หนึ่งจะไม่ตรงกับของโบรกเกอร์อื่นทีละ tick เพราะโมเดลการดำเนินคำสั่งและแหล่งสภาพคล่องต่างกัน สำหรับกลยุทธ์ที่ใช้ Stop Loss ระยะสั้น ความแตกต่างนี้กำหนดผลลัพธ์ได้เลย สำหรับการเทรด intraday ควรใช้ข้อมูล CME futures ซึ่งเป็นศูนย์กลางและตรวจสอบได้ สำหรับ swing บนแท่งเทียนรายวัน ประวัติของโบรกเกอร์มักเพียงพอ
ประเด็นที่สองคือขนาดตัวอย่าง กฎที่ยืนยาวคือ อย่างน้อยหนึ่งร้อยสถานะ ไม่เช่นนั้นผลลัพธ์อาจเป็นเพียงโชค สามสิบสถานะที่ยอดเยี่ยมตลอดหกเดือนไม่ได้บอกอะไรคุณเลย หนึ่งร้อยคือเกณฑ์นัยสำคัญทางสถิติ นักเทรดมืออาชีพมุ่งสู่สามร้อยสถานะขึ้นไป กลยุทธ์ swing บนกราฟรายวัน (D1) ต้องการข้อมูลห้าปี กลยุทธ์ day trading สองปี กลยุทธ์ scalping หนึ่งปีของประวัติ tick จริง
ห้าปีมีข้อดีอีกอย่าง: ครอบคลุมหลายสภาวะตลาด ทศวรรษที่ผ่านมาให้ทั้งช่วงแนวโน้ม (DXY ปี 2014–2017) การช็อกความผันผวน (มีนาคม 2020) วัฏจักรการขึ้นดอกเบี้ย (2022–2023) และการทรงตัวตลอด 2024 กลยุทธ์ที่ได้ผลเฉพาะในสภาวะเดียวไม่ใช่กลยุทธ์ มันคือภาพลวงตาที่ปรับแต่งให้เข้ากับยุคหนึ่งเท่านั้น
สเปรด ค่าคอมมิชชัน และ slippage — ขาดสิ่งเหล่านี้ backtest โกหกคุณ
backtest ที่ "มหัศจรรย์" ที่พบบ่อยที่สุดลืมหักต้นทุนออก สำหรับ swing บนกราฟ H4 ที่เป้าหมาย 200 pip, สเปรด 0.8 pip แทบมองไม่เห็น แต่สำหรับนักเทรด scalper ที่เปิด 30 สถานะต่อวันโดยมีเป้าหมายห้า pip สเปรดเดียวกันกินความได้เปรียบส่วนใหญ่ไปหมด backtest ที่สมจริงต้องรวม สเปรด (spread) ของโบรกเกอร์, ค่าคอมมิชชันต่อล็อต และสำหรับกลยุทธ์ที่ไวต่อการดำเนินคำสั่ง ต้องรวม ส่วนต่างราคาที่เกิดขึ้น (slippage) ด้วย ซึ่งคือช่องว่างระหว่างราคาที่เห็นตอนกดและราคาที่ได้จริง
เกณฑ์ของผม: หากกำไรเฉลี่ยต่อสถานะน้อยกว่าสองเท่าของต้นทุนเฉลี่ยรวม (สเปรด ค่าคอมมิชชัน และ slippage ที่คาดการณ์) แสดงว่ากลยุทธ์ไม่มีกันชนความปลอดภัย ดูรุนแรง แต่ช่วยประหยัดเวลาหลายเดือนที่จะหลอกตัวเอง กับดักแยกที่ต้องระวัง: ตัวชี้วัดที่ วาดกราฟใหม่ย้อนหลัง (repaint) จะดูสมบูรณ์แบบใน backtest แต่ทำงานต่างออกไปโดยสิ้นเชิงเมื่อเทรดจริง
เส้นกราฟที่ปรับแต่งให้เข้ากับอดีตไม่ใช่กลยุทธ์ — มันคือพิพิธภัณฑ์
กับดักที่นักเทรด self-taught มักตกคือ over-fitting คุณทดสอบค่าพารามิเตอร์สามสิบค่า เลือกผลลัพธ์ที่ดีที่สุด และประกาศว่าระบบให้ผลตอบแทนสี่สิบเปอร์เซ็นต์ต่อปี สิ่งที่คุณทำจริงๆ คือปรับแต่งให้เข้ากับ "เสียงรบกวน" ไม่ใช่สัญญาณ ยิ่งตัวปรับแต่งแตะพารามิเตอร์มาก ยิ่งมีโอกาสสูงที่ผลลัพธ์เป็นเพียงความบังเอิญ Robert Pardo ผู้เขียนคลาสสิกเกี่ยวกับการประเมินระบบ กล่าวตรงๆ ว่า:
"การทดสอบนอกตัวอย่าง (out-of-sample) คือมาตรวัดคุณภาพกลยุทธ์ที่ซื่อสัตย์เพียงอย่างเดียว หากระบบไม่สามารถรักษาความได้เปรียบบนข้อมูลที่ไม่ได้ใช้ในการปรับแต่ง แสดงว่าระบบนั้นถูกปรับให้เข้ากับอดีต ไม่ใช่ตลาด" — Robert Pardo, The Evaluation and Optimization of Trading Strategies, Wiley, 2008
นี่คือเหตุผลที่ต้องแบ่งข้อมูลเป็นส่วนปรับแต่ง (in-sample) และส่วนยืนยัน (out-of-sample) ในอัตราส่วนประมาณ 70/30 หากผลลัพธ์ out-of-sample แย่กว่ามาก แสดงว่าเกิด over-fitting และกลยุทธ์ไม่พร้อมสำหรับบัญชีจริง แนวทางที่เข้มงวดกว่าคือ การวิเคราะห์ walk-forward ซึ่งสลับระหว่างช่วงปรับแต่งและช่วงยืนยันโดยเลื่อนผ่านประวัติทั้งหมด นี่คือการป้องกันที่ดีที่สุดที่เรามีต่อความเชื่อมั่นที่ผิดพลาดใน backtest
ตัวอย่างสมมติ — วิธีอ่านตัวเลขอย่างซื่อสัตย์
ลองนึกภาพกลยุทธ์ swing บน EUR/USD D1 ทดสอบตลอดปี 2019–2024 ผลลัพธ์ตัวอย่าง: 147 สถานะ, อัตราการชนะ 54%, อัตราส่วนความเสี่ยงต่อผลตอบแทนเฉลี่ย 2.3 ต่อ 1, profit factor 1.78, การลดลงของเงินทุน (drawdown) 14.5%, ผลตอบแทนสุทธิ +87% ตลอดห้าปี (ประมาณ 13.3% ทบต้นต่อปี) ไม่โอ้อวดแต่สมจริง — นี่คือแม่แบบ ไม่ใช่บัญชีจริง ขั้นตอนที่มีประโยชน์ถัดไปคือการจำลอง Monte Carlo ซึ่งสุ่มลำดับสถานะใหม่เพื่อแสดงว่า equity อาจพัฒนาไปอย่างไรภายใต้ลำดับที่แตกต่างกัน เนื้อหานี้เป็นเพียงข้อมูลการศึกษา ไม่ใช่คำแนะนำการลงทุน
ขั้นตอนถัดไป
ความรู้เกี่ยวกับ backtesting จะเริ่มทำงานก็ต่อเมื่อคุณลงมือทำจริงและเปรียบเทียบผลลัพธ์กับบันทึกการเทรดของคุณ ห้าขั้นตอนด้านล่างใช้เวลาเพียงสองสามบ่าย และช่วยหลีกเลี่ยงข้อผิดพลาดที่พบบ่อยที่สุดของนักเทรดที่กำลังพัฒนา
- เขียนกลยุทธ์ลงในไฟล์ข้อความเดียวอย่างกลไก ทุกรายการเข้า ออก จุดตัดขาดทุน (Stop Loss) และตัวกรองต้องถูกเขียนจนคนอื่นอ่านแล้วสามารถเปิดสถานะได้เหมือนกันทุกประการ หากต้องเพิ่ม "ขึ้นอยู่กับสถานการณ์" ที่ไหนก็ตาม ให้กำหนดกฎให้ชัดขึ้น — backtest ไม่อ่านระหว่างบรรทัด
- รวบรวมข้อมูลห้าปีสำหรับ swing หรือสองปีสำหรับ day trading และแบ่งล่วงหน้า สำรองส่วนเจ็ดสิบเปอร์เซ็นต์แรกไว้สำหรับการปรับแต่ง และล็อกส่วนสามสิบเปอร์เซ็นต์สุดท้ายจนกว่ากลยุทธ์จะถูกตรึงไว้ จากนั้นเท่านั้นจึงทดสอบบนส่วนที่สำรองไว้ — นั่นคือการสอบจริงของคุณ
- ใส่ต้นทุนจริงเข้าไปในทุกการจำลอง เพิ่ม สเปรด (spread) ของโบรกเกอร์, ค่าคอมมิชชันต่อล็อต และ slippage ที่คาดการณ์ โดยมีค่าแยกสำหรับช่วงเงียบและช่วงใกล้การประกาศข้อมูลสำคัญ หากกลยุทธ์สูญเสียกำไรมากกว่า 20% เมื่อรวมต้นทุน คำตอบชัดเจน: ไม่มีกันชนความปลอดภัย
- กำหนดเกณฑ์ขั้นต่ำหนึ่งร้อยสถานะ หากช่วงเวลาให้น้อยกว่านั้น ให้ขยายประวัติ เพิ่มตราสารจากกลุ่มเดียวกัน หรือยอมรับว่าผลลัพธ์เป็นสมมติฐาน ไม่ใช่หลักฐาน จดบันทึกจำนวนสถานะ drawdown เฉลี่ย และอัตราการชนะ — ตัวเลขสามอย่างนี้บอกได้มากกว่าผลตอบแทนหลัก
- หลังจาก backtest สำเร็จ ทดลองใช้ demo อย่างน้อยสามเดือนก่อนเทรดจริง เปรียบเทียบผล demo กับ backtest — หาก demo แย่กว่าอย่างเห็นได้ชัด ให้ตรวจสอบว่าเป็นเพราะ over-fitting, ต้นทุนที่ประเมินต่ำ หรือข้อผิดพลาดในโค้ด กลับมาดูที่กฎ ไม่ใช่ความหวังว่าสิ่งต่างๆ จะดีขึ้นในบัญชีจริง backtest ที่ดีไม่ได้รับประกันผลลัพธ์จริงที่ดี มันแค่ได้สิทธิ์ที่จะลอง
แหล่งอ้างอิงและบรรณานุกรม
-
MetaQuotes Strategy Testing in MetaTrader 5 · oficjalna dokumentacja testera strategii (testowanie i optymalizacja na danych historycznych) www.metatrader5.com ↗
-
MQL5 Reference Testing Trading Strategies · dokumentacja deweloperska MQL5: tryby generowania tików, symulacja spreadu, testy wielowalutowe www.mql5.com ↗
-
Bank for International Settlements OTC foreign exchange turnover in April 2022 · Triennial Central Bank Survey — dane o strukturze rynku FX (kontekst dla backtestu instrumentów detalicznych) www.bis.org ↗
คำถามที่พบบ่อย
Over-fitting (การปรับแต่งมากเกินไป) ในกลยุทธ์การเทรดคืออะไร?
Over-fitting (หรือที่เรียกว่า curve-fitting) คือสถานการณ์ที่พารามิเตอร์ของกลยุทธ์ถูกปรับให้เข้ากับราคาในอดีตอย่างละเอียดมากจนไม่สามารถรับมือกับข้อมูลใหม่ได้ อาการคลาสสิกคือ backtest ที่มีอัตราการชนะเก้าสิบห้าเปอร์เซ็นต์ แต่บัญชีจริงได้เพียงสามสิบ เหตุผลเรียบง่าย: อัตราการชนะเก้าสิบห้าเปอร์เซ็นต์ไม่ยั่งยืนใน Forex ระยะยาว — กลยุทธ์ที่ใช้งานได้จริงอยู่ในช่วงห้าสิบถึงหกสิบเปอร์เซ็นต์ หาก backtest ของคุณแสดงผู้ชนะมากกว่าเจ็ดสิบเปอร์เซ็นต์ ให้ถือเป็นสัญญาณเตือนและสงสัย over-fitting จนกว่าจะพิสูจน์เป็นอื่น
ควรใช้ซอฟต์แวร์ใดสำหรับ backtesting?
สำหรับผู้เริ่มต้น ตัวเลือกที่แข็งแกร่งที่สุดคือ Strategy Tester ที่ฝังอยู่ใน MetaTrader 5: ฟรี รองรับการทดสอบหลายสกุลเงิน ข้อมูล tick จริง และการปรับแต่งแบบ genetic MetaTrader 4 ยังใช้งานอยู่แต่จำกัดที่ตราสารเดียวและกรอบเวลาเดียว Forex Tester 5 มีราคาประมาณสามร้อยดอลลาร์และให้ทดสอบด้วยตนเองทีละแท่งเทียน — เครื่องมือที่ดีสำหรับนักเทรดที่ต้องการสร้างสัญชาตญาณทางภาพก่อนจะทำให้เป็นอัตโนมัติ Pine Script ใน TradingView เพียงพอสำหรับการทดสอบง่ายๆ บนตราสารเดียว ในทางปฏิบัติ การทดสอบจริงจังส่วนใหญ่ควรทำใน MT5 หรือในสภาพแวดล้อม Python ที่มีไลบรารี backtesting เฉพาะทาง
ต้องการข้อมูลย้อนหลังเท่าไรสำหรับการทดสอบที่ซื่อสัตย์?
สำหรับกลยุทธ์ swing และ position กฎทั่วไปคือข้อมูลอย่างน้อยห้าปี สำหรับ day trading สองปี และสำหรับ scalping หนึ่งปีของประวัติ tick จริง ช่วงเวลาเหล่านี้ไม่ได้เลือกโดยพลการ — มีขึ้นเพื่อให้การทดสอบครอบคลุมสภาวะตลาดที่แตกต่างกัน: แนวโน้ม, การทรงตัว และความผันผวนสูง โดยไม่ขึ้นอยู่กับกรอบเวลา ยังมีเงื่อนไขทางสถิติ: อย่างน้อยหนึ่งร้อยสถานะในการทดสอบ เพื่อให้ผลลัพธ์ไม่ใช่เพียงโชค นักเทรดมืออาชีพมุ่งสู่สามร้อยสถานะขึ้นไป หากประวัติของคุณให้สถานะน้อยกว่า ให้ขยายช่วงเวลาหรือเพิ่มตราสารจากกลุ่มเดียวกัน — ไม่เช่นนั้นคุณกำลังทดสอบสมมติฐาน ไม่ใช่กลยุทธ์
ผลลัพธ์จริงจาก backtest ที่ดีมีลักษณะอย่างไร?
ตัวเลขที่สมจริงคืออัตราการชนะห้าสิบถึงหกสิบเปอร์เซ็นต์, อัตราส่วนความเสี่ยงต่อผลตอบแทนเฉลี่ยอย่างน้อยสองต่อหนึ่ง, profit factor ในช่วง 1.5 ถึง 3.0 และการลดลงของเงินทุนสูงสุด (drawdown) ต่ำกว่ายี่สิบเปอร์เซ็นต์ — โดยมีอย่างน้อยหนึ่งร้อยสถานะและตัวเลขได้รับการยืนยันบนช่วง out-of-sample Sharpe ratio เกิน 1 บ่งชี้ผลตอบแทนที่สมเหตุสมผลเมื่อเทียบกับความผันผวน สัญญาณเตือนสีแดง: อัตราการชนะเกินแปดสิบเปอร์เซ็นต์, profit factor เกินห้า และ drawdown ต่ำกว่าห้าเปอร์เซ็นต์ — การรวมกันนั้นแทบทุกครั้งส่งสัญญาณ over-fitting ไม่ใช่ความได้เปรียบที่แท้จริง