AlgoPro UniversityCourse home
Part 10 · Lesson

The paper→live checklist

The final gates before real money: paper matches backtest, costs are realistic, the kill switch is tested, and you start sized tiny — then scale only as reality confirms the edge.

You have an idea, a backtest that survived robustness testing, and a paper-trading run that has been quietly ticking away. Now comes the single most dangerous moment in this entire course: turning it on with real money. This lesson is a set of hard gates. If your strategy cannot pass all of them, it does not go live. No exceptions, no "just a small size to see what happens".

Gate 1 — Paper matches the backtest

Your backtest is a story about the past. Your paper run is that same strategy meeting *live data, live latency, and a real broker API* — but with fake money. If the two disagree, something is wrong and you need to know why before a cent is at risk.

Gate 2 — Costs are realistic

Re-run your backtest with costs cranked *higher* than you think they are: wider spread, more slippage, full commission. This is your stress case. If the edge only survives at optimistic costs, it is not an edge — it is a rounding error waiting to be eaten by your broker.

pythonA brutal-honesty cost check before going live
class="c"># Compare backtest edge against a pessimistic cost model.
edge_per_trade_bps = class="n">8.0     class="c"># gross edge your backtest claims, in bps

class="c"># Pessimistic (live-realistic) round-trip costs
spread_bps     = class="n">3.0
slippage_bps   = class="n">2.0
commission_bps = class="n">2.0
total_cost_bps = spread_bps + slippage_bps + commission_bps  class="c"># class="n">7 bps

net_edge_bps = edge_per_trade_bps - total_cost_bps
print(fclass="s">"Net edge after realistic costs: {net_edge_bps:.1f} bps/trade")

if net_edge_bps <= class="n">0:
    raise SystemExit(class="s">"STOP. No edge survives realistic costs. Do not go live.")
elif net_edge_bps < class="n">2.0:
    print(class="s">"WARNING: razor-thin margin. One bad fill assumption sinks it.")
else:
    print(class="s">"OK: edge has a real buffer above costs.")

Gate 3 — The kill switch is tested

Before you risk money you must prove you can stop *instantly and cleanly*. Not "close the terminal" — a tested procedure that flattens every position and halts new orders, even if your laptop is on fire. We build the code for this in Lesson 3. The gate here is simple: you have run it, on the paper account, and watched it work. An untested kill switch is a decoration.

Gate 4 — Start sized tiny

Your first live size should be so small that a total loss is emotionally irrelevant — the price of a coffee, not a car. The point of live-small is not to make money. It is to surface the bugs that only appear with real money: partial fills, rejected orders, margin quirks, funding fees, API rate limits. You are paying tuition to reality, and you want the tuition bill to be tiny.

matches?confirmsconfirmsconfirmsPaperLive 1% sizeLive 10%Live 50%Full size
The go-live ramp. Each stage is a gate; you only advance when live results match expectations. Any surprise sends you back a stage — never forward faster.

Gate 5 — A written scale-up plan

Decide the ramp *before* you feel the emotions of a running P&L. Write it down. A sane default:

  1. Weeks 1–2 — 1% of target size. Goal: zero operational bugs. You are not judging profit, only whether the machine runs clean.
  2. Weeks 3–6 — 10%. Now compare live expectancy to paper. Slippage in line? Fills where you expected? Drawdown behaving?
  3. Months 2–3 — 50%. Enough trades to say something statistically. Live tracking backtest within reason?
  4. Month 4+ — full size. Only after the live sample says the edge is real. And "full size" still respects the risk limits from Part 7.

Pass all five gates and you have done something 95% of retail algo traders never do — you have made going live *boring*. That is the goal. The next lesson makes sure that once it is live, you actually know what it is doing.