วิจัย Backtesting สภาพแวดล้อมในหลามกับหมีแพนด้า โดยไมเคิลฮอลล์มัวร์เมื่อวันที่ 16 มกราคม 2014 backtesting เป็นกระบวนการวิจัยของการใช้ความคิดกลยุทธ์การซื้อขายเพื่อข้อมูลทางประวัติศาสตร์ในการสั่งซื้อเพื่อยืนยันประสิทธิภาพที่ผ่านมา โดยเฉพาะอย่างยิ่ง backtester ทำให้การรับประกันเกี่ยวกับการดำเนินงานในอนาคตของกลยุทธ์ที่ไม่มี แต่พวกเขาจะเป็นองค์ประกอบสำคัญของกระบวนการวิจัยท่อกลยุทธ์ที่ช่วยให้กลยุทธ์ที่จะถูกกรองออกก่อนที่จะถูกวางลงในการผลิต ในบทความนี้ (และผู้ที่ปฏิบัติตามมัน) ระบบ backtesting เชิงวัตถุขั้นพื้นฐานเขียนในหลามจะมีการระบุไว้ ระบบนี้เป็นหลักในช่วงต้นจะเป็น "การเรียนการสอนความช่วยเหลือ" ที่ใช้ในการแสดงให้เห็นถึงองค์ประกอบที่แตกต่างกันของระบบ backtesting ในขณะที่เรามีความคืบหน้าผ่านบทความการทำงานที่มีความซับซ้อนมากขึ้นจะเพิ่ม backtesting ภาพรวม ขั้นตอนของการออกแบบระบบ backtesting ที่แข็งแกร่งเป็นเรื่องยากมาก ได้อย่างมีประสิทธิภาพจำลองทุกองค์ประกอบที่มีผลต่อประสิทธิภาพการทำงานของระบบซื้อขายอัลกอริทึมที่มีความท้าทาย เมล็ดข้อมูลที่ไม่ดีไม่โปร่งใสของการกำหนดเส้นทางการสั่งซื้อที่นายหน้าแฝงการสั่งซื้อและมากมายของปัจจัยอื่น ๆ ที่วางแผนที่จะเปลี่ยน "ความจริง" ประสิทธิภาพของกลยุทธ์เมื่อเทียบกับผลการดำเนินงาน backtested เมื่อมีการพัฒนาระบบการ backtesting มันเป็นที่ดึงดูดที่จะต้องการอย่างต่อเนื่อง "เขียนมันตั้งแต่เริ่มต้น" กับปัจจัยอื่น ๆ จะพบว่ามีความสำคัญอย่างยิ่งในการประเมินผลการปฏิบัติงาน ไม่มีระบบ backtesting เสร็จสิ้นที่เคยและการตัดสินจะต้องทำที่จุดในระหว่างการพัฒนาว่าปัจจัยเพียงพอที่ได้รับการบันทึกโดยระบบ ที่มีความกังวลเหล่านี้ในใจ backtester ที่นำเสนอในที่นี่จะค่อนข้างง่าย ในขณะที่เราสำรวจปัญหาต่อไป (การเพิ่มประสิทธิภาพผลงานการบริหารความเสี่ยงในการจัดการค่าใช้จ่ายการทำธุรกรรม) backtester จะกลายเป็นมีประสิทธิภาพมากขึ้น ประเภทของ Backtesting ระบบ โดยทั่วไปมีสองประเภทของระบบ backtesting ว่าจะเป็นที่สนใจ ประการแรกคือการวิจัยตาม ใช้เป็นหลักในระยะแรกที่หลายกลยุทธ์จะมีการทดสอบในการสั่งซื้อเพื่อเลือกผู้ประเมินที่รุนแรงมากขึ้น ระบบ backtesting การวิจัยเหล่านี้มักจะเขียนในหลาม, R หรือ MatLab เป็นความเร็วของการพัฒนามีความสำคัญมากกว่าความเร็วของการดำเนินการในขั้นตอนนี้ ประเภทที่สองของระบบ backtesting เป็นเหตุการณ์ตาม นั่นคือมันดำเนินกระบวนการ backtesting ในวงการดำเนินการคล้าย (ถ้าไม่ได้เหมือนกัน) กับระบบการดำเนินการซื้อขายตัวเอง มันแนบเนียนจะจำลองข้อมูลการตลาดและขั้นตอนการดำเนินการสั่งซื้อเพื่อให้มีการประเมินอย่างเข้มงวดมากขึ้นของกลยุทธ์ ระบบหลังมักจะเขียนในภาษาที่มีประสิทธิภาพสูงเช่น C ++ หรือ Java ที่ความเร็วของการดำเนินการเป็นสิ่งจำเป็น สำหรับกลยุทธ์ความถี่ต่ำ (ระหว่างวัน แต่ยังคง), Python เป็นมากกว่าเพียงพอที่จะนำมาใช้ในบริบทนี้ เชิงวัตถุ Backtester วิจัยในหลาม การออกแบบและการดำเนินการของวัตถุที่มุ่งเน้นสภาพแวดล้อม backtesting วิจัยที่ใช้ในขณะนี้จะมีการหารือ การวางวัตถุที่ได้รับการเลือกให้เป็นกระบวนทัศน์การออกแบบซอฟต์แวร์ด้วยเหตุผลต่อไปนี้: อินเตอร์เฟซของแต่ละองค์ประกอบสามารถระบุล่วงหน้าในขณะที่ internals ของแต่ละองค์ประกอบสามารถปรับเปลี่ยนได้ (หรือแทนที่) เป็นโครงการดำเนิน โดยระบุการเชื่อมต่อล่วงหน้าก็เป็นไปได้อย่างมีประสิทธิภาพทดสอบว่าแต่ละองค์ประกอบทำงาน (ผ่านการทดสอบหน่วย) เมื่อขยายระบบองค์ประกอบใหม่จะถูกสร้างขึ้นเมื่อหรือนอกเหนือไปจากคนอื่น ๆ ไม่ว่าจะโดยการรับมรดกหรือองค์ประกอบ ในขั้นตอนนี้ backtester ที่ถูกออกแบบมาเพื่อความสะดวกในการดำเนินงานและระดับที่เหมาะสมของความยืดหยุ่นที่ค่าใช้จ่ายของความถูกต้องของตลาดที่แท้จริง โดยเฉพาะอย่างยิ่ง backtester นี้จะสามารถจัดการกับกลยุทธ์การทำหน้าที่ในการเป็นเครื่องมือเดียว ต่อมา backtester จะมีการปรับเปลี่ยนที่จะจัดการกับชุดของเครื่องมือ สำหรับ backtester เริ่มต้นองค์ประกอบต่อไปนี้จำเป็นต้องใช้: กลยุทธ์ - กลยุทธ์ระดับได้รับนุ่น DataFrame ของบาร์ คือรายการเปิดสูงปิดต่ำปริมาณ (OHLCV) จุดข้อมูลที่ความถี่โดยเฉพาะอย่างยิ่ง กลยุทธ์จะผลิตรายการของสัญญาณ ซึ่งประกอบด้วยการประทับเวลาและองค์ประกอบจากชุดที่ $ \ $ ชี้ยาวถือหรือสัญญาณสั้นตามลำดับ ผลงาน - ส่วนใหญ่ของการทำงาน backtesting จะเกิดขึ้นในระดับการลงทุน มันจะได้รับชุดของสัญญาณ (ตามที่อธิบายไว้ข้างต้น) และสร้างชุดของตำแหน่งจัดสรรกับองค์ประกอบเงินสด งานของวัตถุผลงานคือการผลิตส่วนโค้ง รวมค่าใช้จ่ายในการทำธุรกรรมขั้นพื้นฐานและติดตามการซื้อขาย ผลการดำเนินงาน - วัตถุที่ใช้เวลาการปฏิบัติงานผลงานและผลิตชุดของสถิติเกี่ยวกับประสิทธิภาพการทำงาน โดยเฉพาะอย่างยิ่งความเสี่ยงที่จะส่งออก / ลักษณะกลับ (ชาร์ป Sortino และอัตราส่วนข้อมูล) การค้า / ตัวชี้วัดผลกำไรและข้อมูลเบิก สิ่งที่ขาดหายไป? ที่สามารถเห็นได้ backtester นี้ไม่รวมถึงการอ้างอิงใด ๆ กับผลงาน / การบริหารความเสี่ยงการดำเนินการจัดการ (เช่นการ จำกัด การสั่งซื้อ) หรือจะให้การสร้างแบบจำลองที่มีความซับซ้อนของต้นทุนการทำธุรกรรม นี้ไม่ได้เป็นปัญหามากในขั้นตอนนี้ มันช่วยให้เราสามารถที่จะได้รับความคุ้นเคยกับกระบวนการของการสร้าง backtester เชิงวัตถุและนุ่น / NumPy ห้องสมุด ในเวลาที่มันจะดีขึ้น การดำเนินงาน ตอนนี้เราจะดำเนินการร่างการใช้งานสำหรับแต่ละวัตถุ วัตถุกลยุทธ์จะต้องค่อนข้างทั่วไปในขั้นตอนนี้เพราะมันจะจัดการพยากรณ์หมายถึงการพลิกกลับโมเมนตัมและกลยุทธ์ความผันผวน กลยุทธ์การพิจารณาที่นี่จะเป็นช่วงเวลาที่ใช้คือ "ราคาขับเคลื่อน" ความต้องการต้นสำหรับ backtester นี้คือกลยุทธ์การเรียนที่ได้รับจะรับรายชื่อของบาร์ (OHLCV) เป็น input มากกว่าเห็บ (ราคาค้าโดยการค้า) หรือข้อมูลการสั่งซื้อหนังสือ ดังนั้นเมล็ดที่ดีที่สุดของที่นี่ได้รับการพิจารณาจะเป็นบาร์ 1 วินาที ระดับกลยุทธ์จะยังเสมอคำแนะนำสัญญาณ ซึ่งหมายความว่ามันจะให้คำแนะนำเช่นผลงานในแง่ของการที่จะยาว / สั้นหรือดำรงตำแหน่งที่ ความยืดหยุ่นนี้จะช่วยให้เราสามารถสร้างหลายกลยุทธ์ "ที่ปรึกษา" ที่ให้ชุดของสัญญาณซึ่งผลงานระดับที่สูงขึ้นสามารถยอมรับเพื่อตรวจสอบตำแหน่งที่เกิดขึ้นจริงที่กำลังเข้ามา อินเตอร์เฟซของการเรียนจะมีผลบังคับใช้โดยการใช้วิธีการชั้นฐานนามธรรม ชั้นฐานนามธรรมเป็นวัตถุที่ไม่สามารถ instantiated จึงเรียนมาเท่านั้นที่สามารถสร้าง รหัสงูใหญ่จะได้รับด้านล่างในไฟล์ที่เรียกว่า backtest. py ชั้นกลยุทธ์ต้องการให้รองใด ๆ ใช้วิธี generate_signals เพื่อป้องกันไม่ให้ชั้นกลยุทธ์จากการถูก instantiated โดยตรง (เพราะมันเป็นนามธรรม!) มันเป็นสิ่งจำเป็นที่จะใช้ ABCMeta และวัตถุ abstractmethod จากโมดูลเอบีซี เราตั้งค่าคุณสมบัติของชั้นที่เรียกว่า __metaclass__ จะเท่ากับ ABCMeta แล้วตกแต่งวิธี generate_signals กับมัณฑนากร abstractmethod ในขณะที่อินเตอร์เฟซที่กล่าวมาเป็นตรงไปตรงมาก็จะกลายเป็นความซับซ้อนมากขึ้นเมื่อชั้นนี้คือการสืบทอดสำหรับแต่ละประเภทที่เฉพาะเจาะจงของกลยุทธ์ ในที่สุดเป้าหมายของระดับกลยุทธ์ในการตั้งค่านี้คือการจัดให้มีรายการยาว / สั้น / ถือสัญญาณสำหรับตราสารแต่ละที่จะถูกส่งไปยังผลงาน ชั้นผลงานเป็นที่ที่คนส่วนใหญ่ของตรรกะการซื้อขายจะอยู่ สำหรับ backtester การวิจัยครั้งนี้ผลงานที่อยู่ในความดูแลของการกำหนดตำแหน่งการปรับขนาดการวิเคราะห์ความเสี่ยงการบริหารต้นทุนการทำธุรกรรมและการดำเนินการจัดการ (เช่นตลาดบนเปิดตลาดเมื่อใกล้การสั่งซื้อ) ในขั้นตอนภายหลังงานเหล่านี้จะถูกแบ่งออกเป็นชิ้นส่วนที่แยกต่างหาก ตอนนี้พวกเขาจะถูกรีดในระดับหนึ่ง ชั้นนี้จะทำให้การใช้งานที่กว้างขวางของหมีแพนด้าและให้เป็นตัวอย่างที่ดีของการที่ห้องสมุดสามารถบันทึกจำนวนมากเวลาโดยเฉพาะอย่างยิ่งในเรื่องที่เกี่ยวกับ "สำเร็จรูป" ข้อมูลการถกเถียง เช่นกันเคล็ดลับหลักที่มีหมีแพนด้าและ NumPy คือการหลีกเลี่ยง iterating มากกว่าชุดข้อมูลใด ๆ ที่ใช้สำหรับใน d. ไวยากรณ์ นี้เป็นเพราะ NumPy (ซึ่งรองรับหมีแพนด้า) เพิ่มประสิทธิภาพการดำเนินงานโดยการวนลูป vectorised ดังนั้นคุณจะเห็นไม่กี่ (ถ้ามี) ทำซ้ำโดยตรงเมื่อใช้หมีแพนด้า เป้าหมายของระดับผลงานในท้ายที่สุดคือการผลิตลำดับของการซื้อขายและโค้งส่วนซึ่งจะได้รับการวิเคราะห์โดยระดับประสิทธิภาพการทำงาน เพื่อที่จะบรรลุเป้าหมายนี้มันจะต้องให้กับรายการของคำแนะนำซื้อขายจากวัตถุกลยุทธ์ ต่อมาเมื่อวันนี้จะเป็นกลุ่มของวัตถุกลยุทธ์ ชั้นผลงานจะต้องมีการบอกว่าเงินทุนจะนำไปใช้สำหรับการตั้งค่าเฉพาะของสัญญาณการซื้อขายวิธีการจัดการกับค่าใช้จ่ายในการทำธุรกรรมและรูปแบบของคำสั่งซื้อจะนำไปใช้ วัตถุกลยุทธ์การดำเนินงานในบาร์ของข้อมูลและทำให้สมมติฐานที่จะต้องทำในเรื่องราคาที่ประสบความสำเร็จในการดำเนินการของการสั่งซื้อสินค้า ตั้งแต่สูง / ราคาต่ำของแถบใด ๆ ที่ไม่เป็นที่รู้จักเบื้องต้นมันก็เป็นเพียงความเป็นไปได้ที่จะใช้ราคาเปิดและปิดสำหรับการซื้อขาย ในความเป็นจริงมันเป็นไปไม่รับประกันได้ว่าคำสั่งจะเต็มไปที่หนึ่งของราคาเหล่านี้โดยเฉพาะเมื่อมีการใช้เพื่อการตลาดจึงจะเป็นที่ดีที่สุดประมาณ นอกเหนือไปจากสมมติฐานเกี่ยวกับการสั่งซื้อจะถูกเติมเต็ม backtester นี้จะไม่สนใจแนวคิดทั้งหมดของข้อ จำกัด ของอัตรากำไรขั้นต้น / นายหน้าซื้อขายหลักทรัพย์และจะคิดว่ามันเป็นไปได้ที่จะไปยาวและระยะสั้นในตราสารใด ๆ ได้อย่างอิสระโดยไม่ จำกัด สภาพคล่องใด ๆ นี้ชัดเจนสมมติฐานที่ไม่สมจริงมาก แต่เป็นสิ่งหนึ่งที่สามารถผ่อนคลายในภายหลัง รายการต่อไปอย่างต่อเนื่อง backtest. py: ในขั้นตอนนี้กลยุทธ์และผลงานคลาสฐานนามธรรมได้รับการแนะนำ เรากำลังอยู่ในตำแหน่งที่จะสร้างการใช้งานมาเป็นรูปธรรมของชั้นเรียนเหล่านี้บางส่วนในการสั่งซื้อการผลิตการทำงานกลยุทธ์ "ของเล่น" เราจะเริ่มต้นด้วยการสร้างคลาสของกลยุทธ์ที่เรียกว่า RandomForecastStrategy งาน แต่เพียงผู้เดียวในการที่จะผลิตสุ่มเลือกยาว / สัญญาณสั้น! ขณะนี้เป็นที่ชัดเจนกลยุทธ์การซื้อขายไร้สาระก็จะตอบสนองความต้องการของเราแสดงให้เห็นถึงกรอบ backtesting เชิงวัตถุ ดังนั้นเราจะเริ่มต้นไฟล์ใหม่ที่เรียกว่า random_forecast. py พร้อมกับรายชื่อสำหรับการพยากรณ์สุ่มดังนี้ ตอนนี้เรามี "คอนกรีต" ระบบการคาดการณ์เราจะต้องสร้างการดำเนินงานของวัตถุผลงาน วัตถุนี้จะห้อมล้อมส่วนใหญ่ของรหัส backtesting ที่ มันถูกออกแบบมาเพื่อสร้างสอง DataFrames ที่แยกจากกันเป็นครั้งแรกซึ่งเป็นกรอบในตำแหน่งที่ใช้ในการจัดเก็บปริมาณของแต่ละเครื่องมือที่จัดขึ้นที่บาร์ใด ๆ โดยเฉพาะอย่างยิ่ง ประการที่สองผลงาน จริงมีราคาในตลาดของการถือครองทั้งหมดสำหรับแต่ละบาร์เช่นเดียวกับการนับเงินสดที่สมมติว่าเงินทุนเริ่มต้น ในท้ายที่สุดนี้ให้เป็นเส้นโค้งส่วนที่จะประเมินผลการดำเนินกลยุทธ์ วัตถุที่ผลงานในขณะที่มีความยืดหยุ่นมากในอินเตอร์เฟซที่ต้องการทางเลือกเฉพาะเมื่อเกี่ยวกับวิธีการจัดการกับต้นทุนการทำธุรกรรมในตลาดคำสั่งอื่น ๆ ในตัวอย่างพื้นฐานนี้ผมได้คิดว่ามันจะเป็นไปได้ที่จะไปยาว / สั้นเครื่องดนตรีได้อย่างง่ายดายโดยมีข้อ จำกัด หรือไม่มีเลย ขอบซื้อหรือขายได้โดยตรงที่ราคาเปิดของแถบศูนย์ต้นทุนการทำธุรกรรม (ครอบคลุมการเลื่อนหลุดของค่าธรรมเนียมและผลกระทบต่อตลาด) และมีการระบุปริมาณของหุ้นโดยตรงที่จะซื้อเพื่อการค้าในแต่ละ นี่คือความต่อเนื่องของรายชื่อ random_forecast. py คือ นี้ทำให้เรามีทุกอย่างที่เราต้องสร้างเส้นโค้งส่วนบนพื้นฐานของระบบดังกล่าว ขั้นตอนสุดท้ายคือการผูกไว้ด้วยกันกับฟังก์ชั่น __main__: การส่งออกของโปรแกรมมีดังนี้ ขอแสดงความจะแตกต่างจากการส่งออกด้านล่างขึ้นอยู่กับช่วงวันที่คุณเลือกและเมล็ดสุ่มใช้: ในกรณีนี้กลยุทธ์ที่สูญเสียเงินซึ่งไม่น่าแปลกใจกำหนดลักษณะของการสุ่มพยากรณ์! ขั้นตอนถัดไปคือการสร้างวัตถุประสิทธิภาพการทำงานที่ยอมรับตัวอย่างผลงานและให้รายการของตัวชี้วัดประสิทธิภาพการทำงานซึ่งจะเป็นฐานการตัดสินใจที่จะกรองกลยุทธ์ที่ออกมาหรือไม่ นอกจากนี้เรายังสามารถปรับปรุงวัตถุผลงานที่จะมีการจัดการที่สมจริงมากขึ้นของต้นทุนการทำธุรกรรม (เช่นค่านายหน้าโบรกเกอร์ Interactive และการลื่นไถล) เรายังสามารถตรงไปตรงมารวมถึงเครื่องมือการพยากรณ์เป็นวัตถุกลยุทธ์ซึ่งจะ (หวังว่า) ผลลัพธ์ที่ดี ในบทความต่อไปเราจะสำรวจแนวคิดเหล่านี้ในเชิงลึกเพิ่มเติม ไมเคิลฮอลล์มัวร์ ไมค์เป็นผู้ก่อตั้ง QuantStart และได้รับการมีส่วนร่วมในอุตสาหกรรมการเงินเชิงปริมาณสำหรับในช่วงห้าปีที่ผ่านมาส่วนใหญ่เป็นนักพัฒนา quant และต่อมาเป็นที่ปรึกษาผู้ประกอบการ quant สำหรับกองทุนป้องกันความเสี่ยง
No comments:
Post a Comment