ผล backtest ออปชันเปลี่ยนได้โดยที่โค้ดกลยุทธ์ไม่ขยับแม้แต่บรรทัดเดียว ผู้ให้บริการอาจแก้ราคาเสนอซื้อขายที่ผิดพลาด เพิ่มรายการซื้อขายที่มาล่าช้า ปรับปรุงเมทาดาทาของสัญญา หรือเปลี่ยนตัวกรองตลาดที่ราคาเสนอซื้อสูงกว่าราคาเสนอขาย คุณรันช่วงวันเดิมอีกครั้งแล้วได้การจับคู่คำสั่งคนละแบบ สถานะคนละแบบ หรืออาจได้ค่า Sharpe ต่างไป นั่นไม่ได้หมายความว่ากลยุทธ์มีบั๊กเสมอไป แต่อาจเป็นเพราะหลักฐานข้อมูลที่ใช้ทดสอบกลยุทธ์เปลี่ยนไป
หากต้องการให้ backtest ออปชันทำซ้ำได้ ให้ถือว่าข้อมูลตลาดเป็นอินพุตที่มีเวอร์ชัน บันทึกว่าคุณใช้สแนปช็อตใด เก็บข้อมูลดิบที่เป็นที่มาของการตัดสินใจแต่ละครั้งไว้ และเปรียบเทียบผลที่เปลี่ยนไปในระดับสัญญาและเวลา ก่อนเชื่อผลสรุปรวมชุดใหม่
ทำไม backtest ออปชันของฉันถึงเปลี่ยน ทั้งที่โค้ดยังเหมือนเดิม?
ข้อมูลออปชันไวต่อการแก้ไขเป็นพิเศษ เพราะความสามารถในการซื้อขายที่เห็นได้ของสัญญาขึ้นอยู่กับหลายฟิลด์ที่ต้องพิจารณาร่วมกัน ได้แก่ ราคาเสนอซื้อ ราคาเสนอขาย ปริมาณของแต่ละฝั่ง ราคาอ้างอิง วันหมดอายุ ราคาใช้สิทธิ และตัวคูณหรือสินทรัพย์ที่ส่งมอบของสัญญา การแก้ราคาเสนอซื้อขายอาจเปลี่ยนโอกาสที่เห็นในตอนแรกให้กลายเป็นตลาดที่ราคาเสนอซื้อสูงกว่าราคาเสนอขาย ส่วนการแก้เมทาดาทาอาจเปลี่ยนความหมายของตัวคูณในสถานะที่ถืออยู่
ลองนึกถึงกลยุทธ์ที่ซื้อคอลออปชันเมื่อราคาเสนอขายต่ำกว่า $2.00 ในการโหลดข้อมูลครั้งแรก ราคาเสนอขายเวลา 10:14 อยู่ที่ $1.95 ราคาเสนอซื้ออยู่ที่ $1.90 และมีปริมาณ 5 ต่อมา ผู้ให้บริการปรับราคาเสนอขายเป็น $2.05 หลังตรวจสอบข้อความจากตลาดหลักทรัพย์ที่มาล่าช้า ข้อมูลเพียงรายการเดียวก็ทำให้สัญญาณเปลี่ยน หากสัญญานั้นเป็นรายการซื้อขายเดียวของกลยุทธ์ในวันนั้น การแก้ข้อมูลเพียงเล็กน้อยก็อาจส่งผลอย่างมากต่อผลตอบแทนของวันนั้น
การกรองราคาเสนอซื้อขายก็สำคัญเช่นกัน ผู้ให้บริการอาจตัดราคาเสนอซื้อขายที่ล้าสมัย เอาตลาดที่ราคาเสนอซื้อสูงกว่าราคาเสนอขายออก หรือปรับรูปแบบเวลาประทับต่างกัน วิธีเหล่านี้อาจสมเหตุสมผล แต่ก็เป็นส่วนหนึ่งที่กำหนดเอกลักษณ์ของชุดข้อมูล คำว่า “ออปชัน SPY ตั้งแต่มกราคมถึงมีนาคม” ยังไม่เพียงพอที่จะระบุประวัติข้อมูลที่ทำซ้ำได้
ชุดข้อมูลออปชันคนละรุ่นคืออะไร?
ชุดข้อมูลคนละรุ่นหมายถึงเวอร์ชันที่แน่นอนของข้อมูลย้อนหลังซึ่งมีอยู่ในงานวิจัยรอบหนึ่ง ให้เก็บชื่อผู้ให้บริการและชุดข้อมูล เวลาที่ดึงข้อมูล ช่วงวันที่ เวอร์ชันสคีมา และกฎการทำความสะอาดหรือกรองข้อมูลไว้ หากผู้ให้บริการมีรหัสสแนปช็อตหรือเวลาประทับการแก้ไข ก็ควรบันทึกไว้ด้วย
สำหรับการตัดสินใจจำลองแต่ละครั้ง ให้เก็บข้อมูลที่มามากพอจะตอบได้ว่า พิจารณาสัญญาใด เลือกราคาเสนอซื้อขายรายการไหน ราคาเสนอนั้นเผยแพร่หรือได้รับเมื่อใด และเข้าเกณฑ์ตามกฎข้อใด ทั้งข้อมูลดิบและข้อมูลที่ผ่านการแปลงแล้วล้วนสำคัญ ข้อมูล NBBO ที่ทำความสะอาดแล้วแต่ไม่มีเวลาประทับต้นทาง อาจทำให้มองไม่เห็นว่าราคาเสนอซื้อขายล้าสมัยหรือมาถึงหลังเวลาตัดสินใจจำลองหรือไม่
| ข้อมูลที่ควรเก็บ | เหตุผลที่สำคัญ | ตัวอย่าง |
|---|---|---|
| สแนปช็อตต้นทาง | ระบุประวัติข้อมูลที่ใช้ในการรัน | รหัสเวอร์ชันผู้ให้บริการและเวลาที่ดึงข้อมูล |
| ที่มาของราคาเสนอซื้อขาย | อธิบายตลาดที่เลือกใช้ | ตลาดหลักทรัพย์ เวลาเกิดเหตุการณ์ เวลาที่ได้รับ ราคาเสนอซื้อ/ขายและปริมาณ |
| เงื่อนไขสัญญา | กำหนดว่าสัญญาออปชันนั้นแทนอะไร | ราคาใช้สิทธิ วันหมดอายุ ตัวคูณ และสินทรัพย์ที่ส่งมอบ |
| นโยบายการทำความสะอาดข้อมูล | แสดงว่าตัดข้อมูลรายการใดออกบ้าง | เกณฑ์เวลาที่ถือว่าล้าสมัยและวิธีจัดการราคาเสนอซื้อขายที่ตัดกัน |
จะตรวจสอบได้อย่างไรว่าการแก้ข้อมูลจากผู้ให้บริการเปลี่ยนผลลัพธ์ของฉัน?
รันกลยุทธ์และการตั้งค่าเดิมกับสแนปช็อตทั้งสองชุด ขั้นแรกให้เปรียบเทียบจำนวนข้อมูลและสัญญาที่เข้าเกณฑ์ในแต่ละวัน จากนั้นเปรียบเทียบการตัดสินใจและการจับคู่คำสั่ง: สัญญาณใดเกิดขึ้นหรือหายไป ราคาเสนอซื้อขายรายการใดเปลี่ยน และข้อมูลใหม่ทำให้ราคาในการจำลองการส่งคำสั่งเปลี่ยนหรือไม่
อย่าดูแค่ผลตอบแทนรวม ให้ติดตามการเปลี่ยนแปลงของจำนวนรายการซื้อขาย ราคาเข้าและออก สัญญาณที่ถูกปฏิเสธ และสัดส่วน P&L ที่มาจากรายการซื้อขายซึ่งมีอยู่ในข้อมูลเพียงรุ่นเดียว การรันอาจยังได้ค่า Sharpe ใกล้เคียงเดิม ทั้งที่รายการซื้อขายแต่ละรายการถูกแทนที่ สถิติเด่นที่เห็นจะไม่บอกว่าประวัติข้อมูลเบื้องหลังเปลี่ยนไปแล้ว
หากต้องการตรวจสอบให้ได้ผล คงกลยุทธ์ ค่าธรรมเนียม และสมมติฐานการส่งคำสั่งไว้เหมือนเดิม หากเปลี่ยนหลายอย่างพร้อมกัน คุณจะไม่รู้ว่าความแตกต่างมาจากการแก้ข้อมูลของผู้ให้บริการหรือจากการทดลองของคุณเอง
ควรใช้ประวัติข้อมูลออปชันชุดล่าสุดเสมอหรือไม่?
ใช้ประวัติข้อมูลชุดล่าสุดเมื่อเป้าหมายคือการใช้ข้อมูลที่ผู้ให้บริการปรับให้ถูกต้องที่สุดในปัจจุบัน เก็บสแนปช็อตเก่าไว้เมื่อต้องทำซ้ำผลลัพธ์ก่อนหน้า หรือทำความเข้าใจว่าระบบวิจัยของคุณมีข้อมูลอะไรอยู่ในเวลานั้น ทั้งสองแบบใช้ตอบคำถามคนละข้อ
สำหรับงานวิจัยแบบ point-in-time ข้อมูลที่แก้ไขแล้วอาจถูกต้องกว่าในปัจจุบัน แต่กลยุทธ์ในอดีตอาจยังเข้าถึงข้อมูลนั้นไม่ได้ หากเป็นไปได้ ให้เก็บเวลาเผยแพร่และเวลาที่ได้รับข้อมูลไว้ มิฉะนั้นให้ระบุข้อจำกัดนี้อย่างชัดเจน การสร้างข้อมูลย้อนหลังขึ้นใหม่ด้วยข้อมูลปัจจุบันไม่ได้หมายความว่าจะเป็นชุดข้อมูลที่มีอยู่ในอดีตโดยอัตโนมัติ
เมื่อ backtest ออปชันเปลี่ยนไป คำถามแรกควรเป็น “ข้อมูลรายการไหนเปลี่ยนไป?” คำถามว่า “การรันครั้งไหนถูกต้อง?” ค่อยตามมาหลังจากตอบคำถามแรกได้แล้ว
ควรบันทึกอะไรไว้กับ backtest ทุกครั้ง?
บันทึกรายการข้อมูลสรุปไว้ข้างผลลัพธ์ ซึ่งประกอบด้วยผู้ให้บริการข้อมูลและสแนปช็อต เวลาที่ดึงข้อมูล เวอร์ชันสคีมาและการทำความสะอาดข้อมูล แหล่งที่มาของเมทาดาทาสัญญา คอมมิตของกลยุทธ์ สมมติฐานการส่งคำสั่ง และการตั้งค่าการรัน เก็บลิงก์จากรายการซื้อขายแต่ละรายการไปยังระเบียนราคาเสนอซื้อขายที่ใช้เป็นเหตุผลประกอบ
บันทึกสั้นๆ นี้จะเปลี่ยนการรันซ้ำที่ดูน่าฉงนให้กลายเป็นส่วนต่างที่ตรวจสอบได้ ประวัติข้อมูลออปชันจะถูกแก้ไขต่อไป กระบวนการวิจัยของคุณควรทำให้เห็นการแก้ไขแต่ละครั้ง เพื่อให้คลังข้อมูลที่ดีขึ้นเพิ่มคุณภาพของหลักฐานโดยไม่เปลี่ยนผลการทดลองไปอย่างเงียบๆ
← บทความทั้งหมด


