VectorBT: เฟรมเวิร์กการทดสอบย้อนหลังที่เร็วที่สุดสำหรับ Python

หากคุณเคยทำงานด้าน algotrading และการทดสอบย้อนหลังกลยุทธ์การซื้อขายบน Python คุณน่าจะเคยเผชิญกับปัญหาเดียวกัน: ความเร็ว ไลบรารีแบบคลาสสิก (เช่น Backtrader หรือ Zipline) ใช้แนวทางเชิงวัตถุ (object-oriented) โดยวนซ้ำผ่านข้อมูลประวัติศาสตร์ทีละเหตุการณ์ (event-driven) ซึ่งสะดวกสำหรับการเขียนลอจิก แต่เมื่อต้องปรับแต่งพารามิเตอร์บนการผสมผสานนับพันรายการ การรอเป็นชั่วโมงก็กลายเป็นเรื่องที่ทนไม่ได้
และนี่คือที่มาของ VectorBT — ไลบรารีวิเคราะห์เชิงปริมาณที่ใช้แนวทางที่แตกต่างโดยพื้นฐานในการทดสอบย้อนหลัง
VectorBT คืออะไร?

VectorBT ทำงานเฉพาะกับออบเจ็กต์ pandas และ NumPy และใช้คอมไพเลอร์ Numba เพื่อเร่งความเร็วในการคำนวณ ซึ่งช่วยให้วิเคราะห์ข้อมูลใดก็ได้ด้วยความเร็วและความสามารถในการขยายขนาดที่น่าทึ่ง สามารถทดสอบกลยุทธ์นับหมื่นรายการในเวลาเพียงไม่กี่วินาที
แทนที่จะประมวลผลแต่ละแท่งหรือติ๊กตามลำดับ (เหมือนกับที่ backtesters แบบดั้งเดิมทำ) VectorBT แทนค่าข้อมูลที่ซับซ้อนเป็นอาร์เรย์ที่มีโครงสร้าง การแปลงการดำเนินการให้เป็นเวกเตอร์ร่วมกับ Numba (ซึ่งแก้ปัญหาการพึ่งพาเส้นทางโดยอนุญาตให้คอมไพล์ลูป Python เป็นรหัสเครื่อง) ให้ประสิทธิภาพในระดับภาษา C
คุณสมบัติหลัก

- การทดสอบย้อนหลังแบบเวกเตอร์: ทดสอบกลยุทธ์ด้วยโค้ดเพียงไม่กี่บรรทัด ไม่มีลูป Python ที่ช้า
- การปรับแต่งขนาดใหญ่: ปรับแต่งกลยุทธ์การซื้อขายของคุณพร้อมกันบนพารามิเตอร์หลายตัว กรอบเวลา และสินทรัพย์ต่างๆ ในครั้งเดียว
- การแสดงผลแบบโต้ตอบ: การผสานรวมในตัวกับ Plotly และ Jupyter Widgets ช่วยให้สร้างแผนภูมิและแดชบอร์ดที่ซับซ้อนอย่างยิ่ง (เหมือน Tableau) ได้โดยตรงใน Jupyter Notebook โดยไม่มีความล่าช้าในการเรนเดอร์ที่เห็นได้ชัด
- ไม่สูญเสียการควบคุม: ต่างจากแพลตฟอร์มบนคลาวด์เช่น TradingView ข้อมูลและอัลกอริทึมของคุณจะอยู่กับคุณเท่านั้น ในขณะเดียวกันประสิทธิภาพการคำนวณเทียบเท่า และมักจะเกินกว่าแพลตฟอร์มสำเร็จรูป
- การเตรียมข้อมูล: ชุดเครื่องมือที่ยอดเยี่ยมสำหรับการวิเคราะห์อนุกรมเวลาและวิศวกรรมคุณลักษณะสำหรับโมเดลการเรียนรู้ของเครื่อง
วิธีการทำงาน (ตัวอย่าง)

สมมติว่าเราต้องการทดสอบกลยุทธ์ Dual Moving Average Crossover (DMAC) แบบคลาสสิกบน Bitcoin (BTC)
ในเฟรมเวิร์ก OOP แบบคลาสสิก คุณจะต้องสร้างคลาสกลยุทธ์ อธิบายลอจิก next() ที่ทำงานบนแต่ละแท่ง และวนซ้ำผ่านแท่งทั้งหมด ใน VectorBT ทุกอย่างสวยงามและรวดเร็วกว่ามาก:
import vectorbt as vbt
btc_price = vbt.YFData.download('BTC-USD', start='2019-01-01 UTC', end='2020-01-01 UTC').get('Close')
fast_ma = vbt.MA.run(btc_price, [10, 20], short_name='fast')
slow_ma = vbt.MA.run(btc_price, [30, 30], short_name='slow')
entries = fast_ma.ma_crossed_above(slow_ma)
exits = fast_ma.ma_crossed_below(slow_ma)
pf = vbt.Portfolio.from_signals(btc_price, entries, exits)
print(pf.total_return())
ในตัวอย่างนี้ เราทดสอบ หลาย รูปแบบของกลยุทธ์ DMAC พร้อมกันในพริบตาเดียว: การผสมผสาน (10, 30) และ (20, 30) ผลลัพธ์ (ในรูปของคอลัมน์) จะเป็นผลตอบแทนสำหรับแต่ละชุดพารามิเตอร์:
fast_window slow_window
10 30 0.848840
20 30 0.543411
Name: total_return, dtype: float64
ต้องการเพิ่ม Ethereum, Solana และเหรียญอีกหลายสิบตัวหรือไม่? เพียงรวมราคาของพวกมันเป็น DataFrame เดียว ต้องการทดสอบช่วงเวลาที่แตกต่างกันหรือไม่? ใช้ฟังก์ชัน range_split การแสดงผลแบบเวกเตอร์ช่วยให้คุณขยายมิติได้แทบไม่มีขีดจำกัด (ตราบเท่าที่มี RAM เพียงพอ)
VectorBT PRO

ยังมีเวอร์ชันเชิงพาณิชย์ของไลบรารีด้วย — VectorBT PRO ซึ่งเพิ่มเครื่องมือที่ทรงพลังยิ่งขึ้น มีการประมวลผลแบบขนาน การปรับแต่งพอร์ตโฟลิโอขั้นสูง การจดจำรูปแบบราคา การฉายภาพเหตุการณ์ การคำนวณการซื้อขายมาร์จิ้นและคำสั่งซื้อแบบ limit และเมตริกสำคัญสำหรับการซื้อขายจริงอีกกว่าร้อยรายการ
ทำไมต้องใช้ VectorBT?
หากคุณแค่ต้องการ "รัน" กลยุทธ์เดียวบนเครื่องมือเดียว เฟรมเวิร์กมาตรฐานก็อาจเพียงพอ แต่หากเป้าหมายของคุณคือการวิเคราะห์เชิงสำรวจ การหารูปแบบทางสถิติ (alpha) การทดสอบสมมติฐานบนเครื่องมือนับพันรายการพร้อมกัน VectorBT จะเป็นการค้นพบที่แท้จริงสำหรับคุณ
มันคือเครื่องมือของนักวิทยาศาสตร์ข้อมูลที่นำมาใช้ในการซื้อขาย มันให้ข้อได้เปรียบด้านข้อมูลที่แข่งขันได้โดยสามารถตรวจสอบแนวคิดได้เร็วกว่าผู้เข้าร่วมตลาดรายอื่นที่ใช้ Python สิบถึงร้อยเท่า
ผู้เขียน
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.