Use cases · Individuals
Active day trader: 20 ways to use Ora
Plans each session from the daily bar: gaps, ranges, volume and the levels that matter tomorrow. Each example is a complete, runnable request with the real answers it returned (31 requests, captured 2026-10-31), what they mean and, where it fits, the action it would send.
ora-fin-0.1.1. Another model changes the request JSON and the Playground link; run it there to see its answers.Rule functions and facts used by this player (46)
offset 12ref 8abs 6atr 6avg 4lowest 3sum 3atr_pct 2max 2min 2engulfing_bear 2gap_down 1gap_up 1inside_bar 1median 1percentrank 1hammer 1lowestbars 1tr 1hl2 1outside_bar 1marubozu 1ohlc4 1between 1doji 1roc 1spinning_top 1hlc3 1sma 1evening_star 1morning_star 1three_black_crows 1three_white_soldiers 1dragonfly_doji 1gravestone_doji 1greatest 1least 1sign 1swinghigh 1swinglow 1tweezer_bottom 1tweezer_top 1log 1sqrt 1std 1zscore 1
Examples 1–10 of 20 · page 1 of 2
Active day trader · example 1
TSLA gap plan for tomorrow's open
Plan the next session in Tesla from today's bar: did today gap, did the gap fill, and how likely is a gap tomorrow.
- StateTSLA
- Questions8 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"TSLA"} The server fills in the latest completed session.
Questions
gap_up | rule | O > C[-1] * 1.01Opened more than 1% above yesterday's close |
gap_faded | rule | O > C[-1] and C < C[-1]Gapped up but closed under yesterday's close |
gap_atr | rule | abs(O - C[-1]) > 0.5 * ref(atr(14), -1)Gap bigger than half an ATR |
fill | English → rule | Did today's gap up fill? |
full_gap_up | rule | gap_up()gap up candle: Today's whole range is above yesterday's high: an unfilled gap up. |
full_gap_dn | rule | gap_down()gap down candle: Today's whole range is below yesterday's low. |
gap_up_tmr | forecast | Will it gap up tomorrow? A gap up tomorrow |
gap_dn_tmr | forecast | Will it gap down tomorrow? A gap down tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
gap_upOpened more than 1% above yesterday's close | 0.0562 | false |
gap_fadedGapped up but closed under yesterday's close | 0.0708 | false |
gap_atrGap bigger than half an ATR | 0.8646 | true |
fillDid today's gap up fill compiled to (O > C[-1] * 1) and (L <= C[-1]) | 0.0708 | false |
full_gap_upgap up candle: Today's whole range is above yesterday's high: an unfilled gap up. | 0.0577 | false |
full_gap_dngap down candle: Today's whole range is below yesterday's low. | 0.2768 | false |
gap_up_tmrA gap up tomorrow | 0.224 | 22% · unlikely |
gap_dn_tmrA gap down tomorrow | 0.157 | 16% · unlikely |
What it means
For TSLA on the session of 2026-10-30: True now: Gap bigger than half an ATR. Not true: Opened more than 1% above yesterday's close; Gapped up but closed under yesterday's close; Did today's gap up fill; gap up candle: Today's whole range is above yesterday's high: an unfilled gap up.; gap down candle: Today's whole range is below yesterday's low.. Forecasts: A gap up tomorrow 22%; A gap down tomorrow 16%.
A day trader uses the gap facts to decide whether today's gap was traded or faded, and the two forecasts to size the overnight plan; low gap odds mean planning for a range open.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TSLA"
},
"questions": {
"gap_up": {
"type": "yes_no",
"ask": "O > C[-1] * 1.01"
},
"gap_faded": {
"type": "yes_no",
"ask": "O > C[-1] and C < C[-1]"
},
"gap_atr": {
"type": "yes_no",
"ask": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)"
},
"fill": {
"type": "yes_no",
"instructions": "Did today's gap up fill?"
},
"full_gap_up": {
"type": "yes_no",
"ask": "gap_up()"
},
"full_gap_dn": {
"type": "yes_no",
"ask": "gap_down()"
},
"gap_up_tmr": {
"type": "yes_no",
"instructions": "Will it gap up tomorrow?"
},
"gap_dn_tmr": {
"type": "yes_no",
"instructions": "Will it gap down tomorrow?"
}
}
}Response JSON (TSLA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"gap_up": {
"yes_no": 0.0562,
"rule": "O > C[-1] * 1.01",
"basis": "rule"
},
"gap_faded": {
"yes_no": 0.0708,
"rule": "O > C[-1] and C < C[-1]",
"basis": "rule"
},
"gap_atr": {
"yes_no": 0.8646,
"rule": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)",
"basis": "rule"
},
"fill": {
"yes_no": 0.0708,
"rule": "(O > C[-1] * 1) and (L <= C[-1])",
"basis": "pattern"
},
"full_gap_up": {
"yes_no": 0.0577,
"rule": "gap_up()",
"basis": "rule"
},
"full_gap_dn": {
"yes_no": 0.2768,
"rule": "gap_down()",
"basis": "rule"
},
"gap_up_tmr": {
"yes_no": 0.224
},
"gap_dn_tmr": {
"yes_no": 0.157
}
},
"context": {
"symbol": "TSLA",
"as_of": "2026-10-30"
}
}Active day trader · example 2
NVDA NR7 inside day: range-expansion setup for the open
Find a narrow-range day that often precedes a range expansion, and post the trigger levels to the trading channel.
- StateNVDA
- Questions4 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"NVDA"} The server fills in the latest completed session.
Questions
nr7 | rule | (H - L) < lowest(H - L, 6)Narrowest range of the last seven sessions (NR7) |
inside | rule | inside_bar()inside bar candle: Today's high and low are inside yesterday's (equal counts). |
tight | rule | (H - L) < 0.6 * median(H - L, 20)Today's range under 60% of its 20-day median range |
big5 | forecast | Will there be a big move in either direction in the next 5 days? A big move either way in 5 days |
Answers
| Question | Answer | Reading |
|---|---|---|
nr7Narrowest range of the last seven sessions (NR7) | 0.0569 | false |
insideinside bar candle: Today's high and low are inside yesterday's (equal counts). | 0.0564 | false |
tightToday's range under 60% of its 20-day median range | 0.0563 | false |
big5A big move either way in 5 days | 0.318 | 32% · unlikely |
Actions
Rules on the answers decide what to send.
nr7 >= 0.6 or (inside >= 0.6 and tight >= 0.6)→Slackdaytrade-roomelse→Slackdaytrade-room{
"text": "NVDA (2026-10-30): no compression setup today."
}What it means
For NVDA on the session of 2026-10-30: Not true: Narrowest range of the last seven sessions (NR7); inside bar candle: Today's high and low are inside yesterday's (equal counts).; Today's range under 60% of its 20-day median range. Forecasts: A big move either way in 5 days 32%. Fired: no_setup (Slack → daytrade-room).
If the narrow-range rules are true, the trader brackets yesterday's high and low for tomorrow; if not, there is no compression setup.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "NVDA"
},
"questions": {
"nr7": {
"type": "yes_no",
"ask": "(H - L) < lowest(H - L, 6)"
},
"inside": {
"type": "yes_no",
"ask": "inside_bar()"
},
"tight": {
"type": "yes_no",
"ask": "(H - L) < 0.6 * median(H - L, 20)"
},
"big5": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
},
"actions": [
{
"id": "nr7_alert",
"when": "nr7 >= 0.6 or (inside >= 0.6 and tight >= 0.6)",
"do": "slack",
"connection": "daytrade-room",
"message": "{{symbol}} ({{as_of}}): narrow-range day (NR7 {{nr7|pct}}, inside bar {{inside|pct}}). Bracket the range for the open. Big move in 5 days {{big5|pct}}."
},
{
"id": "no_setup",
"when": "else",
"do": "slack",
"connection": "daytrade-room",
"message": "{{symbol}} ({{as_of}}): no compression setup today."
}
],
"dry_run": true
}Response JSON (NVDA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"nr7": {
"yes_no": 0.0569,
"rule": "(H - L) < lowest(H - L, 6)",
"basis": "rule"
},
"inside": {
"yes_no": 0.0564,
"rule": "inside_bar()",
"basis": "rule"
},
"tight": {
"yes_no": 0.0563,
"rule": "(H - L) < 0.6 * median(H - L, 20)",
"basis": "rule"
},
"big5": {
"yes_no": 0.318
}
},
"context": {
"symbol": "NVDA",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "nr7_alert",
"fired": false,
"status": "skipped"
},
{
"id": "no_setup",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "daytrade-room",
"preview": {
"text": "NVDA (2026-10-30): no compression setup today."
}
}
]
}Active day trader · example 3
SPY trend day check before the next session
Was today a trend day up or down in SPY, and did it close at the extreme of its range.
- StateSPY
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"SPY"} The server fills in the latest completed session.
Questions
trend_up | rule | (O <= L + 0.2 * (H - L)) and (C >= H - 0.2 * (H - L))A trend day up: opened near the low, closed near the high |
top_q | rule | (C - L) / (H - L) > 0.75Closed in the top quarter of the day's range |
bot_q | rule | (C - L) / (H - L) < 0.25Closed in the bottom quarter of the day's range |
above_vwap | English → rule | Is the stock above its 5-day volume-weighted average price? |
up_tmr | forecast | Will the stock be up tomorrow? Up tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
trend_upA trend day up: opened near the low, closed near the high | 0.0537 | false |
top_qClosed in the top quarter of the day's range | 0.1294 | false |
bot_qClosed in the bottom quarter of the day's range | 0.1492 | false |
above_vwapIs the stock above its 5-day volume-weighted average price compiled to C > sum((H + L + C) / 3 * V, 5) / sum(V, 5) | 0.0802 | false |
up_tmrUp tomorrow | 0.532 | 53% · close to even |
What it means
For SPY on the session of 2026-10-30: Not true: A trend day up: opened near the low, closed near the high; Closed in the top quarter of the day's range; Closed in the bottom quarter of the day's range; Is the stock above its 5-day volume-weighted average price. Forecasts: Up tomorrow 53%.
A close in the top quarter after a trend day often carries into the next open; the trader leans long only if the forecast does not disagree.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"trend_up": {
"type": "yes_no",
"ask": "(O <= L + 0.2 * (H - L)) and (C >= H - 0.2 * (H - L))"
},
"top_q": {
"type": "yes_no",
"ask": "(C - L) / (H - L) > 0.75"
},
"bot_q": {
"type": "yes_no",
"ask": "(C - L) / (H - L) < 0.25"
},
"above_vwap": {
"type": "yes_no",
"instructions": "Is the stock above its 5-day volume-weighted average price?"
},
"up_tmr": {
"type": "yes_no",
"instructions": "Will the stock be up tomorrow?"
}
}
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend_up": {
"yes_no": 0.0537,
"rule": "(O <= L + 0.2 * (H - L)) and (C >= H - 0.2 * (H - L))",
"basis": "rule"
},
"top_q": {
"yes_no": 0.1294,
"rule": "(C - L) / (H - L) > 0.75",
"basis": "rule"
},
"bot_q": {
"yes_no": 0.1492,
"rule": "(C - L) / (H - L) < 0.25",
"basis": "rule"
},
"above_vwap": {
"yes_no": 0.0802,
"rule": "C > sum((H + L + C) / 3 * V, 5) / sum(V, 5)",
"basis": "pattern"
},
"up_tmr": {
"yes_no": 0.532
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
}
}Active day trader · example 4
Volume spike scanner: AMD, MU, SMCI, INTC
Which chip names traded at least twice their average volume today, and in which direction.
- State4 symbols
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"AMD"} then MU, SMCI, INTC, one request each. The server fills in the latest completed session.
Questions
spike | rule | V > 2 * ref(avg(V, 20), -1)Volume more than twice the previous 20-day average |
up_vol | rule | C > C[-1] and V > 1.5 * ref(avg(V, 20), -1)Up on heavy volume |
down_vol | rule | C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)Down on heavy volume |
rank | rule | percentrank(V, 50) > 90Volume in the top tenth of 50 sessions |
spike_tmr | forecast | Will volume spike tomorrow? A volume spike tomorrow |
Answers
| Symbol | spikerule | up_volrule | down_volrule | rankrule | spike_tmrforecast | Fired |
|---|---|---|---|---|---|---|
AMD | 0.5394 | 0.0537 | 0.882 | 0.6546 | 0.101 | none |
MU | 0.0879 | 0.0909 | 0.1799 | 0.362 | 0.035 | none |
SMCI | 0.1119 | 0.1678 | 0.2233 | 0.1421 | 0.022 | none |
INTC | 0.9463 | 0.0537 | 0.9463 | 0.6825 | 0.397 | short_list |
true false not known for rules; forecasts are odds. Hover a column for its question.
Actions
Rules on the answers decide what to send. Each symbol runs its own request, so each one can fire.
spike >= 0.6 and up_vol >= 0.6→Slackdaytrade-roomspike >= 0.6 and down_vol >= 0.6→Slackdaytrade-room{
"text": "INTC (2026-10-30): volume spike on a down close (95%). Short watchlist for the open."
}What it means
Session of 2026-10-30, 4 symbols: Volume more than twice the previous 20-day average: true for INTC of 4. Up on heavy volume: true for none of 4. Down on heavy volume: true for AMD, INTC of 4. Volume in the top tenth of 50 sessions: true for AMD, INTC of 4. Highest odds for “A volume spike tomorrow”: INTC at 40%. long_list fired for none. short_list fired for INTC.
Names with a spike and an up close go on tomorrow's long watchlist, spikes on a down close on the short list; the rest are ignored.
Request JSON (AMD; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AMD"
},
"questions": {
"spike": {
"type": "yes_no",
"ask": "V > 2 * ref(avg(V, 20), -1)"
},
"up_vol": {
"type": "yes_no",
"ask": "C > C[-1] and V > 1.5 * ref(avg(V, 20), -1)"
},
"down_vol": {
"type": "yes_no",
"ask": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)"
},
"rank": {
"type": "yes_no",
"ask": "percentrank(V, 50) > 90"
},
"spike_tmr": {
"type": "yes_no",
"instructions": "Will volume spike tomorrow?"
}
},
"actions": [
{
"id": "long_list",
"when": "spike >= 0.6 and up_vol >= 0.6",
"do": "slack",
"connection": "daytrade-room",
"message": "{{symbol}} ({{as_of}}): volume spike on an up close ({{up_vol|pct}}). Long watchlist for the open."
},
{
"id": "short_list",
"when": "spike >= 0.6 and down_vol >= 0.6",
"do": "slack",
"connection": "daytrade-room",
"message": "{{symbol}} ({{as_of}}): volume spike on a down close ({{down_vol|pct}}). Short watchlist for the open."
}
],
"dry_run": true
}Response JSON (AMD, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"spike": {
"yes_no": 0.5394,
"rule": "V > 2 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"up_vol": {
"yes_no": 0.0537,
"rule": "C > C[-1] and V > 1.5 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"down_vol": {
"yes_no": 0.882,
"rule": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"rank": {
"yes_no": 0.6546,
"rule": "percentrank(V, 50) > 90",
"basis": "rule"
},
"spike_tmr": {
"yes_no": 0.101
}
},
"context": {
"symbol": "AMD",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "long_list",
"fired": false,
"status": "skipped"
},
{
"id": "short_list",
"fired": false,
"status": "skipped"
}
]
}Active day trader · example 5
AAPL key reversal off a 10-day low
Spot a washout low that closed up on the day, the kind of reversal a day trader plays at the next open.
- StateAAPL
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"AAPL"} The server fills in the latest completed session.
Questions
key_rev | rule | L < lowest(L, 10) and C > C[-1]New 10-day low, but closed up on the day |
failed_bd | rule | L < lowest(L, 20) and C > lowest(L, 20)Undercut the 20-day low and closed back above it |
hammer | rule | hammer()hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back. |
lowbars | rule | lowestbars(L, 10) == 0Today is the lowest low of the last 10 bars |
up_tmr | forecast | Will the stock be up tomorrow? Up tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
key_revNew 10-day low, but closed up on the day | 0.127 | false |
failed_bdUndercut the 20-day low and closed back above it | 0.2556 | false |
hammerhammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back. | 0.1795 | false |
lowbarsToday is the lowest low of the last 10 bars | 0.55 | on the line (true) |
up_tmrUp tomorrow | 0.556 | 56% · close to even |
What it means
For AAPL on the session of 2026-10-30: Not true: New 10-day low, but closed up on the day; Undercut the 20-day low and closed back above it; hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back.. On the line: Today is the lowest low of the last 10 bars. Forecasts: Up tomorrow 56%.
A key reversal plus a failed breakdown is a long idea for the open with a stop under today's low; without them, no trade.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AAPL"
},
"questions": {
"key_rev": {
"type": "yes_no",
"ask": "L < lowest(L, 10) and C > C[-1]"
},
"failed_bd": {
"type": "yes_no",
"ask": "L < lowest(L, 20) and C > lowest(L, 20)"
},
"hammer": {
"type": "yes_no",
"ask": "hammer()"
},
"lowbars": {
"type": "yes_no",
"ask": "lowestbars(L, 10) == 0"
},
"up_tmr": {
"type": "yes_no",
"instructions": "Will the stock be up tomorrow?"
}
}
}Response JSON (AAPL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"key_rev": {
"yes_no": 0.127,
"rule": "L < lowest(L, 10) and C > C[-1]",
"basis": "rule"
},
"failed_bd": {
"yes_no": 0.2556,
"rule": "L < lowest(L, 20) and C > lowest(L, 20)",
"basis": "rule"
},
"hammer": {
"yes_no": 0.1795,
"rule": "hammer()",
"basis": "rule"
},
"lowbars": {
"yes_no": 0.55,
"rule": "lowestbars(L, 10) == 0",
"basis": "rule"
},
"up_tmr": {
"yes_no": 0.556
}
},
"context": {
"symbol": "AAPL",
"as_of": "2026-10-30"
}
}Active day trader · example 6
Gap-down reclaim to my order ticket (webhook)
When a stock gaps below yesterday's low and closes back above yesterday's close, send a staged order to the broker bridge.
- StateNFLX
- Questions4 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"NFLX"} The server fills in the latest completed session.
Questions
reclaim | rule | O < L[-1] and C > C[-1]Opened under yesterday's low, closed up on the day |
open_below | rule | O < L[-1]Opened below yesterday's low |
liquid | rule | avg(C * V, 20) > 100000000Trades more than $100 million a day |
up_tmr | forecast | Will the stock be up tomorrow? Up tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
reclaimOpened under yesterday's low, closed up on the day | 0.1484 | false |
open_belowOpened below yesterday's low | 0.1484 | false |
liquidTrades more than $100 million a day | 0.9463 | true |
up_tmrUp tomorrow | 0.499 | 50% · close to even |
Actions
Rules on the answers decide what to send.
reclaim >= 0.6 and liquid >= 0.6→Webhookbroker-bridgeelse→Webhookbroker-bridge{
"symbol": "NFLX",
"action": "none",
"as_of": "2026-10-30"
}What it means
For NFLX on the session of 2026-10-30: True now: Trades more than $100 million a day. Not true: Opened under yesterday's low, closed up on the day; Opened below yesterday's low. Forecasts: Up tomorrow 50%. Fired: log_none (Webhook → broker-bridge).
The order is staged only when the reclaim rule is true and the stock is liquid; otherwise the else branch logs that the setup did not appear.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "NFLX"
},
"questions": {
"reclaim": {
"type": "yes_no",
"ask": "O < L[-1] and C > C[-1]"
},
"open_below": {
"type": "yes_no",
"ask": "O < L[-1]"
},
"liquid": {
"type": "yes_no",
"ask": "avg(C * V, 20) > 100000000"
},
"up_tmr": {
"type": "yes_no",
"instructions": "Will the stock be up tomorrow?"
}
},
"actions": [
{
"id": "stage_long",
"when": "reclaim >= 0.6 and liquid >= 0.6",
"do": "webhook",
"connection": "broker-bridge",
"body": {
"symbol": "{{symbol}}",
"side": "buy",
"type": "limit_at_open",
"reason": "gap_down_reclaim",
"p_reclaim": "{{reclaim}}",
"p_up_tomorrow": "{{up_tmr}}",
"as_of": "{{as_of}}"
}
},
{
"id": "log_none",
"when": "else",
"do": "webhook",
"connection": "broker-bridge",
"body": {
"symbol": "{{symbol}}",
"action": "none",
"as_of": "{{as_of}}"
}
}
],
"dry_run": true
}Response JSON (NFLX, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"reclaim": {
"yes_no": 0.1484,
"rule": "O < L[-1] and C > C[-1]",
"basis": "rule"
},
"open_below": {
"yes_no": 0.1484,
"rule": "O < L[-1]",
"basis": "rule"
},
"liquid": {
"yes_no": 0.9463,
"rule": "avg(C * V, 20) > 100000000",
"basis": "rule"
},
"up_tmr": {
"yes_no": 0.499
}
},
"context": {
"symbol": "NFLX",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "stage_long",
"fired": false,
"status": "skipped"
},
{
"id": "log_none",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "broker-bridge",
"preview": {
"body": {
"symbol": "NFLX",
"action": "none",
"as_of": "2026-10-30"
}
}
}
]
}Active day trader · example 7
AMZN intraday stop and size from ATR
Is a stop under yesterday's low tight enough in ATR terms, and does a 2-ATR stop fit a 1% risk budget.
- StateAMZN
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"AMZN"} The server fills in the latest completed session.
Questions
stop | rule | C > L[-1] and C - L[-1] < atr(14)A stop under yesterday's low is less than 1 ATR away |
size | rule | 0.01 / (2 * atr(14) / C) >= 0.25A 2-ATR stop risking 1% allows at least a 25% position |
atr3 | rule | atr_pct(14) > 3A typical day moves more than 3% |
tr_wide | rule | tr() > 1.5 * ref(atr(14), -1)True range 1.5× yesterday's ATR |
move2 | forecast | Will the stock move more than 2% in either direction in 5 trading days? A 2%+ move either way in 5 days |
Answers
| Question | Answer | Reading |
|---|---|---|
stopA stop under yesterday's low is less than 1 ATR away | 0.3732 | false |
sizeA 2-ATR stop risking 1% allows at least a 25% position | 0.0537 | false |
atr3A typical day moves more than 3% | 0.5315 | on the line (true) |
tr_wideTrue range 1.5× yesterday's ATR | 0.9016 | true |
move2A 2%+ move either way in 5 days | 0.26 | 26% · unlikely |
What it means
For AMZN on the session of 2026-10-30: True now: True range 1.5× yesterday's ATR. Not true: A stop under yesterday's low is less than 1 ATR away; A 2-ATR stop risking 1% allows at least a 25% position. On the line: A typical day moves more than 3%. Forecasts: A 2%+ move either way in 5 days 26%.
If the stop is under one ATR the trade can be sized normally; a wide true range or ATR over 3% means a smaller size.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AMZN"
},
"questions": {
"stop": {
"type": "yes_no",
"ask": "C > L[-1] and C - L[-1] < atr(14)"
},
"size": {
"type": "yes_no",
"ask": "0.01 / (2 * atr(14) / C) >= 0.25"
},
"atr3": {
"type": "yes_no",
"ask": "atr_pct(14) > 3"
},
"tr_wide": {
"type": "yes_no",
"ask": "tr() > 1.5 * ref(atr(14), -1)"
},
"move2": {
"type": "yes_no",
"instructions": "Will the stock move more than 2% in either direction in 5 trading days?"
}
}
}Response JSON (AMZN, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"stop": {
"yes_no": 0.3732,
"rule": "C > L[-1] and C - L[-1] < atr(14)",
"basis": "rule"
},
"size": {
"yes_no": 0.0537,
"rule": "0.01 / (2 * atr(14) / C) >= 0.25",
"basis": "rule"
},
"atr3": {
"yes_no": 0.5315,
"rule": "atr_pct(14) > 3",
"basis": "rule"
},
"tr_wide": {
"yes_no": 0.9016,
"rule": "tr() > 1.5 * ref(atr(14), -1)",
"basis": "rule"
},
"move2": {
"yes_no": 0.26
}
},
"context": {
"symbol": "AMZN",
"as_of": "2026-10-30"
}
}Active day trader · example 8
Pre-market gap watchlist, every weekday at 9:00
Each morning before the open, run the same gap and range questions over the day trader's list and post the names worth watching.
- ScheduleMon–Fri at 09:00 ET
- State6 symbols
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"TSLA"} then NVDA, AMD, AAPL, AMZN, SPY, one request each. The server fills in the latest completed session.
Questions
gap_atr | rule | abs(O - C[-1]) > 0.5 * ref(atr(14), -1)Gap bigger than half an ATR |
range_top | English → rule | Is the stock in the top 10% of its 20-day range? |
nr7 | rule | (H - L) < lowest(H - L, 6)Narrowest range of the last seven sessions (NR7) |
gap_up | forecast | Will it gap up tomorrow? A gap up tomorrow |
gap_dn | forecast | Will it gap down tomorrow? A gap down tomorrow |
Answers
| Symbol | gap_atrrule | range_toprule | nr7rule | gap_upforecast | gap_dnforecast | Fired |
|---|---|---|---|---|---|---|
TSLA | 0.8646 | 0.2984 | 0.0584 | 0.224 | 0.157 | watch |
NVDA | 0.8363 | 0.0553 | 0.0569 | 0.191 | 0.116 | watch |
AMD | 0.9463 | 0.0568 | 0.0703 | 0.363 | 0.252 | watch |
AAPL | 0.2375 | 0.1574 | 0.0537 | 0.053 | 0.056 | none |
AMZN | 0.9463 | 0.0627 | 0.0537 | 0.198 | 0.131 | watch |
SPY | 0.9344 | 0.0569 | 0.0547 | 0.029 | 0.029 | watch |
true false not known for rules; forecasts are odds. Hover a column for its question.
Actions
Rules on the answers decide what to send. Each symbol runs its own request, so each one can fire.
gap_atr >= 0.6 or nr7 >= 0.6→Slackdaytrade-room{
"text": "TSLA (2026-10-30) on today's list: gap vs ATR 86%, NR7 6%. Gap up 22% / down 16%."
}{
"text": "NVDA (2026-10-30) on today's list: gap vs ATR 84%, NR7 6%. Gap up 19% / down 12%."
}{
"text": "AMD (2026-10-30) on today's list: gap vs ATR 95%, NR7 7%. Gap up 36% / down 25%."
}{
"text": "AMZN (2026-10-30) on today's list: gap vs ATR 95%, NR7 5%. Gap up 20% / down 13%."
}{
"text": "SPY (2026-10-30) on today's list: gap vs ATR 93%, NR7 5%. Gap up 3% / down 3%."
}What it means
Session of 2026-10-30, 6 symbols: Gap bigger than half an ATR: true for TSLA, NVDA, AMD, AMZN, SPY of 6. Is the stock in the top 10% of its 20-day range: true for none of 6. Narrowest range of the last seven sessions (NR7): true for none of 6. Highest odds for “A gap up tomorrow”: AMD at 36%. watch fired for TSLA, NVDA, AMD, AMZN, SPY.
Only names with a large gap or a narrow range make the morning list; the rest stay quiet.
As a scheduled workflow (Mon–Fri at 09:00 ET)
Create it under Workflows in the console: it runs these questions for every symbol on the schedule and fires the actions per symbol. The answers above are what one run returned.
{
"name": "Pre-market gap watchlist, every weekday at 9:00",
"symbols": "TSLA NVDA AMD AAPL AMZN SPY",
"days": [
1,
2,
3,
4,
5
],
"at_time": "09:00",
"model": "ora-fin-0.1.1",
"questions": {
"gap_atr": {
"type": "yes_no",
"ask": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)"
},
"range_top": {
"type": "yes_no",
"instructions": "Is the stock in the top 10% of its 20-day range?"
},
"nr7": {
"type": "yes_no",
"ask": "(H - L) < lowest(H - L, 6)"
},
"gap_up": {
"type": "yes_no",
"instructions": "Will it gap up tomorrow?"
},
"gap_dn": {
"type": "yes_no",
"instructions": "Will it gap down tomorrow?"
}
},
"actions": [
{
"id": "watch",
"when": "gap_atr >= 0.6 or nr7 >= 0.6",
"do": "slack",
"connection": "daytrade-room",
"message": "{{symbol}} ({{as_of}}) on today's list: gap vs ATR {{gap_atr|pct}}, NR7 {{nr7|pct}}. Gap up {{gap_up|pct}} / down {{gap_dn|pct}}."
}
]
}Request JSON (TSLA; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TSLA"
},
"questions": {
"gap_atr": {
"type": "yes_no",
"ask": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)"
},
"range_top": {
"type": "yes_no",
"instructions": "Is the stock in the top 10% of its 20-day range?"
},
"nr7": {
"type": "yes_no",
"ask": "(H - L) < lowest(H - L, 6)"
},
"gap_up": {
"type": "yes_no",
"instructions": "Will it gap up tomorrow?"
},
"gap_dn": {
"type": "yes_no",
"instructions": "Will it gap down tomorrow?"
}
},
"actions": [
{
"id": "watch",
"when": "gap_atr >= 0.6 or nr7 >= 0.6",
"do": "slack",
"connection": "daytrade-room",
"message": "{{symbol}} ({{as_of}}) on today's list: gap vs ATR {{gap_atr|pct}}, NR7 {{nr7|pct}}. Gap up {{gap_up|pct}} / down {{gap_dn|pct}}."
}
],
"dry_run": true
}Response JSON (TSLA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"gap_atr": {
"yes_no": 0.8646,
"rule": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)",
"basis": "rule"
},
"range_top": {
"yes_no": 0.2984,
"rule": "(C - min(L, 20)) / (max(H, 20) - min(L, 20)) >= 0.9",
"basis": "pattern"
},
"nr7": {
"yes_no": 0.0584,
"rule": "(H - L) < lowest(H - L, 6)",
"basis": "rule"
},
"gap_up": {
"yes_no": 0.224
},
"gap_dn": {
"yes_no": 0.157
}
},
"context": {
"symbol": "TSLA",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "watch",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "daytrade-room",
"preview": {
"text": "TSLA (2026-10-30) on today's list: gap vs ATR 86%, NR7 6%. Gap up 22% / down 16%."
}
}
]
}Active day trader · example 9
QQQ outside day: who won the session
An outside day takes out both sides of yesterday's range; where it closes says who won.
- StateQQQ
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"QQQ"} The server fills in the latest completed session.
Questions
outside | rule | outside_bar()outside bar candle: Today's high above yesterday's and low below it. |
close_up | rule | C > C[-1]Closed higher than yesterday |
upper_half | rule | C > hl2()Closed above the middle of the day's range |
engulf_bear | rule | engulfing_bear()engulfing bear candle: A red body that engulfs yesterday's green body. |
up_tmr | forecast | Will the stock be up tomorrow? Up tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
outsideoutside bar candle: Today's high above yesterday's and low below it. | 0.0537 | false |
close_upClosed higher than yesterday | 0.0537 | false |
upper_halfClosed above the middle of the day's range | 0.3629 | false |
engulf_bearengulfing bear candle: A red body that engulfs yesterday's green body. | 0.0537 | false |
up_tmrUp tomorrow | 0.533 | 53% · close to even |
What it means
For QQQ on the session of 2026-10-30: Not true: outside bar candle: Today's high above yesterday's and low below it.; Closed higher than yesterday; Closed above the middle of the day's range; engulfing bear candle: A red body that engulfs yesterday's green body.. Forecasts: Up tomorrow 53%.
An outside day closing in the upper half favors buyers into the next session; a bearish engulfing instead flags the opposite.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "QQQ"
},
"questions": {
"outside": {
"type": "yes_no",
"ask": "outside_bar()"
},
"close_up": {
"type": "yes_no",
"ask": "C > C[-1]"
},
"upper_half": {
"type": "yes_no",
"ask": "C > hl2()"
},
"engulf_bear": {
"type": "yes_no",
"ask": "engulfing_bear()"
},
"up_tmr": {
"type": "yes_no",
"instructions": "Will the stock be up tomorrow?"
}
}
}Response JSON (QQQ, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"outside": {
"yes_no": 0.0537,
"rule": "outside_bar()",
"basis": "rule"
},
"close_up": {
"yes_no": 0.0537,
"rule": "C > C[-1]",
"basis": "rule"
},
"upper_half": {
"yes_no": 0.3629,
"rule": "C > hl2()",
"basis": "rule"
},
"engulf_bear": {
"yes_no": 0.0537,
"rule": "engulfing_bear()",
"basis": "rule"
},
"up_tmr": {
"yes_no": 0.533
}
},
"context": {
"symbol": "QQQ",
"as_of": "2026-10-30"
}
}Active day trader · example 10
Marubozu momentum in XLE
A full-body candle with almost no wicks shows one-sided control; check it and the volume behind it.
- StateXLE
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"XLE"} The server fills in the latest completed session.
Questions
marubozu | rule | marubozu()marubozu candle: Body at least 90% of the range: almost no wicks. |
green | rule | C > OClosed above its open |
vol | rule | V > avg(V, 20)Volume above its 20-day average |
ohlc | rule | ohlc4() > ref(ohlc4(), -1)The day's average price is above yesterday's |
up_tmr | forecast | Will the stock be up tomorrow? Up tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
marubozumarubozu candle: Body at least 90% of the range: almost no wicks. | 0.1449 | false |
greenClosed above its open | 0.801 | true |
volVolume above its 20-day average | 0.4991 | on the line (false) |
ohlcThe day's average price is above yesterday's | 0.9083 | true |
up_tmrUp tomorrow | 0.584 | 58% · close to even |
What it means
For XLE on the session of 2026-10-30: True now: Closed above its open; The day's average price is above yesterday's. Not true: marubozu candle: Body at least 90% of the range: almost no wicks.. On the line: Volume above its 20-day average. Forecasts: Up tomorrow 58%.
A green marubozu on above-average volume is a continuation idea for the open; a red one is a fade-the-bounce idea.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLE"
},
"questions": {
"marubozu": {
"type": "yes_no",
"ask": "marubozu()"
},
"green": {
"type": "yes_no",
"ask": "C > O"
},
"vol": {
"type": "yes_no",
"ask": "V > avg(V, 20)"
},
"ohlc": {
"type": "yes_no",
"ask": "ohlc4() > ref(ohlc4(), -1)"
},
"up_tmr": {
"type": "yes_no",
"instructions": "Will the stock be up tomorrow?"
}
}
}Response JSON (XLE, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"marubozu": {
"yes_no": 0.1449,
"rule": "marubozu()",
"basis": "rule"
},
"green": {
"yes_no": 0.801,
"rule": "C > O",
"basis": "rule"
},
"vol": {
"yes_no": 0.4991,
"rule": "V > avg(V, 20)",
"basis": "rule"
},
"ohlc": {
"yes_no": 0.9083,
"rule": "ohlc4() > ref(ohlc4(), -1)",
"basis": "rule"
},
"up_tmr": {
"yes_no": 0.584
}
},
"context": {
"symbol": "XLE",
"as_of": "2026-10-30"
}
}Information, not investment advice. Rules answer from the latest completed daily session; forecasts are probabilities. Actions ran as dry runs: nothing was sent. More in Individuals: Retail investor, Swing trader, Options trader, Dividend investor, Long-term passive investor, Crypto trader, FX trader, Commodities trader, Social trading community, Students and universities.