# python.financial > Evidence-based reviews, comparisons, practical guides, and reproducible benchmarks for backtesting platforms, systematic trading, and quantitative research. python.financial publishes reviews, guides, comparisons, concepts, tools, and benchmarks for quantitative finance. ## Start here - [Homepage](https://python.financial/): audience, scope, and main entry points - [About and editorial process](https://python.financial/about/): review method, benchmark standard, and corrections - [Privacy policy](https://python.financial/privacy/): data processing, optional cookies, consent controls, and contact information - [Reviews](https://python.financial/reviews/): evidence reviews of new models and ideas in quantitative finance - [Guides](https://python.financial/guides/): a five-step path from framework selection to guarded operation - [Comparisons](https://python.financial/comparisons/): 10 decisions using current evidence and equal criteria - [Concepts](https://python.financial/concepts/): 26 definitions, formulas, examples, assumptions, and controls - [Tools](https://python.financial/tools/): 16 frameworks and libraries with code or configuration examples - [Benchmarks](https://python.financial/benchmarks/): measured bar simulation and kernel results, downloadable evidence, and correctness-gated tracks without an overall ranking - [Single-asset bar benchmark](https://python.financial/benchmarks/bar-simulation/): nine frameworks measured at 1K, 10K, and 100K bars after fill and equity parity checks - [Parameter-grid benchmark](https://python.financial/benchmarks/parameter-sweeps/): five APIs measured across 4, 16, and 64 verified settings with the API batching boundary stated explicitly - [Portfolio-rebalancing benchmark](https://python.financial/benchmarks/portfolio-rebalancing/): seven frameworks measured across 10, 100, and 500 assets with cash, equity, and holdings checked at every rebalance - [Event-processing benchmark](https://python.financial/benchmarks/event-processing/): five frameworks measured through 102,000 ordered bar, fill, and position-state events with full transition checks - [Crypto-candle benchmark](https://python.financial/benchmarks/crypto-candles/): Blankly, Freqtrade, and Jesse measured through 50K candles with fill and balance checks - [RL-environment benchmark](https://python.financial/benchmarks/rl-environments/): 1,000 FinRL steps measured across 1, 10, and 100 assets with complete state-vector parity - [Numba and Rust kernel benchmark](https://python.financial/benchmarks/native-kernels/): median warm runtime by input size with environment details, exact values, and release downloads ## Reviews - [Jev for quantitative trading](https://python.financial/reviews/jev-trading/): What Jev can do, what early trading experiments have found, and whether its probability estimates can help with trading decisions. ## Guides - [Python backtesting frameworks](https://python.financial/guides/python-backtesting-frameworks/): Compare Python backtesting tools by research style, market scope, live-trading needs, and license. - [How to backtest a trading strategy in Python](https://python.financial/guides/how-to-backtest-a-trading-strategy-in-python/): A complete Python example that shows when signals happen, how trades fill, what they cost, and how to check the result. - [How backtesting, paper trading, and live trading differ](https://python.financial/guides/backtesting-vs-paper-trading-vs-live-trading/): Learn what backtests, paper trading, and small live tests can tell you, and what to check before moving to the next stage. - [How to avoid overfitting a trading strategy](https://python.financial/guides/how-to-avoid-overfitting-a-trading-strategy/): Reduce overfitting by deciding what you will test, recording every attempt, testing the full selection process, and protecting one final test period. - [How to build a Python crypto trading bot safely](https://python.financial/guides/how-to-build-a-python-crypto-trading-bot/): Build a simple Freqtrade strategy, test it with fake money, protect your API keys, and prepare the bot to recover from failures. ## Comparisons - [VectorBT PRO vs VectorBT](https://python.financial/comparisons/vectorbt-vs-vectorbt-pro/): VectorBT provides fast labeled strategy and portfolio tests. VectorBT PRO adds more validation methods, resumable large runs, live updates, standalone Rust, and more ways to search its documentation. - [Vectorized vs event-driven backtesting](https://python.financial/comparisons/vectorized-vs-event-driven-backtesting/): Vectorized backtests process many values together. Event-driven backtests process one event after another. Many modern tools combine both. - [VectorBT PRO vs NautilusTrader](https://python.financial/comparisons/vectorbt-pro-vs-nautilustrader/): VectorBT PRO covers broad, fast research. NautilusTrader covers detailed market replay and live exchange connections. - [NautilusTrader vs LEAN](https://python.financial/comparisons/nautilustrader-vs-lean/): NautilusTrader focuses on detailed market events and orders. LEAN covers more asset classes and can be paired with QuantConnect's cloud platform. - [VectorBT PRO vs Backtesting.py](https://python.financial/comparisons/vectorbt-pro-vs-backtesting-py/): VectorBT PRO handles broad and detailed strategy research. Backtesting.py is a small, approachable backtester for one instrument at a time. - [VectorBT PRO vs LEAN and QuantConnect](https://python.financial/comparisons/vectorbt-pro-vs-quantconnect-lean/): VectorBT PRO supports broad strategy research in Python and Rust. LEAN is a trading engine, while QuantConnect adds cloud data and live tools. - [VectorBT vs Backtrader](https://python.financial/comparisons/vectorbt-vs-backtrader/): VectorBT quickly compares many strategy settings. Backtrader expresses bar-by-bar strategy and broker rules clearly, but is no longer actively maintained. - [Freqtrade vs Jesse](https://python.financial/comparisons/freqtrade-vs-jesse/): Freqtrade includes an open path from backtesting to live trading. Jesse has a focused research API and adds live trading through a paid plugin. - [PyBroker vs FinRL](https://python.financial/comparisons/pybroker-vs-finrl/): PyBroker tests prediction models on market bars. FinRL is for training reinforcement-learning agents in market environments. - [Zipline Reloaded vs LEAN](https://python.financial/comparisons/zipline-reloaded-vs-quantconnect-lean/): Zipline Reloaded is a focused local tool for equity research. LEAN covers more markets and can use QuantConnect's cloud and live-trading services. ## Concepts - [Look-ahead bias](https://python.financial/concepts/look-ahead-bias/): Look-ahead bias happens when a backtest uses information or a fill price that was not available when the trade decision was made. - [Survivorship bias](https://python.financial/concepts/survivorship-bias/): Survivorship bias happens when failed or delisted assets disappear from old data, leaving only the names that survived. - [Walk-forward optimization](https://python.financial/concepts/walk-forward-optimization/): Walk-forward optimization chooses settings on past data, freezes them for the next period, and repeats through time. - [Purged cross-validation](https://python.financial/concepts/purged-cross-validation/): Purged cross-validation removes training examples whose time spans overlap the test, reducing one important source of information leaks. - [Combinatorial purged cross-validation (CPCV)](https://python.financial/concepts/combinatorial-purged-cross-validation/): CPCV builds several train and test paths while removing overlapping labels that could leak information. - [Trading costs and slippage](https://python.financial/concepts/transaction-costs-and-slippage/): Real trading pays fees and often gets a worse price than expected. A useful backtest includes those costs and tests how sensitive the result is to them. - [Parameter robustness](https://python.financial/concepts/parameter-robustness/): A robust strategy should not collapse when you make a small, reasonable change to one setting or trading assumption. - [Multiple-testing bias](https://python.financial/concepts/multiple-testing-bias/): When you test many ideas, one can look impressive by luck. Judge the winner against every test that helped produce it. - [Vectorized backtesting](https://python.financial/concepts/vectorized-backtesting/): Vectorized backtesting uses arrays to test many assets or settings at once. It can be very fast, but it still needs clear timing and trading rules. - [Event-driven backtesting](https://python.financial/concepts/event-driven-simulation/): An event-driven backtest handles market data, timers, orders, fills, and account changes one event at a time. - [Sharpe ratio](https://python.financial/concepts/sharpe-ratio/): The Sharpe ratio compares average return above a benchmark with how much that return varies. It is useful, but easy to compare incorrectly. - [Sortino ratio](https://python.financial/concepts/sortino-ratio/): The Sortino ratio compares return above a chosen target with the size of returns that fall below that target. - [Maximum drawdown](https://python.financial/concepts/maximum-drawdown/): Maximum drawdown is the largest fall from an earlier account peak. It shows how deep the loss became, not how bad a future loss could be. - [Alpha and beta](https://python.financial/concepts/alpha-and-beta/): Beta shows how much a strategy tends to move with a benchmark. Alpha is the return the model does not explain, but it is not proof of skill. - [In-sample vs out-of-sample testing](https://python.financial/concepts/in-sample-vs-out-of-sample-testing/): In-sample data helps you build the strategy. Out-of-sample data stays hidden until the strategy and testing rules are fixed. - [Order types in backtesting](https://python.financial/concepts/order-types-in-backtesting/): Market, limit, stop, and stop-limit orders have different trigger and fill rules. No order type guarantees a fill. - [MAE and MFE](https://python.financial/concepts/maximum-adverse-excursion/): MAE shows the worst price move against an open trade. MFE shows the best move in its favor. - [Point-in-time data](https://python.financial/concepts/point-in-time-data/): Point-in-time data stores what was actually known on each date, before later corrections, index changes, or company events. - [Data snooping bias](https://python.financial/concepts/data-snooping-bias/): Data snooping happens when the same history helps choose a strategy and is then presented as if it were a fresh test. - [The Python GIL](https://python.financial/concepts/python-gil-and-trading/): The GIL limits pure Python code to one active thread, but NumPy, Numba, Rust, separate processes, and waiting for data behave differently. - [Numba](https://python.financial/concepts/numba-jit-compilation/): Numba turns numerical Python functions into fast machine code, which is especially useful for loops and simulations that depend on earlier steps. - [Kelly criterion](https://python.financial/concepts/kelly-criterion/): The Kelly criterion suggests how much to risk for long-term growth, but small errors in the inputs can make its answer dangerously large. - [Volatility targeting](https://python.financial/concepts/volatility-targeting/): Volatility targeting invests less after risk rises and more after it falls. The target is a goal, not a guarantee. - [Overfitting in backtesting](https://python.financial/concepts/overfitting-in-backtesting/): Overfitting happens when a strategy learns accidental patterns in old data and then performs much worse on new data. - [Deflated Sharpe ratio](https://python.financial/concepts/deflated-sharpe-ratio/): The deflated Sharpe ratio asks whether the best result from a large search is better than luck might produce. - [Probability of backtest overfitting](https://python.financial/concepts/probability-of-backtest-overfitting/): PBO estimates how often the best strategy in one part of the data becomes worse than average in another part. ## Tools - [VectorBT](https://python.financial/tools/vectorbt/): Test many parameter combinations at once, run fast portfolio simulations, and inspect orders, trades, drawdowns, and charts. - [VectorBT PRO](https://python.financial/tools/vectorbt-pro/): Research strategies, run detailed portfolio tests, validate ideas through time, continue saved work, and use the same calculations from Python or Rust. - [NautilusTrader](https://python.financial/tools/nautilustrader/): A detailed backtesting and live-trading engine with market data, orders, fills, delays, risk rules, and exchange adapters. - [Jesse](https://python.financial/tools/jesse/): A route-based framework for crypto strategy research, parameter search, and optional live trading. - [Freqtrade](https://python.financial/tools/freqtrade/): A complete crypto bot framework with candle backtesting, parameter search, dry runs, live trading, and optional machine learning. - [QuantConnect LEAN](https://python.financial/tools/quantconnect-lean/): A multi-asset trading engine available on your computer or through QuantConnect's managed cloud platform. - [Backtesting.py](https://python.financial/tools/backtesting-py/): Write a short strategy class, test it on one instrument, and inspect its trades, statistics, and charts. - [PyBroker](https://python.financial/tools/pybroker/): A backtesting framework for rule-based and machine-learning strategies that need training and testing through time. - [Lumibot](https://python.financial/tools/lumibot/): A Python framework for backtesting, paper trading, and live broker trading across several asset classes. - [FinRL](https://python.financial/tools/finrl/): A research and teaching framework for training reinforcement-learning agents in market environments. - [pysystemtrade](https://python.financial/tools/pysystemtrade/): A futures framework with a defined approach to forecasts, position sizing, portfolio risk, contract rolls, and live trading. - [Zipline Reloaded](https://python.financial/tools/zipline-reloaded/): A maintained Zipline fork for equity and futures backtests, market calendars, dynamic universes, and cross-sectional factors. - [Backtrader](https://python.financial/tools/backtrader/): A flexible bar-by-bar backtester with several data feeds and detailed broker controls, but no recent upstream work. - [Blankly](https://python.financial/tools/blankly/): A backtest-to-live package with an appealing API, but old releases and exchange connections that need careful testing. - [bt](https://python.financial/tools/bt/): A portfolio backtester built from reusable steps for selecting, weighting, and rebalancing assets. - [RQAlpha](https://python.financial/tools/rqalpha/): An event-driven backtester that understands China-market calendars, instruments, data, and trading rules.