ในบทความนี้ Frank Smetana หนึ่งในผู้เชี่ยวชาญจะมาอธิบายถึงการใช้งาน Python เป็น Open Source ในการทดสอบ Backtesting บนซอฟต์แวร์ และ ให้คำแนะนำบนกระบวนการที่จะให้คุณนำไปใช้อย่างเหมาะสม
การ Backtest จัดว่าเป็นเนื้อหาที่สำคัญที่สุดของ กระบวนการทดสอบระบบกลยุทธ์ย้อนหลัง (STS) อยู่ระหว่าง การพัฒนากลยุทธ์ และการนำไปใช้เทรดจริง ( Live Trade) หากกลยุทธ์มีความบกพร่อง การ Backtest อย่างจริงจังจะช่วยปกป้องไม่ให้เรานำไปปฏิบัติใช้จริง
มีตัวเลขหนึ่งที่ถูกนำมาทับซ้อนกับการ Backtest รวมถึงการเทรดจำลอง และการเทรดจริง การ Backtest จะนำข้อมูลสถิติเชิงมาหาจำนวนประสิทธิภาพ STS การเทรดจำลอง จะนำขั้นตอนของการ Backtest มาแสดงผลในแต่ละแท่งราคาจับสัญญานการเทรด การจำลอง/การเทรดจริง ถูกนำมาใช้ทดสอบ STS แบบ Real time: สัญญาณการเทรด , การส่งคำสั่ง , เส้นทางคำสั่งไปยังโบรกเกอร์ และดูแลสถานะของคำสั่งที่ถูกรันอยู่
Framework ส่วนใหญ่ เป็นมากกว่า การ Backtest รวมถึงความสามารในการ Live Trade จึงค่อนข้างสะดวกถ้าเราต้องการนำ Backtest framework ไปใช้งานกับโบรกเกอร์ที่เราชอบ และข้อมูลที่เราจะใช้ Quantopian/Zipline ได้ล้ำหน้าไปแล้ว มีกระบวนการพัฒนาเชื่อมโยง , ทดสอบย้อนหลัง และนำไปโซลูชันไปใช้งาน
ในคอมมูนิตี้ ของ Python ถูกเตรียมไว้อย่างดี , อย่างน้อยกว่า 6 Opensource Backtesting Framework ราย พร้อมให้ใช้งาน แม้ว่าพวกเขาจะมีขั้นตอนการพัฒนา และเอกสารที่ต่างกัน เราอาจจะสนุกกับการทำงานบน Opensource Backtest Framework ที่ถูกเตรียมเอาไว้แล้ว เช็คเอาท์ได้จาก Github repo ของพวกเขา
พึงละลึกถึง การกำหนดความต้องการที่ชัดเจนใน STS ของเรา ก่อนที่จะประเมินการทดสอบ Backtest Framework
อะไรเป็นข้อมูลสำคัญสำหรับการเทรดของเรา? ในขณะที่ Framework ส่วนใหญ่ รองรับข้อมูลตราสารทุนในสหรัฐ ผ่าน YahooFinance , ถ้ากลยุทธ์ในอนุพันธ์ , ETFs หรือ EM Securities นั้น Data ต้องถูกนำมาใช้ Import หรือ ถูกเอามาใช้ใน Framework Asset Class ครอบคลุมเหนือยิ่งกว่าข้อมูล มีคำถามว่า Framework สามารถจัดการกับผลิตภัณฑ์ที่มีวันหมดเวลา Future & Option และจัดการ Roll-over ข้ามซีรีย์ได้อย่างอัตโนมัติหรือไม่? อะไรคือการไหลของตลาด , จะตั้งสมมติฐานตามความเป็นจริงในการส่งคำสั่งจำนวนมากได้อย่างไร?
อะไรเป็นข้อมูลความถี่และรายละเอียดของเราในการสร้าง STS? ในระบบเทรดต้องการทุก Tick , Bid/Ask ซึ่งมีความแตกต่างอย่างมากกับประเด็นการจัดการข้อมูลที่มีระยะห่างมากกว่า 5 นาที หรือระดับชั่วโมง. กองทุนป้องกันความเสี่ยง & HFT Shop ลงทุนในการสร้าง Backtest Framework ที่มีความแข็งแรง ขยับขยายได้ เพื่อที่จัดการกับชุดข้อมูล และความถี่ บางแพล็ตฟอร์มมี ชุดข้อมูลที่สมบูรณ์ครบถ้วนสำหรับสินทรัพย์ต่างๆ อาทิเช่น S&P Stock, ในระดับหนึ่งนาที
อะไรคือแบบการส่งคำสั่ง ( Order Type) ที่ STS ของเราต้องนำมาใช้? ขั้นต่ำ คือ Limit , Stop และ OCO ควรจะถูกรองรับ โดย Framework
(ผู้แปล: OCO order เป็นออร์เดอร์ที่รวม limit and / or stop-loss order ไว้ด้วยกัน)
ระดับของการซัพพอร์ต และเอกสาร เป็นสิ่งจำเป็น ในตอนต้นนี้ Framework ยังมีเอกสารที่น้อย และในคอมมูนิตี้ก็ยังมีการซัพพอร์ตน้อยกว่าคอมมูนิตี้อื่นๆ
องค์ประกอบของการ Backtest Framework
ข้อมูล และ STS ที่มีอยู่: องค์ประกอบที่ได้รับมานั้น ต้องใช้ STS Script/Definition File และให้ข้อมูลที่จำเป็นสำหรับทดสอบ ถ้า Framework ต้องใช้ STS ใดๆ เพื่อที่จะบันทึกผลหลังจากทดสอบ ตัวของ Framework นั้นควรจะรองรับ Canned Function ซึ่งเป็นเทคนิคอลอินดิเคเตอร์ที่นิยมสูงสุด เพื่อให้การทดสอบ STS รวดเร็ว ผู้ใช้กำหนดระยะเวลา Historical period เพื่อที่จะ Backtest บน Framework ที่อยู่ หรืออะไรก็ตามที่ถูก Import เข้ามาได้
การทดสอบประสิทธิภาพ ปรับใช้ให้เข้ากับตรรกะ STS โดยต้องการ Historic Data และคำนวณกรอบช่วงของความเสี่ยง และ Performance Metric รวมถึง Max drawdown , Sharpe & Sortino ratios โดยส่วนมากแล้ว Framework ทุกอันจะรองรับจำนวนความสามารถมองเห็นอย่างเหมาะสม รวมถึง equity curves และ deciled-statistics
การ Optimization มีแนวโน้มที่จะต้องใช้ทรัพยากรการคำนวณร่วมกันในกระบวนการ STS ถ้าหากเราจำเป็นต้องเพิ่มประสิทธิภาพใน STS ของเราแล้ว ขอให้โฟกัสกับ Framework ที่รองรับการขยาย การกระจาย และ ประมวลผลแบบ Parallel ได้
ในบริบทของการพัฒนากลยุทธ์เพื่อพัฒนาเทคนิคอลอินดิเคเตอร์ นักพัฒนาระบบต้องพยายามหาให้ได้ว่า Optimal Set ของ Parameter ในแต่ละอินดิเคเตอร์ มาปรับให้เหมาะสมที่สุด เราอาจพบว่า เส้นค่าเฉลี่ย Moving Average 6 และ 10 วัน ตัดกันนั้น ให้ผลลัพธ์เชิงทดสอบสถิตที่ดีกว่าค่าเฉลี่ย อื่นๆ ตัดกัน ระหว่างค่า 1-20 ตามตัวอย่างดังกล่าว 20 คูณ 20 = 400 Parameter ทุกค่าจะถูกคำนวณทั้งหมด และถูกนำมาจัดอันดับ
ใน Portfolio Context, การ Optimization ค้นหา เพื่อที่จะเจอว่าควรจะให้น้ำหนักสินทรัพย์ใดใน Portfolio รวมถึงการ Short และเลือกตราสารที่มี Leverage บนช่วงที่กำหนด , Portfolio ถูกปรับให้สมดุล ผลลัพธ์ของการซื้อ และการขายใน Portfolio ที่ถืออยู่ ถูกปรับให้สอดคล้องกับการให้น้ำหนักตามที่ Optimize
ขนาดของออเดอร์ที่ถือครอง เป็นการเพิ่มเติมจากการใช้ Optimization , ช่วยให้นักพัฒนาจำลอง และวิเคราะห์ผลกระทบของ Leverage , Dynamic Position sizing ใน STS และประสิทธิภาพใน Portfolio
6 Backtest Framework สำหรับ Python
ความสามารถมาตรฐานของ แพลต์ฟอร์ม Open source Python backtesting ครอบคลุมถึง
มีการขับเคลื่อน
ยืดหยุ่น ไม่ถูกจำกัดด้วย License
มีตัวชี้วัดทางเทคนิคอลอินดิเคเตอร์ที่เหมาะสมไว้ให้พร้อมใช้
มีการวัดผลที่มีประสิทธิภาพ ตามมาตรฐาน
มีความสามารถ คำนวณ / แสดงภาพการทดสอบ / ออกรายงาน
PyAlgoTrade
PyAlgoTrade มีการเติบโต , เอกสารสมบูรณ์ Backtest Framework พร้อมด้วย Paper และความสามารถ Live Trade มี Data Support สมบูรณ์จากทั้ง Yahoo! Finance , Google Finance , NinjaTrader และ CSV หลากหลายรูปแบบจาก Based time series เช่นเดียวกับ Quandl รองรับ Order แบบต่างๆ รวมถึง Market , Limit , Stop และ StopLimit
PyAlgoTrade รองรับการเทรด Bitcoin ผ่าน Bitstamp และข้อมูล Real time Twitter event handling
Project Page: github.