การเทรด
เครื่องจับคู่
เครื่องจับคู่ตัดสินว่าออร์เดอร์ใดซื้อขายกับกัน หน้านี้ครอบคลุมกฎลำดับความสำคัญ ตัวกระตุ้นการหยุด พฤติกรรมการรีสตาร์ท และหลักการความเป็นธรรมที่เครื่องบังคับใช้
ลำดับความสำคัญราคา-เวลา
เมื่อออร์เดอร์ใหม่มาถึง เครื่องจับคู่กับออร์เดอร์ตรงข้ามที่ดีที่สุดในสมุด ดีที่สุดกำหนดก่อนด้วยราคา แล้วค่อยด้วยเวลา
- ราคาที่ดีกว่า fill ก่อน — bid สูงกว่าเอาชนะ bid ต่ำกว่าสำหรับผู้ขาย
- ราคาเท่ากัน fill ตามเวลา — ออร์เดอร์ที่เก่ากว่าชนะ
- ราคา fill มาจากออร์เดอร์ที่รอดำเนินการ ไม่ใช่ออร์เดอร์ที่เข้ามา
ตัวกระตุ้นการหยุด
สามเหตุการณ์สามารถหยุดการจับคู่ในตลาด ขณะหยุด เครื่องปฏิเสธออร์เดอร์ใหม่และแช่แข็งออร์เดอร์ที่รอดำเนินการ
| ตัวกระตุ้น | ผลกระทบ | กลับมา |
|---|---|---|
| Circuit breaker — ราคาเคลื่อนไหว 30%+ | หยุดออร์เดอร์ใหม่ แช่แข็งออร์เดอร์ที่รอ แจ้งผู้ใช้ | ผู้ดูแลระบบตรวจสอบ + กลับมาเอง |
| หยุดการตัดสิน — lockup ก่อนตัดสิน | หยุดแล้วนำตลาดไปสู่การชำระบัญชี | ตลาดปิดหลังการชำระบัญชี |
| ช่วงการบำรุงรักษาแพลตฟอร์ม | ปฏิเสธออร์เดอร์ช่วงสั้นพร้อม error code ที่ชัดเจน | โดยอัตโนมัติเมื่อช่วงสิ้นสุด |
สิ่งที่เกิดขึ้นระหว่างการรีสตาร์ท
การรีสตาร์ทเครื่องเกิดขึ้นไม่บ่อยแต่เป็นไปได้จริง SatoriEx replay สมุดแบบ deterministic ผู้ใช้เห็นการหยุดชั่วคราวสั้นๆ บนการเขียน ไม่ใช่การอ่าน
- API ปฏิเสธออร์เดอร์ใหม่ด้วย transient error code
- ออร์เดอร์ที่รอดำเนินการถูกโหลดจาก persistent store
- สถานะสมุด replay ไปยัง sequence number ที่ commit ล่าสุด
- การจับคู่กลับมา client ที่ถูกปฏิเสธควร retry ด้วย idempotency key เดิม
หลักการความเป็นธรรม
เครื่องไม่อนุญาตให้ออร์เดอร์ซื้อขายก่อนออร์เดอร์เก่ากว่าที่ราคาเดียวกัน ไม่มีออร์เดอร์ใด รวมถึง seed liquidity ของแพลตฟอร์ม ที่ได้รับลำดับความสำคัญ ออร์เดอร์ไม่มี fast-lane flag
ใช้ idempotency key
ทุกการเรียก POST /orders รองรับส่วนหัว Idempotency-Key ระหว่างการรีสตาร์ทและ network blip นี่คือสิ่งที่ให้คุณ retry อย่างปลอดภัยโดยไม่เพิ่มตำแหน่งเป็นสองเท่า