// troubleshooting
Why a backtest has 0 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.
5 min read
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.
The wizard opens with these answers. Change any of them, then try it on candles in the editor’s Dry-run panel.
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.
Test your own idea
Create a free account, start from a template or from your own rules, and read your first report.
More guides
- What is backtesting?How a backtest works, which numbers matter and the traps that make results look too good.
- TradingView backtesting vs JanoriumWhat each tool does well, where it falls short, and which one to pick for crypto strategies.
- Build a strategy with ChatGPT or ClaudeDescribe a trading idea in plain words and let an AI assistant write the strategy config.
- How to backtest a crypto strategyStep by step: rules, costs, the run, the report — with a real BTC backtest as the example.
- Backtest metrics explainedSharpe, drawdown, profit factor, win rate and the rest — what they mean and what counts as good.
- Strategy builder glossaryEvery term of the strategy editor — layers, conditions, bar windows, exits, DCA — explained with an example.
- How Janorium backtestsThe methodology: data, when orders fill, stops, fees, funding, liquidation, metrics — and what is not modeled.
- An RSI strategy in 5 minutesThe classic RSI oversold rule, built in the wizard and backtested step by step.
- Add a trend filter to a strategyOne more condition that keeps a strategy out of the wrong market: a 200-period average, added in four steps.