13 Types of Algorithmic Backtesting

13 ประเภทการทดสอบระบบเทรดหุ้น

โพสนี้ได้ทำการสรุปการทดสอบระบบ Backtesting (BT) แบบต่างๆ เพื่อชี้แจงว่า BT นั้นๆทำเพื่ออะไร/ทำไม/ยังไง โดยแบ่ง BT ออกเป็น 4 ระดับ จำนวน 13 ประเภท แต่อย่าเพิ่งตกใจว่าทำไมมี BT เยอะ เพราะจริงๆแล้ว…

  • มีหลาย BT จะต้องทำการทดสอบซ้ำๆ ทุกครั้งที่สร้างระบบใหม่
  • แต่บาง BT ก็เพียงทดสอบใหม่อีกครั้งในทุกๆช่วง 1 เดือน 3 เดือน
  • และหลายๆ BT ก็ไม่ต้องทำ ถ้าไม่ได้ใช้ หรือไม่ได้เทรด แบบนั้นๆ

ทั้งกระนั้น นลท/นศ ควรรู้จัก BT ประเภทต่างๆ

 

ทำไมถึงต้องทำการทดสอบระบบเทรดหุ้น?

  • เพื่อทำความเข้าใจระบบของตนเอง Understand the system/strategy
  • เพื่อวัดผลและปรับปรุงระบบ Gauge/Improve performance
  • เพื่อปรับสมดุลระหว่างกำไรและความเสี่ยง Balance between reward and risk
  • เพื่อสร้างความเชื่อมั่นในระบบ Gain confidence
  • เพื่อขจัดความลำเอียง ทั่งโลภและกลัว Eliminate bias

ตัวย่อ:

  • BT คือ การทดสอบ BackTesting
  • SS คือ กลยุทธ์และระบบเทรด Strategy & System
  • Q คือ นักพัฒนาระบบเทรดหุ้น ควอนทฺ Quants

 

สรุปสั้นๆ

  1. Simple: ทดสอบเบื้องต้น ดูแนวโน้มศักยภาพคร่าวๆ
  2. Sensitivity: ดูความสัมพันธ์ระหว่าง parameters หลักๆในระบบ
  3. Walk forward: เปรียบเทียบและคาดการณ์ผลทดสอบกับผลเทรดจริง
  4. Simulation: ผนวกความผันผวนและความเสี่ยงลงในการทดสอบ
  5. Stress: วิเคราะห์ความแข่งแกร่งของระบบในส่วนของอินดิเคเตอร์
  6. Monkey: วัดประสิทธิภาพสัญญาณซื้อขายเทียบกับสัญญาณแบบสุ่ม
  7. Index: ศึกษาตลาดที่เทรดอยู่ด้วย index มาตราฐานของตลาดนั้นๆ
  8. Basket: ทดสอบเฉพาะหุ้นที่อยู่ใน index ซึ่งมีการเปลี่ยนเข้า/ออก
  9. Breadth: สร้าง/ทดสอบ index พิเศษเพื่อใช้มองตลาดในหลายมิติ
  10. Ruin: หาความเป็นไปได้ที่พอร์ตจะขาดทุนที่ระดับต่างๆ
  11. All-weather: ทดสอบ SS ในทุกช่วงสภาพตลาดอย่างละเอียด
  12. Random walk: เหมือน all-weather แต่เน้นความเสี่ยงสุดแบบโต่ง
  13. Multiple: ทดสอบและสร้างสมดุลในหลายๆ assets/strategies/portfolios พร้อมๆกัน

 

Backtest Level 1 (Standard)

1. Simple BT

ใช้ในการทดสอบเร็วๆ คร่าวๆเบื้องต้น เพื่อดูแนวโน้มและความเป็นไปได้ของ SS ที่กำลังพัฒนาอยู่ว่า มีโอกาสทำกำไรขาดทุนมากน้อยแค่ไหน แค่โค้ด SS ตามปรกติ แล้วกดปุ่ม Backtest ใน AmiBroker ก็จะได้ผลลัพธ์ออกมา ซึ่งความน่าเชื่อถือจะต่ำ เพราะขาดการทดสอบอย่างละเอียด และขาดการผนวกความไม่แน่นอนลงในการทดสอบ  Q ที่ขาดความรู้และประสบการณ์มักใช้แค่ Simple BT ในการสรุปผล ซึ่งไม่ถูกต้อง! มันควรถูกใช้แค่ดูแนวโน้มเท่านั้น

ศึกษาเพิ่มเติม https://www.udemy.com/course/amibroker-thaiquants/

 

2. Sensitivity Analysis

เป็นการศึกษาความสัมพันธ์ของ parameters ต่างๆร่วมกัน ที่หลายระดับ เช่น position size (PS) 5% 10% ร่วมกับ stop loss (SL) 10% 15% 20% ก็จะได้ตารางผลลัพธ์ขนาด 2×3 สำหรับ metrics ต่างๆจากระบบ เช่น %Net Profit สำหรับ PS 10% SL 20% คือเท่าไหร่ หรือ PS 5% SL 15% คือเท่าไหร่ เพื่ออาจนำมาใช้กำหนดขอบเขตของ SS ของเรา และเพื่อพัฒนาไปในทิศทางที่ได้กำไรสูงสุด เสี่ยงน้อยสุด Q ที่ดีมีความสามารถต้องทำ Sensitivity Analysis เพื่อเข้าใจ SS และ ทำ Stress & Robust Test ใน Level 2

 

3. Walk Forward Analysis (WFA)

WFA มักใช้ในการพิจารณาเปรียบเทียบผล BT ระหว่าง in-sample data (IS, ข้อมูลที่ใช้ในช่วงตอนเขียนโค้ดและพัฒนา) กับ out-of-sample data (OOS, ข้อมูลที่ไม่ได้ถูกใช้ใน IS) ว่าต่างกันมากน้อยแค่ไหน ปรกติแล้วผลจาก IS จะดีกว่า OOS และอีกกรณีคือ การใช้ WFA ในการ optimize ระบบเทรด ในช่วง IS ก่อนเทรดจริง แล้วนำค่า parameters ต่างๆที่ถูก optimize มาใช้ในช่วงเทรดจริง OOS เช่น optimize ช่วง 2018-2019 แล้วนำค่า parameters ที่ได้ไปมาใช้ซื้อขายจริงๆในช่วง 2020 ซึ่ง AmiBroker มี WFA ให้อยู่แล้ว และ Q หลายท่านเชื่อว่าเป็นหนึ่งในการทดสอบ ที่น่าเชื่อถือที่สุด

ศึกษาเพิ่ม http://thaiquants.com/vlog/walk-forward-analysis/

 

Backtest Level 2 (Simulation)

4. Simulation BT

คือการผนวกความไม่แน่นอนลงในโค้ด ด้วยการ random ค่าต่างๆ (ใช้ AmiBroker’s functions Random และ Optimize) แล้วทำการ BT ซ้ำๆหลายสิบหลายร้อยรอบ แล้วจึงนำผลลัพธ์ที่ได้มาสรุปอีกครั้ง ในรูปแบบของระดับความมั่นใจ Confidence Level ที่ระดับต่างๆ เช่น ที่ 50 percentile (mode) และ 20 percentile (conservative) มีค่าผลลัพธ์ metrics ต่างๆเป็นเท่าไร โดยที่ยิ่งทำ simulation หลายๆรอบ ยิ่งจะได้ค่าที่น่าเชื่อถือมากขึ้น แนวคิดของ Simulation และ Confidence Level ยังเป็นที่พื้นฐานสำคัญมากๆในการทดสอบ BT ประเภทอื่นๆด้านล่าง ดังนั้น  Q ทุกคนควรจะต้องรู้จักและทำเป็น ในเบื้องต้นค่าที่มักใช้สุ่มสำหรับ Simulation BT คือ BuyPrice/SellPrice และ Missing Trades

ศึกษาเพิ่ม http://thaiquants.com/vlog/monte-carlo-simulation-in-amibroker/

 

5. Stress & Robust Test

เป็นการใช้และต่อยอด Simulation BT ในการทดสอบระบบว่า sensitive มากน้อยแค่ไหน ด้วยการเปลี่ยน key parameters ใน SS จากค่าคงที่เป็นค่าสุ่ม เช่น จาก MA(C, ค่าคงที่ 20 วัน) เป็น MA(C, ค่าสุ่มในขอบเขต 18-20 วัน) แล้วพิจารณาความแตกต่างของผลลัพธ์ metrics ระหว่างกรณีค่าคงที่ (constant) กับ กรณีค่าสุ่ม (random) ถ้าค่าที่ได้ยิ่งแตกต่างน้อย ยิ่งหมายความว่าดี ระบบ SS ไม่ sensitive เกินไป มีความแข่งแกร่ง robustness พอที่จะรับความผันผวน และความไม่แน่นอนที่อาจจะเกิดขึ้นในตอนเทรดจริง

 

6. Monkey Tests

ไอเดียง่ายๆของ Monkey Tests คือ ถ้าสัญญาณซื้อขาย SS ของเราสู้กับ ลิงที่ใช้การซื้อขายแบบสุ่มมั่วๆไม่ได้ เราก็ไม่ควรนำ SS ไปเทรดจริง โดยที่ Monkey Tests ใช้และต่อยอด Simulation BT ในการทดสอบว่าสัญญาณซื้อขายมีประสิทธิภาพมากน้อยแค่ไหน ด้วยการเปรียบเทียบระหว่างสัญญาณซื้อขายที่ได้ทำการโค้ดไว้ กับสัญญาณชื้อขายแบบสุ่ม ลิงสุ่มมั่วๆ ซึ่งแบ่งออกเป็นหลักๆ 3 แบบ คือ สุ่มสัญญาณซื้อ (Monkey Entry) สุ่มสัญญาณขาย (Monkey Exit) และสุ่มทั้งสัญญาณซื้อและขาย (Monkey Entry&Exit) โดยที่ SS ของเรา ที่ 20 หรือ 50 percentiles ควรจะต้องได้ผลลัพธ์ที่ดีกว่า ของ Monkey Tests ทั้ง 3 แบบ ที่ 90 percentile ขึ้นอยู่กับ SS และความสามารถของ Q คนนั้นๆ

ศึกษาเพิ่ม http://thaiquants.com/vlog/monkey-tests/

 

Backtest Level 3 (Market)

7. Index BT

เป็นการทดสอบ index มาตราฐาน ของตลาดที่ทำการเทรดอยู่ เช่น SET โดยใช้การซื้อขายตามช่วงเวลาง่ายๆ เช่น ซื้อต้นปี ขายปลายปี ไม่มีกลยุทธ ไม่มีอินดิเคเตอร์ใดๆ เพื่อศึกษาพฤติกรรมและผลตอบแทนของตลาดโดยรวม ทั้งในระยะสั้นและยาว ทั้งในกรณี reward และ risk แล้วนำค่าผลลัพธ์ที่ได้จาก BT มาเป็น Benchmark สำหรับวัดประสิทธิภาพของ SS ที่กำลังจะพัฒนาต่อไป เพราะ นลท ทุกคนต้องการที่จะชนะตลาด ดังนั้นจึงต้องรู้ค่า metrics สำคัญๆต่างๆของตลาด และรู้ความน่าจะเป็นของ reward และ risk ที่เป็นไปได้จริง สมเหตุผลรวมถึงการสร้างความสมดุลและการแลกเปลี่ยนระหว่าง reward และ risk อีกด้วย เช่น ถ้าตลาดกำไรเฉลี่ยปีล่ะ 15% การที่ SS จะทำกำไร 3เท่าของตลาด หรือ 45% ก็อาจจะไม่ใช่เรื่องง่าย หรืออาจจะต้องแลกมาด้วยความเสี่ยง

 

8. Basket BT

เป็นการทดสอบกลุ่มของหุ้นที่อยู่ใน index ที่ต้องการจะเทรด  เช่น SET50 โดยที่หุ้นใน index นั้นๆมีการเปลี่ยนแปลงทุกๆปี หรือทุกๆครึ่งปี ทำให้การทดสอบจะต้องมีการเปลี่ยนขอบเขตกลุ่มหุ้น stock universe ไปเรื่อยๆตามหุ้นที่ถูกกำหนดไว้ใน index ในช่วงหนึ่งๆ ดังนั้น SS จะเทรดเฉพาะหุ้นใน index จะที่ต้องทำ Basket BT ที่มีเงื่อนไขพิเศษต่างจาก BT แบบอื่นๆ เพราะมีเงื่อนไขเรื่องของ stock universe ที่เปลี่ยนแปลงไปในทุกๆปี หรือทุกๆครึ่งปี อีกทั้งต้องระวังเรื่อง survivorship bias  เพราะมีจะหุ้นที่ถูกถอนจาก index และเพิ่มเข้าใน index เรื่อยๆ อีกทั้งยังมีเรื่องของระยะเวลาที่ index นั้นๆถูกจัดตั้งมา เช่น SET50 เริ่ม 16 สิงหาคม 2538 ทำให้ไม่สามารถทำ Basket BT ย้อนกลับไปก่อนเวลาที่มันถูกจัดตั้ง เวลาเห็นผลการทดสอบหุ้นใน SET50 หรือหุ้นไทยใน index อื่นๆให้พึงระวัง หลายคน หลายเวป ที่ทำผิด

 

9. Market Breadth Analysis (MKBA)

เป็นการทดสอบตลาดในมิติที่ต่างไปจาก Index BT ตรงที่ MKBA จะมีการใช้ไอเดีย Market Breadth เพื่อสร้าง customized index พิเศษขึ้นมาเอง เช่น นับจำนวนหุ้นที่ทำ New High ทำ New Low (NHNL) แล้วนำ index พิเศษนี้ไปพัฒนาต่อเป็นกลยุทธ์ที่ระดับตลาด เพื่อใช้ร่วมกับ SS ที่ระดับหุ้นและพอร์ต ซึ่งข้อแตกต่างแรกคือ index มาตราฐานใน Index BT ถูกสร้างจากการถ่วงน้ำหนักตามมูลค่าหุ้นทั้งหมด market cap. ในขณะที่ index พิเศษใน MKBA ไม่มีการถ่วงน้ำหนัก อีกทั้งกรณีของ Index BT จะเป็นการทดสอบแบบง่ายๆเพื่อศึกษาตลาด ไม่มีกลยุทธ์ ในขณะที่ MKBA จะทดสอบทั้ง customized index และกลยุทธ์ที่สร้างขึ้นมาเพื่อใช้ร่วมกันในการเทรด ในขณะที่ index มาตราฐานในตลาดหนึ่งๆอาจมีไม่กี่ตัว แต่ index พิเศษที่สร้างด้วย Breadth นั้นสามารถมีจำนวนมากมาย ขึ้นอยู่กับว่าจะวัด/นับอะไรของพฤติกรรมหุ้น

ศึกษาเพิ่ม http://thaiquants.com/vlog/market-breadth/

 

Backtest Level 4 (Risk)

10. Ruin Test

ทดสอบเพื่อหาความน่าจะเป็น (probability) ว่าพอร์ตจะขาดทุนที่ระดับนั้นๆเท่าไหร่ ซึ่งในความรู้ในอดีตจะพิจารณาที่ขาดทุน100% เทียบกับเงินต้นด้วยสูตรคณิตศาสตร์ (เวลาอ่านหนังสือ/บทความให้ระวัง) แต่ด้วยองค์ความรู้ใหม่ๆและความสามารถของคอมพิวเตอร์และซอฟแวร์ Q ควรทดสอบหาความน่าจะเป็นที่จะขาดทุนที่ระดับต่างๆ เช่น 20% 30% 50% เทียบกับเงินต้น (initial equity) และจุดสูงสุด (highest equity) ของพอร์ตด้วย simulation ไม่ใช่ formula โดยระดับต่างๆนี้ขึ้นอยู่กับความสามารถในการทำกำไรของ SS ภายใน 1-2ปี เช่นถ้า SS สามารถทำกำไรเฉลี่ยปีล่ะ 25% Q ก็ควรทดสอบที่ระดับ 20% เพราะถ้าขาดทุน 20% จะต้องกำไร 25% จาก 80% กลับขึ้นมาที่ 100% เท่าเดิม

ศึกษาเพิ่ม http://thaiquants.com/vlog/risk-of-ruin/

หมายเหตุ: นลท สายควอนทฺ Q ต้องคิดถึงตารางนี้เสมอในการออกแบบ SS และต้องมีหลักการณ์และเหตุผลในการเลือกใช้ค่าต่างๆสำหรับ SS นั้นๆ ซึ่งแต่ล่ะ SS ก็จะใช้ค่าไม่เหมือนกัน ขึ้นอยู่กับความสามารถในการทำกำไร ลดความเสี่ยงและอื่นๆ

 

11. All-Weather BT (AWBT)

เป็นอีกหนึ่งทางเลือกในการทดสอบ SS อย่างละเอียดมากๆด้วย simulation ที่มีการสุ่มค่าต่างๆใน SS และมีการสุ่มจุดเริ่มต้นการทดสอบ (วันเดือนปี) ดังนั้น AWBT จะมี layers ของ simulation ถึง 2 ระดับ ซึ่งการสุ่มจุดเริ่มต้นจะเป็นการสุ่มแบบไม่ลำเอียง (unbiased) ทุกช่วงเวลา ทุกสภาพตลาดมีโอกาสถูกทดสอบหมด ถึงถูกเรียกว่าเป็น All-weather ดังนั้น AW จึงใช้เวลา BT นานกว่าแบบอื่นๆ อีกทั้งการโค้ดและคำนวณผลลัพธ์ metrics ต่างๆสำหรับ AWBT จะซับซ้อนกว่า BT แบบอื่นๆที่ทำใน AmiBroker เช่นพิจารณาช่วง all-weather ด้วย AmiBroker’s Range (From-To) 2000-2020 แต่ BT ด้วย simulation หาผลลัพธ์ช่วงหนึ่งๆ เช่น 2014-2016 ทำให้ต้องใช้ Custom Backtester Interface ในการคำนวณ CAGR, Exposure, อื่นๆ เอง ถ้าใช้ results ตรงๆจาก AmiBroker BT เลขจะได้ค่าบางค่าไม่ถูกต้อง

 

12. Random Walk-forward BT (RWF)

RWF ก็เป็นอีกทางเลือกหนึ่งในการทดสอบอย่างละเอียด และพิจารณาความเสียงแบบสุดโต้ง จะคล้ายๆ AWBT ที่ใช้ simulation over simulation 2 layers แต่จะต่างกันตรงที่ RWF มีพื้นฐานจาก WFA (เริ่มต้นที่จุดๆหนึ่งแล้วเลื่อนการทดสอบไปข้างหน้า) แต่จะมีการสุ่มช่วงเวลาที่จะเลื่อน (เดิน/walk) BT ไปข้างหน้า จึงเรียกเป็น random walk โดย RWF จะสุ่มการเดินไปข้างหน้าแบบลำเอียง (biased) ในทางที่สร้างสรรค์ เพราะ RWF สุ่มการเลื่อนตาม performance ที่ได้มาจาก Simulation BT ครั้งล่าสุด หมายความว่าถ้าช่วงไหน Simulation BT ได้ผลลัพธ์ออกมาแย่ ช่วงการเลื่อนใน BT ถัดไปก็จะใกล้กับจุดเริ่มต้นเดิม เพื่อตอกย้ำความเมาในตลาดของ SS นั้นๆ ในขณะที่ถ้าช่วงไหนผลลัพธ์ออกมาดี SS มีสติกำไรดี RWF ก็จะเลื่อนออกไปไกล การโค้ดและคำนวณผลลัพธ์จะคล้ายๆ AWBT แต่เพิ่มเติมในส่วนของ biased walk

 

13. Multiple-portfolio BT (MPBT)

เป็นการทดสอบ assets strategies และ/หรือ portfolios หลายๆตัวพร้อมๆกัน เพื่อวิเคราะห์ภาพรวมการลงทุนทั้งหมดที่มี เช่นการลงทุนในหุ้น กองทุน ทอง ตราสารหนี้ และอื่นๆ แล้วทำการสร้างสมดุลระหว่าง assets/strategies/portfolios นั้นๆด้วยกลยุทธ์การบริหารหน้กตักที่เน้นลดความเสี่ยง เพิ่มผลตอบแทน ซึ่งเหมาะสำหรับ นลท ที่มีการลงทุนที่หลากหลายและมีขนาดการลงทุนที่ใหญ่ โดยสร้าง Equity Curve (EC) ด้วย AmiBroker’s Composites ของแต่ล่ะ portfolio มาวิเคราะห์ ซึ่ง 1 port จะมีหลาย EC เช่น port01_001, port01_002, … port01_100, และ port02_001, … port02_100 จะเห็นว่าความซับซ้อนในการโค้ด การทดสอบ MPBT และความซับซ้อนในตอนเทรดจริงรวมถึงการสร้างสมดุล เป็นสิ่งที่ นลท ต้องพึงระวัง ถ้าไม่จำเป็น/ไม่รู้จริงๆว่าถ้าทำ MPBT แล้วจะนำไปเทรดยังไง ก็ไม่จำเป็นต้องทำ แนะนำให้เลือกท่าง่าย มองเป็น asset/strategy/portfolio เป็นตัวๆไปจะดีกว่า

 

ของคนไทย โดยคนไทย เพื่อคนไทย

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

 

Links ที่ควรศึกษาเพิ่มเติม