Backtesting vs Paper Trading vs Live Trading

Published date: September 22, 2026
Last updated: October 3, 2026

Backtesting tests trading rules against historical data. Paper trading runs them on incoming market data with simulated money and fills. Live trading sends real orders to a broker and puts real capital at risk. Each stage answers a different question, so passing one does not make the others unnecessary.

For a Python trading bot, the useful progression is to test the rules, test the operating system around those rules, and then evaluate actual execution. A good-looking equity curve answers only part of that problem.

THE WRITTEN GUIDE

What is the difference?

Question Backtesting Paper trading Live trading
Which data does it use? Historical observations Incoming data, which may be real-time or delayed Incoming data, subject to your subscriptions
Is the capital real? No No Yes
How are orders filled? By a historical simulation model By a paper trading simulator Through the broker and execution venues
What can you investigate? Rule behavior across historical conditions Signals, scheduling, connectivity and order handling as events arrive Actual fills, fees, constraints and operational behavior
What remains uncertain? Future behavior and live execution Actual execution and the effect of real capital Future profitability and performance at a different scale

Paper trading is sometimes called forward testing. The term can also describe other tests that move forward through time, so check whether someone means a live-data simulation or a historical walk-forward experiment.

What backtesting can tell you

A backtest applies explicit trading rules to a historical dataset. It lets you inspect when a bot would have generated signals, how a simulated portfolio would have changed, and which assumptions drive those results.

Before focusing on the return, check what the simulation knew at each decision. A strategy that calculates a signal from a completed daily candle cannot also assume it traded earlier in that candle using that information. That is a timing error, even if the code runs successfully.

Other questions matter too:

  • Did you select the rules after trying many alternatives on the same data?
  • Does the dataset represent the instruments available at the time, including those that later disappeared where relevant?
  • Are corporate actions, fees, spreads and slippage handled consistently?
  • Have you examined a reserved period without repeatedly tuning the strategy to it?

These checks help expose misleading results. They cannot establish that a strategy will keep working. QuantStart’s guide to backtesting biases explains why optimization, look-ahead and survivorship bias deserve separate attention.

Keep a record of every material rule change. If you revise the strategy after seeing a reserved period, that period has become part of your research process. Describe it honestly when reporting the results.

What paper trading adds

Paper trading introduces the passage of real time. Your bot has to receive data, wake up when expected, create orders, process responses and keep track of its position as events arrive.

Use it to investigate operational questions: Does the bot act once per signal? Does it cope with a rejected order? After a restart, does it reconcile its records with the account before creating another order? Are alerts useful enough to explain a problem?

It still uses simulated execution. Different simulators make different assumptions, and the data feed may differ from the one you intend to use later. Confirm the feed, entitlement, delay, trading session and brokerage model before comparing results.

QuantConnect paper trading and broker paper accounts are different

QuantConnect Paper Trading runs an algorithm with incoming data and fictional capital. Its own simulator handles the fills. With the default brokerage model, its documentation specifies no slippage and immediate, complete market-order fills. Other model choices can change that behavior. See QuantConnect’s paper trading documentation.

A broker’s paper account is a separate simulation. Interactive Brokers explicitly warns that order execution can differ between its paper and live environments. See its paper trading API documentation.

Alpaca lists several things its paper environment does not reproduce, including market impact, latency-related slippage and queue position for non-marketable limit orders. Those are Alpaca-specific limitations, not a universal specification for every simulator. See Alpaca’s paper trading documentation.

Connecting software to a paper account therefore does not make its fill assumptions equivalent to live execution. See how this applies to Claude and Alpaca MCP.

What changes in live trading?

In live trading, the broker reports actual order outcomes. An accepted order is not necessarily a filled order. Your bot needs to handle partial fills, rejections and cancellations, and distinguish the position it requested from the position it actually holds.

Backtest and live results can also differ because data arrives at different times, historical data is revised, or fees and fills differ from the model. QuantConnect documents these issues in its backtest-to-live reconciliation guide. A new 2026 study of AI trading bots shows how those gaps changed across backtests, exchange paper trading and real-money crypto execution.

Compare individual decisions before comparing the final equity curves. If the two systems generated different signals, start with the inputs and timing. If the signals match but the positions differ, inspect order handling. If quantities match but profit differs, inspect fill prices, fees and accounting.

A small execution difference can consume a small expected profit

Suppose a hypothetical bot buys 100 shares at $100.00 and sells them at $100.20. That is a $20 gross profit before costs.

Now suppose the entry fills at $100.08 and the exit fills at $100.12. The gross profit is $4. If the commission is an assumed $1 on each side, the net profit is $2.

Item Calculation Amount
Initial gross expectation 100 × ($100.20 − $100.00) $20
Gross result with the illustrative fills 100 × ($100.12 − $100.08) $4
Assumed commissions $1 + $1 $2
Illustrative net result $4 − $2 $2

This is arithmetic using invented prices to explain execution costs. It is not a backtest, a broker fee quote or a prediction. It also omits any other applicable costs. The lesson is to assess costs relative to the profit per trade you are trying to capture.

A practical testing sequence for a Python bot

1. Freeze the rules and the environment

Write down the entry, exit, sizing and risk rules. Save the code version, parameters, data source, session, time zone and brokerage model. Record what should happen when required data is missing.

This gives you a defined system to evaluate. Otherwise, a change in the results may simply reflect a change in what you tested.

2. Audit the historical simulation

Check signal timing, data handling, costs and the separation between development and evaluation periods. Inspect a sample of trades manually, including losses. Examine sensitivity to less favorable execution assumptions instead of reporting only the most attractive configuration.

Separate a software check from a performance finding. Correct code can implement a strategy with no useful edge.

3. Test the paper deployment as a working system

Observe ordinary sessions and deliberately test recoverable failures in the paper environment. Check the response to disconnects, stale data, rejected orders and restarts.

For a timeout, inspect the broker’s order state before retrying. A missing response does not necessarily mean the first order was never received. Record discrepancies and fix their causes before treating the deployment as ready for another stage.

4. Define the conditions for any live evaluation

Document permitted instruments, exposure limits, stop conditions, monitoring and who can intervene. Establish how to reconcile open orders and positions after a restart. Confirm the account and endpoint before enabling order submission.

There is no universal number of paper trading days that proves readiness. A low-frequency strategy may produce too few observations in a month, while a busy strategy can accumulate many highly correlated trades. Use sufficient observations to investigate the relevant behavior, and keep unresolved execution issues visible.

Any decision to use real capital needs its own risk assessment. Paper profits alone are not a sufficient reason.

What should the bot log?

Keep a compact record that lets you reconstruct a decision:

Record Why it matters
Code version and parameter set Identifies exactly what ran
Input timestamp, receipt time and time zone Exposes stale data and timing mismatches
Signal, intended quantity and decision reason Explains the intended action
Client order identifier and broker order identifier Helps reconcile retries and responses
Order status, filled quantity and average fill price Distinguishes requests from completed execution
Fees and resulting account position Supports profit and position reconciliation
Errors, restarts and interventions Explains gaps and manual changes

Keep credentials out of logs. A useful log explains the bot’s behavior without exposing account secrets.

Common questions

Is paper trading more accurate than backtesting?

It can reveal operational behavior that a historical test did not exercise. It does not automatically produce more realistic fills. Accuracy depends on the data and execution assumptions in each environment.

Can a profitable backtest fail in paper trading?

Yes. Possible causes include overfitting, a change in market conditions, different inputs, timing errors or different simulation assumptions. Investigate the specific discrepancy before changing the strategy.

Do I need a separate bot for each stage?

Where the platform supports it, sharing strategy logic across stages reduces the amount of behavior you must reconcile. Keep environment-specific settings explicit and verify each deployment. Reusing the same code does not guarantee identical data, fills or results.

Educational content about trading-system development. No test or example here establishes future profitability.

TAKE THE NEXT STEP

Build. Backtest. Understand what changes live.

Learn the process of developing, testing and deploying your own trading bots with Python and QuantConnect, step by step.

KEEP BUILDING

Keep building

To see how trading rules become a working project, explore the Insights page for more algorithmic trading guides, trading bot research, and practical Python insights.

For a practical project example, see the crude oil volume-spike trading bot walkthrough.