# Passivbot

A contrarian perp market maker you configure in JSON and leave running for months.

*https://cryptomarkets.tools/tools/passivbot · Crypto Trading Bots & Execution SDKs*

## Facts

### At a glance

| Field | Value |
| --- | --- |
| Vendor | Passivbot |
| Category | Crypto Trading Bots & Execution SDKs |
| Job | automation |
| Website | https://github.com/enarjord/passivbot |
| Pricing model | open-source |
| Free tier | true |
| Open source | true |
| Licence | Unlicense |
| Self-hosted | true |
| KYC required | false |
| Tested hands-on | false |
| Last updated | 2026-09-19 |

### Coverage

| Field | Value |
| --- | --- |
| Asset classes | perpetuals |
| Chains | none |
| Venues | cex, dex, derivatives |
| Data latency | realtime |
| Platforms | cli, web |
| AI features | none |

### Interfaces

| Field | Value |
| --- | --- |
| API | true |
| Webhooks | false |
| Scripting | none |
| MCP server | false |
| Export | csv, json |

### Capabilities

Yes: backtesting, automation, live_trading

No: charting, screening, paper_trading, portfolio_tracking, exchange_import, tax_reporting, alerts, news, onchain_data, wallet_tracking, derivatives_analytics

*Verified: pricing 2026-09-19; capabilities 2026-09-19; coverage 2026-09-19.*

## What it is

A perpetual-futures bot that opens a position and works it rather than predicting anything. The
README calls it a contrarian market maker: it places limit orders on both sides using price bands
and an EMA context, adds to a position as price moves against it within configured exposure
limits, and closes at a configured profit margin or on a trailing retrace. The default strategy is
`trailing_martingale`; `ema_anchor` is the alternative and `trailing_grid_v7` is a deprecated
compatibility mode for people migrating v7 configs.

It is Python around a Rust core, and the same Rust orchestrator computes order placement for both
live trading and backtesting — which is the property that makes an optimiser worth having. The
optimiser runs thousands of backtests under an evolutionary algorithm and converges on parameter
sets, so the workflow here is tuning numbers, not writing strategy code. There is no strategy class
to subclass; there is a JSON config with defaults that live in `src/config/schema.py`.

Two mechanisms are worth knowing before you read the config reference. **Forager** picks which
markets are allowed to open positions at all, pruning low relative-volume candidates and then
ranking the rest by quote volume, EMA readiness and one-minute log-range volatility. **Unstucking**
handles positions that have gone the wrong way and stayed there, realising small losses on the
position with the smallest gap between entry and market price, bounded so the balance cannot fall
more than a set percentage below its past peak.

Liveness, in dates. The last commit on `master` was 19 September 2026 at 13:15 UTC, and 601
commits landed on that branch in the preceding 30 days — 3,276 in 90. The latest tagged release is
v8.1.0 from 10 August 2026, with v8.0.0 on 14 July; v8 is a breaking config release and the
migration helper writes the deprecated compatibility strategy rather than translating a v7 config
into the new one. The licence is the Unlicense — public domain, not MIT — taken from the LICENSE
file.

There is no company. One maintainer, a Discord and a Telegram, and no hosted version of any kind.

## Pricing

Free, public domain, nothing to buy, no hosted tier to upsell — and the interesting part is how
that is funded, because the category is full of free bots with a revenue model attached.

**Referral and broker rebates, documented in the repository rather than only on a page.**
`broker_codes.hjson` ships broker codes for Binance, Bybit, Bitget, OKX, KuCoin (separate spot and
futures codes), GateIO and WEEX. Hyperliquid, Bitunix, defx and paradex are listed with `null`,
which is the file being explicit that those venues carry no broker payload. The README adds a
condition most projects would leave vague — Passivbot earns Binance commissions only from accounts
created after 21 September 2024 that were opened either without a referral link or under its own
referral ID.

The README also carries referral links for Binance, Bybit, Bitget, OKX, Hyperliquid, KuCoin and
WEEX, a BuyMeACoffee link, donation addresses and a link to the maintainer's Hyperliquid reference
vault. None of it is hidden and none of it changes what the software does. It does explain why a
particular set of venues is the supported set.

## Data & coverage

**Perpetual swaps only, and the code is stricter about it than the README.** The CCXT client is
pinned to swaps in `src/exchanges/ccxt_bot.py` — `options["defaultType"] = "swap"` and
`fetchMarkets` restricted to `types: ["swap"]`. There is no spot mode to switch into.

The README's title names nine venues: Bybit, OKX, Bitget, Bitunix, GateIO, Binance, KuCoin,
Hyperliquid and WEEX. The source tree carries eleven live adapter modules, adding defx and paradex
to that list, beside the shared CCXT base class and the `fake` test harness. Reaching those venues
is CCXT's job: `requirements-live.txt` pins `ccxt==4.5.66`, so the venue list and its maintenance
are inherited rather than the project's own.

Backtests replay one-minute OHLCV candles from a local cache that the bot fills from exchange
endpoints, or from a directory of `.npz`/`.npy` files you supply. Costs are modelled better than
most: per-coin maker and taker fees are read from the exchange and can be overridden with
`maker_fee_override` and `taker_fee_override`, and simulated market execution applies
`market_order_slippage_pct`, defaulting to 5 basis points. History depth is whatever the venue
serves — GateIO's public one-minute endpoint returns roughly the last 10,000 candles, and the
documentation says Passivbot marks older GateIO spans unavailable rather than retrying them.

## Integrations

**A local monitor relay, read-only.** `passivbot tool monitor-relay` fans in artifacts from any
number of bots on the machine and exposes them over HTTP and WebSocket, binding to 127.0.0.1:8765
by default, with `GET /dashboard` serving a static browser dashboard and a terminal UI consuming
the same surface. It is monitoring, not control — there is no endpoint that places or changes an
order — and the documentation states plainly that the relay does not authenticate clients.

**Backtest output is files.** Runs write `fills.csv`, `stats.csv` and a gzipped
`balance_and_equity.csv`, plus a `dataset.json` naming the exact cache files used, and a loader for
pulling the whole bundle into a notebook.

**Nothing else.** No MCP server, no Telegram or Discord notifier, no webhooks — the only mention of
a Telegram integration in the tree is a v7.9.0 release note. The graphical interface people use
with it, pbgui, is a third-party project the README links to.

## Limitations

**Funding is not modelled at all.** Grepping the entire tree — `src/`, the Rust crate, the tests —
for "funding" returns exactly one file, and there it is a note that TradFi stock prices do not
include funding rates. Nothing in the shared Rust engine charges or credits a funding payment, in
backtest or in live accounting. For a bot whose whole job is holding perpetual positions across
many funding intervals, that is the single most consequential gap on this card. A backtest of a
long-biased grid through a period of positive funding will show money the account would not have
had, and the sign of the error depends on which side the strategy was on.

**There is no paper-trading mode.** The `fake` exchange harness is a deterministic regression
fixture for reproducing live-bot bugs offline, and its documentation explicitly tells you not to
describe it as paper, demo, sandbox or testnet trading. No exchange adapter carries a sandbox
switch. The rehearsal step other bots offer between backtest and live does not exist here.

**Development pace is a hazard as well as a strength.** 601 commits on `master` in a month means
venue breakages get fixed quickly and that `master` is a different program every week. The
documentation says so directly: a clone of `master` includes unreleased changes, and the project
publishes a page on release status and version meanings specifically so you choose a revision
deliberately.

**Python 3.13 is not supported** — 3.12 and 3.14 only, pinned by the dependency set. It is the kind
of detail that decides an afternoon on a fresh VPS image.

**The documentation site is not deployed.** `mkdocs.yml` declares `site_url: https://www.passivbot.com`,
and that host answers 301 straight to the GitHub repository. The docs are good and they are in the
repository's `docs/` tree; there is no rendered site to read them on.

**No notifications, no authentication, no company.** A bot you leave running for months has no way
to tell you it stopped, its monitoring surface trusts anything that can reach the port, and if
something goes wrong there is a Discord, not a support address.

**KYC is the venue's question, not the bot's.** Passivbot itself asks for nothing, but seven of the
nine venues in its README are centralised exchanges that will ask before they issue a key.

## Alternatives

[Freqtrade](https://cryptomarkets.tools/tools/freqtrade) is the comparison for anyone whose objection to the above is the
config file: a Python strategy class instead of a JSON parameter set, a dry-run mode that is a
genuine rehearsal rather than a test fixture, and funding and mark candles downloaded per venue in
futures mode. It is a worse fit if what you want is an optimiser pointed at a market-making grid.

[Hummingbot](https://cryptomarkets.tools/tools/hummingbot) is the other market-making answer, with far more machinery around
quoting and DEX access and an engine that is also thin on funding. [OctoBot](https://cryptomarkets.tools/tools/octobot) is the
same automation job behind a graphical interface for people who would rather click than edit JSON.

Underneath all of them, including this one, is [CCXT](https://cryptomarkets.tools/tools/ccxt) — the connector library that
actually talks to the exchanges, and the thing whose maintenance decides whether your venue keeps
working. The rest of the
[trading bots and execution SDKs](https://cryptomarkets.tools/categories/trading-bots) listing is the same choice at different
heights.

## FAQ

### Does Passivbot charge perpetual funding in its backtests?

No, and it does not charge it in the live accounting either. Searching the whole source tree for "funding" returns one file — a note in the TradFi data module that stock prices do not include funding rates. Nothing in the Rust order engine that both live trading and backtesting share computes a funding payment.

### Can I paper trade Passivbot before risking money?

Not in the usual sense. The repository ships a deterministic `fake` exchange for replaying scripted scenarios, and its own documentation says not to call that paper trading. No exchange adapter has a testnet or sandbox switch, so the two states are backtest and live.

### Do I write the strategy in Python?

No. The strategies are built into the Rust engine and you choose and tune one through a JSON config — entry and close distances, exposure limits, trailing thresholds. If you want to write strategy code rather than configure one, this is the wrong shape of tool.

### How does a free bot with no company behind it make money?

Referral and broker rebates. `broker_codes.hjson` in the repository carries broker codes for Binance, Bybit, Bitget, OKX, KuCoin, GateIO and WEEX, and the README asks that Binance accounts be created after 21 September 2024 under its referral ID, because only those earn it commission.

## Also worth comparing

- [GoCryptoTrader](https://cryptomarkets.tools/tools/gocryptotrader.md) — A Go trading engine for 22 exchanges that has never cut a release or a tag.
- [OctoBot](https://cryptomarkets.tools/tools/octobot.md) — GPL-3.0 Python bot with a web interface for grid, DCA, basket and TradingView strategies.
- [3Commas](https://cryptomarkets.tools/tools/3commas.md) — Hosted DCA, grid and signal bots over nine exchanges, with your keys on their servers.
- [Bitsgap](https://cryptomarkets.tools/tools/bitsgap.md) — Hosted grid, DCA and futures bots on seventeen venues, with no API and no webhooks.
- [Cryptohopper](https://cryptomarkets.tools/tools/cryptohopper.md) — Hosted spot bots built in forms, one bot per subscription, with a marketplace attached.
- [Gunbot](https://cryptomarkets.tools/tools/gunbot.md) — A closed-source bot you install once, licensed against an ERC-20 wallet you control.
