วิธีทดสอบและประเมินระบบเทรด EP. 1
เราจะรู้ได้อย่างไรว่า ระบบเทรดที่เรากำลังจะนำไปใช้สามารถทำกำไรได้จริง ?
หรือถ้านำไปใช้แล้ว พอร์ตไม่แตก มีความเสถียรในระยาว ?
ในบทความนี้ ผมจะกล่าวถึงวิธีที่ใช้ในการทดสอบ วัดผล และประเมินระบบเทรดของเราให้ทุกคนได้ทราบกันครับ ซึ่งต้องบอกก่อนเลยว่า เทรดเดอร์ที่เทรดอย่างเป็นระบบทุกคน จำเป็นที่จะต้องรู้และทดสอบให้ครบทุกแบบก่อนที่จะนำไปใช้งานจริงครับ (สำคัญมาก !!)
แบบที่ 1: Historical Back Testing
Historical Back Testing คือการทดสอบกลยุทธ์กับข้อมูลในอดีต โดยกำหนด period ของ start date และ end date ตามที่เราต้องการ ถือว่าเป็นการทดสอบที่เทรดเดอร์หลายคนใช้บ่อยและนิยมมากที่สุด นอกจากนี้ยังเป็นวิธีที่ง่ายที่สุดอีกด้วย ในทางกลับกัน ก็มีหลายคนนำไปใช้ในทางที่ผิด เพราะเราเพียงแค่ป้อนวันที่เริ่มต้นและวันที่สิ้นสุด (โดยปกติจะเป็นวันที่ของวันนี้) รวมถึง parameter ใดๆ ก็ตามต้องการปรับให้เหมาะสม ซึ่งผลลัพธ์ที่ได้ก็จะเป็น parameter ที่ดีที่สุดในช่วงเวลานั้นๆ เช่น หาค่า EMA, SMA, RSI, ADX, BB Band, etc. ที่ทำให้ระบบเราได้กำไรมากที่สุด แต่เวลานำไปใช้จริงแล้ว…กลับไม่ได้ผล Performance แย่ (Overfit ดีๆนี่เอง)
สิ่งที่เราต้องเข้าใจและตระหนักอยู่เสมอคือ Historical Back Testing คือการนำระบบไปใช้ทดสอบกับข้อมูลในอดีต ไม่ได้มีการการันตีว่าจะใช้ได้ผลกับข้อมูลในปัจจุบันหรืออนาคต ซึ่งเทคนิคหรือวิธีเลือก Historical Data ให้เหมาะสม มีดังนี้
- ควรเลือก Period ในการ Backtest ให้ครอบคลุมทุกช่วงสภาวะของตลาด ทั้ง Uptrend, Downtrend และ Sideway
- Period ในการ Backtest ควรใช้ระยะเวลาที่ยาวประมาณนึง โดยขึ้นอยู่กับ Assets ที่เราเทรดด้วย เช่น ถ้าเทรดตลาดหุ้น ควรใช้อย่างน้อย 4–5 ปีขึ้นไป เพราะถ้าใช้ period สั้นไป จะทำให้เราได้รับข้อมูลไม่ครบทุกมิติ แต่ถ้าใช้ยาวเกินไปก็ไม่ดีเช่นกัน เพราะสภาพตลาดในอดีตเมื่อ 20 ปีที่แล้วก็ต่างจากสมัยนี้มากครับ
- ถ้าคุณมีทุนทรัพย์เพียงพอ ควรใช้ Data ที่มี Delisted Stocks ด้วย เพื่อป้องกัน Survivorship Bias ของตลาด นอกจากนี้ในสถานการณ์จริง เราไม่มีวันรู้ได้เลยว่า หุ้นที่เราเข้าไปเทรดจะมีโอกาสถูกถอดออกจากตลาดในช่วงเวลานั้นหรือไม่ ไม่ว่าจะด้วยเหตุผลหรือเหตุการณ์ใดๆก็ตาม
- ควรเพิ่มการ Simulation หรือ Stress Test ด้วยวิธีต่างๆ ลงไปการทดสอบด้วย เช่น Monte Carlo Simulation, Bootstrapping, etc. เพราะการทดสอบด้วยการ Backtest เพียงครั้งเดียว แทบจะไม่สามารถยืนยันผลการทดสอบที่น่าเชื่อถือได้เลย
- ไม่ควร Optimize หรือ Parameter Tuning มากจนเกินไป เพราะจะทำให้เกิด Curve Fitting ได้ (กล่าวคือ ระบบสามารถทำงานได้ดีกับข้อมูลในอดีต แต่เละเทะเวลานำไปใช้เทรดจริง T_T)
แบบที่ 2: Out-of-Sample Testing
“เทรดเดอร์ที่อ่อนประสบการณ์จะทดสอบและเพิ่มประสิทธิภาพระบบเทรดของพวกเขาจากข้อมูลในอดีตแค่ชุดเดียว”
หากคุณใช้วิธีนี้มาจนถึงตอนนี้ คำพูดข้างต้นอาจทำให้คุณโกรธได้ (ขออภัยล่วงหน้านะครับ) แต่มีโอกาสที่เวลานำระบบเทรดที่คุณ Backtest มาอย่างดิบดี มั่นใจอย่างเต็มเปี่ยม มาลองใช้งานจริงแล้วนั้น ผลออกมาไม่เป็นอย่างที่คาดคิดได้ หรือในกรณีเลวร้ายสุด อาจทำให้คุณล้มเลิกการเทรดไปเลยก็ได้
ซึ่งส่วนใหญ่เป็นผลมาจากการประเมินประสิทธิภาพของกลยุทธ์จากข้อมูลเพียงแค่ชุดเดียวที่คุณปรับ Paramater ให้เหมาะสม ปรับแล้วปรับอีก ปรับจนทำให้ผลลัพธ์ของระบบเทรดดีเยี่ยมเมื่อเทียบกับข้อมูลที่ถูกใช้ทดสอบ ในทาง Data Science เราเรียกข้อมูลเหล่านี้ว่า (Train Data)
เพราะการ Backtest กับ Historical Data ที่ดีและเหมาะสมนั้น ควรแยก Data ออกเป็น 2 ส่วน คือ In-sample และ Out-of-Sample (คล้ายๆ Train Data & Test Data ใน term ของการทดสอบโมเดล) โดย In-sample นั้น คือ ชุดข้อมูลหรือระยะเวลาในการ Backtest ที่คุณสามารถ Optimize ค่าของ Indicators ต่างๆในระบบได้ (แต่ถ้ามากเกินก็ไม่ดีนะครับ) ซึ่งถ้าผลลัพธ์ออกมาเป็นที่น่าพอใจ ก็ใช้กลยุทธ์นั้นไปทำการทดสอบกับ Out-of-Sample ต่อ แต่จะไม่มีการ Optimize Parameter ในเฟสของ Out-of-Sample แล้วนะครับ
โดยจุดประสงค์ของ Out-of-Sample Testing คือ การทดสอบกลยุทธ์การเทรดของเราว่า มีประสิทธิภาพมากน้อยเพียงใดเมื่อเจอกับข้อมูลที่ระบบไม่เคยเห็นมาก่อน และยังสามารถใช้เพื่อ Monitor การ Curve Fitting ของระบบเทรดได้อีกด้วยครับ
ซึ่งวิธีการเลือกช่วงเวลาของ Out-of-Sample ที่เหมาะสมก็จะเหมือนกับ Historical Data ด้านบนที่กล่าวไปคือ สามารถประยุกต์ใช้ได้ทั้ง In-sample และ Out-of-Sample เลยครับ
ยังไม่จบนะครับ…เดี๋ยวมาต่อกันในบทความหน้า เนื่องจากวิธีการทดสอบและประเมินระบบเทรดมีอีกหลายแบบด้วยกัน กลัวเนื้อหามันยาวไป แล้วพบกันใหม่ EP. 2 ครับ
“Never Stop Learning”
Algo Alchemist