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

ข้อสรุปที่ฟังแล้วไม่ค่อยสบายใจ: สองชื่อที่มีดาวมากที่สุดและถูกเขียนถึงในบล็อกมากที่สุด แท้จริงแล้วกลายเป็นของเก่าตกยุคไปแล้ว
- Backtrader (22.1k ⭐) คือชื่อดังที่ทุกคนแนะนำกัน — แต่ commit ล่าสุดบน default branch ของมันคือ เมษายน 2023 และไม่เคยมีการเผยแพร่ release บน GitHub เลย สักครั้ง มันไม่ได้ถูกทิ้งร้างเสียทีเดียว (issue ต่าง ๆ ยังได้รับความสนใจเป็นครั้งคราว) แต่มันอยู่ในสภาพหลับใหล แคตตาล็อกที่คัดสรรมาอย่างดีต่างก็ติดป้ายว่า
INACTIVE - Zipline (19.9k ⭐) เอนจินเก่าของ Quantopian ถูกทิ้งร้างไปในปี 2020 ตอนที่ Quantopian ปิดตัวลง รายการทางเลือกของ kernc เองก็จัดมันไว้ในหมวด "Obsolete / Unmaintained" ส่วนตัวที่สืบทอดและยังถูกดูแลอยู่นั้นเป็น fork แยกต่างหาก ชื่อ
zipline-reloaded(1.8k ⭐) โดย Stefan Jansen - PyAlgoTrade (4.7k ⭐) ถูก archive ไปแล้ว — กลายเป็น read-only อย่างเป็นทางการ ส่วน QSTrader (3.4k ⭐) และเฟรมเวิร์ก crypto รุ่นเก่าอย่าง
blanklyและqtpylibก็ถูกติดป้ายว่าไม่มีการดูแลรักษาแล้ว
ในขณะเดียวกัน โปรเจกต์ที่ปล่อย 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
ทางแยกอีกจุดที่ตัดสินทุกอย่างก็คือ วิธีที่ เอนจินรันกลยุทธ์ของคุณ
- เอนจินแบบ event-driven จะวนลูป ทีละแท่ง (bar by bar) โดยเรียกกลยุทธ์ของคุณในทุกแท่งเทียน (candle) ใหม่ มันจำลองการ fill ออเดอร์ slippage และความเสี่ยงภายในแท่ง (intrabar) ได้อย่างสมจริง และที่สำคัญที่สุดคือ โค้ดชุดเดียวกันสามารถนำไปรันจริงได้ Backtrader, NautilusTrader, backtesting.py, Freqtrade, Lumibot และ Zipline เป็นแบบ event-driven
- เอนจินแบบ vectorized (ตัวเด่นคือ vectorbt) จะข้ามการวนลูปไปเลย: มันอัดค่าคอนฟิกกลยุทธ์นับพันชุดลงในอาร์เรย์ของ NumPy แล้วคำนวณทั้งหมดพร้อมกันในคราวเดียว วิธีนี้เร็วอย่างน่าตกใจสำหรับการค้นหาพารามิเตอร์ แต่มันตั้งสมมติฐานว่า fill เกิดที่แท่งถัดไป และมองข้าม slippage ภายในแท่ง การ fill บางส่วน (partial fill) และการตรวจสอบความเสี่ยงกลางแท่ง
ไม่มีตัวไหนชนะขาด คุณใช้ตัวที่เร็วเพื่อทำวิจัย และใช้ตัวที่สมจริงเพื่อตรวจสอบยืนยัน รายละเอียดเรื่อง 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 ทำให้เป็นอุตสาหกรรมได้พอดี:

มีสองข้อควรระวังที่ควรรู้: 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) ธรรมดา ๆ บนชุดข้อมูลสังเคราะห์:

สังเกตผลลัพธ์ที่ซื่อตรงนี้: กลยุทธ์ครอสโอเวอร์แบบไร้เดียงสาให้ผลตอบแทน +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
- Lumibot (1.7k ⭐, GPL-3.0) — รองรับหลายสินทรัพย์ (หุ้น, ออปชัน, crypto, ฟิวเจอร์ส, ฟอเร็กซ์) ด้วยโค้ดชุดเดียวกันสำหรับ backtest, paper และ live ข้าม Alpaca, Interactive Brokers, Tradier, Schwab, Tradovate และ CCXT การเริ่มต้นเชื่อมต่อโบรกเกอร์เป็นมิตรกับมือใหม่ แต่ระวังเรื่องความไม่ตรงกันระหว่าง backtest กับ live ที่มีบันทึกไว้ (timezone, จังหวะการเข้าออเดอร์, margin)
- bt (2.9k ⭐, MIT) — เฟรมเวิร์กแบบยืดหยุ่นในรูปต้นไม้ของอัลกอ (tree-of-algos) ที่มุ่งเน้น การจัดสรรพอร์ตและกลยุทธ์อิงน้ำหนัก (weight-based) มากกว่าการ execute แบบราย tick license แบบอนุญาตกว้าง ยังถูกดูแลรักษาอย่างต่อเนื่อง ทำได้แค่ backtest
- PyBroker (3.4k ⭐) — สร้างมาเพื่อกลยุทธ์แบบ machine-learning พร้อมการเร่งความเร็วด้วย Numba และ walk-forward validation มาให้ในตัว ทำได้แค่ backtest
- Jesse (8.1k ⭐, MIT) — เฟรมเวิร์ก crypto ที่มี API กลยุทธ์สะอาดตาและรองรับ live trading license แบบอนุญาตกว้าง
- LEAN / QuantConnect (20k ⭐, Apache-2.0) — เอนจินรุ่นหนักหลายสินทรัพย์ที่อยู่เบื้องหลังคลาวด์ของ QuantConnect แกนหลักเป็น C#/.NET พร้อม Python API ทำได้ทั้ง backtest และ live ทรงพลังแต่ก็เป็นการลงทุนแรงกายแรงใจที่ใหญ่ที่สุดในรายการนี้
- zipline-reloaded (1.8k ⭐, Apache-2.0) — fork ของ Zipline จาก Quantopian ที่ยังถูกดูแลรักษาอย่างต่อเนื่อง เป็นที่นิยมในแวดวงวิชาการและในหนังสือ Machine Learning for Trading ทำได้แค่ backtest ให้ใช้ตัวนี้ ไม่ใช่
quantopian/ziplineตัวเดิม
สุสาน — เลี่ยงไปเลยสำหรับโปรเจกต์ใหม่
ตัวเหล่านี้ยังโผล่ในผลการค้นหาและบล็อกเก่า ๆ แต่อย่าเริ่มต้นที่นี่ในปี 2026:
- Zipline (ตัวเดิม,
quantopian/zipline) — ถูกทิ้งร้างปี 2020 ให้ใช้zipline-reloaded - PyAlgoTrade — repo ถูก archive (read-only)
- QSTrader — ถูกติดป้ายว่าไม่มีการดูแลรักษา push ล่าสุดช่วงกลางปี 2024
- blankly — แพลตฟอร์มปิดตัวลง; qtpylib — ถูก archive มาตั้งแต่ปี 2021
- fastquant (1.8k ⭐) — เป็น wrapper บาง ๆ ที่มุ่งทำ backtest แบบบรรทัดเดียว แต่ค้างไม่อัปเดตมาตั้งแต่ปี 2023
สถาปัตยกรรมสำคัญ: 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 อีกครั้งก่อนตัดสินใจผูกมัด
วิธีเลือกแบบจบในลมหายใจเดียว
- วิจัยกลยุทธ์ข้ามพารามิเตอร์นับพันชุด → vectorbt
- backtest เดี่ยวที่รวดเร็วและสะอาดใน notebook → backtesting.py (ระวัง AGPL)
- Production สาย crypto+หุ้น ที่ต้องการความตรงกันระหว่างวิจัย→live และความสมจริงระดับ tick → NautilusTrader
- บอต crypto ที่ยังถูกดูแลรักษา พร้อม backtest/dry-run/live → Freqtrade
- เทรดอัลกอแบบรายย่อยหลายสินทรัพย์ เป็นมิตรกับมือใหม่ → Lumibot
- กลยุทธ์จัดสรรพอร์ต / อิงน้ำหนัก → bt
- กลยุทธ์ machine-learning พร้อม walk-forward → PyBroker
- งานวิชาการ / คอร์ส Machine-Learning-for-Trading → zipline-reloaded
- คุณรับช่วงโค้ดเบส Backtrader มา → ก็โอเค แต่ต้องรู้ว่ามันหลับใหลอยู่ โปรเจกต์ใหม่ควรมองหาตัวอื่น
กฎเดียวที่อยู่รอดทุกสภาวะตลาด: เช็กวันที่ 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 อิสระ