𝗦𝗰𝗮𝗿𝗮𝗯 𝗗𝗶𝗮𝗴𝗻𝗼𝘀𝘁𝗶𝗰 𝗙𝗶𝗲𝗹𝗱 𝗧𝗲𝘀𝘁 #𝟬𝟯𝟭
QuantConnect Lean จำเป็นต้องมีการควบคุมการ Roll สัญญาฟิวเจอร์สแบบต่อเนื่อง (continuous futures rolls) ที่ดีขึ้น
ผู้ใช้งานประสบปัญหาหลักสองประการ:
- ไม่สามารถกำหนดเวลาการ Roll ก่อนวันหมดอายุได้
- ไม่สามารถเลือกวงจรเดือนของสัญญา (contract-month cycles) ที่เฉพาะเจาะจงได้
นี่ไม่ใช่แค่บั๊กธรรมดา แต่มันคือปัญหาด้านนโยบายการทำ Mapping (mapping policy)
หากคุณพยายามแก้ไขด้วยการสร้างปฏิทินการ Roll ใหม่ คุณจะทำให้ Engine พัง หากคุณทำข้อมูล Mapping ซ้ำซ้อน คุณจะสร้างข้อผิดพลาดขึ้นมา การแก้ไข (patch) ที่ไม่ดีอาจทำให้เกิดความคลาดเคลื่อน (drift) ระหว่างสิ่งที่กลยุทธ์ต้องการกับสิ่งที่ Engine ทำจริง
เป้าหมายคือการหาแนวทางการแก้ไขที่แม่นยำและตรงจุด (surgical repair lane)
วิธีการแก้ไขยังคงอยู่ภายใต้ขอบเขตการทำ Mapping เดิม เราไม่ได้เขียน Futures Engine ใหม่ แต่เราขยายความสามารถในการจัดการ Continuous Futures Mapping ของ Lean แทน
สิ่งที่เปลี่ยนแปลงใน PR:
- เพิ่มโหมดการ Mapping แบบ
TradingDaysBeforeExpiry - สิ่งนี้ช่วยให้ผู้ใช้สามารถกำหนดเวลาการ Roll เป็นค่า Offset ของจำนวนวันซื้อขายได้
- ค่า Roll Offset จะไหลผ่านเส้นทางของ subscription, history, universe และ mapping-event
- เพิ่มการเลือกวงจรเดือนของสัญญา (contract-month-cycle walking) แบบเลือกได้
- สิ่งนี้รองรับวงจรการถือครองที่เฉพาะเจาะจง แทนที่จะเป็นลำดับแบบทั่วไป
- นำแถวข้อมูล LastTradingDay map เดิมมาใช้ใหม่ เพื่อให้แหล่งข้อมูลมีความเป็นหนึ่งเดียวและถูกต้อง (single and true)
ด้วยการรักษาการแก้ไขให้อยู่ภายในนโยบายการ Mapping เราจึงมั่นใจได้ว่าส่วนประกอบทั้งหมดของ Engine จะเห็นตรงกันว่าสัญญาใดที่กำลังใช้งานอยู่
ผลลัพธ์ที่ได้: การแก้ไขที่มีขอบเขตชัดเจนซึ่งช่วยเพิ่มความสามารถใหม่ๆ โดยไม่ต้องสร้างระบบใหม่ขึ้นมา การตรวจสอบการ Build ในเครื่อง (Local build validation) ผ่านโดยไม่มีข้อผิดพลาด ตอนนี้ PR พร้อมสำหรับการตรวจสอบจากต้นทาง (upstream review) แล้ว
Optional learning community: https://t.me/GyaanSetuAi