เวลา 08:00 UTC ในวันอังคาร ตลาดคริปโทแห่งหนึ่งเปลี่ยนขนาดช่วงราคาของสัญญาเพอร์เพทชวลที่มีราคาระดับกลาง กลยุทธ์ basis ของเราไม่รู้ตัว สัญญาณยังเห็นส่วนต่างระหว่างตลาดสปอตกับฟิวเจอร์สเท่าเดิม ขีดจำกัดความเสี่ยงไม่เปลี่ยน และผลการทดสอบย้อนหลังยังออกมาเหมือนเดิม
แต่การซื้อขายจำลองตรวจพบปัญหา อะแดปเตอร์คำสั่งปัดราคาลิมิตซื้อให้ลงไปยังราคาที่อนุญาตใกล้ที่สุด ทำให้คำสั่งอยู่ต่ำกว่าระดับราคาที่การทดสอบย้อนหลังจำลองไว้ 1 ช่วงราคา ตลาดแตะราคาเดิม คำสั่งจำลองจึงถูกจับคู่ แต่คำสั่งในการซื้อขายจำลองยังค้างโดยไม่มีการจับคู่ พอถึงมื้อกลางวัน สถานะถือครองของกลยุทธ์ก็เริ่มไม่สมดุล
เหตุการณ์นี้ดูเหมือนเป็นบั๊กการปัดราคาเล็กน้อย แต่แท้จริงแล้วเป็นปัญหาขอบเขตของแบบจำลอง กลยุทธ์รู้จักราคา แต่การทดสอบย้อนหลังไม่รู้จักกริดราคาของตลาดซื้อขาย
เราซื้อขายด้วยสัญญาณ basis แบบเรียบง่าย โดยซื้อสปอตและขายเพอร์เพทชวลเมื่อพรีเมียมของฟิวเจอร์สขยายเกินเกณฑ์ คำสั่งเป็นแบบตั้งรอ เพราะส่วนต่าง basis ที่คาดหวังมีขนาดเล็ก ราคาเพียงไม่กี่ช่วงก็อาจเป็นตัวตัดสินว่ากำไรจากการเข้าซื้อจะมากพอจ่ายค่าธรรมเนียมและต้นทุนตอนปิดสถานะหรือไม่
เกิดอะไรขึ้นเมื่อขนาดช่วงราคาเปลี่ยน?
ก่อนอัปเดต สัญญาเพอร์เพทชวลรับราคาที่เพิ่มทีละ 0.01 หลังจากนั้น ราคาในช่วงราคาที่เกี่ยวข้องต้องเพิ่มทีละ 0.05 สัญญาณคำนวณราคาเป้าหมายสำหรับขายไว้ที่ 42,318.03 ซึ่งเป็นราคาที่ใช้ได้ตามกฎเดิม แต่ตามกฎใหม่ ราคานี้ใช้ไม่ได้
ตลาดซื้อขายปฏิเสธราคาที่ไม่ถูกต้อง แต่อะแดปเตอร์ของเรามีวิธีสำรอง โดยปัดราคาขายลงเป็น 42,318.00 ซึ่งก็ยังใช้ไม่ได้ วิธีสำรองลำดับถัดไปปัดอีกครั้งเป็น 42,318.05 ซึ่งใช้ได้ แต่ทำให้ราคาขายเชิงรุกน้อยลง คำสั่งจึงขายที่ราคาแบบจำลองเดิมไม่ได้ โค้ดส่วนนี้เขียนไว้สำหรับตลาดอีกแห่ง และเปลี่ยนการปฏิเสธคำสั่งให้กลายเป็นการปรับราคาใหม่อย่างเงียบ ๆ
คำสั่งเดียวนี้ทำให้เกิดคำถาม 2 ข้อที่แตกต่างกัน ข้อแรก ตลาดซื้อขายยอมรับราคาใดได้บ้าง ข้อสอง กลยุทธ์ควรทำอย่างไรเมื่อราคาที่ต้องการไม่อยู่บนกริดราคา ตลาดซื้อขายเป็นผู้ตอบข้อแรก ส่วนกลยุทธ์หรือนโยบายการส่งคำสั่งต้องตอบข้อสอง
| เจตนาของคำสั่ง | กฎกริดราคา | ทิศทางการปัดราคาโดยทั่วไป | สิ่งที่อาจเปลี่ยนแปลง |
|---|---|---|---|
| ลิมิตซื้อ | ราคาต้องเป็นทวีคูณของช่วงราคา | ปัดลงเพื่อให้อยู่ที่หรือต่ำกว่าราคาลิมิต | โอกาสถูกจับคู่ลดลง |
| ลิมิตขาย | ราคาต้องเป็นทวีคูณของช่วงราคา | ปัดขึ้นเพื่อให้อยู่ที่หรือสูงกว่าราคาลิมิต | โอกาสถูกจับคู่ลดลง |
| ลิมิตที่พร้อมจับคู่ทันที | ต้องเป็นไปตามขอบเขตราคาด้วย | ขึ้นอยู่กับราคาสูงสุดที่ยอมรับได้ | คำสั่งข้ามส่วนต่างราคาซื้อขายหรือไม่ |
ไม่มีกฎการปัดราคาแบบใดที่ถูกต้องเสมอไป การปัดราคาซื้อลงช่วยรักษาข้อจำกัดด้านราคาของผู้ซื้อ แต่ก็ทำให้โอกาสจับคู่ลดลง การปัดขึ้นอาจทำให้คำสั่งพร้อมจับคู่ทันที ซึ่งส่งผลต่อค่าธรรมเนียมและผลกระทบต่อตลาด สำหรับคำสั่งเข้าซื้อ basis แบบตั้งรอของเรา การปรับราคาอย่างเงียบ ๆ เป็นพฤติกรรมที่ผิด กลยุทธ์กำหนดราคาเป้าหมายไว้ แต่อะแดปเตอร์กลับเปลี่ยนเงื่อนไขทางเศรษฐกิจของคำสั่ง
ทำไมผลการทดสอบย้อนหลังยังดูดีอยู่?
ตัวจำลองคำสั่งย้อนหลังของเรามองราคาลิมิตเป็นตัวเลขต่อเนื่อง หากราคาต่ำสุดของแท่งแตะราคาซื้อ หรือราคาสูงสุดแตะราคาขาย ก็จะนับว่าคำสั่งถูกจับคู่ การประมาณแบบนี้เอื้อให้คำสั่งตั้งรออยู่แล้ว เพราะราคาที่มีการซื้อขายแตะราคาลิมิตไม่ได้บอกอะไรเกี่ยวกับตำแหน่งในคิว แต่การอัปเดตช่วงราคาทำให้เห็นช่องโหว่ที่พื้นฐานกว่านั้น นั่นคือคำสั่งไม่สามารถมีอยู่ที่ราคานั้นได้
เราจำลองการตัดสินใจเดิมซ้ำโดยใช้กริดราคาใหม่ตั้งแต่เวลาที่กฎมีผล คำสั่งหลายรายการไม่ถูกจับคู่ คำสั่งบางรายการถูกปัดไปยังราคาที่ข้ามส่วนต่างราคาซื้อขาย จึงเสียค่าธรรมเนียมแบบ taker แทน maker เส้นทางสถานะถือครองที่ได้จึงแตกต่างออกไป และทำให้การป้องกันความเสี่ยงกับการปิดสถานะในภายหลังเปลี่ยนตาม กฎที่ดูเหมือนเป็นเพียงข้อมูลกำกับกลับเปลี่ยนลำดับการซื้อขายทั้งหมด
และการอัปเดตนี้ไม่ได้เป็นเรื่องไม่คาดคิดที่ซ่อนอยู่ในกราฟ ตลาดซื้อขายประกาศการเปลี่ยนกฎของตราสารพร้อมเวลาที่มีผลไว้แล้ว เราจัดเก็บข้อมูลตลาดอย่างรอบคอบ แต่ข้อมูลกำกับตราสารอยู่ในแคชที่รีเฟรชตอนเริ่มระบบ การทดสอบย้อนหลังใช้กฎของวันนี้กับทุกวันในอดีต ส่วนการซื้อขายจำลองใช้กฎเก่าจนกว่าจะรีสตาร์ตโปรเซส ทั้งสองสภาพแวดล้อมจึงไม่ได้จำลองสิ่งที่ตลาดซื้อขายอนุญาตในแต่ละช่วงเวลา
ควรจำลองการเปลี่ยนขนาดช่วงราคาในการทดสอบย้อนหลังอย่างไร?
กำหนดเวอร์ชันของกฎตราสารพร้อมช่วงเวลาที่กฎมีผล เช่นเดียวกับข้อมูลนำเข้าอื่น ๆ ที่ต้องอ้างอิงตามเวลาจริงในอดีต อย่างน้อยที่สุด ให้เก็บเวลาที่กฎเริ่มมีผลและค่ากฎที่จำเป็นต่อการตรวจสอบคำสั่ง ได้แก่ ขนาดช่วงราคา ขั้นของปริมาณการซื้อขาย ปริมาณขั้นต่ำ และช่วงราคาที่กำหนด ตัวจำลองควรโหลดชุดกฎที่ใช้ได้ ณ เวลาตัดสินใจจำลอง
จากนั้นกำหนดวิธีจัดการคำสั่งให้ชัดเจน หากราคาเป้าหมายไม่ถูกต้อง ให้ปฏิเสธ ปัดราคาตามนโยบายที่บันทึกไว้ หรือคำนวณราคาเป้าหมายใหม่ให้อยู่บนกริดราคา พร้อมบันทึกว่าเกิดกรณีใดขึ้น การทดสอบย้อนหลังที่ปรับแก้ทุกคำสั่งโดยอัตโนมัติอาจใช้ประเมินนโยบายการส่งคำสั่งแบบใดแบบหนึ่งได้ แต่ไม่ควรทำให้นโยบายนั้นดูเหมือนเป็นการจับคู่คำสั่งของตลาดซื้อขาย
สำหรับคำสั่งตั้งรอ ราคาที่ถูกต้องตามช่วงราคาเป็นเพียงเงื่อนไขแรกของการจับคู่ คุณยังต้องมีแบบจำลองที่บอกว่าตลาดซื้อขายผ่านราคาของคุณหรือไม่ มีคำสั่งใดอยู่ข้างหน้าคุณในคิวบ้าง มีการยกเลิกคำสั่งหรือไม่ และคุณจะได้ค่าธรรมเนียมระดับใด
เราเพิ่มการตรวจสอบ 2 รายการ รายการแรกนำคำสั่งที่สร้างขึ้นทุกรายการไปตรวจตามกฎตราสาร ณ เวลานั้น และแจ้งข้อผิดพลาดอย่างชัดเจนเมื่อราคาหรือขนาดคำสั่งไม่ถูกต้อง รายการที่สองเปรียบเทียบคำสั่งสุดท้ายที่ผ่านการปรับรูปแบบแล้วของอะแดปเตอร์การทดสอบย้อนหลังกับการซื้อขายจำลอง ได้แก่ ฝั่ง ราคา ปริมาณ คำสั่งมีผลเมื่อใด และเจตนาเรื่องค่าธรรมเนียม หากไม่ตรงกัน เราจะไม่นับว่าการรันทั้งสองเทียบกันได้
หลังจากนั้น เราจำลองเหตุการณ์วันอังคารซ้ำ การทดสอบย้อนหลังไม่อ้างว่าคำสั่งถูกจับคู่ที่ 42,318.03 หลังกริดราคาเปลี่ยนอีกต่อไป การซื้อขายจำลองกับการจำลองตัดสินใจตรงกันสำหรับราคาเป้าหมายที่ไม่ถูกต้องทุกรายการ แม้การตัดสินใจนั้นคือข้ามคำสั่งก็ตาม
สัญญาณไม่ได้เสีย แต่สมมติฐานของกลยุทธ์เกี่ยวกับสิ่งที่ซื้อขายได้ล้าสมัย กลยุทธ์รับมือกับขนาดช่วงราคาใหม่ได้ หากระบบวิจัยถือว่ากฎของตลาดซื้อขายเป็นส่วนหนึ่งของตลาดที่กำลังจำลอง
← บทความทั้งหมด


