Ora
All use cases All industries

Individuals

Retail investorActive day traderSwing traderOptions traderDividend investorLong-term passive investorCrypto traderFX traderCommodities traderSocial trading communityStudents and universities

Buy side

Financial advisor / RIAWealth managerFamily officeHedge fund PMQuant researcherPortfolio manager (long-only)Risk managerPrivate equityVC / growth investorFund-of-funds allocator

Sell side

Equity research analystSell-side sales traderExecution trader / deskMarket makerProp trading firmCompliance officer

Corporates

Investor relations teamCorporate treasuryCFO officeBank credit analystFinancial journalist / media

Builders

Quant developerFintech app builderRobo-advisorBroker appAlgo / bot developerData vendor / platformTrading educator / newsletter

Institutions

ETF issuerIndex providerInsurance investment officePension fundEndowmentSovereign wealth fund

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.

Answers were captured on 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.

ora-fin-0.1.1TSLA8 questions
  1. StateTSLA
  2. Questions8 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"TSLA"} The server fills in the latest completed session.

Questions

gap_upruleO > C[-1] * 1.01
Opened more than 1% above yesterday's close
gap_fadedruleO > C[-1] and C < C[-1]
Gapped up but closed under yesterday's close
gap_atrruleabs(O - C[-1]) > 0.5 * ref(atr(14), -1)
Gap bigger than half an ATR
fillEnglish → ruleDid today's gap up fill?
full_gap_uprulegap_up()
gap up candle: Today's whole range is above yesterday's high: an unfilled gap up.
full_gap_dnrulegap_down()
gap down candle: Today's whole range is below yesterday's low.
gap_up_tmrforecastWill it gap up tomorrow?
A gap up tomorrow
gap_dn_tmrforecastWill it gap down tomorrow?
A gap down tomorrow

Answers

QuestionAnswerReading
gap_up
Opened more than 1% above yesterday's close
0.0562false
gap_faded
Gapped up but closed under yesterday's close
0.0708false
gap_atr
Gap bigger than half an ATR
0.8646true
fill
Did today's gap up fill
compiled to (O > C[-1] * 1) and (L <= C[-1])
0.0708false
full_gap_up
gap up candle: Today's whole range is above yesterday's high: an unfilled gap up.
0.0577false
full_gap_dn
gap down candle: Today's whole range is below yesterday's low.
0.2768false
gap_up_tmr
A gap up tomorrow
0.22422% · unlikely
gap_dn_tmr
A gap down tomorrow
0.15716% · 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"
  }
}

abs atr gap_down gap_up offset ref

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.

ora-fin-0.1.1NVDA4 questions2 actions
  1. StateNVDA
  2. Questions4 asked
  3. Answersreal, captured
  4. Actions2 rules · dry run

State

{"symbol":"NVDA"} The server fills in the latest completed session.

Questions

nr7rule(H - L) < lowest(H - L, 6)
Narrowest range of the last seven sessions (NR7)
insideruleinside_bar()
inside bar candle: Today's high and low are inside yesterday's (equal counts).
tightrule(H - L) < 0.6 * median(H - L, 20)
Today's range under 60% of its 20-day median range
big5forecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days

Answers

QuestionAnswerReading
nr7
Narrowest range of the last seven sessions (NR7)
0.0569false
inside
inside bar candle: Today's high and low are inside yesterday's (equal counts).
0.0564false
tight
Today's range under 60% of its 20-day median range
0.0563false
big5
A big move either way in 5 days
0.31832% · unlikely

Actions

Rules on the answers decide what to send.

nr7 >= 0.6 or (inside >= 0.6 and tight >= 0.6)→Slackdaytrade-room
else→Slackdaytrade-room
What each action would send 1 of 2 fired · dry run, nothing sent
nr7_alertrule false: skipped
no_setupwould send (dry run)Slack → daytrade-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."
      }
    }
  ]
}

inside_bar lowest median

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.

ora-fin-0.1.1SPY5 questions
  1. StateSPY
  2. Questions5 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"SPY"} The server fills in the latest completed session.

Questions

trend_uprule(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_qrule(C - L) / (H - L) > 0.75
Closed in the top quarter of the day's range
bot_qrule(C - L) / (H - L) < 0.25
Closed in the bottom quarter of the day's range
above_vwapEnglish → ruleIs the stock above its 5-day volume-weighted average price?
up_tmrforecastWill the stock be up tomorrow?
Up tomorrow

Answers

QuestionAnswerReading
trend_up
A trend day up: opened near the low, closed near the high
0.0537false
top_q
Closed in the top quarter of the day's range
0.1294false
bot_q
Closed in the bottom quarter of the day's range
0.1492false
above_vwap
Is the stock above its 5-day volume-weighted average price
compiled to C > sum((H + L + C) / 3 * V, 5) / sum(V, 5)
0.0802false
up_tmr
Up tomorrow
0.53253% · 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"
  }
}

sum

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.

ora-fin-0.1.14 symbols, one request each5 questions2 actions
  1. State4 symbols
  2. Questions5 asked
  3. Answersreal, captured
  4. Actions2 rules · dry run

State

{"symbol":"AMD"} then MU, SMCI, INTC, one request each. The server fills in the latest completed session.

Questions

spikeruleV > 2 * ref(avg(V, 20), -1)
Volume more than twice the previous 20-day average
up_volruleC > C[-1] and V > 1.5 * ref(avg(V, 20), -1)
Up on heavy volume
down_volruleC < C[-1] and V > 1.5 * ref(avg(V, 20), -1)
Down on heavy volume
rankrulepercentrank(V, 50) > 90
Volume in the top tenth of 50 sessions
spike_tmrforecastWill volume spike tomorrow?
A volume spike tomorrow

Answers

Symbolspikeruleup_volruledown_volrulerankrulespike_tmrforecastFired
AMD0.53940.05370.8820.65460.101none
MU0.08790.09090.17990.3620.035none
SMCI0.11190.16780.22330.14210.022none
INTC0.94630.05370.94630.68250.397short_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-room
spike >= 0.6 and down_vol >= 0.6→Slackdaytrade-room
AMD 0 of 2 fired · dry run, nothing sent
MU 0 of 2 fired · dry run, nothing sent
SMCI 0 of 2 fired · dry run, nothing sent
INTC 1 of 2 fired · dry run, nothing sent
long_listrule false: skipped
short_listwould send (dry run)Slack → daytrade-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"
    }
  ]
}

avg offset percentrank ref

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.

ora-fin-0.1.1AAPL5 questions
  1. StateAAPL
  2. Questions5 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"AAPL"} The server fills in the latest completed session.

Questions

key_revruleL < lowest(L, 10) and C > C[-1]
New 10-day low, but closed up on the day
failed_bdruleL < lowest(L, 20) and C > lowest(L, 20)
Undercut the 20-day low and closed back above it
hammerrulehammer()
hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back.
lowbarsrulelowestbars(L, 10) == 0
Today is the lowest low of the last 10 bars
up_tmrforecastWill the stock be up tomorrow?
Up tomorrow

Answers

QuestionAnswerReading
key_rev
New 10-day low, but closed up on the day
0.127false
failed_bd
Undercut the 20-day low and closed back above it
0.2556false
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.
0.1795false
lowbars
Today is the lowest low of the last 10 bars
0.55on the line (true)
up_tmr
Up tomorrow
0.55656% · 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"
  }
}

hammer lowest lowestbars offset

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.

ora-fin-0.1.1NFLX4 questions2 actions
  1. StateNFLX
  2. Questions4 asked
  3. Answersreal, captured
  4. Actions2 rules · dry run

State

{"symbol":"NFLX"} The server fills in the latest completed session.

Questions

reclaimruleO < L[-1] and C > C[-1]
Opened under yesterday's low, closed up on the day
open_belowruleO < L[-1]
Opened below yesterday's low
liquidruleavg(C * V, 20) > 100000000
Trades more than $100 million a day
up_tmrforecastWill the stock be up tomorrow?
Up tomorrow

Answers

QuestionAnswerReading
reclaim
Opened under yesterday's low, closed up on the day
0.1484false
open_below
Opened below yesterday's low
0.1484false
liquid
Trades more than $100 million a day
0.9463true
up_tmr
Up tomorrow
0.49950% · close to even

Actions

Rules on the answers decide what to send.

reclaim >= 0.6 and liquid >= 0.6→Webhookbroker-bridge
else→Webhookbroker-bridge
What each action would send 1 of 2 fired · dry run, nothing sent
stage_longrule false: skipped
log_nonewould send (dry run)Webhook → broker-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"
        }
      }
    }
  ]
}

avg offset

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.

ora-fin-0.1.1AMZN5 questions
  1. StateAMZN
  2. Questions5 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"AMZN"} The server fills in the latest completed session.

Questions

stopruleC > L[-1] and C - L[-1] < atr(14)
A stop under yesterday's low is less than 1 ATR away
sizerule0.01 / (2 * atr(14) / C) >= 0.25
A 2-ATR stop risking 1% allows at least a 25% position
atr3ruleatr_pct(14) > 3
A typical day moves more than 3%
tr_wideruletr() > 1.5 * ref(atr(14), -1)
True range 1.5× yesterday's ATR
move2forecastWill the stock move more than 2% in either direction in 5 trading days?
A 2%+ move either way in 5 days

Answers

QuestionAnswerReading
stop
A stop under yesterday's low is less than 1 ATR away
0.3732false
size
A 2-ATR stop risking 1% allows at least a 25% position
0.0537false
atr3
A typical day moves more than 3%
0.5315on the line (true)
tr_wide
True range 1.5× yesterday's ATR
0.9016true
move2
A 2%+ move either way in 5 days
0.2626% · 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"
  }
}

atr atr_pct offset ref tr

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.

ora-fin-0.1.16 symbols, one request each5 questions1 actionworkflow · Mon–Fri at 09:00 ET
  1. ScheduleMon–Fri at 09:00 ET
  2. State6 symbols
  3. Questions5 asked
  4. Answersreal, captured
  5. 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_atrruleabs(O - C[-1]) > 0.5 * ref(atr(14), -1)
Gap bigger than half an ATR
range_topEnglish → ruleIs the stock in the top 10% of its 20-day range?
nr7rule(H - L) < lowest(H - L, 6)
Narrowest range of the last seven sessions (NR7)
gap_upforecastWill it gap up tomorrow?
A gap up tomorrow
gap_dnforecastWill it gap down tomorrow?
A gap down tomorrow

Answers

Symbolgap_atrrulerange_toprulenr7rulegap_upforecastgap_dnforecastFired
TSLA0.86460.29840.05840.2240.157watch
NVDA0.83630.05530.05690.1910.116watch
AMD0.94630.05680.07030.3630.252watch
AAPL0.23750.15740.05370.0530.056none
AMZN0.94630.06270.05370.1980.131watch
SPY0.93440.05690.05470.0290.029watch

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
TSLA 1 of 1 fired · dry run, nothing sent
watchwould send (dry run)Slack → daytrade-room
{
  "text": "TSLA (2026-10-30) on today's list: gap vs ATR 86%, NR7 6%. Gap up 22% / down 16%."
}
NVDA 1 of 1 fired · dry run, nothing sent
watchwould send (dry run)Slack → daytrade-room
{
  "text": "NVDA (2026-10-30) on today's list: gap vs ATR 84%, NR7 6%. Gap up 19% / down 12%."
}
AMD 1 of 1 fired · dry run, nothing sent
watchwould send (dry run)Slack → daytrade-room
{
  "text": "AMD (2026-10-30) on today's list: gap vs ATR 95%, NR7 7%. Gap up 36% / down 25%."
}
AAPL 0 of 1 fired · dry run, nothing sent
AMZN 1 of 1 fired · dry run, nothing sent
watchwould send (dry run)Slack → daytrade-room
{
  "text": "AMZN (2026-10-30) on today's list: gap vs ATR 95%, NR7 5%. Gap up 20% / down 13%."
}
SPY 1 of 1 fired · dry run, nothing sent
watchwould send (dry run)Slack → daytrade-room
{
  "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%."
      }
    }
  ]
}

abs atr lowest max min offset ref

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.

ora-fin-0.1.1QQQ5 questions
  1. StateQQQ
  2. Questions5 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"QQQ"} The server fills in the latest completed session.

Questions

outsideruleoutside_bar()
outside bar candle: Today's high above yesterday's and low below it.
close_upruleC > C[-1]
Closed higher than yesterday
upper_halfruleC > hl2()
Closed above the middle of the day's range
engulf_bearruleengulfing_bear()
engulfing bear candle: A red body that engulfs yesterday's green body.
up_tmrforecastWill the stock be up tomorrow?
Up tomorrow

Answers

QuestionAnswerReading
outside
outside bar candle: Today's high above yesterday's and low below it.
0.0537false
close_up
Closed higher than yesterday
0.0537false
upper_half
Closed above the middle of the day's range
0.3629false
engulf_bear
engulfing bear candle: A red body that engulfs yesterday's green body.
0.0537false
up_tmr
Up tomorrow
0.53353% · 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"
  }
}

engulfing_bear hl2 offset outside_bar

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.

ora-fin-0.1.1XLE5 questions
  1. StateXLE
  2. Questions5 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"XLE"} The server fills in the latest completed session.

Questions

marubozurulemarubozu()
marubozu candle: Body at least 90% of the range: almost no wicks.
greenruleC > O
Closed above its open
volruleV > avg(V, 20)
Volume above its 20-day average
ohlcruleohlc4() > ref(ohlc4(), -1)
The day's average price is above yesterday's
up_tmrforecastWill the stock be up tomorrow?
Up tomorrow

Answers

QuestionAnswerReading
marubozu
marubozu candle: Body at least 90% of the range: almost no wicks.
0.1449false
green
Closed above its open
0.801true
vol
Volume above its 20-day average
0.4991on the line (false)
ohlc
The day's average price is above yesterday's
0.9083true
up_tmr
Up tomorrow
0.58458% · 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"
  }
}

avg marubozu ohlc4 ref

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.

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