Alex — คุณส่งกราฟผลตอบแทนหุ้น 2 เส้นกับคำร้องเรียนมาให้เรา กลยุทธ์เบรกเอาต์จากจุดสูงสุด 20 วันดูดีในการทดสอบย้อนหลัง แต่บัญชีจำลองที่รันโค้ดเดียวกันกับหุ้นชุดเดียวกันกลับเข้าเทรดเพียงประมาณครึ่งหนึ่ง แล้วถูกตัดขาดทุนในวันที่ผลทดสอบย้อนหลังไม่สะดุดเลย คุณถามว่าเกตเวย์จำลองของเราทำคำสั่งซื้อขายหล่นหายหรือเปล่า ไม่ใช่เลย แท่งราคารายวันของคุณกำลังเอา 2 ช่วงซื้อขายมาต่อรวมกัน แล้วติดป้ายผลลัพธ์ว่าเป็น 1 วัน
ฉันดึงข้อมูลหุ้นขนาดกลางที่คุณวงไว้จากวันที่ 22 ตุลาคมมาเช็ก ราคาสูงสุดรายวันจากผู้ให้บริการข้อมูลอยู่ที่ $41.86 แต่ในช่วงเวลาปกติ ราคาไม่เคยทะลุ $41.12 เลย ราคา $41.86 มาจากรายการซื้อขาย 800 หุ้นตอน 7:41 PM ตามเวลาฝั่งตะวันออก ซึ่งเกิดขึ้นในช่วงที่ส่วนต่างราคาอยู่ที่ 22 เซนต์ สัญญาณของคุณระบุว่าทำจุดสูงสุดใหม่ในรอบ 20 วัน และตั้งคำสั่งซื้อไว้สำหรับช่วงเปิดตลาดถัดไป ส่วนช่วงเวลาของบัญชีจำลอง ซึ่งเรากำหนดไว้ที่ 9:30 ถึง 16:00 ตามเวลาฝั่งตะวันออก เว้นแต่คุณจะเปลี่ยนค่า ไม่เคยเห็นราคาเบรกเอาต์นั้นเลย จึงไม่มีอะไรให้ซื้อ
ราคาสูงสุดในแถวนั้นมาจากช่วงไหน?
สำหรับหุ้นสหรัฐฯ คำว่า “รายวัน” เป็นเพียงความสะดวกที่ผู้ให้บริการข้อมูลจัดให้ คุณอาจได้รับแท่งราคาของวันปฏิทินเดียวกันอย่างน้อย 3 แบบ และไฟล์ CSV ส่วนใหญ่ก็ไม่ได้บอกว่าคุณได้แบบไหนมา
| แท่งราคา | เวลา | ราคาสูงสุด/ต่ำสุดมาจากไหน | การซื้อขายที่ราคาสูงสุดนั้นหมายความว่าอย่างไร |
|---|---|---|---|
| ช่วงเวลาปกติ | 9:30-16:00 ET รวมการประมูลเปิดและปิดตลาด 2 รอบ | สมุดคำสั่งซื้อขายต่อเนื่องและรายการจับคู่คำสั่งช่วงเปิด/ปิดตลาด | อยู่ในช่วงเวลาปกติ ซึ่งบ่อยครั้งเป็นช่วงการประมูล |
| ช่วงเวลาขยาย | ประมาณ 4:00-9:30 และ 16:00-20:00 ขึ้นอยู่กับโบรกเกอร์ | รายการซื้อขายที่เบาบางก่อนเปิดตลาดและหลังปิดตลาด | ช่วงเวลาที่บัญชีเงินสดของคุณอาจไม่ได้รับอนุญาตให้ซื้อขายด้วยซ้ำ |
| แบบผสม | แล้วแต่ผู้ให้บริการจะนำข้อมูลมาต่อรวมกันอย่างไร | ข้อมูลผสมจากช่วงข้างต้น บางครั้งรวมล็อตย่อยและรายการจาก TRF ด้วย | รายการซื้อขายที่อาจมีเพียง 80 หุ้นในช่วงที่ราคาเสนอซื้อขายห่างกันมาก |
ตลาดคริปโตทำให้คุณมองว่าเที่ยงคืน UTC คือจุดเริ่มต้นของวันซื้อขาย แต่ตลาดหุ้นไม่ได้มีหน้าที่ต้องยึดตามนั้น ระบบจับคู่คำสั่งที่คุณเข้าถึงได้จริงจากบัญชีเงินสดที่ถือสถานะซื้ออย่างเดียว มีช่วงจับคู่คำสั่งต่อเนื่อง 6 ชั่วโมงครึ่งและการจับคู่คำสั่งช่วงเปิด/ปิดตลาดอีก 2 รอบ เวลาที่เหลือเป็นผู้เล่นอีกกลุ่มหนึ่ง ส่วนต่างราคาอีกแบบหนึ่ง และราคาล่าสุดก็มักต่างกัน
ฉันยังมีโฟลเดอร์ไฟล์ CSV จาก Yahoo ปี 2015 ที่ตอนนั้นฉันมั่นใจว่าตัวชี้วัด Donchian สำหรับหุ้นไบโอเทคขนาดเล็กของฉันยอดเยี่ยมมาก ราคาสูงสุดเหล่านั้นมาจากรายการซื้อขายหลังเวลาปกติในช่วงเกิดเหตุการณ์ที่ผลลัพธ์มีได้สองทาง ฉันเอาการตื่นตระหนกของคนอื่นกับหุ้น 200 หุ้นมาทดสอบย้อนหลัง แล้วเรียกมันว่าช่องราคา คุณกำลังทำแบบเดียวกันในเวอร์ชันที่ดูเป็นมืออาชีพกว่า โดยใช้ฟีดข้อมูลแบบเสียเงิน
ถ้าเอเจนต์วิจัยของคุณขอข้อมูล OHLCV รายวันจากผู้ให้บริการโดยไม่ระบุช่วงซื้อขาย ให้ถือว่าเป็นข้อมูลแบบผสม เอเจนต์มักเลือกค่าเริ่มต้นที่สะดวก ความสะดวกนี่แหละที่ทำให้รายการซื้อขายตอน 7:41 PM เข้าไปอยู่ในสัญญาณเบรกเอาต์
ทำไมผลบัญชีจำลองถึงผิดเพี้ยนได้ทั้ง 2 ทาง
เมื่อช่วงซื้อขายในไฟล์ไม่ตรงกับช่วงซื้อขายของบัญชี คุณจะไม่ได้แค่จำนวนรายการที่น้อยลง แต่จะเจอความคลาดเคลื่อน 3 แบบ และคุณเจอมาครบทั้ง 3 แบบ
- เบรกเอาต์จากราคาสูงสุดนอกเวลาปกติ ผลทดสอบย้อนหลังเข้าซื้อที่ราคาเปิดปกติครั้งถัดไป แต่บัญชีจำลองไม่มีสัญญาณ นั่นคือ 8 รายการที่คุณสงสัยว่าหายไป
- ตั้งจุดตัดขาดทุนไว้ใต้ราคาต่ำสุดของเมื่อวาน โดยใช้ราคาต่ำสุดจากแท่งราคาแบบผสม ผลทดสอบย้อนหลังออกจากสถานะไปแล้วจากไส้เทียนนอกเวลาปกติ ส่วนบัญชีจำลองที่บันทึกเฉพาะช่วงเวลาปกติยังถือสถานะอยู่ ในวันที่ผลทดสอบย้อนหลังแสดงว่าไม่มีสถานะแล้ว
- จุดตัดขาดทุนย้อนทาง: บัญชีจำลองบันทึกราคาล่าสุดรวมช่วงก่อนเปิดตลาด รายการซื้อขายตอน 5:10 AM ทำให้คุณออกจากสถานะ ขณะที่ผลทดสอบย้อนหลังช่วงเวลาปกติยังถือสถานะอยู่ เพราะรายการนั้นไม่อยู่ในแท่งราคาของผลทดสอบย้อนหลัง
กรณีจุดตัดขาดทุนสร้างความเสียหายมากกว่าการพลาดเบรกเอาต์ การพลาดจุดเข้าเทรดแสดงออกมาเป็นจำนวนครั้งที่เทรดน้อยลง แต่การตัดขาดทุนในตลาดที่มีคนอยู่เพียง 7 คนแสดงออกมาเป็นจำนวนเงินที่ต่างกันในรายการเทรดที่คุณเข้าไปจริง นั่นจึงเป็นเหตุผลที่คุณโทษเกตเวย์
ข้อผิดพลาดเดียวกันบนแท่งราคา 1 นาทีจะสังเกตเห็นได้ยากกว่า ให้กรองตามช่วงซื้อขายใน America/New_York ถ้าไฟล์ไม่มีแท็กช่วงซื้อขาย การกรองก็เป็นแค่การทำให้ดูเหมือนว่ากรองแล้ว
กำหนดช่วงซื้อขายให้ชัดเจนก่อนปรับช่วงมองย้อนหลัง
ฉันรันทดสอบจุดสูงสุด 20 วันของคุณอีกครั้งด้วยแท่งราคารายวันเฉพาะช่วงเวลาปกติ โดยใช้หุ้นชุดเดิมและวันเดิม เหลือเบรกเอาต์ 6 ครั้ง นั่นคือผลของบัญชีจำลอง ส่วนอีก 8 ครั้งมาจากรายการซื้อขายที่คุณต้องซื้อจริงตอน 7:41 PM จำนวน 800 หุ้น อย่าใช้เวลา 1 สัปดาห์ปรับพารามิเตอร์ค่าคลาดเคลื่อนระหว่างจำลองกับการซื้อขายจริง ให้เข้ากับปัญหาช่วงซื้อขายไม่ตรงกัน
สำหรับข้อมูลหุ้นแต่ละชุด ให้ใส่ค่าบูลีน 3 ค่าไว้ในข้อตกลงการวิจัย: includes_premarket, includes_afterhours, includes_odd_lots จากนั้นเลือกช่วงซื้อขายที่กลยุทธ์อนุญาตให้เข้าเทรด และกำหนดให้แบบจำลองการจับคู่คำสั่งทำงานในช่วงนั้น หากคุณต้องการเทรดนอกเวลาปกติจริง ๆ ก็ระบุให้ชัด แล้วกำหนดขนาดสถานะโดยคำนึงถึงสภาพตลาดตอน 7:41 PM: ส่วนต่างราคากว้างขึ้น การยกเลิกคำสั่งช้าลง และสมุดคำสั่งที่ดูเหมือนมีราคาเสนอซื้อขาย แต่จริง ๆ แล้วมีเพียง 1 ล็อต
ถ้าผู้ให้บริการบอกไม่ได้ว่าแถวข้อมูลรายวันใช้ช่วงซื้อขายไหน ให้ถือว่าเป็นข้อมูลแบบผสมจนกว่าจะยืนยันได้ ขอคำตอบเป็นลายลักษณ์อักษร กราฟบนเว็บตอบคำถามนี้ไม่ได้ และถ้าภายหลังคุณตัดสินใจว่ากลยุทธ์ควรเทรดช่วงปิดตลาด นั่นเป็นอีกเรื่องหนึ่ง: ราคาปิดอย่างเป็นทางการมาจากการประมูลที่คุณต้องส่งคำสั่งเข้าร่วม
รันอีกครั้งโดยกำหนดช่วงซื้อขายให้ชัดเจน แล้วเราค่อยมาคุยกันเรื่อง 6 ครั้งที่เหลือ
← บทความทั้งหมด


