ข้อมูลตลาดหนึ่งแถวอาจถูกต้องครบถ้วน แต่ก็ยังใช้เป็นหลักฐานที่เชื่อถือได้สำหรับ backtest ไม่ได้ การซื้อขายเกิดขึ้นจริง ราคาเป็นราคาที่ถูกต้อง และเวลาประทับก็ใช้ได้ แต่ฟีดอาจส่งข้อมูลมาล่าช้า ผู้ให้บริการอาจแก้ไขข้อมูลในภายหลัง หรือตลาดที่มีการเสนอราคาอาจไม่ใช่ตลาดที่กลยุทธ์ของคุณเข้าถึงได้
หากต้องการรู้ว่าข้อมูลย้อนหลังนำไปซื้อขายได้จริงหรือไม่ ต้องตรวจสอบมากกว่าเวลาที่เกิดเหตุการณ์ คุณต้องรู้ว่าแถวนั้นอธิบายอะไร ข้อมูลพร้อมให้ระบบใช้งานเมื่อใด เป็นของตลาดหรือสินทรัพย์ใด และราคาเสนอซื้อขายหรือรายการซื้อขายนั้นรองรับคำสั่งของคุณได้จริงหรือไม่
ราคาย้อนหลังที่ถูกต้องเพียงพอสำหรับ backtest หรือไม่?
ไม่เพียงพอ ความถูกต้องตอบคำถามว่า “แหล่งข้อมูลบันทึกราคาใดไว้ในท้ายที่สุด?” แต่ backtest ยังต้องตอบด้วยว่า “กลยุทธ์ของฉันรู้อะไรได้บ้าง ณ เวลาที่ตัดสินใจ?” และ “กลยุทธ์ส่งคำสั่งซื้อขายได้จริงแค่ไหน?” ทั้งสองเรื่องนี้เป็นคนละคำถาม
สมมติว่ามีการจับคู่ซื้อขายคริปโตเวลา 12:00:00.120 แต่สตรีมจากผู้ให้บริการข้อมูลส่งมาถึงระบบของคุณเวลา 12:00:00.480 กลยุทธ์ที่ตัดสินใจเวลา .200 ใช้รายการซื้อขายนั้นไม่ได้ แม้เวลาประทับเหตุการณ์จะมาก่อนเวลาตัดสินใจก็ตาม หากไฟล์ย้อนหลังเก็บไว้เฉพาะเวลาเกิดเหตุการณ์ backtest ก็อาจให้ข้อมูลแก่กลยุทธ์โดยไม่รู้ตัว ทั้งที่ระบบจริงยังไม่ได้รับข้อมูลนั้น
| เวลา หรือฟิลด์ | ข้อมูลนี้บอกอะไร | หากไม่มีข้อมูลนี้ backtest อาจผิดพลาดอย่างไร |
|---|---|---|
| เวลาเกิดเหตุการณ์ | เวลาที่ตลาดระบุว่าเหตุการณ์เกิดขึ้น | สับสนระหว่างเวลาตลาดกับเวลาที่กลยุทธ์เข้าถึงข้อมูลได้ |
| เวลาที่ได้รับ | เวลาที่ตัวเก็บข้อมูลได้รับข้อความ | ใช้ข้อมูลที่มาถึงล่าช้าราวกับได้รับทันที |
| ลำดับ หรือรหัสอัปเดต | ตำแหน่งของเหตุการณ์ตามลำดับในฟีด | ประมวลผลอัปเดตผิดลำดับหรือข้ามรายการไปโดยไม่รู้ตัว |
| เวลาแก้ไข | เวลาที่ทราบค่าประวัติที่แก้ไขแล้ว | ทำ backtest ด้วยค่าที่ไม่มีอยู่ในฟีดต้นฉบับ |
หากคลังข้อมูลของคุณไม่มีเวลาที่ได้รับข้อมูล ให้ระบุข้อจำกัดนี้อย่างตรงไปตรงมา คุณอาจทดสอบโดยตั้งสมมติฐานเรื่องความหน่วง หรือจำกัดข้อสรุปไว้แค่การวิจัยที่ใช้เวลาเกิดเหตุการณ์ แต่คุณไม่สามารถสร้างชุดข้อมูลที่ระบบรับรู้ได้อย่างแม่นยำขึ้นมาใหม่ จากเวลาประทับที่ไม่เคยบันทึกไว้
จะดูได้อย่างไรว่าราคาเสนอซื้อขายนั้นส่งคำสั่งได้จริง?
เริ่มจากตลาดที่คำสั่งของคุณจะถูกส่งไป ราคาเสนอซื้อและเสนอขายที่ดีที่สุดจากหลายตลาดอาจถูกรวมเป็นราคาเดียว แต่ไม่ได้ยืนยันว่าบัญชีของคุณเข้าถึงปริมาณที่แสดงอยู่ได้ ราคาเสนอนั้นยังอยู่เมื่อคำสั่งของคุณไปถึงหรือไม่ หรือว่าตลาดจะรับคำสั่งประเภทนั้นหรือไม่
สำหรับคำสั่งซื้อขายตามราคาตลาด การสมมติว่าคำสั่งจับคู่ได้ที่ราคากลางมักไม่ตรงกับความจริง ควรประเมินโดยไล่จับคู่คำสั่งกับปริมาณที่มองเห็นในสมุดคำสั่งตามขนาดคำสั่ง แล้วบวกค่าธรรมเนียมและสมมติฐานเรื่องความหน่วงหรือผลกระทบต่อตลาด หากคุณมีข้อมูลแค่ราคาเสนอซื้อขายระดับบนสุด ให้จำกัดข้อสรุปไว้ที่ระดับแรก เพราะคุณอนุมานความลึกของตลาดที่ไม่เคยบันทึกไว้ไม่ได้
สำหรับคำสั่งจำกัดราคา การที่ราคาแตะระดับที่ตั้งไว้ไม่ได้แปลว่าคำสั่งจะจับคู่ คำสั่งที่อยู่ข้างหน้าอาจใช้ปริมาณที่มีอยู่ไปก่อน โดยทั่วไปเราไม่อาจรู้ตำแหน่งในคิวจากภาพข้อมูลทั่วไปได้ ดังนั้นกฎที่ถือว่าคำสั่งจับคู่เมื่อราคาแตะควรมองเป็นกรณีที่มองโลกในแง่ดี ไม่ใช่ข้อเท็จจริงว่าเกิดอะไรขึ้น
แท่งราคา 1 นาทีบอกได้ว่าราคาต่ำสุดลงมาแตะระดับจำกัดราคาของคุณ แต่บอกไม่ได้ว่าคำสั่งที่ตั้งรอถูกส่งถึงตลาดก่อนราคาต่ำสุดหรือไม่ มีการซื้อขายที่ระดับนั้นมากแค่ไหน หรือมีคำสั่งอยู่ข้างหน้าคุณในคิวเท่าไร
ควรตรวจสอบอะไรบ้างก่อนเชื่อถือคลังข้อมูลตลาด?
ผมเริ่มจากคุณสมบัติพื้นฐานทั่วไปก่อน เพราะสิ่งเหล่านี้ช่วยจับงานวิจัยที่มีข้อผิดพลาดได้มากกว่าการนำโมเดลส่งคำสั่งที่ซับซ้อนมาต่อเข้ากับฟีดที่เสีย
- ความครอบคลุม: มีช่วงเวลาที่ขาดหาย เหตุการณ์ซ้ำ ลำดับข้อมูลขาดช่วง หรือปริมาณซื้อขายเป็นศูนย์พุ่งขึ้นโดยไม่มีคำอธิบายหรือไม่?
- ตัวตนของตลาด: สัญลักษณ์อ้างถึงตลาด สัญญา สกุลเงินที่ใช้เสนอราคา และข้อกำหนดของสินทรัพย์เดียวกันตลอดช่วงเวลาหรือไม่?
- ความพร้อมใช้งาน: มีการเก็บทั้งเวลาเกิดเหตุการณ์และเวลาที่ได้รับหรือไม่? หากไม่มี สมมติฐานเรื่องความล่าช้าแบบใดที่ใช้กำหนดขอบเขตผลลัพธ์?
- การแก้ไข: แยกข้อความต้นฉบับออกจากข้อมูลย้อนหลังที่ผู้ให้บริการเติมเข้ามาหรือการแก้ไขภายหลังได้หรือไม่?
- หน่วย: มีการตีความราคา ปริมาณ ตัวคูณสัญญา และเวลาประทับอย่างสอดคล้องกันหรือไม่?
การตรวจสอบข้อสุดท้ายฟังดูพื้นฐานจนแทบไม่น่าพลาด แต่ครั้งหนึ่งผมเคยใช้เวลาทั้งเช้าตามหาการเปลี่ยนแปลงของสภาวะความผันผวนที่ดูเหมือนจะเกิดขึ้นจริง สุดท้ายกลับพบว่าฟิลด์ปริมาณเปลี่ยนหน่วยหลังย้ายฟีด กราฟดูสวยมาก แต่หน่วยผิด
จะทดสอบได้อย่างไรว่าความพร้อมใช้งานของข้อมูลเปลี่ยนผลลัพธ์หรือไม่?
ทดสอบความอ่อนไหวในวงเล็ก ๆ รอบจุดตัดสินใจของกลยุทธ์ เลื่อนเวลาที่ข้อมูลพร้อมใช้งานตามความล่าช้าที่เกิดขึ้นได้จริง ตัดอัปเดตที่ลำดับข้อมูลขาดช่วง และเปรียบเทียบผลการจับคู่คำสั่งโดยใช้สมุดคำสั่งของตลาดจริงเมื่อมีข้อมูล รายงานทั้งผลเดิมและผลเมื่อคุณภาพข้อมูลลดลง หากความล่าช้าเพียงเล็กน้อยทำให้ผลลัพธ์หายไป กลยุทธ์อาจพึ่งพาความได้เปรียบด้านข้อมูลที่ระบบเก็บข้อมูลของคุณส่งให้ได้ไม่สม่ำเสมอ
ตัวอย่างเช่น สมมติว่าสัญญาณทำงานเมื่อราคาเสนอซื้อที่ดีที่สุดขยับขึ้น 1 tick ลองเล่นข้อมูลย้อนหลัง 1 ครั้งโดยใช้เวลาเกิดเหตุการณ์จากตลาด แล้วอีกครั้งโดยใช้เวลาที่ตัวเก็บข้อมูลได้รับ หากการทดสอบด้วยเวลาเกิดเหตุการณ์ทำรายการซื้อขาย 40 ครั้ง ส่วนการทดสอบด้วยเวลาที่ได้รับทำ 27 ครั้ง ความแตกต่างนี้เป็นส่วนหนึ่งของหลักฐานเกี่ยวกับกลยุทธ์ เช่นเดียวกับผลการดำเนินงานจากการเล่นข้อมูลย้อนหลังแต่ละครั้ง อย่าซ่อนผลจากการทดสอบที่ด้อยกว่าเพียงเพราะข้อมูลดูไม่สวยเท่า
paper trading เป็นขั้นตอนตรวจสอบต่อไปที่มีประโยชน์ เพราะช่วยให้เห็นความล่าช้าของฟีด ราคาเสนอที่ล้าสมัย ข้อผิดพลาดในการจับคู่สัญลักษณ์ และตัวกรองของตลาด ในเส้นทางการทำงานเดียวกับที่ระบบวิจัยของคุณใช้ แต่ก็ยังจำลองคิวจริงหรือผลกระทบต่อตลาดได้ไม่ครบทุกกรณี ควรระบุขอบเขตนี้ไว้ให้ชัดเจน
ในทางปฏิบัติ “ข้อมูลที่ซื้อขายได้” หมายถึงอะไร?
หมายถึง backtest อธิบายได้ว่าข้อมูลเกิดขึ้นเมื่อใด กลยุทธ์นำข้อมูลไปใช้ได้เมื่อใด มาจากตลาดใด และมีหลักฐานด้านการส่งคำสั่งซื้อขายอะไรที่รองรับสมมติฐานเรื่องการจับคู่ ราคาในชุดข้อมูลที่สะอาดเป็นเพียงจุดเริ่มต้น งานวิจัยจะน่าเชื่อถือเมื่อมีการตรวจสอบสมมติฐานเรื่องเวลา การเข้าถึง และการจับคู่คำสั่งแล้ว และผลลัพธ์ยังสมเหตุสมผลเมื่อปรับสมมติฐานเหล่านั้นให้เคร่งครัดขึ้น
← บทความทั้งหมด


