# Why a backtest has 0 trades

> A backtest with no trades almost always means the entry conditions never held on the same candle. The causes in the order to check them, where to see each, the fix.

Guide · Janorium · Published 2026-11-05  
Web page: https://janorium.com/guides/why-backtest-shows-zero-trades

A backtest with zero trades almost always means the entry conditions were never all true on the same candle — not missing data and not a bug. Below are the causes in the order worth checking, where Janorium shows each one, and the fix.

## Where to look first

- **The dry run.** In the editor’s **Dry-run** panel the chart **Where the entry fired** marks, on the last 500 candles of the period, every entry and every candle where the condition held but no position opened. When the condition never held at all, it says so: “The entry condition did not hold once on these bars, and the run made no trades.”
- **The report of your own backtest.** On the **Price + Trades** tab tick **Mark near-miss bars**. The **Why not?** panel counts the candles where every condition but one held and shows which condition blocked them most often; click a candle on the chart to see why that one did not open a trade. It reads a top-level **ALL (AND)** group.

## 1. The conditions never hold on the same candle

Every row of an **ALL (AND)** group has to hold on one and the same candle. Each row may be true often and the pair never. Crosses are the usual culprit: `CROSS_UP` is true only on the candle where one line crosses the other, not while it stays above, so two crosses — or a cross and a rare level — have to land on exactly the same candle.

- **Use `>` or `<` for a state** (“above the average”) and keep a cross for the one event the entry is about.
- **Give a row a bar window.** In its **Bar window** choose **within** and a number of bars: the row then counts as true if it held on any of the last N candles.

## 2. A threshold the market never reached

RSI below 10, a 40% fall from the high, volume ten times its average: rules like these may simply not happen in the period. The near-miss panel names the condition that blocked most often — loosen it, or take shorter candles or a longer period.

A price level is a special case. Conditions compare raw values, so `CLOSE > 60000` written for BTC never holds on ETH, and a level from one year can sit far from the price of another. Compare the price with an indicator instead — an average, a channel, the high of the last N candles.

## 3. An indicator that has no data yet

Funding, open interest and the other futures series can start later than the candles. Until a series has a value, a condition on it is false, and the strategy waits without an error. Start the period after the series begins.

## 4. The entry fires but no position opens

If the dry-run chart shows signals without an entry, the condition held and something else stood in the way:

- **The size does not fit.** A fixed amount larger than the free capital, or a risk-based size whose margin is larger than it, skips the entry. Click such a candle in the report and it says: “The condition held, but sizing produced nothing — not enough free equity or margin.”
- **An order or a setup that never completes:** a limit entry order the price never reaches, a setup that never arms, or a stop placed on the wrong side of the entry.
- **A liquidity cap set to skip.** A cap on the share of a candle’s volume trims an order to fit by default (**Trim the order**); only **Skip the trade** drops it.

## What does not cause zero trades

- **Indicator warm-up.** A long average needs history before its first value, and Janorium loads that history from before the start of the period. Only a coin without that much earlier history starts trading later.
- **A position that never closes.** It is closed at the end of the period and counted as a trade.
- **Max open positions, cooldown and re-arm.** They cut the number of trades, but a layer that has not entered yet is always free to enter.
- **No candles.** A coin or a period without data makes the run fail with an error (`NO_CANDLES`) rather than finish with zero trades.
- **Futures data on spot.** A spot strategy with funding or open interest in it is refused when you save it.

## Still nothing?

Go back to a strategy that trades and change one thing at a time, with a dry run after each change: the change that brings the count to zero is the cause. An idea from the wizard is a good base — this one enters on every cross of two averages, so it trades on any coin within a few months of candles:

> **Idea: Follow the trend**
>
> Trades BTCUSDT on Binance spot, on 4-hour candles.
>
> Buys when the exponential moving average EMA(20) crosses above EMA(50), using 50% of the free capital.
>
> Closes the trade at a loss of −6%. It also closes when EMA(20) crosses below EMA(50).
>
> Every entry and every exit pays 0.1% in fees plus 0.01% slippage.
>
> [Open in the wizard](https://janorium.com/strategies/new?idea=trend&src=guide:why-backtest-shows-zero-trades)

## Frequently asked questions

### Why does my backtest show no trades?

Almost always because the entry conditions never held on the same candle — a cross that has to coincide with another condition, or a threshold the market never reached. The dry run shows where the entry fired, and the report’s near-miss panel names the condition that blocked it.

### Why did my strategy stop trading after I added a condition?

Every row of an ALL (AND) group must hold on the same candle, so a new row can only remove entries. If the new row is a cross, it holds on one candle only: use > or < for a state, or give the row a bar window.

### Does a long indicator eat the start of the backtest?

No. Janorium loads the history an indicator needs from before the start of the period, so a 200-day average has a value on the first day you test — as long as the coin traded that long before it.
