Trust the process
Paper-trade a crypto bot before going live
Live keys on day one is how people donate fees and slippage to the exchange. Run the same loop on real prices with fake fills until the logs look boring.
Paper trading means the code sees live prices and writes “would have bought/sold” to a log. No market order hits the book. If your script can still call create_order, it is not paper trading.
Why this step exists
- Does the process stay up?
- Are API keys accepted?
- How often would it have traded?
- Would the daily loss limit have fired?
- Are Telegram messages readable or noise?
How to force a dry run
Pick one control and make it impossible to bypass from a typo. Default dry-run to on. Live should be an explicit DRY_RUN=false on the server.
DRY_RUN=true
# in code
if os.environ.get("DRY_RUN", "true").lower() != "false":
log.info("DRY FILL %s %s @ %s", side, symbol, price)
return FakeOrder(...)
# only then call the exchange
What to record
- Time (UTC)
- Symbol, side, size
- Signal reason (one short string)
- Mark price used
- Assumed fee
- Running paper PnL and drawdown
How long is long enough
- At least one quiet market stretch and one fast stretch
- No unexplained restarts
- Loss-limit logic tripped in a simulated red day (force it once on purpose)
- You still understand every alert you received
Going live with $50 “to see” is still live. Size does not convert a market order into a simulation. Use the flag.
Get the full walkthrough
The paid guide includes the source, config template, and deploy script. 50% off: $19.99 (was $39.99). One-time.
Get the ebook — $19.99Educational product. Trading can lose money. Not financial advice.