ข้อผิดพลาดด้านเวลาที่อันตรายที่สุดในแบ็กเทสต์ อาจยังคงอยู่แม้ตรวจสอบการประทับเวลาอย่างละเอียดแล้ว เหตุการณ์ 2 รายการอาจระบุเวลา 10:00:00.000 เหมือนกัน แต่เกิดขึ้นตามลำดับที่ตัวจำลองคาดเดาขึ้นเอง
เรื่องนี้สำคัญทุกครั้งที่กลยุทธ์ตอบสนองต่อข้อมูลที่มากกว่าแท่งราคาที่ปิดแล้ว เช่น การอัปเดตราคาเสนอซื้อขาย การซื้อขาย ประกาศเรื่อง funding การเปลี่ยนสถานะของตลาดซื้อขาย หรือการยืนยันคำสั่งของเราเอง การประทับเวลาบอกว่าเหตุการณ์ถูกระบุว่าเกิดขึ้นเมื่อใด แต่อาจไม่ได้บอกว่ากลยุทธ์ของเราตอบสนองต่อเหตุการณ์นั้นได้เมื่อใด
ลำดับเหตุการณ์เปลี่ยนอะไรบ้าง?
ลองนึกถึงกลยุทธ์ที่ซื้อเมื่อราคาเสนอขายที่ดีที่สุดลดลงต่ำกว่า $100.00 ในมิลลิวินาทีเดียวกัน ฟีดบันทึกการอัปเดตราคาเสนอขายเป็น $99.99 และการซื้อขายที่ราคา $99.99 หากแบ็กเทสต์ประมวลผลการซื้อขายก่อน แล้วจึงประมวลผลราคาเสนอขาย กลยุทธ์จะเห็นราคาเสนอขายใหม่และส่งคำสั่ง หากประมวลผลราคาเสนอขายก่อน ก็อาจเป็นเรื่องปกติเช่นกัน หากเหตุการณ์นั้นมาถึงและพร้อมให้ใช้จริง แต่ถ้าการซื้อขายใช้สภาพคล่องที่แสดงอยู่ไปก่อนที่คำสั่งจะมาถึง การจับคู่ที่ราคา $99.99 ก็เป็นเรื่องแต่ง
การเรียงแถวตามการประทับเวลาเพียงอย่างเดียว ทำให้ตัวจำลองต้องเลือกลำดับสำหรับเหตุการณ์ที่เวลาเดียวกัน ลำดับในไฟล์ ลำดับตามสัญลักษณ์ หรือแผนการสืบค้นของฐานข้อมูล อาจกลายเป็นกฎการส่งคำสั่งโดยไม่ตั้งใจ เส้นทุนอาจเปลี่ยนได้ทั้งที่ข้อมูลต้นทางไม่เปลี่ยน
มีวิธีหนึ่งที่ช่วยให้เห็นว่าลำดับนี้อาจเป็นไปตามอำเภอใจเพียงใด: เรียงเหตุการณ์ที่เวลาเดียวกันตามชื่อสัญลักษณ์แทนลำดับการมาถึง กลยุทธ์หลายสินทรัพย์จึงอาจทำงานต่างกัน เพียงเพราะสัญลักษณ์หนึ่งเรียงอยู่ก่อนอีกสัญลักษณ์หนึ่ง
แบ็กเทสต์ควรเก็บเวลาใดไว้บ้าง?
ข้อมูลตลาดและการจัดการคำสั่งมักเกี่ยวข้องกับเวลาหลายแบบที่แยกจากกัน เก็บฟิลด์ที่แหล่งข้อมูลมีให้ และระบุความหมายให้ชัดเจน สำหรับฟีดจำนวนมาก ทั้งเวลาของเหตุการณ์ฝั่งตลาดซื้อขายและเวลาที่ระบบเราได้รับข้อมูลล้วนมีประโยชน์ แต่ไม่มีเวลาใดเป็นความจริงสากลที่บอกได้ว่าผู้เข้าร่วมทุกรายเห็นอะไร
| นาฬิกา | บันทึกอะไร | อะไรที่ยืนยันไม่ได้ด้วยตัวเอง |
|---|---|---|
| เวลาเกิดเหตุการณ์ฝั่งตลาดซื้อขาย | เวลาที่ตลาดซื้อขายระบุว่าเหตุการณ์เกิดขึ้น | ลำดับที่ฟีดอื่นหรือกระบวนการของเราสังเกตเห็นเหตุการณ์นั้น |
| เวลารับข้อมูล | เวลาที่ตัวรวบรวมข้อมูลของเราได้รับข้อความ | เวลาที่กลยุทธ์ประมวลผลข้อความเสร็จ |
| เวลาตัดสินใจ | เวลาที่โค้ดของเราประเมินสัญญาณ | ว่าราคาที่เสนอขายยังมีให้ซื้ออยู่ |
| เวลาที่คำสั่งมาถึง | เวลาที่ตลาดซื้อขายสามารถดำเนินการกับคำสั่งได้ | การจับคู่คำสั่ง เว้นแต่กฎการจับคู่และสภาพคล่องจะรองรับ |
สำหรับข้อมูลย้อนหลังที่ไม่มีเวลารับข้อมูล ให้ระบุสมมติฐานของเรา แบ็กเทสต์อาจประมวลผลเหตุการณ์ฝั่งตลาดซื้อตามลำดับ และกำหนดเวลาหน่วงคงที่ 5 ms จากการตัดสินใจจนถึงเวลาที่คำสั่งมาถึงตลาดซื้อขาย นี่คือแบบจำลอง ไม่ใช่ข้อมูลประวัติศาสตร์ที่กู้คืนมาได้ หากไม่มีหมายเลขลำดับสำหรับการประทับเวลาฝั่งตลาดซื้อขายที่ซ้ำกัน กฎที่ใช้ตัดสินลำดับกรณีเสมอก็เป็นสมมติฐานเช่นกัน
เราควรจำลองเหตุการณ์ที่เวลาเดียวกันอย่างไร?
ขั้นแรก เก็บหมายเลขลำดับจากแหล่งข้อมูลไว้เมื่อมี หมายเลขลำดับช่วยระบุลำดับภายในฟีดได้แม่นยำกว่าการประทับเวลา แต่หมายเลขลำดับอาจแยกชุดกันระหว่างช่องทางหรือผลิตภัณฑ์
จากนั้นกำหนดกฎการประมวลผลของตัวจำลองให้ชัดเจน สำหรับแต่ละเหตุการณ์ ให้ตัดสินใจว่าเหตุการณ์นั้นอัปเดตข้อมูลที่กลยุทธ์ใช้ได้ เปลี่ยนสภาพคล่องที่พร้อมใช้ กระตุ้นคำสั่ง หรือยืนยันคำสั่งได้หรือไม่ การกระทำเหล่านี้แตกต่างกัน การยุบรวมทั้งหมดเป็น “ประมวลผลแถว” คือช่องทางที่ทำให้เกิดการจับคู่คำสั่งที่เป็นไปไม่ได้
- ใช้ข้อมูลตลาดเฉพาะที่มาถึงก่อนหรือ ณ เวลาตัดสินใจของกลยุทธ์
- สร้างคำสั่ง แล้วเลื่อนเวลาไปจนถึงเวลาที่คำสั่งมาถึงตลาดซื้อขายตามแบบจำลอง
- อนุญาตให้ดำเนินการได้เฉพาะกับสภาพคล่องที่เข้าเกณฑ์หลังคำสั่งมาถึง โดยใช้สมมติฐานการจับคู่สำหรับคำสั่งประเภทนั้น
- บันทึกข้อมูลนำเข้า ลำดับเหตุการณ์ และเวลาหน่วงที่ใช้กับการจับคู่จำลองแต่ละครั้ง
สำหรับกลยุทธ์ที่อิงแท่งราคา วิธีนี้อาจซับซ้อนเกินกว่าคำถามที่ต้องการตอบ หากสัญญาณใช้แท่งราคา 1 นาทีที่ปิดแล้ว และคำสั่งจับคู่ที่ราคาเปิดของแท่งถัดไปโดยใช้แบบจำลองต้นทุนแบบระมัดระวัง ลำดับเหตุการณ์ระดับต่ำกว่ามิลลิวินาทีอาจไม่เปลี่ยนข้อสรุปของการวิจัย ประเด็นคือรายละเอียดด้านเวลาต้องสอดคล้องกับข้อสรุปที่แบ็กเทสต์นำเสนอ
ฉันจะเชื่อถือแบ็กเทสต์ที่ไม่มีข้อมูลเวลามาถึงได้ไหม?
ยังใช้ได้ แต่ต้องระบุข้อจำกัดให้ชัดเจน หากกลยุทธ์ซื้อขายไม่บ่อยและตั้งขีดจำกัดความเสี่ยงไว้กว้าง เวลาคลาดเคลื่อนเพียงไม่กี่มิลลิวินาทีอาจไม่มีผลสำคัญ แต่หากกลยุทธ์ตอบสนองต่อราคาเสนอซื้อขายที่อยู่เพียงชั่วครู่ แข่งขันเพื่อให้ได้ตำแหน่งในคิว หรือพึ่งพาสัญญาณ lead-lag ระหว่างตลาดซื้อขาย การไม่มีเวลามาถึงอาจเป็นปัจจัยสำคัญต่อผลลัพธ์
ผู้วิจารณ์พูดถูกที่ว่าการระบุเวลาเหตุการณ์อย่างแม่นยำอาจกลายเป็นความแม่นยำลวง ฟีดข้อมูลย้อนหลังไม่ครบ นาฬิกาคลาดเคลื่อน และเวลาที่ตลาดซื้อขายระบุไม่ได้เปิดเผยทุกช่วงของการส่งข้อมูลผ่านเครือข่าย ตัวจำลองที่มีฟิลด์ระดับนาโนวินาทีก็ยังอาจตั้งสมมติฐานการจับคู่แบบหยาบได้
ดังนั้น ให้ทดสอบความอ่อนไหวแทนการอ้างว่ารู้แน่ชัด: เล่นข้อมูลซ้ำโดยใช้กฎจัดลำดับเหตุการณ์กรณีเสมอและเวลาหน่วงคำสั่งที่เป็นไปได้หลายแบบ แล้วเปรียบเทียบจำนวนการซื้อขาย ราคาที่จับคู่ได้ และสัญญาณที่ยังคงใช้ได้ หากผลลัพธ์ขึ้นอยู่กับลำดับที่ข้อมูลยืนยันไม่ได้ ก็ควรระบุการพึ่งพานั้นไว้ในรายงานการวิจัย แบ็กเทสต์ยังมีประโยชน์ได้แม้นาฬิกาจะไม่สมบูรณ์ เพียงต้องยอมรับให้ชัดว่าแท้จริงแล้วรู้เวลาอะไรบ้าง
← บทความทั้งหมด


