แบ็กเทสต์ของเรานับว่าจับคู่ได้ 91 รายการจากคำสั่งซื้อ 100 รายการที่ส่งไป แต่เมื่อนำกลยุทธ์เดียวกันมารันแบบ Paper กลับจับคู่ได้ 63 รายการ เวลามัธยฐานตั้งแต่เกิดสัญญาณจนได้รับการยืนยันคำสั่งซื้อคือ 84 มิลลิวินาที และในบรรดาคำสั่งซื้อแบบ limit ที่ Paper พลาดไป 12 รายการนั้น แบ็กเทสต์สมมติว่าจับคู่ได้ทันทีที่ราคาแตะระดับที่ตั้งไว้
ช่องว่าง 28 จุดนี้ดูเหมือนเป็นปัญหาของกลยุทธ์ จนกระทั่งเราแยกการตัดสินใจส่งคำสั่งซื้อออกจากการตัดสินใจว่าคำสั่งซื้อจับคู่หรือไม่ กลยุทธ์เลือกฝั่ง ขนาด และราคาแทบเหมือนกันในการรันทั้ง 2 แบบ แต่ขั้นตอนการส่งคำสั่งต่างกัน: บางคำสั่งไปถึงล่าช้า บางคำสั่งยังค้างอยู่ และบางคำสั่งไปถึงตอนที่ตลาดเคลื่อนไปแล้ว
ความสอดคล้องของคำสั่งซื้อระหว่างแบ็กเทสต์กับ Paper หมายถึงอะไร?
ความสอดคล้องหมายถึงระบบแบ็กเทสต์และ Paper ตัดสินใจใกล้เคียงกันโดยอาศัยข้อมูลที่มีอยู่ชุดเดียวกัน แล้วคำนึงถึงความแตกต่างของแบบจำลองการส่งคำสั่งอย่างชัดเจน ไม่ได้หมายความว่าการจับคู่ทุกครั้งที่จำลองไว้จะต้องตรงกับการจับคู่ใน Paper แท่งข้อมูลย้อนหลังไม่สามารถสร้างตำแหน่งในคิวกลับขึ้นมาได้ และแพลตฟอร์ม Paper อาจใช้แบบจำลองการจับคู่ที่ต่างจากกระดานเทรดจริง
คำถามที่เป็นประโยชน์กว่านั้นคือ: สำหรับทุกคำสั่งซื้อที่กลยุทธ์ตั้งใจจะส่ง เราอธิบายได้ไหมว่าเกิดอะไรขึ้นต่อจากนั้น? จำนวนเทรดกับผลตอบแทนสุดท้ายซ่อนรายละเอียดไว้มากเกินไป ควรเก็บข้อมูลที่เชื่อมโยงกันสำหรับทุกการตัดสินใจ โดยใช้ ID การตัดสินใจของกลยุทธ์ที่ไม่ซ้ำกันตลอดเหตุการณ์สัญญาณ คำสั่งซื้อ การยืนยัน การยกเลิก และการจับคู่
| รายการเปรียบเทียบ | สิ่งที่ตรวจพบ | ตัวอย่าง |
|---|---|---|
| เวลาตัดสินใจและฝั่ง | ข้อมูลนำเข้าหรือตารางเวลาที่ต่างกัน | สัญญาณ Paper เกิดช้ากว่า 1 แท่ง |
| ขนาดและราคาที่ต้องการ | การปัดเศษ กฎความเสี่ยง หรือกฎของแพลตฟอร์ม | แบ็กเทสต์ส่ง 0.013 BTC แต่ Paper ปัดเป็น 0.01 |
| การเปลี่ยนสถานะคำสั่งซื้อ | ช่องว่างในขั้นตอนส่ง ปฏิเสธ และยกเลิก | แบ็กเทสต์ถือว่าคำขอยกเลิกเสร็จสมบูรณ์แล้ว |
| ปริมาณและราคาที่จับคู่ | แบบจำลองการจับคู่ที่มองโลกในแง่ดีเกินไป หรือการเคลื่อนไหวของตลาด | ราคาแตะระดับ limit แล้วได้จับคู่เต็มจำนวนในแบ็กเทสต์ แต่ไม่มีการจับคู่ใน Paper |
ทำไมคำสั่งซื้อแบบ limit ที่ราคาแตะระดับไว้จึงทำให้พลาดไปมากขนาดนั้น?
แบ็กเทสต์ของเราใช้แท่งข้อมูลแบบ 1 นาที ถ้าราคา limit อยู่ในช่วงราคาสูงสุดถึงต่ำสุดของแท่ง ก็จะถือว่าคำสั่งซื้อจับคู่แล้ว กฎนี้บอกได้ว่าระหว่างนาทีนั้นตลาดเคยซื้อขายที่ราคานั้นหรือไม่ แต่บอกไม่ได้ว่าคำสั่งซื้อของเราทำงานอยู่ในตอนนั้นหรือเปล่า อยู่คิวแรกหรือไม่ หรือมีการซื้อขายในปริมาณมากพอหลังจากคำสั่งมาถึงหรือไม่
บันทึก Paper เผยให้เห็นปัญหาเรื่องจังหวะเวลา กลยุทธ์คำนวณสัญญาณเมื่อ 12:03:00.000 แต่เหตุการณ์ข้อมูลตลาดไปถึงกระบวนการส่งคำสั่งช้ากว่า 31 มิลลิวินาที การตรวจสอบความเสี่ยงใช้เวลาเพิ่มอีก 22 มิลลิวินาที และระบบจำลองของแพลตฟอร์มยืนยันคำสั่งอีก 31 มิลลิวินาทีให้หลัง เมื่อราคาเคลื่อนไหวเร็ว แท่งข้อมูลย้อนหลังอาจทำให้ดูเหมือนราคายังเอื้อมถึง ทั้งที่คำสั่ง limit ไปถึงหลังจากตลาดผ่านราคานั้นไปแล้ว
ยังมีอีกประเด็นหนึ่ง: คำสั่งซื้อ Paper 12 รายการยังเปิดค้างอยู่ ทั้งที่แบ็กเทสต์ดำเนินต่อไปแล้ว ระบบจำลองยอมรับคำขอยกเลิกราวกับว่าคำสั่งหายไปทันที แต่ในระบบ Paper การยืนยันการยกเลิกมาถึงภายหลัง และมี 3 คำสั่งจับคู่ในช่วงเวลานั้น ทำให้สถานะการถือครองที่สัญญาณถัดไปเห็นเปลี่ยนไป
จะวัดช่องว่างนี้อย่างไรโดยไม่หลอกตัวเอง?
เริ่มจากรายงานกระทบยอดแบบง่ายๆ โดยจัดกลุ่มตามเจตนาของคำสั่งซื้อ และแสดงตัวหารให้เห็นชัดเจน “อัตราการจับคู่” อาจหมายถึงจำนวนคำสั่งที่จับคู่ต่อคำสั่งที่ส่ง จำนวนที่จับคู่หารด้วยปริมาณที่ต้องการ หรือจำนวนคำสั่งที่จับคู่หารด้วยคำสั่งที่ไปถึงแพลตฟอร์ม แต่ละแบบตอบคนละคำถาม
- เชื่อมเหตุการณ์ด้วย ID การตัดสินใจหรือ ID คำสั่งซื้อของลูกค้า อย่าเดาจากเวลาที่บันทึกไว้ภายหลัง
- เปรียบเทียบการตัดสินใจก่อน: เวลาสัญญาณ ฝั่ง ปริมาณที่ต้องการ ประเภทคำสั่ง และราคา limit
- สำหรับการตัดสินใจที่ตรงกัน ให้เปรียบเทียบเวลารอการยืนยัน การปฏิเสธ ระยะเวลาที่เปิดคำสั่ง เวลาในการยกเลิก ปริมาณที่จับคู่ และราคาจับคู่ถัวเฉลี่ยถ่วงน้ำหนักตามปริมาณ
- รายงานอัตราแยกตามประเภทคำสั่งและสภาวะตลาด อัตราการจับคู่โดยรวม 63% อาจซ่อนตัวเลข 90% สำหรับคำสั่ง market และ 35% สำหรับคำสั่ง limit แบบตั้งรอ
แยกหมวดหมู่ให้ชัดเจนและไม่ทับซ้อนกัน คำสั่งที่ถูกปฏิเสธไม่ใช่คำสั่งที่ไม่จับคู่ คำสั่งที่จับคู่บางส่วนไม่ใช่การจับคู่เต็มจำนวน และคำสั่งที่ถูกยกเลิกหลังจับคู่บางส่วนก็ยังเปลี่ยนสถานะการถือครองอยู่ดี ให้นับทั้งจำนวนคำสั่งและปริมาณที่ต้องการ เพื่อไม่ให้คำสั่งขนาดเล็กจำนวนมากทำให้ผลดูดีกว่าความเป็นจริง
ควรปรับอะไรในแบ็กเทสต์?
ใช้กฎการจับคู่ที่สอดคล้องกับความละเอียดของข้อมูลและพฤติกรรมคำสั่งซื้อที่ต้องการ เมื่อใช้แท่งข้อมูล การที่ราคาแตะระดับ limit เป็นเพียงหลักฐานว่าอาจจับคู่ได้ ไม่ใช่ข้อพิสูจน์ว่าจับคู่แล้ว คุณอาจจำลองการจับคู่บางส่วนแบบระมัดระวัง กำหนดให้ราคาต้องทะลุผ่าน หรือไม่นำคำสั่งแบบตั้งรอที่ประเมินตำแหน่งในคิวไม่ได้มาคำนวณ แต่ละทางเลือกตอบคนละคำถาม ให้บันทึกสมมติฐานไว้และเปรียบเทียบผลภายใต้กฎที่เป็นไปได้มากกว่า 1 แบบ
จำลองสถานะคำสั่งซื้อด้วย คำสั่งซื้อยังมีผลอยู่จนกว่าระบบจะได้รับเหตุการณ์ที่สิ้นสุดสถานะ และคำขอยกเลิกไม่ได้ลบความเสี่ยงที่มีอยู่ หากกลยุทธ์ส่งคำสั่งที่ 2 ได้ในขณะที่คำสั่งแรกยังรออยู่ แบ็กเทสต์ต้องจำลองการแข่งขันของเหตุการณ์นี้ หรือป้องกันไม่ให้เกิดขึ้นตั้งแต่การออกแบบ
แบบจำลองการจับคู่คือข้ออ้างว่าคำสั่งซื้อของคุณอาจทำอะไรได้บ้าง กำหนดกฎที่อธิบายได้ แล้วตรวจสอบกฎนั้นกับบันทึก Paper
สำหรับช่องว่าง 28 จุดของเรา สิ่งที่น่าประหลาดใจไม่ใช่การที่แบ็กเทสต์จากแท่งข้อมูล 1 นาทีประเมินการจับคู่ของคำสั่งแบบตั้งรอสูงเกินจริง แต่เป็นการที่สถานะการถือครองของกลยุทธ์คลาดเคลื่อนไปก่อนการตัดสินใจครั้งถัดไป เพราะเราไม่ได้จำลองจังหวะการยกเลิกไว้ เมื่อแก้แบบจำลองสถานะคำสั่งซื้อและเลิกถือว่าคำสั่ง limit ทุกคำสั่งที่ราคาแตะระดับเป็นการจับคู่แล้ว ผลเปรียบเทียบกับ Paper ก็ดูน่าพอใจน้อยลง แต่มีประโยชน์มากขึ้น
เกณฑ์ความสอดคล้องที่ใช้ได้จริงคือ ทุกความแตกต่างที่มีนัยสำคัญระหว่างพฤติกรรมในระบบจำลองกับ Paper มีสาเหตุบันทึกไว้ และแบ็กเทสต์ไม่อ้างความแน่นอนในจุดที่ข้อมูลให้คำตอบไม่ได้
← บทความทั้งหมด


