Robustness Test คืออะไร?

Robustness test คืออะไร

หัวใจหลักสำคัญของการสร้างระบบเทรดก็คือการทำ Robustness test หมายถึงการทดสอบความแข็งแกร่งของระบบ ว่าสามารถเอาตัวรอดจากความผันผวนได้หรือไม่

การทำ Robustness test เราต้องแบ่งข้อมูลการทดสอบออกมาอย่างต่ำ 2 ชุดข้อมูลของช่วงเวลา ซึ่งจะแบ่งเป็น

  1. ข้อมูลสำหรับเรียนรู้และสร้างระบบเทรด (In sample)
  2. ทดสอบระบบเทรด (Out of sample)

หลายคนคงสงสัยว่า ทำไมต้องแบ่งข้อมูลเพื่อทดสอบอีกรอบ?

In sample and Out of sample

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

In sample (ช่วงสร้างระบบเทรด)

ช่วงเวลาที่สร้างระบบเทรด เรียนรู้ตลาด และ Optimized เพื่อหาค่าที่ทำกำไร ความเสี่ยง และค่าอื่นๆ ได้ตรงตามเงื่อนไขที่เราตั้งไว้ ซึ่งในส่วนนี้ใช้เวลานานมาก อย่างที่ผมทำอยู่ตอนนี้ก็ต้องใช้ Machine learning เพื่อให้มันเรียนรู้ตลาดในช่วงที่เรากำหนด เพราะเวลาเราเทรนมัน เราจะเทรนทีละคู่ และให้มันหาทีละ 1-3 ล้านระบบเทรด โดยจุดเข้าออกตัว Machine จะหาเอง แล้วกรองตามค่าที่เรากำหนดมาเบื้องต้นก่อน

Out of sample (ช่วงทดสอบระบบเทรด)

เป็นช่วงเวลาที่นอกเหนือ IS (In sample) ช่วงนี้จะเป็นช่วงที่เราบดขยี้ ปี้ ยำ ระบบเทรดที่เราสร้างเพื่อทดสอบว่า เมื่อมีเหตุการณ์นอกเหนือจากช่วงที่สร้างระบบ มันสามารถเอาตัวรอดและทำกำไรให้เราได้หรือไม่

ซึ่งการทำ EA ส่วนใหญ่ในบ้านเรา หลายๆเจ้าทำแค่ In sample เท่านั้น สร้างเสร็จ backtest สวยๆ ก็นำมาขายเลย และสุดท้ายก็สู้ตลาดไม่ไหวก็ค่อยๆออกจากตลาดไป เพราะไม่มีความเสถียร ไม่ยืดหยุ่นพอที่จะอยู่รอดทุกสภาวะ

ดังนั้นช่วง Out of sample จึงเป็นช่วงที่สำคัญสำหรับการทดสอบระบบเทรดมากครับ

ข้อด้อยของการทดสอบคือ ถ้าข้อมูลการทดสอบมีน้อยเกินไป ผลลัพธ์การทดสอบจะไม่มีประสิทธิภาพ และไม่สามารถทำกำไรจากตลาดได้อย่างแท้จริง

การ Backtest ควรทดสอบให้ใกล้เคียงหรือโหดกว่าตลาดจริงๆ ทั้ง Slippage, Spread ไปจนถึงการทดสอบ Monte Carlo, Walk-Forward Optimized ซึ่งการทดสอบตรงนี้ จะนานยิ่งกว่าตอนสร้างระบบหรือตอน In sample มากๆครับ เพราะต้องทดสอบด้วยชุดข้อมูลที่มีจำนวนมหาศาลอย่างมาก

Monte Carlo

monte carlo

Monte Carlo คือการจำลองสถานการณ์ต่างๆ ขึ้นมาด้วยการกำหนดพารามิเตอร์หลากหลายแบบ เพื่อให้ส่งผลกระทบกับระบบเทรด แล้วนำมาทดสอบหาความน่าจะเป็นว่าระบบเทรดจะสามารถเอาตัวรอดจากตลาดที่ไม่เคยเจอได้ไหม ทั้งการสุ่มการเทรด สุ่มจำนวนครั้งเทรด สุ่ม Spread สุ่ม Slippage และอื่นๆอีกมากมาย เราจะทำการทดสอบใน Simulator เพื่อหาค่าเหล่านี้ออกมา และเราจะกำหนดกฏเกณฑ์ต่างๆ เพื่อกรองระบบออกมา แต่หลักๆ เราจะใช้หาโอกาสการสูญเสียสูงสุดที่เราอาจจะเจอได้ ในส่วนตรงนี้ ผมจะอธิบายแบบเจาะลึกในบทความข้างหน้านะครับ

TIP: ตัวย่อ
IS = In sample
OS = Out of sample

Walk-Forward Optimized

Walk-Forward Optimized

หลังจากที่เราได้ระบบที่ทดสอบหลายๆอย่างมาแล้ว เราก็จะมาทดสอบด้วยชุดข้อมูลบางช่วงและ Optimized มันไปด้วย

คือสมมติว่าเราสร้างระบบในช่วง IS และนำมาทดสอบในช่วง OS ต่อ แล้วหลังจากนั้นเราจะแบ่งขยับช่วงเวลาไปข้างหน้าเพื่อทดสอบอีกครั้งตามสเต็ปโดยกำหนดช่วง OS ของก่อนหน้าเข้าไปด้วย เพื่อให้ตัว Simulator ได้เรียนรู้และปรับค่าใหม่เพื่อให้ระบบสามารถทำกำไรได้ดีกว่าเดิมและลดความเสี่ยงของการสูญเสียเงินทุน

กระบวนการเหล่านี้จะถูกทำซ้ำไปเรื่อยๆ จนกระทั่งหมดชุดข้อมูลใหม่ที่จะมาทดสอบ แล้วเราจะนำค่า Equity ในช่วงเวลา OS มาต่อกัน และนำมาเปรียบเทียบกับค่าสถิติที่เราทดสอบมาก่อนหน้า

สรุป

การทำ Robustness Test หรือการหาระบบที่ Robust จริงๆมีการทดสอบที่มากกว่านี้เยอะเลยครับ และขั้นตอนข้างบน จะขาดอย่างใดอย่างหนึ่งไปไม่ได้ และตอนนี้หลายๆท่านน่าจะพอทราบแล้วว่า Ea ทั้งหลายที่เราเห็นในโลกเรานี้ ส่วนใหญ่ทำไมดูดีแค่ตอน Backtest เท่านั้น แต่พอรันจริงกลับพาเสียเงินอย่างเดียว

วิธีการทำ Robustness จะช่วยให้ระบบที่เราสร้าง สามารถเอาตัวรอดในสภาวะตลาดที่ไม่เคยเจอ มีความยืดหยุ่นพอที่จะผ่านช่วงแย่ๆไปได้

By Nuttawath ทีมงาน Speedup Forex

บทความที่เกี่ยวข้อง