Level 6
10 min readLesson 38 of 43

Testing Without Losing Money

Validating your system before risking capital

The Testing Hierarchy

Before risking real money, your system should pass through multiple testing stages:

  1. Unit Tests (code correctness)
  2. Integration Tests (components work together)
  3. Backtest (strategy validation)
  4. Paper Trading (execution simulation)
  5. Testnet Trading (real exchange, fake money)
  6. Small Live (real money, tiny size)

Each stage catches different types of bugs. Skip stages at your peril.

Unit Testing Trading Code

Test individual functions in isolation:

Position Sizing:

  • Does it calculate correctly for various inputs?
  • Does it handle edge cases (zero balance, maximum position)?
  • Does it round to exchange precision?

Signal Logic:

  • Do conditions trigger when expected?
  • Do they not trigger when not expected?
  • Edge cases: exactly at threshold, null inputs

Order Building:

  • Correct parameters for each order type?
  • Proper handling of all exchanges?

Write tests that you can run automatically before every deployment.

Integration Testing

Test components working together:

  • Data ingestion feeds signal generator correctly
  • Signals reach execution component
  • Execution updates state correctly
  • State persists across restarts

Use mock exchanges for integration tests. You don't want to hit real APIs during automated testing.

Backtesting Limitations

We covered backtesting in the Validation level. Remember its limits:

  • No slippage modeling (or simplified slippage)
  • Perfect fills (real world has partial fills, rejections)
  • No latency (signal to execution is instant)
  • No exchange issues (always available, always works)

Backtests tell you if your edge exists. They don't tell you if your execution works.

Paper Trading

Simulate execution against live market data without placing real orders.

What to Simulate:

  • Order submission (instant fill at current price)
  • Position tracking (update on simulated fills)
  • P&L calculation (as if trades were real)

What Paper Trading Catches:

  • Logic bugs in execution flow
  • State management issues
  • Timing problems (signals fire at wrong times)

What It Misses:

  • Exchange API errors
  • Real slippage
  • Partial fills
  • Network issues

Paper trade for at least 1-2 weeks before moving to real exchanges.

Testnet Trading

Major exchanges offer testnets - real exchange APIs with fake money.

Binance Testnet: testnet.binancefuture.com

Bybit Testnet: testnet.bybit.com

OKX Demo: Available in their trading interface

What Testnet Catches:

  • API integration issues
  • Authentication problems
  • Order format errors
  • Exchange-specific quirks

What It Misses:

  • Real order book dynamics
  • Production API reliability
  • Actual slippage

Testnet for 1-2 weeks minimum. Hit every code path.

The Dry Run Mode

Build a dry run flag into your system:

When dry_run=True:

  • All logic executes normally
  • Orders are logged but not sent
  • State updates as if orders filled

This lets you run against production data and APIs without risk. Essential for debugging production issues safely.

Small Live Testing

Your first real money deployment should be tiny:

Position Size: 1/10th or 1/20th of intended size

Duration: At least 2 weeks, preferably a month

What to Watch:

  • Does execution match paper trading results?
  • Is slippage within expected range?
  • Any unexpected errors?
  • P&L tracking accuracy

Graduation Criteria:

  • No critical bugs for 2+ weeks
  • Execution matches expectations
  • Slippage within acceptable bounds
  • All error handling tested

Chaos Testing

Deliberately break things to test recovery:

  • Kill the process mid-trade
  • Disconnect network during order submission
  • Feed corrupted data
  • Simulate exchange errors

Your system should handle all of these gracefully.

Testing Checklist Before Go-Live

Code Quality:

  • All unit tests pass
  • Integration tests pass
  • Code reviewed by another person (or at minimum, future you)

Strategy Validation:

  • Backtest results documented
  • Walk-forward validation complete
  • Paper trading results reviewed

Exchange Integration:

  • Testnet trading successful
  • All order types tested
  • Error handling verified

Operations:

  • Monitoring in place
  • Alerts configured
  • Recovery procedures documented

Risk Controls:

  • Position limits enforced
  • Loss limits implemented
  • Kill switch tested

Common Testing Failures

"It worked in backtest": Backtest doesn't test execution. Always paper trade and testnet.

"It worked on testnet": Testnet conditions differ from production. Start small on live.

"I'll add tests later": You won't. Write tests as you build.

"The bug only happens in production": That's why you need dry run mode and extensive logging.

Takeaway

Testing isn't optional. The cost of a bug in production is measured in real money lost. Every hour spent testing saves potential disasters.

The progression: unit tests, integration tests, paper trading, testnet, small live. Don't skip steps.

Congratulations on completing the Automation level. You now understand how to architect a trading system, connect to exchanges, execute orders, handle errors, monitor everything, and test safely.

Next level: Production. We'll cover going live, the first 30 days, and keeping your system running long-term.