Ora
All documentation Overview

Get started

IntroductionQuickstartHow ora-fin1 decidesHow to build with OraUse-case map

Rule language

OverviewGrammarOperators and beliefsPrices and offsetsWindowsIndicatorsSignals and eventsPattern functionsFunction referenceRule libraryCommon mistakesError messagesEarnings and dividend facts

Questions & answers

Questionsyes_no (noul)choicescoreConfidenceThresholds and calibrationStateAsk by symbol

Patterns

Patterns

Actions & workflows

OverviewRules and templatesDestinationsWebhooks and signaturesWorkflows

API reference

POST /v1/systemoneGET /v1/models

Errors & limits

ErrorsRate limitsKnown limitations

Pricing

Pricing

Resources

FAQChangelogModels & versionsCode in 8 languages

Docs / Rule language

Rule language

Rule library

86 worked rules, grouped by idea. Each has the idea in plain English, the rule, why it is written that way, and its real belief on SPY, NVDA, TSLA, XLE for the session of 2026-10-30. Copy one into "ask", or press Try it.

Reading the beliefs

Each chip is one real answer: XLE 0.9 means the rule clearly holds on XLE, SPY 0.05 that it clearly does not, and values near 0.50 that the reading sits close to the line. Run the same rule over your watchlist to turn it into a scan.

Price relations

Closed above yesterday's high

C > H[-1]

Offsets count back from the latest bar, so H[-1] is yesterday's high. Comparing the close (not the high) asks that the strength held into the end of the day.

SPY 0.0537NVDA 0.0643TSLA 0.1868XLE 0.846Try it

Opened below yesterday's low

O < L[-1]

An opening break of the prior range. Use O for the open; the rest of the bar does not matter to this rule.

SPY 0.8942NVDA 0.8445TSLA 0.8659XLE 0.0614Try it

Closed higher than yesterday

C > C[-1]

The simplest relation. The belief grows with the size of the move measured against this symbol's normal daily change.

SPY 0.0552NVDA 0.0732TSLA 0.2949XLE 0.9085Try it

Closed above its open

C > O

An intraday gain, regardless of where yesterday closed.

SPY 0.0736NVDA 0.1024TSLA 0.8513XLE 0.801Try it

Higher high and higher low

H > H[-1] and L > L[-1]

Both halves must hold; and takes the weaker of the two, so a barely higher low keeps the answer near 0.50.

SPY 0.0537NVDA 0.0564TSLA 0.0795XLE 0.9002Try it

Lower high and lower low

H < H[-1] and L < L[-1]

The mirror image: a down-trending bar.

SPY 0.9386NVDA 0.9057TSLA 0.6828XLE 0.0814Try it

Two higher closes in a row

C > C[-1] and C[-1] > C[-2]

Chain offsets to walk back bar by bar.

SPY 0.0552NVDA 0.0732TSLA 0.2949XLE 0.6708Try it

Closed in the top quarter of the day's range

(C - L) / (H - L) > 0.75

Where the close sits in the bar, 0 at the low and 1 at the high. A bar with no range divides by zero and answers 0.50.

SPY 0.1294NVDA 0.1446TSLA 0.4656XLE 0.6856Try it

Closed in the bottom quarter of the day's range

(C - L) / (H - L) < 0.25

Selling into the close.

SPY 0.1492NVDA 0.1996TSLA 0.0788XLE 0.0688Try it

Gaps

Opened more than 1% above yesterday's close

O > C[-1] * 1.01

Multiply instead of subtracting to express the gap as a percentage.

SPY 0.0537NVDA 0.0652TSLA 0.0562XLE 0.6257Try it

Opened more than 1% below yesterday's close

O < C[-1] * 0.99

The down-side version.

SPY 0.5573NVDA 0.8258TSLA 0.8793XLE 0.0587Try it

An unfilled gap up

L > H[-1]

The whole bar stayed above yesterday's high. Same as gap_up().

SPY 0.0537NVDA 0.0537TSLA 0.0577XLE 0.5559Try it

Gapped up but closed under yesterday's close

O > C[-1] and C < C[-1]

A failed gap: two conditions on the same bar.

SPY 0.0604NVDA 0.0932TSLA 0.0708XLE 0.0915Try it

Opened under yesterday's low, closed up on the day

O < L[-1] and C > C[-1]

Sellers had the open; buyers had the close.

SPY 0.0552NVDA 0.0732TSLA 0.2949XLE 0.0614Try it

Gap bigger than half an ATR

abs(O - C[-1]) > 0.5 * ref(atr(14), -1)

ref(atr(14), -1) is yesterday's ATR, so today's own wide bar does not inflate the yardstick it is measured against.

SPY 0.9344NVDA 0.8363TSLA 0.8646XLE 0.7136Try it

Ranges

An inside day

H < H[-1] and L > L[-1]

Strictly inside. inside_bar() allows equal highs or lows.

SPY 0.0537NVDA 0.0564TSLA 0.0795XLE 0.0998Try it

Narrowest range of the last seven sessions (NR7)

(H - L) < lowest(H - L, 6)

lowest() looks at the six bars before today, so today plus six is the seven-bar window.

SPY 0.0547NVDA 0.0569TSLA 0.0584XLE 0.3985Try it

Range more than twice the 20-day average range

(H - L) > 2 * avg(H - L, 20)

Window functions take any expression, not just a price.

SPY 0.262NVDA 0.1562TSLA 0.1088XLE 0.0537Try it

True range 1.5× yesterday's ATR

tr() > 1.5 * ref(atr(14), -1)

tr() counts an overnight gap as part of the range, unlike H − L.

SPY 0.943NVDA 0.8962TSLA 0.2396XLE 0.1049Try it

In the lower third of its 20-day range

C < lowest(L, 20) + (highest(H, 20) - lowest(L, 20)) / 3

Build the range from highest and lowest of the previous 20 bars, then place the close in it.

SPY 0.852NVDA 0.9173TSLA 0.064XLE 0.0556Try it

A tight 10-day base (under 5% of price)

(max(H, 10) - min(L, 10)) / C < 0.05

max and min include today, which is what a base measured up to now should do.

SPY 0.9212NVDA 0.068TSLA 0.0537XLE 0.3348Try it

Trend

Above the 50-day average

C > sma(C, 50)

The everyday trend filter.

SPY 0.1128NVDA 0.0746TSLA 0.8961XLE 0.9432Try it

More than 10% above the 200-day

C > sma(C, 200) * 1.10

Scale one side to ask "by how much", not just "above".

SPY 0.0537NVDA 0.06TSLA 0.1462XLE 0.9463Try it

50-day above the 200-day

sma(C, 50) > sma(C, 200)

Compares two averages; the belief is scaled by how much their gap normally moves.

SPY 0.9463NVDA 0.9463TSLA 0.0768XLE 0.9463Try it

Stacked averages: close > 20 EMA > 50 > 200

C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)

Four links in one chain; the weakest link sets the answer.

SPY 0.0794NVDA 0.0735TSLA 0.0768XLE 0.9266Try it

The 50-day average is rising

sma(C, 50) > ref(sma(C, 50), -10)

ref() is how you look back at an indicator; sma(C, 50)[-10] is not valid.

SPY 0.2481NVDA 0.2352TSLA 0.8547XLE 0.9395Try it

The 200-day average is rising

sma(C, 200) > ref(sma(C, 200), -20)

A slow average needs a longer look-back to show a slope.

SPY 0.9463NVDA 0.9463TSLA 0.0537XLE 0.9463Try it

Trending (ADX above 25)

adx(14) > 25

ADX has no direction; pair it with diplus/diminus for one.

SPY 0.0613NVDA 0.0578TSLA 0.0632XLE 0.0708Try it

Trending up (ADX over 20 and +DI over −DI)

adx(14) > 20 and diplus(14) > diminus(14)

Strength and direction as two separate conditions.

SPY 0.0594NVDA 0.0637TSLA 0.1291XLE 0.2133Try it

Up on at least six of the last ten days

sum(C > C[-1], 10) >= 6

A comparison is 1 or 0 inside a window, so sum() counts the days it held.

SPY 0.5NVDA 0.1194TSLA 0.1318XLE 0.8416Try it

Momentum

RSI above 50

rsi(C, 14) > 50

The midline: more up pressure than down.

SPY 0.0919NVDA 0.073TSLA 0.9267XLE 0.9318Try it

RSI above 70

rsi(C, 14) > 70

The classic overbought line. The measured scale means 71 answers near 0.55 and 85 near 0.9.

SPY 0.0537NVDA 0.0537TSLA 0.0873XLE 0.3392Try it

MACD above its signal line

macd(C) > macdsignal(C)

Defaults 12, 26, 9; pass periods to change them: macd(C, 8, 21, 5).

SPY 0.1658NVDA 0.1236TSLA 0.8968XLE 0.7144Try it

MACD histogram rising

macdhist(C) > ref(macdhist(C), -1)

Momentum of momentum, read one bar back with ref().

SPY 0.0711NVDA 0.1232TSLA 0.2482XLE 0.7416Try it

Up more than 5% in 20 sessions

roc(C, 20) > 5

roc() is in percent, so 5 means 5%.

SPY 0.0537NVDA 0.0537TSLA 0.681XLE 0.897Try it

Higher than three months ago

C > C[-63]

About 63 sessions in three months.

SPY 0.3809NVDA 0.4138TSLA 0.9057XLE 0.9463Try it

Stochastic %K under 20

stochk(14) < 20

Near the bottom of the 14-day range.

SPY 0.1424NVDA 0.5475TSLA 0.0537XLE 0.0636Try it

CCI above 100

cci(20) > 100

A strong push above the typical price's average.

SPY 0.0537NVDA 0.0583TSLA 0.5437XLE 0.6023Try it

Williams %R above −20

willr(14) > -20

Negative numbers work as written.

SPY 0.0651NVDA 0.0646TSLA 0.5461XLE 0.7694Try it

Volatility

A typical day moves more than 3%

atr_pct(14) > 3

Percent of price, so one line works across cheap and expensive stocks.

SPY 0.0537NVDA 0.5548TSLA 0.848XLE 0.0537Try it

ATR up 20% in two weeks

atr(14) > 1.2 * ref(atr(14), -10)

Compare an indicator with its own past to see a regime change.

SPY 0.2117NVDA 0.1267TSLA 0.3085XLE 0.0734Try it

Bollinger bands narrower than 6% of price

(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06

Band width as a fraction of the middle band: a squeeze measure.

SPY 0.899NVDA 0.0537TSLA 0.1208XLE 0.0725Try it

Annualized 20-day volatility above 40%

std(log(C / C[-1]), 20) * sqrt(252) > 0.4

Daily log returns, their deviation, scaled by the square root of 252 sessions.

SPY 0.0537NVDA 0.1389TSLA 0.2867XLE 0.0537Try it

Swings less than half their 50-day size

std(C, 10) < 0.5 * std(C, 50)

Short window against long window of the same statistic.

SPY 0.2067NVDA 0.3837TSLA 0.1204XLE 0.8148Try it

A two-sigma down day

zscore(C / C[-1] - 1, 20) < -2

zscore() of the daily return, against its own last 20 sessions.

SPY 0.6995NVDA 0.3814TSLA 0.0945XLE 0.0539Try it

Volume

Volume above its 20-day average

V > avg(V, 20)

The average includes today; see the next rule for the stricter form.

SPY 0.9463NVDA 0.9241TSLA 0.7475XLE 0.4991Try it

Volume more than twice the previous 20-day average

V > 2 * ref(avg(V, 20), -1)

ref(…, -1) keeps today's spike out of the average it is compared with.

SPY 0.6399NVDA 0.1794TSLA 0.0589XLE 0.0537Try it

Up on heavy volume

C > C[-1] and V > 1.5 * ref(avg(V, 20), -1)

Price and participation together.

SPY 0.0552NVDA 0.0732TSLA 0.1309XLE 0.0692Try it

Down on heavy volume

C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)

Distribution: selling with size.

SPY 0.9161NVDA 0.7234TSLA 0.1309XLE 0.0692Try it

On-balance volume above its 20-day average

obv() > sma(obv(), 20)

Window functions accept another function as input.

SPY 0.1367NVDA 0.0925TSLA 0.1037XLE 0.9409Try it

Volume under 60% of normal

V < 0.6 * avg(V, 20)

Quiet sessions, often inside a base.

SPY 0.0537NVDA 0.0544TSLA 0.0764XLE 0.074Try it

Volume in the top tenth of 50 sessions

percentrank(V, 50) > 90

A rank needs no threshold in shares, so it works on any symbol.

SPY 0.6791NVDA 0.5398TSLA 0.219XLE 0.1283Try it

Breakouts

20-day closing breakout

C > highest(C, 20)

highest() excludes today: the form that can actually be true.

SPY 0.0537NVDA 0.0537TSLA 0.2882XLE 0.6462Try it

Took out the 20-day high intraday

H > highest(H, 20)

Highs against highs: an intraday break that may not have held.

SPY 0.0537NVDA 0.0537TSLA 0.3182XLE 0.6226Try it

New 52-week high

H > highest(H, 252)

About 252 sessions in a year.

SPY 0.0537NVDA 0.0537TSLA 0.0537XLE 0.6196Try it

Within 2% of the 52-week high

C >= 0.98 * max(H, 252)

max() includes today, so a stock at its high still qualifies.

SPY 0.0834NVDA 0.0537TSLA 0.0537XLE 0.8442Try it

55-day closing breakout

C > highest(C, 55)

A slower channel breakout.

SPY 0.0537NVDA 0.0537TSLA 0.3696XLE 0.6443Try it

Closed under the 20-day low

C < lowest(L, 20)

Close against the lows of the previous 20 bars.

SPY 0.6271NVDA 0.7554TSLA 0.0537XLE 0.0537Try it

20-day breakout on 1.5× volume

C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)

Ask the parts as separate questions too: they show which half held it back.

SPY 0.0537NVDA 0.0537TSLA 0.1309XLE 0.0692Try it

Set its 20-day high in the last four sessions

highestbars(H, 20) <= 3

highestbars() is 0 on the bar that set the high.

SPY 0.0576NVDA 0.0566TSLA 0.6049XLE 0.7483Try it

Crossed above the 50-day today

crossup(C, sma(C, 50))

An event on this bar only: 0.95 when it happened, 0.05 otherwise.

SPY 0.05NVDA 0.05TSLA 0.05XLE 0.05Try it

Closed above the upper Bollinger band

C > bbupper(C, 20, 2)

A volatility-scaled breakout.

SPY 0.0537NVDA 0.0537TSLA 0.2572XLE 0.1996Try it

Mean reversion

Two-day RSI under 10

rsi(C, 2) < 10

A very short RSI reacts to two or three down days.

SPY 0.5164NVDA 0.591TSLA 0.1345XLE 0.0565Try it

Closed under the lower Bollinger band

C < bblower(C, 20, 2)

Two deviations under the 20-day mean.

SPY 0.5882NVDA 0.3603TSLA 0.0538XLE 0.0562Try it

Two deviations under the 20-day mean

zscore(C, 20) < -2

The same idea as the band, as one number.

SPY 0.6611NVDA 0.3733TSLA 0.0537XLE 0.0542Try it

Pullback in an uptrend: above the 200-day, RSI under 40

C > sma(C, 200) and rsi(C, 14) < 40

A trend filter plus an oversold trigger.

SPY 0.4642NVDA 0.5455TSLA 0.0537XLE 0.0537Try it

Stretched: more than 2 ATR above the 20-day

C > sma(C, 20) + 2 * atr(14)

Distance in ATR units is comparable across symbols.

SPY 0.0537NVDA 0.0537TSLA 0.2042XLE 0.5464Try it

Three lower closes while above the 200-day

C < C[-1] and C[-1] < C[-2] and C[-2] < C[-3] and C > sma(C, 200)

Short-term weakness inside long-term strength.

SPY 0.2277NVDA 0.5455TSLA 0.5667XLE 0.0915Try it

Crossed back above the lower band

crossup(C, bblower(C, 20, 2))

The re-entry signal after a band break.

SPY 0.05NVDA 0.05TSLA 0.05XLE 0.05Try it

Patterns

Hammer at a 20-day low

hammer() and L <= 1.01 * lowest(L, 20)

A pattern is a rule, so it combines with and like any other.

SPY 0.0941NVDA 0.1245TSLA 0.0577XLE 0.0542Try it

Bullish engulfing above the 50-day

engulfing_bull() and C > sma(C, 50)

Context matters more than the candle.

SPY 0.0597NVDA 0.0746TSLA 0.2167XLE 0.1025Try it

Morning star or bullish engulfing

morning_star() or engulfing_bull()

or takes the stronger of the two.

SPY 0.0597NVDA 0.0763TSLA 0.2167XLE 0.1509Try it

Shooting star at a 20-day high

shooting_star() and H > highest(H, 20)

A reversal shape where it matters.

SPY 0.0537NVDA 0.0537TSLA 0.0696XLE 0.1666Try it

Doji after a 10% month

doji() and roc(C, 20) > 10

Indecision after a run.

SPY 0.0537NVDA 0.0537TSLA 0.1254XLE 0.1441Try it

Multi-condition setups

Uptrend, under the 20-day, RSI still above 40

C > sma(C, 200) and C < sma(C, 20) and rsi(C, 14) > 40

A pullback that has not broken momentum.

SPY 0.5358NVDA 0.2184TSLA 0.0844XLE 0.0867Try it

Squeeze, then a breakout

std(C, 20) < 0.7 * std(C, 100) and C > highest(C, 20)

Quiet first, then a break: both must hold today.

SPY 0.0537NVDA 0.0537TSLA 0.2882XLE 0.6462Try it

Momentum with participation

roc(C, 20) > 5 and V > avg(V, 50) and C > sma(C, 50)

Three independent pieces of evidence.

SPY 0.0537NVDA 0.0537TSLA 0.681XLE 0.469Try it

Undercut the 20-day low and closed back above it

L < lowest(L, 20) and C > lowest(L, 20)

The same level on both sides of one bar: a spring.

SPY 0.3729NVDA 0.2446TSLA 0.0548XLE 0.0537Try it

Oversold, with the line set by the trend

(C > sma(C, 200) and rsi(C, 14) < 40) or (C < sma(C, 200) and rsi(C, 14) < 25)

Two regimes joined by or, each with its own threshold. iif() can do the same in one comparison.

SPY 0.4642NVDA 0.5455TSLA 0.0537XLE 0.0537Try it

Chandelier exit: 3 ATR under the 22-day high

C < highest(H, 22) - 3 * atr(22)

A volatility stop written as a rule: true means the stop is hit.

SPY 0.7383NVDA 0.9272TSLA 0.0986XLE 0.0559Try it

Scanning ideas

More than 20% off the 52-week high

C < 0.8 * max(H, 252)

Run it on a watchlist to find names in a drawdown.

SPY 0.0537NVDA 0.1141TSLA 0.4717XLE 0.0537Try it

Within 3% of the 200-day

abs(C / sma(C, 200) - 1) < 0.03

abs() makes it two-sided: just above or just below.

SPY 0.2187NVDA 0.7921TSLA 0.4015XLE 0.0537Try it

No 20-day breakout for 30 sessions

barssince(C > highest(C, 20)) > 30

barssince() turns an event into an age.

SPY 0.0797NVDA 0.0637TSLA 0.0578XLE 0.0537Try it

This week's low is above last week's

min(L, 5) > ref(min(L, 5), -5)

ref() shifts a whole window back: the five sessions before these five.

SPY 0.1914NVDA 0.1447TSLA 0.9443XLE 0.8652Try it

This week's range is 1.5× last week's

(max(H, 5) - min(L, 5)) > 1.5 * ref(max(H, 5) - min(L, 5), -5)

Any expression can go inside ref(), here a whole five-day range.

SPY 0.4679NVDA 0.5818TSLA 0.0676XLE 0.0609Try it

Up more than 10% in a quarter, near the high

roc(C, 63) > 10 and C >= 0.95 * max(H, 63)

Strength that has not faded. Rules read one symbol's own history; to compare against an index, rank the answers in your code.

SPY 0.0537NVDA 0.0537TSLA 0.6619XLE 0.9336Try it

Strategy pairs (an entry and an exit) are in Examples → Strategies; multi-question requests in Examples → Advanced.

Information, not investment advice. Beliefs and probabilities on this page are real responses for the session shown and change with every session.

Create an account Open the Playground Everything here also lives in the console, next to your keys and usage.