Crosses Above vs Greater Than: How Condition Type Changes a Backtest

Crosses Above vs Greater Than: How Condition Type Changes a Backtest

The crosses above vs greater than trading condition choice is a choice between an event and a state. "Crosses above" fires once, on the bar where a value moves from below a level to above it. "Greater than" stays true on every bar the value sits above the level.

That one choice can move a whole backtest. In a matched pair from Nada's CoinQuant library, changing only the entry condition type moved the first trade to the first bar of the test and changed the Total Return from -65.85% to -45.43%. Neither version made money, and the whole gap came from a single trade.

This comparison of state vs event condition trading rules shows both types in CoinQuant's builder and reports what changed in the trades, without adjustment.

Quick Answer: Events Fire Once, States Stay True

  • Crosses above (an event): true only on the bar where the value moves from below the level to above it
  • Greater than (a state): true on every bar where the value is above the level

In crossover vs threshold signal terms, crosses above is the crossover and greater than is the threshold. For entries, an event waits for a fresh change, while a state fires whenever it is true, including on the first bar of a test if the condition already holds.

What We Compare and How

We compare the two condition types on five points: when each fires, the first entry, entering again after an exit, trade count and the final result. The test case is one real pair of strategies that differ only in the entry operator, with the same coin, window, exit rule, capital, sizing and fee.

Operator descriptions are quoted from CoinQuant's documentation as captured on 12 October 2026, and both backtests were verified on 12 October 2026 through the CoinQuant API. CoinQuant offers both operator types, so this compares choices inside one builder, not tools.

Crosses Above vs Greater Than Trading Conditions in the Builder

In CoinQuant, an AI trading platform, you describe a rule in plain English, and the strategy builder lays out each condition as an instrument, an indicator, a timeframe, an operator and a value, with no coding required. The builder documentation's own operator examples are RSI below 30 and one SMA crossing above another. The operator decides whether a condition is an event or a state.

OperatorTypeHow CoinQuant describes it (Supported Elements)
Crosses AboveEvent"triggers only at the moment one value moves from below to above another"
Crosses BelowEvent"triggers only at the moment one value moves from above to below another"
AboveState"condition stays true while the value remains above another"
Greater ThanState"triggers when a value is higher than a defined level"
Greater Than or EqualState"condition stays true when a value is at or above another"

The Strategy Builder page also lists Equals and Not Equals. They are states too: they hold on every bar the value matches.

  • Event example: "RSI (14) crosses above 30" fires once as RSI climbs out of oversold
  • State example: "RSI (14) greater than 50" is true for as long as momentum stays above the midline

The Matched Pair: ADA Swing Points

Both strategies use CoinQuant's Swings indicator (period 5) on ADAUSDT daily candles (Binance spot) from 2021-08-01 to 2026-08-01, with $10,000, 100% of equity and a 0.1% fee. In these rules a direction value of 1 marks an upswing after a confirmed swing low and a value of -1 marks a downswing after a confirmed swing high. Both strategies exit when direction equals -1.

SettingState entryEvent entry
StrategyADA Swing Points Reversal 1D 2021-2026ADA Swing Points Fresh Swing Low Entry 1D 2021-2026
Entry (as stored)Swings(period=5) direction equals 1 (confirmed swing low, upswing) on 1d timeframeSwings(period=5, output=direction) crosses above 0 on 1d timeframe (direction changes from -1 to 1, new swing low confirmed)
Exit (as stored)Swings(period=5) direction equals -1 (confirmed swing high, downswing) on 1d timeframeSwings(period=5, output=direction) equals -1 on 1d timeframe (confirmed swing high)

The state version, ADA Swing Points Reversal 1D 2021-2026, enters when direction equals 1. That is a state condition, like greater than: it stays true on every bar while the direction is up, not just on the bar where it turns. Its Strategy tab shows that entry listed above the shared exit.

ADA Swing Points Reversal 1D 2021-2026 in CoinQuant: a state entry, Swings direction "equals", listed above the exit, written in plain words.
ADA Swing Points Reversal 1D 2021-2026 in CoinQuant: a state entry, Swings direction "equals", listed above the exit, written in plain words.

The event version, ADA Swing Points Fresh Swing Low Entry 1D 2021-2026, enters only when direction crosses above 0, which the stored rule describes as a change from -1 to 1, a new swing low. Its Strategy tab shows that entry above the same exit.

ADA Swing Points Fresh Swing Low Entry 1D 2021-2026 in CoinQuant: an event entry, Swings direction "crosses above", listed above the same exit, written in plain words.
ADA Swing Points Fresh Swing Low Entry 1D 2021-2026 in CoinQuant: an event entry, Swings direction "crosses above", listed above the same exit, written in plain words.

Data note: ADAUSDT daily data on CoinQuant is missing 2021-09-12 to 2021-09-14, and the platform does not flag it. Both results use the same data, so the comparison stays like for like.

How the Condition Type Changed the Trades

MetricState entry (equals 1)Event entry (crosses above 0)
StrategyADA Swing Points Reversal 1D 2021-2026ADA Swing Points Fresh Swing Low Entry 1D 2021-2026
First trade2021-08-01 to 2021-08-182021-08-19 to 2021-09-06
First trade return (after fees)59.87%15.84%
Total Trades128127
Total Return-45.43%-65.85%
Final Balance$5,457.03$3,414.74
Win Rate30.47%29.92%
Profit Factor0.930.83
Sharpe Ratio0.08-0.09
Max Drawdown84.11%84.11%
Total Fees$2,758.63$1,709.95

Both runs share the same window, capital, sizing and fee, so the rows compare like with like.

The State Entry Bought on the First Bar

The state version entered on 2021-08-01, the first bar of the window, because its "equals 1" condition already held when the test began: nothing new happened that day. That trade ran to 2021-08-18 and returned 59.87% after fees, adding $5,980.79. The event version had to wait for a fresh flip, which came on 2021-08-19.

After That, the Trades Matched

From 2021-08-19 onward, the event version's 127 trades match the state version's trades two to 128 on entry date, exit date and return after fees. The percentages match; the dollar amounts differ because the equity bases differ.

In this run, every later "equals 1" entry fell on the same bar as a "crosses above 0" entry, so the whole gap in Total Return comes from one first bar trade, compounded through the same later trades. Both runs share the same 84.11% Max Drawdown, and with more than 50 trades each, both are rated on the Performance tab results card (Quality scores of 29 and 26).

The Event Version Is Not Automatically Better

The state version did better only because its first bar trade happened to win. That entry came from a condition already true before the window rather than from a signal. It could as easily have bought into a fall.

Which to Use When

Crosses above (event) is the better pick whenGreater than (state) is the better pick when
You want one entry at the moment a signal appearsYou want a filter that must hold, such as price above a moving average
Entering again after an exit should wait for a fresh signalIt sits in an AND group with an event that does the triggering
A trade on the first bar of a test would be meaninglessYou are describing a regime, such as an uptrend, rather than a moment

One habit follows: check the first trade date in any backtest. If it is the first bar of the window, a state entry has probably fired on a condition that was already true. For how a no-code platform evaluates rules like these, see how no-code backtesting actually works.

The event version of this ADA rule was the main result of the Swing Points strategy backtest on Cardano, which covers its trades in depth.

The Practical Lesson

Pick the condition type on purpose: events for signal entries, states for filters.

  • Timing: the state entry bought on 2021-08-01, the first bar; the event entry waited until 2021-08-19
  • Trades: 128 against 127, and every later trade matched on dates and return after fees
  • Result: -45.43% against -65.85%, a gap that came entirely from the first bar trade, with the same 84.11% Max Drawdown

In CoinQuant you can build both versions of an entry, run them on the same window and compare first trade dates and results, or use multi-indicator conditions to pair an event trigger with a state filter.

Build trading strategies on real data. No coding required.

Frequently Asked Questions

What is the difference between crosses above and greater than in a trading strategy?

Crosses above is an event: it is true only on the bar where the value moves from below the level to above it. Greater than is a state: it is true on every bar the value stays above the level.

Why did my backtest enter a trade on the first bar?

Most likely a state condition was already true when the test began, so the rule entered at once. In the ADA pair here, the "equals 1" entry bought on 2021-08-01 for exactly that reason, while the crosses above version waited for a fresh signal.

Should I use crosses above or greater than for an RSI entry?

Use crosses above for one entry at the moment RSI moves through your level. Greater than stays true while RSI holds above it, so it suits a filter better than a trigger; test both, because this pair used Swings direction, not RSI.

Explore how CoinQuant helps you build, test and compare trading strategies. Explore CoinQuant

Disclaimer:

This content is for educational and informational purposes only and does not constitute financial, investment, or trading advice. All strategies and examples are for illustrative purposes and do not guarantee results. Always conduct your own research before making financial decisions.