Freqtrade
Write the strategy in Python, backtest it, then run the same class live.
Last updated
What it is
A Python program you run yourself that trades a strategy you wrote. The strategy is a class operating on a pandas dataframe, and the same class is what the backtester runs, what dry-run mode runs and what trades live — there is no second implementation to keep in sync, which is the main reason to pick a framework like this over a backtest library plus your own execution code.
It is a command-line application first. A REST API server, a web UI (FreqUI) and a Telegram bot are the three ways to watch and control a running instance; none of them is where you write the strategy. Requirements are Python 3.11+ and TA-Lib, or Docker, which the project recommends instead. The documented hardware floor is 2 GB RAM, 1 GB of disk and 2 vCPU.
The licence in the repository is GPL-3.0 — the LICENSE file itself, not only the badge and the packaging classifier, which agree with it here. Copyleft matters if you intend to distribute a modified bot; running a private strategy on your own server obliges you to publish nothing.
Liveness, in dates rather than adjectives, as of 19 September 2026: the last commit on the default
develop branch was that morning, release 2026.8 landed on 31 August 2026 — one release a month,
unbroken from May to August in the releases feed — and the repository is not archived. Open issues stand at 22, with 7 open
pull requests alongside them — worth separating, because the count GitHub's API reports adds the
two together.
Pricing
Free, and unusually for this category there is nothing adjacent for sale either — no hosted runner, no signal subscription, no commercial licence, no token. FreqAI, the machine-learning module, states in the documentation that it is not-for-profit, sells no signals and has no token of its own.
Your costs are a server and exchange fees. Freqtrade does not add a commission and does not route orders through anything of its own — it holds your exchange API keys and calls the exchange directly.
Data & coverage
Freqtrade ships no data. Candles come from the exchange you are trading, fetched through ccxt and
stored locally by freqtrade download-data; the default on-disk format is Apache Arrow feather,
with json, gzipped json and parquet available instead. That means your history is only as deep as
the venue's own API goes, and the venue quirks below are yours to work around.
Spot support is listed for Binance, BingX, Bitget, Bybit, Bybit EU, Gate, Gate EU, HTX, Hyperliquid, Kraken, MyOKX and OKX; futures for Binance, Bitget, Bybit, Gate, Hyperliquid, Kraken and OKX. Bitvavo and KuCoin are marked as community-tested rather than supported. Everything else ccxt can reach is explicitly "we cannot guarantee they will work", which is a more honest sentence than the exchange counts most frameworks in this category advertise — those counts are usually ccxt's list, not the framework's.
Futures here means perpetual swaps. In that mode the downloader pulls mark and funding-rate
candles automatically, so funding payments and liquidation prices are part of the simulation
rather than an afterthought, and a liquidation_buffer (default 0.05) keeps the stop above the
liquidation price.
Live data arrives over websockets through ccxt.pro where the exchange supports it —
exchange.enable_ws defaults to true — and falls back to REST polling when the socket fails or is
switched off.
Pair selection is dynamic: pairlist handlers build the traded universe from volume, market cap, percentage change, age, volatility, spread, price precision or a remote list, with blacklists on top.
Integrations
Control and monitoring run over a Telegram bot, a REST API with an OpenAPI interface and a message
websocket, and FreqUI, the project's own web front end, installed with freqtrade install-ui.
Webhooks post bot events to any endpoint you point them at. A producer/consumer mode lets one
instance compute signals that a fleet of others consume.
FreqAI is part of the same repository rather than a separate product: it retrains a model during a live run, builds feature sets from your strategy, and plugs into any Python ML library, with eight example models shipped. It emits predictions for your strategy to act on; it does not tell you what to trade.
Charts are FreqUI's job, with a plot configurator that can load the plot_config from your
strategy. The older CLI plotting commands still exist but are documented as deprecated and in
maintenance mode.
Limitations
The default fill model is optimistic and the docs say so. Orders fill at the requested price
with no slippage as long as that price sits inside the candle's high-low range, entries happen at
the candle open, and exit signals fill at the next candle's open. Fees are better handled than in
most engines — the exchange's own maker/taker fee is read from market info by default rather than
assumed to be zero — but intra-candle movement is guesswork unless you pass --timeframe-detail
with a faster timeframe, which costs memory and runtime and needs that data downloaded too.
Backtests and live runs do not select pairs the same way. The automatic pairlists are not available in backtesting, so a backtest runs on a static list while the live bot re-picks its universe. The comparison you are making is therefore not quite like for like.
Margin trading is documented as currently unavailable. You get spot and perpetual futures. Dated futures and options are not supported at all, and shorting requires futures mode.
Leverage assumes the account is yours alone. Two bots cannot share one leveraged account because liquidation levels are computed on that assumption, and the docs warn that cross-margin's cross-position effects may not be fully simulated in dry-run or backtesting. Liquidation prices are computed but liquidation fees are not tracked at all, which the docs say makes the profit and loss inaccurate for any run that actually gets liquidated.
Three venue-specific holes worth knowing before you pick an exchange. Hyperliquid returns no
historical data, so a venue you can trade live cannot be backtested. Kraken requires
--dl-trades to download trades and rebuild candles, otherwise you get the same 720 candles
repeatedly. OKX only provides mark candles for roughly the last three months, so funding fees
before that window cannot be computed correctly.
Historic exchange trading limits are not available. Minimum stake sizes are checked against today's limits applied to a historic price, which can inflate the minimum amount above $50 in a backtest and reject trades that would have been fine.
It ships no edge. The repository's example strategies exist to show the API, and the documentation opens with a disclaimer that the software is for educational purposes. The questions on the backtesting and research page — fees, slippage, lookahead — are yours to get right inside your own strategy code.
Alternatives
OctoBot is the same idea for people who would rather configure than write Python, and its backtester is the weaker half — one constant funding rate for a whole run, no slippage model, zero simulated fees by default. Hummingbot overlaps on automation and is far deeper on market making, with a backtester that is weaker still.
Jesse is research-first and charges for the live half as a one-time plugin, which is the opposite bargain to this one. NautilusTrader is the heavier engineering answer — an event-driven core where the same strategy backtests and trades live — and its defaults need reading too, since liquidation is off until you turn it on.
If what you want is the fill model rather than the bot, hftbacktest models queue position and latency, and nothing here does.
Specs
- Interfaces
- API, webhooks, Python
- Export
- JSON, Parquet, API
- Asset classes
- Spot, Perpetuals
- Chains
- —
- Venues
- CEX, DEX, Derivatives
- KYC required
- No
- Platforms
- CLI, Web
- AI features
- Research
- Capabilities
- Charting, Screening, Backtesting, Automation, Live trading, Paper trading, Alerts
- Pricing verified
- Capabilities verified
- Coverage verified
Also worth comparing
- Backtesting.py — Two thousand lines, one OHLC series, and no idea what a funding payment is.
- Barter — Rust trading engine and market-data streams — live execution is a trait you implement.
- HftBacktest — Tick-by-tick backtesting that models order queue position and feed and order latency.
- LEAN — The engine behind QuantConnect, Apache-2.0 and runnable on your own machine.
- Lumibot — One Python strategy that backtests and then trades live, across eight CCXT exchanges.
- NautilusTrader — Event-driven Rust engine that settles perpetual funding at the venue boundary.
Named as a replacement for
On these shelves
Background
How this part of the industry works, rather than which product to pick.
- A token threshold is not a price — Some tools unlock features by requiring you to hold the vendor's token, not pay it. What that really costs, and why it cannot be compared with a monthly fee.
- What a crypto backtest silently assumes — Every engine ships a fill rule and a cost model with defaults. What those defaults assume about fees, funding and liquidation, and which engines model which.
FAQ
Is Freqtrade free?
Yes, and there is nothing to buy — no hosted tier, no paid licence, no token. The licence in the repository is GPL-3.0. What it costs you is a server to run it on and the trading fees your exchange charges.
Which exchanges does Freqtrade support for futures?
The documentation lists seven for futures — Binance, Bitget, Bybit, Gate, Hyperliquid, Kraken and OKX — and twelve entries for spot, counting regional variants such as Bybit EU and MyOKX separately. Anything else reachable through ccxt is explicitly not guaranteed to work.
Can I backtest a Hyperliquid strategy in Freqtrade?
No. The docs state that the Hyperliquid API returns nothing beyond current data, so historical downloads are not possible for that venue. You can trade it live and dry-run it, but the backtest has no candles to run against.
Does Freqtrade model funding payments on perpetuals?
Yes. In futures mode it downloads mark and funding_rate candles alongside the usual OHLCV, so funding is part of the simulated result rather than something you add afterwards.