Run Freqtrade in dry-run mode (paper trading with a simulated wallet)
✓ Written from official docs · checked 2026-10-17
Install Freqtrade with Docker, keep dry_run on, set a simulated wallet and run a strategy against live prices without sending orders. Steps from the official Freqtrade docs.
1. Install with Docker
mkdir ft_userdata && cd ft_userdata
curl https://raw.githubusercontent.com/freqtrade/freqtrade/stable/docker-compose.yml -o docker-compose.yml
docker compose pull
docker compose run --rm freqtrade create-userdir --userdir user_data2. Create a config and answer yes to dry-run
docker compose run --rm freqtrade new-config --config user_data/config.jsonThe interactive questions include whether to enable dry-run. Answer yes. The config is saved as user_data/config.json.
3. Check the dry-run settings
"dry_run": true,
"dry_run_wallet": 1000,
"db_url": "sqlite:///tradesv3.dryrun.sqlite"dry_run defaults to true. dry_run_wallet is the simulated starting balance in your stake currency (default 1000), or a per-currency dictionary like {"USDT": 1000}. If you use "stake_amount": "unlimited", set the wallet to a realistic amount so simulated orders match what you'd really trade.
4. Leave exchange keys empty
Dry-run doesn't need API keys: the docs show running it with empty key and secret values, and --dry-run on the command line strips exchange secrets and simulates trades. Prices still come from the exchange's public data.
5. Start the bot
docker compose up -dFreqtrade's docs say to start trading with docker compose up -d, not docker compose run. It starts with the bundled SampleStrategy, which exists only to give you ideas. Backtest your own strategy before you trust it.
6. Watch results, then decide
Follow trades in the logs, Telegram or FreqUI (enable the API server in the config for the UI). Going live means setting dry_run to false, using a different db_url and adding an exchange key with trading only, no withdrawal permission, as Freqtrade's exchange notes advise.
FAQ
Does dry-run place real orders?
No. Freqtrade simulates orders and balances against live market data and sends nothing to the exchange.
Is a dry-run result what I'd get live?
Not exactly. Fills are simulated, so slippage, partial fills and exchange outages show up only in live trading.
Sources
- Freqtrade: Quickstart with Docker
- Freqtrade: Configuration (dry_run, dry_run_wallet)
- Freqtrade: Start the bot (--dry-run)
- Freqtrade: Exchange notes
Related guides
- How to connect Claude to Alpaca via MCP
- How to connect Claude (or any MCP client) to Interactive Brokers
- How to connect Claude to the tastytrade MCP server
- How to connect Claude (and other AI agents) to the Robinhood Trading MCP
- How to connect Claude to TradeStation MCP
- How to connect Claude (and other AI apps) to the Public hosted MCP server
- Connect ChatGPT, Cursor or Claude Code to Interactive Brokers (IBKR MCP)
- Set up a 3Commas or Bitsgap bot with a safe exchange API key (no withdrawals, IP whitelist)
- Give an AI agent IBKR paper trading access (TWS API or Web API)