การเลือกไลบรารี backtesting ส่วนใหญ่แล้วก็คือการเดิมพันกับเรื่องการดูแลรักษา (maintenance) นั่นเอง โค้ดที่ใช้คำนวณกลยุทธ์ของคุณต้องยังมีชีวิตอยู่ในวันที่ exchange เปลี่ยน API วันที่ pandas เวอร์ชันใหม่ทำให้ import พังไป หรือวันที่คุณเจอบั๊กตอนตีสองครึ่ง ดังนั้นรีวิวนี้จึงเริ่มจากสัญญาณที่ดูธรรมดาที่สุดแต่ชี้ขาดที่สุดก่อน — โปรเจกต์นี้ยังถูกดูแลรักษาอยู่จริงหรือเปล่า? — แล้วค่อยลงลึกเรื่องสถาปัตยกรรม ความเร็ว และฟีเจอร์ต่าง ๆ

ตัวเลขจาก GitHub ทุกตัวด้านล่างถูกดึงมาแบบเรียลไทม์จาก GitHub API เมื่อวันที่ 2026-06-22 และข้อมูลที่ตรวจสอบยากกว่านั้นก็ได้รับการตรวจสอบไขว้กับแหล่งข้อมูลต้นทาง (repo ของโปรเจกต์ เอกสารทางการ) และผ่านการตรวจสอบแบบ adversarial ส่วนไหนที่เป็นตัวเลขกรณีดีที่สุดที่ผู้ผลิตรายงานเอง จะมีการระบุไว้ให้ทราบ

ตรวจสอบความจริงเรื่องการดูแลรักษา

นี่คือภาพรวมทั้งระบบนิเวศ จัดอันดับตามจำนวนดาวบน GitHub และทำสีตามว่ามันยังถูกพัฒนาอยู่จริงหรือไม่:

เครื่องมือ backtesting ของ Python จัดอันดับตามจำนวนดาวบน GitHub และทำสีตามสถานะการดูแลรักษา (2026-06-22): freqtrade, NautilusTrader และ LEAN นำหน้ากลุ่มที่ยังมีการดูแลรักษาอย่างต่อเนื่อง ขณะที่ Backtrader อยู่ในสภาพหลับใหล ส่วน Zipline, PyAlgoTrade และ QSTrader ถูกทิ้งร้างไปแล้ว

ข้อสรุปที่ฟังแล้วไม่ค่อยสบายใจ: สองชื่อที่มีดาวมากที่สุดและถูกเขียนถึงในบล็อกมากที่สุด แท้จริงแล้วกลายเป็นของเก่าตกยุคไปแล้ว

ในขณะเดียวกัน โปรเจกต์ที่ปล่อย release จริงในปี 2026 ได้แก่ Freqtrade (51.7k ⭐), NautilusTrader (24.1k ⭐), LEAN (20k ⭐), backtesting.py (8.5k ⭐), Jesse (8.1k ⭐), vectorbt (8.0k ⭐), PyBroker (3.4k ⭐), bt (2.9k ⭐) และ Lumibot (1.7k ⭐) ดาววัดประวัติศาสตร์ แต่วันที่ commit วัดว่าจะมีใครมาแก้บั๊กให้คุณหรือไม่

สองสถาปัตยกรรม: event-driven กับ vectorized

ทางแยกอีกจุดที่ตัดสินทุกอย่างก็คือ วิธีที่ เอนจินรันกลยุทธ์ของคุณ

ไม่มีตัวไหนชนะขาด คุณใช้ตัวที่เร็วเพื่อทำวิจัย และใช้ตัวที่สมจริงเพื่อตรวจสอบยืนยัน รายละเอียดเรื่อง trade-off นี้อยู่ด้านล่าง

ผู้นำที่ยังมีการดูแลรักษาอย่างต่อเนื่อง

NautilusTrader — ระดับ production, event-driven, แกนหลักเป็น Rust

NautilusTrader (24.1k ⭐, LGPL-3.0) อธิบายตัวเองว่าเป็น "production-grade Rust-native trading engine with deterministic event-driven architecture" — โค้ดเบสประมาณ 70% เป็น Rust พร้อม Python bindings มัน backtest ข้ามหลาย venue และหลายตราสารได้ที่ ความละเอียดระดับนาโนวินาที โดยใช้ข้อมูล tick และ order-book และมาพร้อมการเชื่อมต่อ live ราว ๆ 20 รายการ (Binance, Coinbase, Kraken, OKX, Bybit, Interactive Brokers, Betfair และอื่น ๆ) คำมั่นสัญญาเด่นของมันคือ โค้ดกลยุทธ์ชุดเดียวกันตั้งแต่ขั้นวิจัยไปจนถึงการนำไปใช้งานจริง (live) นี่คือตัวเลือกที่แข็งแกร่งที่สุดสำหรับกลุ่มผู้ใช้ crypto+หุ้น ที่ต้องการความสมจริงระดับ tick และเส้นทางสู่ production จริง ๆ ราคาที่ต้องจ่ายคือ: เส้นโค้งการเรียนรู้ที่ชันกว่า และสถาปัตยกรรมที่หนักกว่าไลบรารีแบบเรียบง่าย

vectorbt — การวิจัยแบบ vectorized ในระดับสเกล

vectorbt (8.0k ⭐, Apache-2.0 + Commons Clause) คือเอนจินแบบ vectorized README ของมันระบุว่า: "instead of looping through bars one strategy at a time, it packs thousands of configurations into NumPy arrays, accelerates the hot path with Numba and Rust, and runs them all at once, turning hours of grid search into seconds." การทดสอบชุดค่าหน้าต่าง dual-SMA จำนวน 10,000 ชุดได้ภายในไม่กี่วินาทีคือตัวอย่างคลาสสิก บางแหล่งภายนอกรายงานว่ามันเร็วกว่า Backtrader ราว ~1000× ในงานบางประเภท (ตัวเลขจากผู้ผลิต/บุคคลภายนอก ไม่ใช่ benchmark อิสระ) การกวาดพารามิเตอร์ด้านล่างนี้ — backtest 25 ครั้งข้ามชุดค่าหน้าต่าง SMA — คือสิ่งที่ vectorbt ทำให้เป็นอุตสาหกรรมได้พอดี:

ฮีตแมปการกวาดพารามิเตอร์: ผลตอบแทนรวมข้าม 25 ชุดค่าผสมของหน้าต่าง SMA แบบเร็ว/ช้า ตั้งแต่ −5% ถึง +54% การค้นหาแบบ grid นี้คือการเพิ่มประสิทธิภาพพารามิเตอร์จำนวนมากที่ vectorbt ถูกสร้างมาเพื่อรันให้เสร็จในไม่กี่วินาที

มีสองข้อควรระวังที่ควรรู้: Commons Clause จำกัดการนำไปขายต่อในเชิงพาณิชย์ (สำคัญถ้าคุณกำลังสร้างเป็นผลิตภัณฑ์) และ vectorbt PRO ที่ขัดเกลามาอย่างดีและเป็นแบบเสียเงินนั้นเป็นคนละผลิตภัณฑ์กับเวอร์ชันโอเพนซอร์ส vectorbt ทำได้แค่ backtest เท่านั้น — ไม่มี live trading

backtesting.py — ตัวโปรดแบบเบา ๆ

backtesting.py (8.5k ⭐, AGPL-3.0) คือตัวที่ควรหยิบมาใช้เมื่อคุณต้องการ backtest ที่สะอาด เร็ว และอ่านง่าย โดยไม่ต้องมีพิธีรีตองมากมายแบบเฟรมเวิร์กใหญ่ ๆ แค่นิยาม init() และ next() รัน แล้วก็ได้ออบเจกต์สถิติพร้อมกราฟแบบโต้ตอบได้ของ Bokeh license แบบ AGPL-3.0 มีความสำคัญ: มันเป็น copyleft แบบเข้มข้นพร้อมเงื่อนไขเกี่ยวกับการใช้งานผ่านเครือข่าย (network-use) ดังนั้นจึงค่อนข้างลำบากถ้าจะเอาไปใช้ภายใน SaaS แบบปิดซอร์ส มัน ทำได้แค่ backtest เท่านั้น เส้น equity curve บนหน้านี้ (ภาพปก) และสถิติด้านล่างมาจากการรัน backtesting.py จริง — กลยุทธ์ครอสโอเวอร์ SMA(20/50) ธรรมดา ๆ บนชุดข้อมูลสังเคราะห์:

สถิติผลการทำงานของ backtesting.py สำหรับกลยุทธ์ครอสโอเวอร์ SMA(20/50) ตัวอย่าง: ผลตอบแทน +1.6% เทียบกับ +46% ของการซื้อแล้วถือ (buy & hold), Sharpe 0.05, max drawdown −38%, จำนวนเทรด 4 ครั้ง ผลลัพธ์ที่ซื่อตรง — กลยุทธ์ครอสโอเวอร์แบบไร้เดียงสาให้ผลแย่กว่าการถือเฉย ๆ

สังเกตผลลัพธ์ที่ซื่อตรงนี้: กลยุทธ์ครอสโอเวอร์แบบไร้เดียงสาให้ผลตอบแทน +1.6% เทียบกับ +46% ของ buy & hold พร้อม drawdown ที่โหดถึง −38% นี่คือผลลัพธ์แรกตามปกติของ backtest จริง ๆ และก็เป็นเหตุผลพอดีว่าทำไมคุณต้องกวาดพารามิเตอร์และตรวจสอบสมมติฐานก่อนจะเชื่ออะไรทั้งสิ้น

Freqtrade — ค่าเริ่มต้นของสาย crypto

Freqtrade (51.7k ⭐, GPL-3.0) คือโปรเจกต์ที่มีดาวมากที่สุดในรายการนี้ และเป็นบอตเทรด crypto โอเพนซอร์สโดยพฤตินัย มันทำได้ทั้ง backtesting, การเทรดแบบ dry-run (กระดาษ) และการเทรดจริงบน exchange รายใหญ่ ควบคุมผ่าน Telegram หรือ web UI ในตัว และปล่อย release ทุกเดือน มันรองรับเฉพาะ crypto — ไม่มีหุ้น — แต่สำหรับ crypto แล้วมันคือมาตรฐานที่ยังถูกดูแลรักษาและมีชุมชนหนุนหลัง

Lumibot, bt, PyBroker, Jesse, LEAN, zipline-reloaded

สุสาน — เลี่ยงไปเลยสำหรับโปรเจกต์ใหม่

ตัวเหล่านี้ยังโผล่ในผลการค้นหาและบล็อกเก่า ๆ แต่อย่าเริ่มต้นที่นี่ในปี 2026:

สถาปัตยกรรมสำคัญ: trade-off เรื่องความสมจริง

ทางแยกระหว่าง vectorized กับ event-driven ไม่ใช่เรื่องเชิงทฤษฎีลอย ๆ ความเร็วของ vectorbt มาจากการตั้งสมมติฐานว่าทุกการ fill เกิดขึ้นที่ราคาแท่งถัดไปโดยไม่มี slippage สำหรับการสแกน momentum ข้าม 500 สินทรัพย์นั้นไม่มีปัญหา แต่สำหรับกลยุทธ์ที่ความได้เปรียบอยู่ในการ execute ภายในแท่ง — การวาง stop, partial fill, ตำแหน่งในคิว — backtest แบบ vectorized จะโกหกคุณอย่างเงียบ ๆ และคุณจำเป็นต้องใช้เอนจินแบบ event-driven (NautilusTrader, Backtrader) หรือ dry-run จริง (Freqtrade, Lumibot) เพื่อให้ได้ตัวเลขที่ซื่อตรง เวิร์กโฟลว์แบบมืออาชีพใช้ทั้งสองอย่าง: ใช้ vectorbt สำรวจพื้นที่พารามิเตอร์ แล้วใช้เอนจินแบบ event-driven ตรวจสอบยืนยันตัวที่รอด

การอนุญาตใช้งาน (Licensing) — อ่านสิ่งนี้ก่อนสร้างผลิตภัณฑ์

ไลบรารี backtesting มี license หนักหน่วงผิดปกติ และหลายตัวเป็นแบบ copyleft:

License ไลบรารี สิ่งที่ต้องรู้
AGPL-3.0 backtesting.py copyleft เข้มข้นที่สุด; การใช้งานผ่านเครือข่าย/SaaS อาจกระตุ้นให้ต้องเปิดเผยซอร์สโค้ด
Apache-2.0 + Commons Clause vectorbt (เวอร์ชัน OSS) อนุญาตกว้าง ยกเว้น ห้ามนำไปขายเป็นผลิตภัณฑ์
GPL-3.0 Backtrader, Freqtrade, Lumibot copyleft; การแจกจ่ายงานต่อยอดหมายถึงต้องเปิดซอร์สด้วย
LGPL-3.0 NautilusTrader copyleft อ่อนกว่า; การลิงก์โดยทั่วไปไม่มีปัญหา
MIT bt, Jesse, QSTrader, fastquant อนุญาตกว้าง — ทำได้แทบทุกอย่าง
Apache-2.0 LEAN, zipline-reloaded, finmarketpy อนุญาตกว้าง รวมการให้สิทธิ์สิทธิบัตร (patent grant) มาด้วย

ถ้าคุณกำลังสร้างอะไรเชิงพาณิชย์และปิดซอร์ส เครื่องมือที่ใช้ MIT/Apache คือตัวเลือกที่ไร้แรงเสียดทาน ส่วน AGPL และ Commons Clause ต้องให้ทนายอ่านดูก่อน

เปรียบเทียบแบบรวบรัด

เครื่องมือ ⭐ ดาว สถาปัตยกรรม License การดูแลรักษา Live trading เหมาะกับ
NautilusTrader 24.1k Event-driven (Rust) LGPL-3.0 🟢 ใช้งานอยู่ ได้ Production, ความสมจริงระดับ tick/order-book
vectorbt 8.0k Vectorized Apache+CC 🟢 ใช้งานอยู่ ไม่ได้ ค้นหาพารามิเตอร์จำนวนมาก
backtesting.py 8.5k Event-driven AGPL-3.0 🟢 ใช้งานอยู่ ไม่ได้ backtest เดี่ยวที่รวดเร็วและสะอาด
Freqtrade 51.7k Event-driven GPL-3.0 🟢 ใช้งานอยู่ ได้ (crypto) บอต crypto ที่ยังถูกดูแลรักษา
Backtrader 22.1k Event-driven GPL-3.0 🟡 หลับใหล ได้ โปรเจกต์เก่า (ระวังความค้างเก่า)
Lumibot 1.7k Event-driven GPL-3.0 🟢 ใช้งานอยู่ ได้ หลายสินทรัพย์, backtest/live รวมกัน
LEAN 20k Event-driven Apache-2.0 🟢 ใช้งานอยู่ ได้ แพลตฟอร์มหลายสินทรัพย์รุ่นหนัก
bt 2.9k Vectorized/weights MIT 🟢 ใช้งานอยู่ ไม่ได้ กลยุทธ์จัดสรรพอร์ต
PyBroker 3.4k Event-driven OSS 🟢 ใช้งานอยู่ ไม่ได้ กลยุทธ์ ML + walk-forward
zipline-reloaded 1.8k Event-driven Apache-2.0 🟢 ใช้งานอยู่ ไม่ได้ วิชาการ, หนังสือ ML4T
Zipline (ตัวเดิม) 19.9k Event-driven Apache-2.0 🔴 ถูกทิ้งร้าง ไม่มีอะไร — ใช้ reloaded แทน
PyAlgoTrade 4.7k Event-driven 🔴 ถูก archive ไม่มีอะไรใหม่

จำนวนดาวและสถานะเป็นภาพ ณ วันที่ 2026-06-22 และจะเปลี่ยนแปลงไป การดูแลรักษาเป็นมิติที่ผันผวนที่สุด ดังนั้นควรเช็กกิจกรรมการ commit อีกครั้งก่อนตัดสินใจผูกมัด

วิธีเลือกแบบจบในลมหายใจเดียว

กฎเดียวที่อยู่รอดทุกสภาวะตลาด: เช็กวันที่ commit ล่าสุดก่อนเช็กจำนวนดาว ไลบรารี 22k ดาวที่ไม่ได้ปล่อย release มาตั้งแต่ปี 2023 คือเส้นทางสู่ production ที่ช้ากว่าไลบรารี 8k ดาวที่เพิ่งปล่อย release เมื่อสัปดาห์ที่แล้ว


ระเบียบวิธี: ตัวชี้วัดจาก GitHub ถูกดึงมาแบบเรียลไทม์จาก GitHub API เมื่อวันที่ 2026-06-22 ส่วนข้อมูลเรื่องสถาปัตยกรรม การดูแลรักษา license และ live-trading ได้รับการตรวจสอบไขว้กับ repo ของโปรเจกต์และเอกสารทางการ และผ่านการตรวจสอบแบบ adversarial โดยอ้างอิงจากแคตตาล็อกที่คัดสรรมา (PyTrade.org, awesome-systematic-trading) และรายการทางเลือกของ kernc ส่วน equity curve, สถิติ และฮีตแมปพารามิเตอร์เป็นผลลัพธ์จริงจากการรัน backtesting.py บนชุดข้อมูลราคาสังเคราะห์ที่ทำซ้ำได้ — เพื่อเป็นภาพประกอบ ไม่ใช่คำแนะนำกลยุทธ์ ตัวเลขผลการทำงานที่ระบุว่ามาจากผู้ผลิต (ความเร็วของ vectorbt, ความละเอียดระดับนาโนวินาทีของ NautilusTrader) เป็นข้อมูลที่รายงานเอง ไม่ใช่ benchmark อิสระ