Ora
Example groups Act on answersAsk by symbolActionsWorkflowsAdvancedEvents & price actionStrategies (rule language)FinancialGap fillParaphrase checkQuestion grammar (preview)Text (general)Tool calling

Learn more

ActionsWorkflowsGuides

Examples

Ready-to-run requests

Every example is a complete request. Read the JSON, take it to code in eight languages, or open it in the Playground once you've signed in. Action examples show what they would send, from a real dry run.

Actions can go toSlackWebhook (HTTPS)Email · soonWhat each one sends →

Act on answers

Three real dry runs (2026-10-30): the request, the answers and exactly what would be sent. Nothing was delivered.

Slack alert

Drawdown alert to the trading desk (Slack)

A rule on the answers posts to a Slack channel through a connection named trading-desk. Post to the desk's Slack channel when the chance of a 5% drawdown within a month passes 55%, with the upside odds for context. Needs a Slack connection named trading-desk.

drop5 >= 0.55→ Slacktrading-desk

Request

{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2026-10-21",
    "context": {
      "return_1d": 0.03414,
      "return_5d": 0.05259,
      "return_20d": 0.01671,
      "return_60d": 0.25706,
      "return_252d": -0.13624,
      "volatility_5d": 0.42207,
      "volatility_20d": 0.34942,
      "volatility_60d": 0.3934,
      "vol_ratio_5_20": 1.20792,
      "volume_ratio": 1.30117,
      "volume_ratio_5d": 1.08622,
      "atr_pct": 0.03188,
      "rsi_14": 59.77,
      "dist_sma_20": 0.04443,
      "dist_sma_50": 0.06706,
      "dist_sma_200": -0.0012,
      "dist_high_252": -0.22525,
      "dist_low_252": 0.29958,
      "gap_1d": 0.02087,
      "range_pct_1d": 0.02156,
      "close_location": 0.71523,
      "dollar_volume_log": 10.112,
      "market_return_5d": 0.00453,
      "market_volatility_20d": 0.08848,
      "dist_high_20": -0.0061,
      "dist_low_20": 0.11735,
      "beta_1y": 2.21228,
      "body_pct": 0.013,
      "upper_wick": 0.28477,
      "lower_wick": 0.12,
      "range_vs_atr": 0.67641,
      "sma50_vs_sma200": -0.06397,
      "earnings_next_5d": 1,
      "days_to_earnings": 1,
      "days_since_earnings": 63,
      "earn_usual_move": 0.04462,
      "last_earn_reaction": -0.14524
    }
  },
  "questions": {
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "desk_alert",
      "when": "drop5 >= 0.55",
      "do": "slack",
      "connection": "trading-desk",
      "message": "{{symbol}} ({{as_of}}): {{drop5|pct}} chance of a 5% drawdown within a month, {{rally5|pct}} chance of a 5% rally. Two-way risk: consider sizing down."
    }
  ],
  "dry_run": true
}

Answers and what it would send

drop5 0.584 · rally5 0.586

Actions 1 of 1 fired · dry run, nothing sent
desk_alertwould send (dry run)slack → trading-desk
{
  "text": "TSLA (2026-10-21): 58% chance of a 5% drawdown within a month, 59% chance of a 5% rally. Two-way risk: consider sizing down."
}

Signed webhook to an OMS

Gap trade signal to your order system (webhook, else)

Typed values in a JSON body, POSTed to your order system and signed with X-Jev-Signature. On an opening gap: send an intraday fade if the gap should fill today, a 5-day swing if it should fill within the week, and otherwise tell the desk there's no trade. Typed values in the body. Needs a webhook connection named my-oms.

fill_today >= 0.6→ Webhookmy-oms
fill_today < 0.6 and fill_5d >= 0.55→ Webhookmy-oms
else→ Slacktrading-desk

Request

{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2026-10-22",
    "context": {
      "gap_pct": -0.03219,
      "gap_dir": -1,
      "gap_atr": -1.00978,
      "gap_vs_typical": 3.76115,
      "gap_outside_range_atr": 0.526,
      "earnings_day": 1,
      "earnings_next_5d": 0,
      "market_gap_pct": -0.00869,
      "gap_vs_market": -0.0235,
      "prior_return_1d": 0.03414,
      "prior_return_5d": 0.05259,
      "prior_return_20d": 0.01671,
      "prior_rsi_14": 59.77,
      "prior_dist_sma_20": 0.04443,
      "prior_dist_sma_50": 0.06706,
      "prior_dist_high_20": -0.0061,
      "prior_dist_low_20": 0.11735,
      "prior_close_location": 0.71523,
      "prior_volume_ratio": 1.30117,
      "volatility_20d": 0.34942,
      "atr_pct": 0.03188,
      "dollar_volume_log": 10.112,
      "beta_1y": 2.21228,
      "market_volatility_20d": 0.08848,
      "sym_gap_fill_rate": 0.44,
      "sym_gap_fill_rate_dir": 0.4,
      "sym_gap_fill_5d_rate": 0.72,
      "sym_gap_go_rate": 0.5,
      "sym_gaps_1y": 107
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    },
    "gap_go": {
      "type": "yes_no",
      "instructions": "Is this a gap-and-go day rather than a fade?"
    }
  },
  "actions": [
    {
      "id": "fade_intraday",
      "when": "fill_today >= 0.6",
      "do": "webhook",
      "connection": "my-oms",
      "body": {
        "symbol": "{{symbol}}",
        "signal": "fade_gap",
        "horizon": "intraday",
        "p_fill": "{{fill_today}}",
        "gap_pct": "{{state.context.gap_pct}}",
        "as_of": "{{as_of}}"
      }
    },
    {
      "id": "swing_fill",
      "when": "fill_today < 0.6 and fill_5d >= 0.55",
      "do": "webhook",
      "connection": "my-oms",
      "body": {
        "symbol": "{{symbol}}",
        "signal": "gap_fill_swing",
        "horizon": "5d",
        "p_fill": "{{fill_5d}}",
        "p_gap_and_go": "{{gap_go}}",
        "gap_pct": "{{state.context.gap_pct}}",
        "as_of": "{{as_of}}"
      }
    },
    {
      "id": "no_trade",
      "when": "else",
      "do": "slack",
      "connection": "trading-desk",
      "message": "{{symbol}} gap: no trade (fill today {{fill_today|pct}}, within 5 days {{fill_5d|pct}})."
    }
  ],
  "dry_run": true
}

Answers and what it would send

fill_today 0.292 · fill_5d 0.607 · gap_go 0.540

Actions 1 of 3 fired · dry run, nothing sent
fade_intradayrule false: skipped
swing_fillwould send (dry run)webhook → my-oms
{
  "symbol": "TSLA",
  "signal": "gap_fill_swing",
  "horizon": "5d",
  "p_fill": 0.607,
  "p_gap_and_go": 0.54,
  "gap_pct": -0.03219,
  "as_of": "2026-10-22"
}
no_traderule false: skipped

Digest workflow

Pre-open market read

A workflow runs the same questions for every symbol on a watchlist (Weekdays 08:30 ET) and sends one digest per run. Before the open, one Slack message with every index ETF's odds: higher in a week, a 2% move either way, choppier. No per-symbol actions: the digest is the product.

Workflow

{
  "name": "Pre-open market read",
  "symbols": "SPY QQQ IWM DIA",
  "days": [
    1,
    2,
    3,
    4,
    5
  ],
  "at_time": "08:30",
  "model": "ora-fin-0.1.1",
  "questions": {
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    },
    "move2": {
      "type": "yes_no",
      "instructions": "Will the stock move more than 2% in either direction in 5 trading days?"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will price swings get bigger over the next week compared with the past month?"
    }
  },
  "digest": {
    "do": "slack",
    "connection": "trading-desk",
    "when": "always"
  }
}

Per-symbol answers and the digest it would send

SymbolAnswers (as of 2026-10-30)
SPY

up_week 0.598 · move2 0.394 · vol_up 0.510

QQQ

up_week 0.561 · move2 0.360 · vol_up 0.509

IWM

up_week 0.526 · move2 0.322 · vol_up 0.472

DIA

up_week 0.567 · move2 0.367 · vol_up 0.492

Actions 1 of 1 fired · dry run, nothing sent
digestwould send (dry run)slack → trading-desk
{
  "text": "Pre-open market read · data as of 2026-10-30 · 0 of 4 symbols fired:\n• SPY: up_week 60%, move2 39%, vol_up 51%\n• QQQ: up_week 56%, move2 36%, vol_up 51%\n• IWM: up_week 53%, move2 32%, vol_up 47%\n• DIA: up_week 57%, move2 37%, vol_up 49%"
}

Ask by symbol

Send only a symbol: the server fills in its latest completed-session numbers. Covers about 2,000 liquid US stocks and ETFs, refreshed after each close.

NVDA from just the symbol

Send only {"symbol": "NVDA"}: the server fills the latest completed-session numbers (context) and says which date they're from in the response.

ora-fin-0.1.14 questions
  • up_week Will the stock be higher in a week?
  • drop5 Will it drop at least 5% at some point in the next month?
  • new_high Will it make a new 20-day high in the next week?
  • + 1 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "questions": {
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "new_high": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day high in the next week?"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will price swings get bigger over the next week compared with the past month?"
    }
  }
}

SPY: the market's next week

An index ETF by symbol: direction, a 2% move either way, and calmer or choppier.

ora-fin-0.1.13 questions
  • up_week Will the stock be higher in a week?
  • move2 Will the stock move more than 2% in either direction in 5 trading days?
  • vol_down Will price swings get smaller over the next week compared with the past month?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    },
    "move2": {
      "type": "yes_no",
      "instructions": "Will the stock move more than 2% in either direction in 5 trading days?"
    },
    "vol_down": {
      "type": "yes_no",
      "instructions": "Will price swings get smaller over the next week compared with the past month?"
    }
  }
}

TSLA by symbol, with a dry-run alert

Ask by symbol and act on it: the alert's message shows the server-filled date and numbers.

ora-fin-0.1.12 questions1 action
drop5 >= 0.5 and rally5 >= 0.5→ Slacktrading-desk
  • drop5 Will it drop at least 5% at some point in the next month?
  • rally5 Will it rally at least 5% at some point in the next month?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA"
  },
  "questions": {
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "two_way_risk",
      "when": "drop5 >= 0.5 and rally5 >= 0.5",
      "do": "slack",
      "connection": "trading-desk",
      "message": "{{symbol}} ({{as_of}}): two-way risk, drawdown {{drop5|pct}}, rally {{rally5|pct}}, RSI {{state.context.rsi_14}}."
    }
  ],
  "dry_run": true
}
Answers and what it would send (dry run, session of 2026-10-30)

drop5 0.638 · rally5 0.687

Actions 1 of 1 fired · dry run, nothing sent
two_way_riskwould send (dry run)slack → trading-desk
{
  "text": "TSLA (2026-10-30): two-way risk, drawdown 64%, rally 69%, RSI 60.2."
}

Actions

Decide, then act. Each example answers its questions and runs rules on the answers to send a Slack message, call your webhook or email you.

Drawdown alert to the trading desk (Slack)

Post to the desk's Slack channel when the chance of a 5% drawdown within a month passes 55%, with the upside odds for context. Needs a Slack connection named trading-desk.

ora-fin-0.1.12 questions1 action
drop5 >= 0.55→ Slacktrading-desk
  • drop5 Will it drop at least 5% at some point in the next month?
  • rally5 Will it rally at least 5% at some point in the next month?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2026-10-21",
    "context": {
      "return_1d": 0.03414,
      "return_5d": 0.05259,
      "return_20d": 0.01671,
      "return_60d": 0.25706,
      "return_252d": -0.13624,
      "volatility_5d": 0.42207,
      "volatility_20d": 0.34942,
      "volatility_60d": 0.3934,
      "vol_ratio_5_20": 1.20792,
      "volume_ratio": 1.30117,
      "volume_ratio_5d": 1.08622,
      "atr_pct": 0.03188,
      "rsi_14": 59.77,
      "dist_sma_20": 0.04443,
      "dist_sma_50": 0.06706,
      "dist_sma_200": -0.0012,
      "dist_high_252": -0.22525,
      "dist_low_252": 0.29958,
      "gap_1d": 0.02087,
      "range_pct_1d": 0.02156,
      "close_location": 0.71523,
      "dollar_volume_log": 10.112,
      "market_return_5d": 0.00453,
      "market_volatility_20d": 0.08848,
      "dist_high_20": -0.0061,
      "dist_low_20": 0.11735,
      "beta_1y": 2.21228,
      "body_pct": 0.013,
      "upper_wick": 0.28477,
      "lower_wick": 0.12,
      "range_vs_atr": 0.67641,
      "sma50_vs_sma200": -0.06397,
      "earnings_next_5d": 1,
      "days_to_earnings": 1,
      "days_since_earnings": 63,
      "earn_usual_move": 0.04462,
      "last_earn_reaction": -0.14524
    }
  },
  "questions": {
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "desk_alert",
      "when": "drop5 >= 0.55",
      "do": "slack",
      "connection": "trading-desk",
      "message": "{{symbol}} ({{as_of}}): {{drop5|pct}} chance of a 5% drawdown within a month, {{rally5|pct}} chance of a 5% rally. Two-way risk: consider sizing down."
    }
  ],
  "dry_run": true
}
Answers and what it would send (dry run)

drop5 0.584 · rally5 0.586

Actions 1 of 1 fired · dry run, nothing sent
desk_alertwould send (dry run)slack → trading-desk
{
  "text": "TSLA (2026-10-21): 58% chance of a 5% drawdown within a month, 59% chance of a 5% rally. Two-way risk: consider sizing down."
}

Breakout watch: volume confirms or not (Slack + email)

A likely new 20-day high is only half a signal. Email yourself when volume should confirm it; otherwise tell the desk the breakout is unconfirmed. Shows and-rules.

ora-fin-0.1.12 questions2 actions
new_high >= 0.6 and vol_spike >= 0.4→ Emailme
new_high >= 0.6 and vol_spike < 0.4→ Slacktrading-desk
  • new_high Will it make a new 20-day high in the next week?
  • vol_spike Will volume spike tomorrow?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2026-10-21",
    "context": {
      "return_1d": 0.03414,
      "return_5d": 0.05259,
      "return_20d": 0.01671,
      "return_60d": 0.25706,
      "return_252d": -0.13624,
      "volatility_5d": 0.42207,
      "volatility_20d": 0.34942,
      "volatility_60d": 0.3934,
      "vol_ratio_5_20": 1.20792,
      "volume_ratio": 1.30117,
      "volume_ratio_5d": 1.08622,
      "atr_pct": 0.03188,
      "rsi_14": 59.77,
      "dist_sma_20": 0.04443,
      "dist_sma_50": 0.06706,
      "dist_sma_200": -0.0012,
      "dist_high_252": -0.22525,
      "dist_low_252": 0.29958,
      "gap_1d": 0.02087,
      "range_pct_1d": 0.02156,
      "close_location": 0.71523,
      "dollar_volume_log": 10.112,
      "market_return_5d": 0.00453,
      "market_volatility_20d": 0.08848,
      "dist_high_20": -0.0061,
      "dist_low_20": 0.11735,
      "beta_1y": 2.21228,
      "body_pct": 0.013,
      "upper_wick": 0.28477,
      "lower_wick": 0.12,
      "range_vs_atr": 0.67641,
      "sma50_vs_sma200": -0.06397,
      "earnings_next_5d": 1,
      "days_to_earnings": 1,
      "days_since_earnings": 63,
      "earn_usual_move": 0.04462,
      "last_earn_reaction": -0.14524
    }
  },
  "questions": {
    "new_high": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day high in the next week?"
    },
    "vol_spike": {
      "type": "yes_no",
      "instructions": "Will volume spike tomorrow?"
    }
  },
  "actions": [
    {
      "id": "confirmed_breakout",
      "when": "new_high >= 0.6 and vol_spike >= 0.4",
      "do": "email",
      "connection": "me",
      "subject": "{{symbol}}: breakout with volume",
      "message": "New 20-day high within a week: {{new_high|pct}}. Volume spike tomorrow: {{vol_spike|pct}}."
    },
    {
      "id": "unconfirmed_breakout",
      "when": "new_high >= 0.6 and vol_spike < 0.4",
      "do": "slack",
      "connection": "trading-desk",
      "message": "{{symbol}}: likely new 20-day high ({{new_high|pct}}) but volume isn't expected to confirm ({{vol_spike|pct}})."
    }
  ],
  "dry_run": true
}
Answers and what it would send (dry run)

new_high 0.615 · vol_spike 0.060

Actions 1 of 2 fired · dry run, nothing sent
confirmed_breakoutrule false: skipped
unconfirmed_breakoutwould send (dry run)slack → trading-desk
{
  "text": "TSLA: likely new 20-day high (62%) but volume isn't expected to confirm (6%)."
}

Gap trade signal to your order system (webhook, else)

On an opening gap: send an intraday fade if the gap should fill today, a 5-day swing if it should fill within the week, and otherwise tell the desk there's no trade. Typed values in the body. Needs a webhook connection named my-oms.

ora-fin-0.1.13 questions3 actions
fill_today >= 0.6→ Webhookmy-oms
fill_today < 0.6 and fill_5d >= 0.55→ Webhookmy-oms
else→ Slacktrading-desk
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
  • gap_go Is this a gap-and-go day rather than a fade?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2026-10-22",
    "context": {
      "gap_pct": -0.03219,
      "gap_dir": -1,
      "gap_atr": -1.00978,
      "gap_vs_typical": 3.76115,
      "gap_outside_range_atr": 0.526,
      "earnings_day": 1,
      "earnings_next_5d": 0,
      "market_gap_pct": -0.00869,
      "gap_vs_market": -0.0235,
      "prior_return_1d": 0.03414,
      "prior_return_5d": 0.05259,
      "prior_return_20d": 0.01671,
      "prior_rsi_14": 59.77,
      "prior_dist_sma_20": 0.04443,
      "prior_dist_sma_50": 0.06706,
      "prior_dist_high_20": -0.0061,
      "prior_dist_low_20": 0.11735,
      "prior_close_location": 0.71523,
      "prior_volume_ratio": 1.30117,
      "volatility_20d": 0.34942,
      "atr_pct": 0.03188,
      "dollar_volume_log": 10.112,
      "beta_1y": 2.21228,
      "market_volatility_20d": 0.08848,
      "sym_gap_fill_rate": 0.44,
      "sym_gap_fill_rate_dir": 0.4,
      "sym_gap_fill_5d_rate": 0.72,
      "sym_gap_go_rate": 0.5,
      "sym_gaps_1y": 107
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    },
    "gap_go": {
      "type": "yes_no",
      "instructions": "Is this a gap-and-go day rather than a fade?"
    }
  },
  "actions": [
    {
      "id": "fade_intraday",
      "when": "fill_today >= 0.6",
      "do": "webhook",
      "connection": "my-oms",
      "body": {
        "symbol": "{{symbol}}",
        "signal": "fade_gap",
        "horizon": "intraday",
        "p_fill": "{{fill_today}}",
        "gap_pct": "{{state.context.gap_pct}}",
        "as_of": "{{as_of}}"
      }
    },
    {
      "id": "swing_fill",
      "when": "fill_today < 0.6 and fill_5d >= 0.55",
      "do": "webhook",
      "connection": "my-oms",
      "body": {
        "symbol": "{{symbol}}",
        "signal": "gap_fill_swing",
        "horizon": "5d",
        "p_fill": "{{fill_5d}}",
        "p_gap_and_go": "{{gap_go}}",
        "gap_pct": "{{state.context.gap_pct}}",
        "as_of": "{{as_of}}"
      }
    },
    {
      "id": "no_trade",
      "when": "else",
      "do": "slack",
      "connection": "trading-desk",
      "message": "{{symbol}} gap: no trade (fill today {{fill_today|pct}}, within 5 days {{fill_5d|pct}})."
    }
  ],
  "dry_run": true
}
Answers and what it would send (dry run)

fill_today 0.292 · fill_5d 0.607 · gap_go 0.540

Actions 1 of 3 fired · dry run, nothing sent
fade_intradayrule false: skipped
swing_fillwould send (dry run)webhook → my-oms
{
  "symbol": "TSLA",
  "signal": "gap_fill_swing",
  "horizon": "5d",
  "p_fill": 0.607,
  "p_gap_and_go": 0.54,
  "gap_pct": -0.03219,
  "as_of": "2026-10-22"
}
no_traderule false: skipped

Hedge or all-clear (webhook, else to Slack)

Ask your order system for a protective put when drawdown odds are high and a big move is plausible; otherwise post an all-clear. Exactly one of the two always fires.

ora-fin-0.1.12 questions2 actions
drop5 >= 0.65 and big_move >= 0.25→ Webhookmy-oms
else→ Slacktrading-desk
  • drop5 Will it drop at least 5% at some point in the next month?
  • big_move Will the stock move more than 5% in either direction in 5 trading days?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2026-09-29",
    "context": {
      "return_1d": -0.0129,
      "return_5d": -0.06878,
      "return_20d": -0.04107,
      "return_60d": -0.15944,
      "return_252d": -0.19882,
      "volatility_5d": 0.25764,
      "volatility_20d": 0.41763,
      "volatility_60d": 0.51215,
      "vol_ratio_5_20": 0.61691,
      "volume_ratio": 0.79738,
      "volume_ratio_5d": 0.90354,
      "atr_pct": 0.03532,
      "rsi_14": 44.8,
      "dist_sma_20": -0.03428,
      "dist_sma_50": 0.01552,
      "dist_sma_200": -0.10603,
      "dist_high_252": -0.29266,
      "dist_low_252": 0.1865,
      "gap_1d": 0.00271,
      "range_pct_1d": 0.02001,
      "close_location": 0.16431,
      "dollar_volume_log": 10.145,
      "market_return_5d": -0.01187,
      "market_volatility_20d": 0.11404,
      "dist_high_20": -0.08787,
      "dist_low_20": 0.00832,
      "beta_1y": 2.21702,
      "body_pct": -0.01557,
      "upper_wick": 0.04533,
      "lower_wick": 0.16431,
      "range_vs_atr": 0.56658,
      "sma50_vs_sma200": -0.1197,
      "days_to_earnings": 17,
      "days_since_earnings": 47,
      "earn_usual_move": 0.04462,
      "last_earn_reaction": -0.14524
    }
  },
  "questions": {
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "big_move": {
      "type": "yes_no",
      "instructions": "Will the stock move more than 5% in either direction in 5 trading days?"
    }
  },
  "actions": [
    {
      "id": "hedge",
      "when": "drop5 >= 0.65 and big_move >= 0.25",
      "do": "webhook",
      "connection": "my-oms",
      "body": {
        "symbol": "{{symbol}}",
        "action": "buy_put",
        "target_delta": -0.25,
        "tenor_days": 30,
        "p_drawdown": "{{drop5}}",
        "p_big_move": "{{big_move}}"
      }
    },
    {
      "id": "all_clear",
      "when": "else",
      "do": "slack",
      "connection": "trading-desk",
      "message": "{{symbol}}: no hedge needed (drawdown {{drop5|pct}}, 5-day ±5% move {{big_move|pct}})."
    }
  ],
  "dry_run": true
}
Answers and what it would send (dry run)

drop5 0.520 · big_move 0.251

Actions 1 of 2 fired · dry run, nothing sent
hedgerule false: skipped
all_clearwould send (dry run)slack → trading-desk
{
  "text": "TSLA: no hedge needed (drawdown 52%, 5-day ±5% move 25%)."
}

Volatility desk alert (Slack, or-rules)

Tell the options desk when price swings are likely to expand or realized vol may top 50%; propose a straddle only when a 5% move inside a week is more likely than not.

ora-fin-0.1.13 questions2 actions
vol_up >= 0.5 or vol50 >= 0.5→ Slackoptions-desk
move5 >= 0.5→ Webhookmy-oms
  • vol_up Will price swings get bigger over the next week compared with the past month?
  • vol50 Will annualized volatility over the next 21 sessions exceed 50%?
  • move5 Will the stock move more than 5% in either direction in 5 trading days?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2026-10-21",
    "context": {
      "return_1d": 0.03414,
      "return_5d": 0.05259,
      "return_20d": 0.01671,
      "return_60d": 0.25706,
      "return_252d": -0.13624,
      "volatility_5d": 0.42207,
      "volatility_20d": 0.34942,
      "volatility_60d": 0.3934,
      "vol_ratio_5_20": 1.20792,
      "volume_ratio": 1.30117,
      "volume_ratio_5d": 1.08622,
      "atr_pct": 0.03188,
      "rsi_14": 59.77,
      "dist_sma_20": 0.04443,
      "dist_sma_50": 0.06706,
      "dist_sma_200": -0.0012,
      "dist_high_252": -0.22525,
      "dist_low_252": 0.29958,
      "gap_1d": 0.02087,
      "range_pct_1d": 0.02156,
      "close_location": 0.71523,
      "dollar_volume_log": 10.112,
      "market_return_5d": 0.00453,
      "market_volatility_20d": 0.08848,
      "dist_high_20": -0.0061,
      "dist_low_20": 0.11735,
      "beta_1y": 2.21228,
      "body_pct": 0.013,
      "upper_wick": 0.28477,
      "lower_wick": 0.12,
      "range_vs_atr": 0.67641,
      "sma50_vs_sma200": -0.06397,
      "earnings_next_5d": 1,
      "days_to_earnings": 1,
      "days_since_earnings": 63,
      "earn_usual_move": 0.04462,
      "last_earn_reaction": -0.14524
    }
  },
  "questions": {
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will price swings get bigger over the next week compared with the past month?"
    },
    "vol50": {
      "type": "yes_no",
      "instructions": "Will annualized volatility over the next 21 sessions exceed 50%?"
    },
    "move5": {
      "type": "yes_no",
      "instructions": "Will the stock move more than 5% in either direction in 5 trading days?"
    }
  },
  "actions": [
    {
      "id": "vol_alert",
      "when": "vol_up >= 0.5 or vol50 >= 0.5",
      "do": "slack",
      "connection": "options-desk",
      "message": "{{symbol}}: swings likely to expand ({{vol_up|pct}}); realized vol above 50%: {{vol50|pct}}; ±5% within a week: {{move5|pct}}."
    },
    {
      "id": "straddle_idea",
      "when": "move5 >= 0.5",
      "do": "webhook",
      "connection": "my-oms",
      "body": {
        "symbol": "{{symbol}}",
        "idea": "long_straddle",
        "tenor_days": 7,
        "p_move": "{{move5}}"
      }
    }
  ],
  "dry_run": true
}
Answers and what it would send (dry run)

vol_up 0.516 · vol50 0.427 · move5 0.274

Actions 1 of 2 fired · dry run, nothing sent
vol_alertwould send (dry run)slack → options-desk
{
  "text": "TSLA: swings likely to expand (52%); realized vol above 50%: 43%; ±5% within a week: 27%."
}
straddle_idearule false: skipped

Daily read by email (always)

A short daily note to yourself with five answers, every time it runs. Pair it with a scheduler on your side (cron) until scheduled workflows arrive.

ora-fin-0.1.15 questions1 action
always→ Emailme
  • up_week Will the stock be higher in a week?
  • beat_spy Will it beat SPY over the next month?
  • drop5 Will it drop at least 5% at some point in the next month?
  • + 2 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT",
    "as_of": "2026-09-30",
    "context": {
      "return_1d": 0.00774,
      "return_5d": 0.02459,
      "return_20d": 0.02371,
      "return_60d": 0.32153,
      "return_252d": 0.0049,
      "volatility_5d": 0.30205,
      "volatility_20d": 0.24151,
      "volatility_60d": 0.38583,
      "vol_ratio_5_20": 1.25066,
      "volume_ratio": 1.3048,
      "volume_ratio_5d": 0.82073,
      "atr_pct": 0.02301,
      "rsi_14": 60.38,
      "dist_sma_20": 0.02477,
      "dist_sma_50": 0.06368,
      "dist_sma_200": 0.18991,
      "dist_high_252": -0.06609,
      "dist_low_252": 0.47154,
      "gap_1d": 0.00362,
      "range_pct_1d": 0.01852,
      "close_location": 0.27053,
      "dollar_volume_log": 10.025,
      "market_return_5d": -0.00675,
      "market_volatility_20d": 0.11145,
      "dist_high_20": -0.01333,
      "dist_low_20": 0.05535,
      "beta_1y": 0.95214,
      "body_pct": 0.00411,
      "upper_wick": 0.72947,
      "lower_wick": 0.04948,
      "range_vs_atr": 0.80503,
      "sma50_vs_sma200": 0.11867,
      "days_to_earnings": 21,
      "days_since_earnings": 43,
      "earn_usual_move": 0.05001,
      "last_earn_reaction": 0.15505
    }
  },
  "questions": {
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "back_to_50": {
      "type": "yes_no",
      "instructions": "Will it trade back to its 50-day moving average in the next month?"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will price swings get bigger over the next week compared with the past month?"
    }
  },
  "actions": [
    {
      "id": "daily_read",
      "when": "always",
      "do": "email",
      "connection": "me",
      "subject": "{{symbol}} daily read · {{as_of}}",
      "message": "{{symbol}} as of {{as_of}}\n\nHigher in a week: {{up_week|pct}}\nBeats SPY over a month: {{beat_spy|pct}}\n5% drawdown within a month: {{drop5|pct}}\nBack to the 50-day average within a month: {{back_to_50|pct}}\nSwings expanding next week: {{vol_up|pct}}"
    }
  ],
  "dry_run": true
}
Answers and what it would send (dry run)

up_week 0.555 · beat_spy 0.518 · drop5 0.544 · back_to_50 0.537 · vol_up 0.534

Actions 1 of 1 fired · dry run, nothing sent
daily_readwould send (dry run)email → me
{
  "subject": "MSFT daily read · 2026-09-30",
  "text": "MSFT as of 2026-09-30\n\nHigher in a week: 56%\nBeats SPY over a month: 52%\n5% drawdown within a month: 54%\nBack to the 50-day average within a month: 54%\nSwings expanding next week: 53%"
}

Support ticket routing (general model: choice + score)

Not financial: route a message with a choice and a score. Rules compare the chosen option (department == 'technical') and the score level. Needs Slack connection support and webhook helpdesk.

ora-text-0.2.03 questions3 actions
urgent >= 0.7 and department == 'technical'→ Slacksupport
frustration >= 1.5→ Emailme
always→ Webhookhelpdesk
  • urgent The message needs action within the hour
  • department Which team should handle this
  • frustration How frustrated is the writer
Request JSON
{
  "model": "ora-text-0.2.0",
  "state": "Our checkout API has returned 500 errors for 20 minutes and customers can't pay. This is the third outage this month and I'm furious. Please call me.",
  "questions": {
    "urgent": {
      "type": "yes_no",
      "instructions": "The message needs action within the hour"
    },
    "department": {
      "type": "choice",
      "instructions": "Which team should handle this",
      "criteria": {
        "billing": "Payment or subscription issues",
        "technical": "Bugs, outages or integration problems",
        "sales": "Pricing or account questions"
      }
    },
    "frustration": {
      "type": "score",
      "instructions": "How frustrated is the writer",
      "criteria": [
        "Calm",
        "Annoyed but civil",
        "Very angry"
      ]
    }
  },
  "actions": [
    {
      "id": "page_oncall",
      "when": "urgent >= 0.7 and department == 'technical'",
      "do": "slack",
      "connection": "support",
      "message": "Urgent technical ticket ({{urgent|pct}}), frustration {{frustration|round}}/2. Paging on-call."
    },
    {
      "id": "escalate",
      "when": "frustration >= 1.5",
      "do": "email",
      "connection": "me",
      "subject": "Escalation: very frustrated customer",
      "message": "Frustration {{frustration|round}} of 2, department {{department}}."
    },
    {
      "id": "ticket",
      "when": "always",
      "do": "webhook",
      "connection": "helpdesk",
      "body": {
        "queue": "{{department}}",
        "urgent": "{{urgent}}",
        "frustration": "{{frustration}}",
        "answers": "{{answers}}"
      }
    }
  ],
  "dry_run": true
}
Answers and what it would send (dry run)

urgent 0.172 · department billing · frustration 2.00

Actions 2 of 3 fired · dry run, nothing sent
page_oncallrule false: skipped
escalatewould send (dry run)email → me
{
  "subject": "Escalation: very frustrated customer",
  "text": "Frustration 2.0 of 2, department billing."
}
ticketwould send (dry run)webhook → helpdesk
{
  "queue": "billing",
  "urgent": 0.172,
  "frustration": 1.999,
  "answers": {
    "urgent": {
      "type": "yes_no",
      "yes_no": 0.172
    },
    "department": {
      "type": "choice",
      "choice": "billing",
      "confidence": 0.391,
      "probabilities": {
        "billing": 0.594,
        "technical": 0.376,
        "sales": 0.03
      }
    },
    "frustration": {
      "type": "score",
      "score": 1.999,
      "confidence": 0.999,
      "legend": {
        "0": "Calm",
        "1": "Annoyed but civil",
        "2": "Very angry"
      },
      "probabilities": {
        "0": 0,
        "1": 0.001,
        "2": 0.999
      }
    }
  }
}

Workflows

Scheduled watchlist runs: the same questions and actions for every symbol, after the close or before the open, with one digest message per run.

Daily drawdown watch

Mega caps after every close: alert the desk on any stock with a 60%+ chance of a 5% drawdown within a month, plus one email listing them.

ora-fin-0.1.18 symbolsWeekdays 16:45 ETdigest → Email
drop5 >= 0.6→ Slacktrading-desk
  • drop5 Will it drop at least 5% at some point in the next month?
  • rally5 Will it rally at least 5% at some point in the next month?

Symbols: AAPL MSFT NVDA AMZN META GOOGL TSLA AVGO

Rule scan: breakouts and breakdowns

Large caps and sector ETFs after the close: exact rules for a 20-day breakout on volume or a breakdown, plus the one-week forecast, with one Slack digest of the hits.

ora-fin-0.1.18 symbolsWeekdays 16:50 ETdigest → Slack
breakout >= 0.6→ Slacktrading-desk
breakdown >= 0.6→ Slacktrading-desk
  • breakout C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)
  • breakdown C < lowest(C, 20)
  • up_week Will the stock be higher in a week?

Symbols: AAPL MSFT NVDA AMZN META XLE XLF XLK

Breakout watch with volume

Semiconductors after the close: flag likely new 20-day highs and whether volume should confirm them; one Slack digest of the hits.

ora-fin-0.1.19 symbolsWeekdays 16:50 ETdigest → Slack
new_high >= 0.7→ Webhookmy-oms
  • new_high Will it make a new 20-day high in the next week?
  • vol_spike Will volume spike tomorrow?

Symbols: NVDA AMD AVGO MU QCOM ARM INTC TXN SMH

Pre-open market read

Before the open, one Slack message with every index ETF's odds: higher in a week, a 2% move either way, choppier. No per-symbol actions: the digest is the product.

ora-fin-0.1.14 symbolsWeekdays 08:30 ETdigest → Slack
  • up_week Will the stock be higher in a week?
  • move2 Will the stock move more than 2% in either direction in 5 trading days?
  • vol_up Will price swings get bigger over the next week compared with the past month?

Symbols: SPY QQQ IWM DIA

Digest it would send (dry run)
Actions 1 of 1 fired · dry run, nothing sent
digestwould send (dry run)slack → trading-desk
{
  "text": "Pre-open market read · data as of 2026-10-30 · 0 of 4 symbols fired:\n• SPY: up_week 60%, move2 39%, vol_up 51%\n• QQQ: up_week 56%, move2 36%, vol_up 51%\n• IWM: up_week 53%, move2 32%, vol_up 47%\n• DIA: up_week 57%, move2 37%, vol_up 49%"
}

Volatility desk scan

High-beta names after the close: tell the options desk where swings are likely to expand or realized vol may top 50%.

ora-fin-0.1.17 symbolsWeekdays 17:00 ET
vol_up >= 0.55 or vol50 >= 0.6→ Slackoptions-desk
  • vol_up Will price swings get bigger over the next week compared with the past month?
  • vol50 Will annualized volatility over the next 21 sessions exceed 50%?

Symbols: TSLA COIN MSTR PLTR SMCI RIVN HOOD

Advanced

Financial requests that use the whole model: exact rules, patterns and forecasts on one symbol; watchlist batches; rules and forecasts chained to actions; risk checks before an order. Facts about earnings, dividends and splits mix freely with technical rules and forecasts. Answers are real responses, captured 2026-10-31. Grammar: Rule language. Information, not investment advice.

Rules, patterns and forecasts on one symbol

NVDA: what is true now, and what is likely next

Two exact rules, a pattern rule, two English "now" questions (compiled to rules) and three forecasts in one request. Answers with a rule field are facts; the rest are forecasts.

ora-fin-0.1.1NVDA8 questions
  • trend C > sma(C, 200)
  • below_50d C < sma(C, 50)
  • reversal hammer() or engulfing_bull()
  • + 5 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 200)"
    },
    "below_50d": {
      "type": "yes_no",
      "ask": "C < sma(C, 50)"
    },
    "reversal": {
      "type": "yes_no",
      "ask": "hammer() or engulfing_bull()"
    },
    "oversold_en": {
      "type": "yes_no",
      "instructions": "Is RSI below 30?"
    },
    "inside_en": {
      "type": "yes_no",
      "instructions": "Is today an inside bar?"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  }
}
Answers (session of 2026-10-30)

trend 0.545 · below_50d 0.925 · reversal 0.124 · oversold_en 0.214 · inside_en 0.056 · up_week 0.527 · drop5 0.523 · rally5 0.616

TSLA: volatility read before sizing

Is the stock in a wide-range regime now (three volatility rules), and how big could the next month be (three forecasts)? Size from both.

ora-fin-0.1.1TSLA6 questions
  • atr_3 atr_pct(14) > 3
  • hv_50 std(log(C / C[-1]), 20) * sqrt(252) > 0.5
  • wide_day tr() > 1.5 * ref(atr(14), -1)
  • + 3 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA"
  },
  "questions": {
    "atr_3": {
      "type": "yes_no",
      "ask": "atr_pct(14) > 3"
    },
    "hv_50": {
      "type": "yes_no",
      "ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.5"
    },
    "wide_day": {
      "type": "yes_no",
      "ask": "tr() > 1.5 * ref(atr(14), -1)"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    },
    "rally10": {
      "type": "yes_no",
      "instructions": "Will it rally at least 10% at some point in the next month?"
    },
    "vol50": {
      "type": "yes_no",
      "instructions": "Will annualized volatility over the next 21 sessions exceed 50%?"
    }
  }
}
Answers (session of 2026-10-30)

atr_3 0.848 · hv_50 0.104 · wide_day 0.240 · drop10 0.638 · rally10 0.687 · vol50 0.441

Watchlist batches

Index ETFs: trend, stretch and next week

The same four questions for each index ETF, one request per symbol sent in parallel. Rank by up_week, filter by trend.

ora-fin-0.1.14 symbols, one request each4 questions
  • trend C > sma(C, 200)
  • above_50d C > sma(C, 50)
  • oversold rsi(C, 14) < 35
  • + 1 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 200)"
    },
    "above_50d": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "oversold": {
      "type": "yes_no",
      "ask": "rsi(C, 14) < 35"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Answers per symbol (session of 2026-10-30)
SPY

trend 0.945 · above_50d 0.113 · oversold 0.171 · up_week 0.598

QQQ

trend 0.799 · above_50d 0.065 · oversold 0.509 · up_week 0.561

IWM

trend 0.556 · above_50d 0.218 · oversold 0.086 · up_week 0.526

DIA

trend 0.878 · above_50d 0.285 · oversold 0.106 · up_week 0.567

Semiconductors: breakout scan

Which chip names are breaking out on volume or sitting near their 52-week high, and which are likely to rally 5%. One request per symbol.

ora-fin-0.1.14 symbols, one request each4 questions
  • breakout C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)
  • near_high C >= 0.98 * max(H, 252)
  • squeeze std(C, 20) < 0.7 * std(C, 100)
  • + 1 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "questions": {
    "breakout": {
      "type": "yes_no",
      "ask": "C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)"
    },
    "near_high": {
      "type": "yes_no",
      "ask": "C >= 0.98 * max(H, 252)"
    },
    "squeeze": {
      "type": "yes_no",
      "ask": "std(C, 20) < 0.7 * std(C, 100)"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  }
}
Answers per symbol (session of 2026-10-30)
NVDA

breakout 0.054 · near_high 0.054 · squeeze 0.111 · rally5 0.616

AMD

breakout 0.054 · near_high 0.054 · squeeze 0.343 · rally5 0.836

MU

breakout 0.054 · near_high 0.054 · squeeze 0.408 · rally5 0.855

SMH

breakout 0.054 · near_high 0.054 · squeeze 0.185 · rally5 0.728

Rule + forecast + action chains

XLE: breakout, confirmed or not (webhook or Slack)

A price breakout is checked for volume and for the one-week forecast. All three agree: a signed webhook to the order system. Price only: a Slack note that the breakout is unconfirmed.

ora-fin-0.1.1XLE3 questions2 actions
price_break >= 0.6 and volume_ok >= 0.6 and up_week >= 0.55→ Webhookmy-oms
price_break >= 0.6→ Slacktrading-desk
  • price_break C > highest(C, 20)
  • volume_ok V > 1.5 * ref(avg(V, 20), -1)
  • up_week Will the stock be higher in a week?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "XLE"
  },
  "questions": {
    "price_break": {
      "type": "yes_no",
      "ask": "C > highest(C, 20)"
    },
    "volume_ok": {
      "type": "yes_no",
      "ask": "V > 1.5 * ref(avg(V, 20), -1)"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  },
  "actions": [
    {
      "id": "confirmed",
      "when": "price_break >= 0.6 and volume_ok >= 0.6 and up_week >= 0.55",
      "do": "webhook",
      "connection": "my-oms",
      "body": {
        "symbol": "{{symbol}}",
        "signal": "breakout_confirmed",
        "p_break": "{{price_break}}",
        "p_volume": "{{volume_ok}}",
        "p_up_week": "{{up_week}}",
        "as_of": "{{as_of}}"
      }
    },
    {
      "id": "unconfirmed",
      "when": "price_break >= 0.6",
      "do": "slack",
      "connection": "trading-desk",
      "message": "{{symbol}} ({{as_of}}): 20-day breakout ({{price_break|pct}}) without volume ({{volume_ok|pct}}); higher in a week {{up_week|pct}}. Watching, not trading."
    }
  ],
  "dry_run": true
}
Answers and what it would send (dry run, session of 2026-10-30)

price_break 0.646 · volume_ok 0.069 · up_week 0.592

Actions 1 of 2 fired · dry run, nothing sent
confirmedrule false: skipped
unconfirmedwould send (dry run)slack → trading-desk
{
  "text": "XLE (2026-10-30): 20-day breakout (65%) without volume (7%); higher in a week 59%. Watching, not trading."
}

AMZN: buy-the-dip only in an uptrend (Slack, else)

A pullback rule with a trend filter, and the forecasts as the trigger. If the setup is not there, the else branch says so.

ora-fin-0.1.1AMZN4 questions2 actions
pullback >= 0.6 and up_week >= 0.55 and drop5 < 0.6→ Slacktrading-desk
else→ Slacktrading-desk
  • pullback C > sma(C, 200) and rsi(C, 14) < 40
  • below_band C < bblower(C, 20, 2)
  • up_week Will the stock be higher in a week?
  • + 1 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AMZN"
  },
  "questions": {
    "pullback": {
      "type": "yes_no",
      "ask": "C > sma(C, 200) and rsi(C, 14) < 40"
    },
    "below_band": {
      "type": "yes_no",
      "ask": "C < bblower(C, 20, 2)"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "buy_dip",
      "when": "pullback >= 0.6 and up_week >= 0.55 and drop5 < 0.6",
      "do": "slack",
      "connection": "trading-desk",
      "message": "{{symbol}} ({{as_of}}): pullback in an uptrend ({{pullback|pct}}), higher in a week {{up_week|pct}}, 5% drawdown {{drop5|pct}}."
    },
    {
      "id": "no_setup",
      "when": "else",
      "do": "slack",
      "connection": "trading-desk",
      "message": "{{symbol}} ({{as_of}}): no dip setup. Pullback rule {{pullback|pct}}, under the lower band {{below_band|pct}}."
    }
  ],
  "dry_run": true
}
Answers and what it would send (dry run, session of 2026-10-30)

pullback 0.307 · below_band 0.568 · up_week 0.493 · drop5 0.462

Actions 1 of 2 fired · dry run, nothing sent
buy_diprule false: skipped
no_setupwould send (dry run)slack → trading-desk
{
  "text": "AMZN (2026-10-30): no dip setup. Pullback rule 31%, under the lower band 57%."
}

Risk checks before an order

TSLA: pre-trade check (block, reduce or allow)

Before a buy order goes out: block on high drawdown odds with a broken trend, reduce on high odds or wide ranges, otherwise allow. Each branch posts a decision to the order system.

ora-fin-0.1.1TSLA5 questions3 actions
drop5 >= 0.75 or (below_50d >= 0.6 and drop5 >= 0.6)→ Webhookmy-oms
drop5 >= 0.6 or wide >= 0.6→ Webhookmy-oms
else→ Webhookmy-oms
  • below_50d C < sma(C, 50)
  • wide atr_pct(14) > 4
  • gap_down O < L[-1]
  • + 2 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA"
  },
  "questions": {
    "below_50d": {
      "type": "yes_no",
      "ask": "C < sma(C, 50)"
    },
    "wide": {
      "type": "yes_no",
      "ask": "atr_pct(14) > 4"
    },
    "gap_down": {
      "type": "yes_no",
      "ask": "O < L[-1]"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "down_week": {
      "type": "yes_no",
      "instructions": "Will the stock be lower in a week?"
    }
  },
  "actions": [
    {
      "id": "block",
      "when": "drop5 >= 0.75 or (below_50d >= 0.6 and drop5 >= 0.6)",
      "do": "webhook",
      "connection": "my-oms",
      "body": {
        "symbol": "{{symbol}}",
        "decision": "block",
        "p_drop5": "{{drop5}}",
        "p_below_50d": "{{below_50d}}",
        "as_of": "{{as_of}}"
      }
    },
    {
      "id": "reduce",
      "when": "drop5 >= 0.6 or wide >= 0.6",
      "do": "webhook",
      "connection": "my-oms",
      "body": {
        "symbol": "{{symbol}}",
        "decision": "reduce_size",
        "max_fraction": 0.5,
        "p_drop5": "{{drop5}}",
        "p_wide": "{{wide}}",
        "as_of": "{{as_of}}"
      }
    },
    {
      "id": "allow",
      "when": "else",
      "do": "webhook",
      "connection": "my-oms",
      "body": {
        "symbol": "{{symbol}}",
        "decision": "allow",
        "as_of": "{{as_of}}"
      }
    }
  ],
  "dry_run": true
}
Answers and what it would send (dry run, session of 2026-10-30)

below_50d 0.104 · wide 0.077 · gap_down 0.866 · drop5 0.638 · down_week 0.455

Actions 1 of 3 fired · dry run, nothing sent
blockrule false: skipped
reducewould send (dry run)webhook → my-oms
{
  "symbol": "TSLA",
  "decision": "reduce_size",
  "max_fraction": 0.5,
  "p_drop5": 0.638,
  "p_wide": 0.0771,
  "as_of": "2026-10-30"
}
allowrule false: skipped

NVDA: is the stop hit on an open long?

A chandelier stop (3 ATR under the 22-day high) and a 20-day low break as exact rules, plus the 10% drawdown forecast. Exit on the stop; warn the desk when only the forecast is high.

ora-fin-0.1.1NVDA3 questions2 actions
stop_hit >= 0.6→ Webhookmy-oms
drop10 >= 0.4→ Slacktrading-desk
  • stop_hit C < highest(H, 22) - 3 * atr(22)
  • low_break C < lowest(L, 20)
  • drop10 Will it drop at least 10% at some point in the next month?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "questions": {
    "stop_hit": {
      "type": "yes_no",
      "ask": "C < highest(H, 22) - 3 * atr(22)"
    },
    "low_break": {
      "type": "yes_no",
      "ask": "C < lowest(L, 20)"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "exit",
      "when": "stop_hit >= 0.6",
      "do": "webhook",
      "connection": "my-oms",
      "body": {
        "symbol": "{{symbol}}",
        "decision": "exit_long",
        "p_stop": "{{stop_hit}}",
        "p_low_break": "{{low_break}}",
        "as_of": "{{as_of}}"
      }
    },
    {
      "id": "warn",
      "when": "drop10 >= 0.4",
      "do": "slack",
      "connection": "trading-desk",
      "message": "{{symbol}} ({{as_of}}): stop not hit ({{stop_hit|pct}}) but 10% drawdown odds are {{drop10|pct}}."
    }
  ],
  "dry_run": true
}
Answers and what it would send (dry run, session of 2026-10-30)

stop_hit 0.927 · low_break 0.755 · drop10 0.523

Actions 2 of 2 fired · dry run, nothing sent
exitwould send (dry run)webhook → my-oms
{
  "symbol": "NVDA",
  "decision": "exit_long",
  "p_stop": 0.9272,
  "p_low_break": 0.7554,
  "as_of": "2026-10-30"
}
warnwould send (dry run)slack → trading-desk
{
  "text": "NVDA (2026-10-30): stop not hit (93%) but 10% drawdown odds are 52%."
}

Facts, rules and forecasts together

NVDA: pre-earnings check (Slack, dry run)

Earnings within 10 days AND above the 50-day: tell the desk who goes into the print strong, and flag names whose last reaction was over 5%. Otherwise say when the report is not close.

ora-fin-0.1.1NVDA5 questions3 actions
earn_soon >= 0.6 and trend >= 0.6→ Slacktrading-desk
earn_soon >= 0.6 and big_mover >= 0.6→ Slacktrading-desk
else→ Slacktrading-desk
  • earn_soon days_to_earnings <= 10
  • trend C > sma(C, 50)
  • big_mover abs(last_earnings_move) > 5
  • + 2 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "questions": {
    "earn_soon": {
      "type": "yes_no",
      "ask": "days_to_earnings <= 10"
    },
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "big_mover": {
      "type": "yes_no",
      "ask": "abs(last_earnings_move) > 5"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "strong_into_print",
      "when": "earn_soon >= 0.6 and trend >= 0.6",
      "do": "slack",
      "connection": "trading-desk",
      "message": "{{symbol}} ({{as_of}}): earnings within 10 days and above the 50-day. Rally 5% {{rally5|pct}}, drop 5% {{drop5|pct}}."
    },
    {
      "id": "big_reactor",
      "when": "earn_soon >= 0.6 and big_mover >= 0.6",
      "do": "slack",
      "connection": "trading-desk",
      "message": "{{symbol}} ({{as_of}}): reports within 10 days; the last reaction was over 5%. Size down into the print."
    },
    {
      "id": "not_close",
      "when": "else",
      "do": "slack",
      "connection": "trading-desk",
      "message": "{{symbol}} ({{as_of}}): no report in the next 10 days ({{earn_soon|pct}}); trend {{trend|pct}}."
    }
  ],
  "dry_run": true
}
Answers and what it would send (dry run, session of 2026-10-30)

earn_soon 0.056 · trend 0.075 · big_mover 0.946 · drop5 0.523 · rally5 0.616

Actions 1 of 3 fired · dry run, nothing sent
strong_into_printrule false: skipped
big_reactorrule false: skipped
not_closewould send (dry run)slack → trading-desk
{
  "text": "NVDA (2026-10-30): no report in the next 10 days (6%); trend 7%."
}

Dividend payers: yield, growth, trend and drawdown

Four dividend payers, one request each: yield and growth record (facts), trend (a rule) and the odds of a 5% drawdown (a forecast).

ora-fin-0.1.14 symbols, one request each4 questions
  • yield_25 div_yield_ttm > 2.5
  • grower years_of_growth >= 10
  • trend C > sma(C, 200)
  • + 1 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "KO"
  },
  "questions": {
    "yield_25": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 2.5"
    },
    "grower": {
      "type": "yes_no",
      "ask": "years_of_growth >= 10"
    },
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 200)"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}
Answers per symbol (session of 2026-10-30)
KO

yield_25 0.054 · grower 0.946 · trend 0.946 · drop5 0.361

JNJ

yield_25 0.054 · grower 0.946 · trend 0.945 · drop5 0.461

PG

yield_25 0.693 · grower 0.946 · trend 0.943 · drop5 0.357

PEP

yield_25 0.946 · grower 0.946 · trend 0.103 · drop5 0.418

AAPL: post-earnings drift to your OMS (webhook, dry run)

Beat on both lines, still above the pre-earnings close and above the last swing high, and leaning up for the week: send a signed signal to the order system.

ora-fin-0.1.1AAPL4 questions1 action
beat_both >= 0.6 and holding >= 0.6 and up_week >= 0.55→ Webhookmy-oms
  • beat_both beat_eps_last > 0.5 and beat_revenue_last > 0.5
  • holding C > pre_earnings_close
  • over_swing C > swinghigh(5)
  • + 1 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AAPL"
  },
  "questions": {
    "beat_both": {
      "type": "yes_no",
      "ask": "beat_eps_last > 0.5 and beat_revenue_last > 0.5"
    },
    "holding": {
      "type": "yes_no",
      "ask": "C > pre_earnings_close"
    },
    "over_swing": {
      "type": "yes_no",
      "ask": "C > swinghigh(5)"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  },
  "actions": [
    {
      "id": "drift_long",
      "when": "beat_both >= 0.6 and holding >= 0.6 and up_week >= 0.55",
      "do": "webhook",
      "connection": "my-oms",
      "body": {
        "symbol": "{{symbol}}",
        "signal": "post_earnings_drift",
        "p_beat": "{{beat_both}}",
        "p_holding": "{{holding}}",
        "p_swing": "{{over_swing}}",
        "p_up_week": "{{up_week}}",
        "as_of": "{{as_of}}"
      }
    }
  ],
  "dry_run": true
}
Answers and what it would send (dry run, session of 2026-10-30)

beat_both 0.859 · holding 0.831 · over_swing 0.289 · up_week 0.590

Actions 1 of 1 fired · dry run, nothing sent
drift_longwould send (dry run)webhook → my-oms
{
  "symbol": "AAPL",
  "signal": "post_earnings_drift",
  "p_beat": 0.8591,
  "p_holding": 0.831,
  "p_swing": 0.2893,
  "p_up_week": 0.59,
  "as_of": "2026-10-30"
}

Events & price action

Exact facts about the last and next earnings report, dividends and splits, plus swing-based price action and pre-trade checks. Each example also asks a forecast, to show which questions are facts (with a rule) and which are predictions (no rule). Answers are real responses, captured 2026-10-31. Grammar: Rule language.

Earnings

NVDA: last quarter, next report, and a forecast

Did it beat, when does it report, how long is the streak (facts), and will it beat next time (a forecast, answered with no rule).

ora-fin-0.1.1NVDA6 questions
  • beat_eps Did NVDA beat EPS estimates last quarter?
  • beat_rev Did revenue beat estimates last quarter?
  • earn_30d Is earnings in the next 30 days?
  • + 3 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "questions": {
    "beat_eps": {
      "type": "yes_no",
      "instructions": "Did NVDA beat EPS estimates last quarter?"
    },
    "beat_rev": {
      "type": "yes_no",
      "instructions": "Did revenue beat estimates last quarter?"
    },
    "earn_30d": {
      "type": "yes_no",
      "instructions": "Is earnings in the next 30 days?"
    },
    "streak": {
      "type": "yes_no",
      "instructions": "Has it beaten estimates 4 quarters in a row?"
    },
    "reaction": {
      "type": "yes_no",
      "ask": "abs(last_earnings_move) > 5 and last_earnings_gap > 0"
    },
    "beat_next": {
      "type": "yes_no",
      "instructions": "Will NVDA beat earnings next quarter?"
    }
  }
}
Answers (session of 2026-10-30)

beat_eps 0.859 · beat_rev 0.859 · earn_30d 0.946 · streak 0.946 · reaction 0.946 · beat_next 0.488

Dividends

KO: dividend income checks

Pays, yields, grows, goes ex soon (facts), in an uptrend (a rule), and will it raise next year (a forecast).

ora-fin-0.1.1KO6 questions
  • pays Does KO pay a dividend?
  • yield_3 Is the dividend yield above 3%?
  • grown_10 Has the dividend grown 10 years in a row?
  • + 3 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "KO"
  },
  "questions": {
    "pays": {
      "type": "yes_no",
      "instructions": "Does KO pay a dividend?"
    },
    "yield_3": {
      "type": "yes_no",
      "instructions": "Is the dividend yield above 3%?"
    },
    "grown_10": {
      "type": "yes_no",
      "instructions": "Has the dividend grown 10 years in a row?"
    },
    "ex_40d": {
      "type": "yes_no",
      "instructions": "Is the ex-dividend date within 40 days?"
    },
    "income_trend": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 2 and C > sma(C, 200)"
    },
    "raise_next": {
      "type": "yes_no",
      "instructions": "Will KO raise its dividend next year?"
    }
  }
}
Answers (session of 2026-10-30)

pays 0.859 · yield_3 0.054 · grown_10 0.946 · ex_40d 0.944 · income_trend 0.946 · raise_next 0.463

Splits

NVDA: split history

When it last split, how big, forward or reverse, and anything announced (facts); will it split again (a forecast).

ora-fin-0.1.1NVDA5 questions
  • split_3y Has the stock split in the past three years?
  • reverse Was the last split a reverse split?
  • coming Is a stock split coming up?
  • + 2 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "questions": {
    "split_3y": {
      "type": "yes_no",
      "instructions": "Has the stock split in the past three years?"
    },
    "reverse": {
      "type": "yes_no",
      "instructions": "Was the last split a reverse split?"
    },
    "coming": {
      "type": "yes_no",
      "instructions": "Is a stock split coming up?"
    },
    "big_recent": {
      "type": "yes_no",
      "ask": "days_since_split <= 1095 and last_split_ratio >= 4"
    },
    "split_again": {
      "type": "yes_no",
      "instructions": "Will NVDA split its stock again?"
    }
  }
}
Answers (session of 2026-10-30)

split_3y 0.946 · reverse 0.141 · coming 0.054 · big_recent 0.946 · split_again 0.480

Price action

TSLA: swings, ranges and gaps

Swing structure, distance to resistance, the 20-day range and today's gap, as exact rules; whether it breaks resistance this week is a forecast.

ora-fin-0.1.1TSLA6 questions
  • hh_hl Is the stock making higher swing highs and higher swing lows?
  • pullback Has it pulled back at least 5% from its 20-day high?
  • gap_fill Did today's gap up fill?
  • + 3 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA"
  },
  "questions": {
    "hh_hl": {
      "type": "yes_no",
      "instructions": "Is the stock making higher swing highs and higher swing lows?"
    },
    "pullback": {
      "type": "yes_no",
      "instructions": "Has it pulled back at least 5% from its 20-day high?"
    },
    "gap_fill": {
      "type": "yes_no",
      "instructions": "Did today's gap up fill?"
    },
    "near_resistance": {
      "type": "yes_no",
      "ask": "C > swinghigh(5) * 0.97 and C <= swinghigh(5)"
    },
    "above_vwap20": {
      "type": "yes_no",
      "ask": "C > sum(hlc3() * V, 20) / sum(V, 20)"
    },
    "break_week": {
      "type": "yes_no",
      "instructions": "Will it break above resistance this week?"
    }
  }
}
Answers (session of 2026-10-30)

hh_hl 0.544 · pullback 0.243 · gap_fill 0.071 · near_resistance 0.326 · above_vwap20 0.920 · break_week 0.469

Trading actions

AAPL: checks before an entry

Stop distance, extension, entry zone, risk/reward and liquidity as exact checks on today's data; whether the stop gets hit is a forecast.

ora-fin-0.1.1AAPL6 questions
  • stop_close Is a stop below yesterday's low less than 1.5 ATR away?
  • extended Is price extended more than 2 ATR above its 20-day average?
  • entry_zone Is the stock in an uptrend with a pullback to the 20-day?
  • + 3 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AAPL"
  },
  "questions": {
    "stop_close": {
      "type": "yes_no",
      "instructions": "Is a stop below yesterday's low less than 1.5 ATR away?"
    },
    "extended": {
      "type": "yes_no",
      "instructions": "Is price extended more than 2 ATR above its 20-day average?"
    },
    "entry_zone": {
      "type": "yes_no",
      "instructions": "Is the stock in an uptrend with a pullback to the 20-day?"
    },
    "reward_2to1": {
      "type": "yes_no",
      "ask": "C > swinglow(5) and C < swinghigh(5) and swinghigh(5) - C >= 2 * (C - swinglow(5))"
    },
    "liquid": {
      "type": "yes_no",
      "ask": "avg(C * V, 20) > 100000000"
    },
    "stop_hit": {
      "type": "yes_no",
      "instructions": "Will my stop below yesterday's low get hit?"
    }
  }
}
Answers (session of 2026-10-30)

stop_close 0.230 · extended 0.114 · entry_zone 0.671 · reward_2to1 0.406 · liquid 0.946 · stop_hit 0.372

Strategies (rule language)

Classic trading setups written as rules: an entry and an exit, each a yes_no ask on one symbol, answered by the rule engine on the latest completed session. Answers are real responses, captured 2026-10-31. Grammar: Rule language.

Breakouts & Momentum

20-Bar High Break

Enter when the close clears the highest close of the 20 sessions before it; leave when it closes under the lowest of the previous 10.

ora-fin-0.1.1XLE2 questions
  • entry C > highest(C,20)
  • exit C < lowest(C,10)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "XLE"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "C > highest(C,20)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C < lowest(C,10)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.646 · exit 0.111

Gap Up Continuation

Opens more than 1% above yesterday's high and keeps going, closing above its own open. Out on a close under the 5-day average.

ora-fin-0.1.1NVDA2 questions
  • entry O > H[-1] * 1.01 AND C > O
  • exit C < avg(C,5)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "O > H[-1] * 1.01 AND C > O"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C < avg(C,5)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.060 · exit 0.926

3-Bar Momentum Long

Two higher closes in a row while above the 20-day average. Out when the close slips under the 10-day average.

ora-fin-0.1.1AAPL2 questions
  • entry C > C[-1] AND C[-1] > C[-2] AND C > avg(C,20)
  • exit C < avg(C,10)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AAPL"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "C > C[-1] AND C[-1] > C[-2] AND C > avg(C,20)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C < avg(C,10)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.127 · exit 0.559

Range Break + Volume Confirmation

A 20-session closing high on at least 1.5 times average volume, so the break has participation behind it.

ora-fin-0.1.1XLE2 questions
  • entry C > highest(C,20) AND V > 1.5 * avg(V,20)
  • exit C < avg(C,10)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "XLE"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "C > highest(C,20) AND V > 1.5 * avg(V,20)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C < avg(C,10)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.065 · exit 0.134

10-Bar Range Breakout

A faster breakout: the close beats the prior 10 sessions. Out on a close under the 5-day average.

ora-fin-0.1.1IWM2 questions
  • entry C > highest(C,10)
  • exit C < avg(C,5)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "IWM"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "C > highest(C,10)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C < avg(C,5)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.119 · exit 0.727

20-Bar Low Break

The short-side mirror of the 20-bar high break: a close under the prior 20-session low; cover above the prior 10-session high.

ora-fin-0.1.1AMZN2 questions
  • entry C < lowest(C,20)
  • exit C > highest(C,10)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AMZN"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "C < lowest(C,20)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C > highest(C,10)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.637 · exit 0.054

10-Bar Range Breakdown

A close under the prior 10-session low. Cover when it closes back above the 5-day average.

ora-fin-0.1.1MSFT2 questions
  • entry C < lowest(C,10)
  • exit C > avg(C,5)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "C < lowest(C,10)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C > avg(C,5)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.478 · exit 0.116

Bottom-20% Range + Break

Price sits in the bottom fifth of its 10-day range, closes under yesterday's low, on above-average volume.

ora-fin-0.1.1AMZN2 questions
  • entry ((C - min(C,10)) / (max(C,10) - min(C,10)) < 0.2) AND (C < L[-1]) AND (V > 1.2 * avg(V,10))
  • exit C > highest(C,5)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AMZN"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "((C - min(C,10)) / (max(C,10) - min(C,10)) < 0.2) AND (C < L[-1]) AND (V > 1.2 * avg(V,10))"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C > highest(C,5)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.627 · exit 0.057

Mean Reversion

RSI Oversold Bounce

Buy weakness when the 14-day RSI is under 30; take it off once RSI is back over 50.

ora-fin-0.1.1AMZN2 questions
  • entry rsi(C,14) < 30
  • exit rsi(C,14) > 50
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AMZN"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "rsi(C,14) < 30"
    },
    "exit": {
      "type": "yes_no",
      "ask": "rsi(C,14) > 50"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.100 · exit 0.070

Bollinger Band Reversion

A close more than two standard deviations under the 20-day mean, held until it closes back above the mean.

ora-fin-0.1.1MSFT2 questions
  • entry C < (avg(C,20) - 2 * std(C,20))
  • exit C > avg(C,20)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "C < (avg(C,20) - 2 * std(C,20))"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C > avg(C,20)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.458 · exit 0.257

Dip Below 20-Bar Mean

A 3% dip under the 20-day average, without the volatility scaling of a band. Out back above the average.

ora-fin-0.1.1SPY2 questions
  • entry C < avg(C,20) * 0.97
  • exit C > avg(C,20)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "C < avg(C,20) * 0.97"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C > avg(C,20)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.148 · exit 0.082

Patterns

Inside-Bar Breakout Long

Yesterday was an inside bar (range inside the day before); today closes above its high.

ora-fin-0.1.1QQQ2 questions
  • entry H[-1] < H[-2] AND L[-1] > L[-2] AND C > H[-1]
  • exit C < avg(C,5)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "QQQ"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "H[-1] < H[-2] AND L[-1] > L[-2] AND C > H[-1]"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C < avg(C,5)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.054 · exit 0.943

Hammer Reversal

A hammer candle after a short decline, while price still holds the 20-day average. Out under yesterday's low.

ora-fin-0.1.1NVDA2 questions
  • entry hammer() AND C > avg(C,20)
  • exit C < L[-1]
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "hammer() AND C > avg(C,20)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C < L[-1]"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.071 · exit 0.910

Bearish Engulfing Short

Today's red body swallows yesterday's green one. Cover on a close above yesterday's high.

ora-fin-0.1.1TSLA2 questions
  • entry engulfing_bear()
  • exit C > H[-1]
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "engulfing_bear()"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C > H[-1]"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.071 · exit 0.187

Inside-Bar Breakdown Short

Yesterday was an inside bar; today closes under its low. Cover back above the 5-day average.

ora-fin-0.1.1IWM2 questions
  • entry H[-1] < H[-2] AND L[-1] > L[-2] AND C < L[-1]
  • exit C > avg(C,5)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "IWM"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "H[-1] < H[-2] AND L[-1] > L[-2] AND C < L[-1]"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C > avg(C,5)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.075 · exit 0.273

Reversal

Overextension + First Weak Close

More than 8% over the 20-day average and the first lower close: a fade candidate. The exit rule here is written from the long side of the average.

ora-fin-0.1.1AMD2 questions
  • entry C > avg(C,20) * 1.08 AND C < C[-1]
  • exit C > avg(C,20)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AMD"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "C > avg(C,20) * 1.08 AND C < C[-1]"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C > avg(C,20)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.065 · exit 0.106

Gap Down Reversal

Opens more than 1% under yesterday's low, then closes above its open: sellers did not follow through.

ora-fin-0.1.1TSLA2 questions
  • entry O < L[-1] * 0.99 AND C > O
  • exit C < avg(C,5)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "O < L[-1] * 0.99 AND C > O"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C < avg(C,5)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.739 · exit 0.613

Trend Following

Above 200-Bar Trend

The simplest trend filter: in while the close is above the 200-day average, out below it.

ora-fin-0.1.1SPY2 questions
  • entry C > sma(C,200)
  • exit C < sma(C,200)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "C > sma(C,200)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C < sma(C,200)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.945 · exit 0.055

Dual MA Crossover

In while the 20-day average is above the 50-day; out when it falls below.

ora-fin-0.1.1QQQ2 questions
  • entry sma(C,20) > sma(C,50)
  • exit sma(C,20) < sma(C,50)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "QQQ"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "sma(C,20) > sma(C,50)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "sma(C,20) < sma(C,50)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.714 · exit 0.286

Pullback in Uptrend 10/50

Above the 50-day trend but under the 10-day: a pullback inside an uptrend. Out on a new 5-session closing high.

ora-fin-0.1.1AAPL2 questions
  • entry C > avg(C,50) AND C < avg(C,10)
  • exit C > highest(C,5)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AAPL"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "C > avg(C,50) AND C < avg(C,10)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C > highest(C,5)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.559 · exit 0.157

100-Bar Trend + Shallow Pullback

Above the 100- and 20-day averages, dipping just under the 5-day: a shallow pause in a strong trend.

ora-fin-0.1.1MSFT2 questions
  • entry C > avg(C,100) AND C > avg(C,20) AND C < avg(C,5)
  • exit C > highest(C,5)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "C > avg(C,100) AND C > avg(C,20) AND C < avg(C,5)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C > highest(C,5)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.257 · exit 0.112

3-Bar Pullback in Uptrend

Three lower closes in a row while still above the 50-day average.

ora-fin-0.1.1XLE2 questions
  • entry C > avg(C,50) AND C < C[-1] AND C[-1] < C[-2] AND C[-2] < C[-3]
  • exit C > highest(C,5)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "XLE"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "C > avg(C,50) AND C < C[-1] AND C[-1] < C[-2] AND C[-2] < C[-3]"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C > highest(C,5)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.091 · exit 0.685

5/20 MA Crossover

A faster crossover: the 5-day average over the 20-day.

ora-fin-0.1.1NVDA2 questions
  • entry avg(C,5) > avg(C,20)
  • exit avg(C,5) < avg(C,20)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "avg(C,5) > avg(C,20)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "avg(C,5) < avg(C,20)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.120 · exit 0.880

Volatility

Volatility Compression Breakout

Recent swings are less than half their longer-run size: a coiled market. Out under the 20-day average.

ora-fin-0.1.1SPY2 questions
  • entry std(C,20) < 0.5 * std(C,50)
  • exit C < avg(C,20)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "std(C,20) < 0.5 * std(C,50)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C < avg(C,20)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.151 · exit 0.918

Low-Vol Base + Breakout

A 10-day range under 5% of price, then a close above the prior 10-session high.

ora-fin-0.1.1DIA2 questions
  • entry (max(H,10) - min(L,10)) / avg(C,10) < 0.05 AND C > highest(C,10)
  • exit C < avg(C,10)
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "DIA"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "(max(H,10) - min(L,10)) / avg(C,10) < 0.05 AND C > highest(C,10)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C < avg(C,10)"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.070 · exit 0.894

Volume

Volume Dry-Up Reversal

Below the 50-day average, a green day on half the usual volume: selling pressure drying up.

ora-fin-0.1.1AMZN2 questions
  • entry V < 0.5 * avg(V,20) AND C > O AND C < avg(C,50)
  • exit C < L[-1]
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AMZN"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "V < 0.5 * avg(V,20) AND C > O AND C < avg(C,50)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C < L[-1]"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.054 · exit 0.627

Volume Spike Breakout

Volume more than double the 20-day average. Out on a close under yesterday's low.

ora-fin-0.1.1AAPL2 questions
  • entry V > 2 * avg(V,20)
  • exit C < L[-1]
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AAPL"
  },
  "questions": {
    "entry": {
      "type": "yes_no",
      "ask": "V > 2 * avg(V,20)"
    },
    "exit": {
      "type": "yes_no",
      "ask": "C < L[-1]"
    }
  }
}
Answers (session of 2026-10-30)

entry 0.186 · exit 0.770

Financial

Everyday trader questions about one stock, answered from its current numbers.

Momentum burst on heavy volume

ora-fin-0.1.13 questions
  • vol_up Will volatility rise over the next 5 days?
  • dip_5pct Will it drop at least 5% at some point in the next month?
  • volume_spike Will volume spike tomorrow?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "return_5d": 0.08,
      "volume_ratio": 2.1,
      "volatility_20d": 0.32
    }
  },
  "questions": {
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will volatility rise over the next 5 days?"
    },
    "dip_5pct": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "volume_spike": {
      "type": "yes_no",
      "instructions": "Will volume spike tomorrow?"
    }
  }
}

Quiet large cap near its highs

ora-fin-0.1.13 questions
  • new_high Will it make a new 20-day high in the next week?
  • vol_up Will volatility rise over the next 5 days?
  • dip_5pct Will it drop at least 5% at some point in the next month?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "return_5d": 0.006,
      "return_20d": 0.021,
      "volatility_20d": 0.14,
      "dist_high_252": -0.012,
      "rsi_14": 61,
      "dollar_volume_log": 9.4
    }
  },
  "questions": {
    "new_high": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day high in the next week?"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will volatility rise over the next 5 days?"
    },
    "dip_5pct": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}

Oversold after a selloff

ora-fin-0.1.13 questions
  • rally_5pct Will it rally at least 5% at some point in the next month?
  • new_low Will it make a new 20-day low in the next week?
  • vol_down Will volatility calm down over the next 5 days?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "return_5d": -0.11,
      "return_20d": -0.18,
      "rsi_14": 24,
      "dist_sma_50": -0.15,
      "volatility_20d": 0.48,
      "volume_ratio": 1.7
    }
  },
  "questions": {
    "rally_5pct": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    },
    "new_low": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day low in the next week?"
    },
    "vol_down": {
      "type": "yes_no",
      "instructions": "Will volatility calm down over the next 5 days?"
    }
  }
}

Gap up on earnings

ora-fin-0.1.14 questions
  • vol_down Will volatility calm down over the next 5 days?
  • gap_up Will it gap up tomorrow?
  • volume_spike Will volume spike tomorrow?
  • + 1 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "gap_1d": 0.065,
      "return_1d": 0.082,
      "volume_ratio": 4.3,
      "range_pct_1d": 0.071,
      "close_location": 0.88,
      "volatility_20d": 0.29
    }
  },
  "questions": {
    "vol_down": {
      "type": "yes_no",
      "instructions": "Will volatility calm down over the next 5 days?"
    },
    "gap_up": {
      "type": "yes_no",
      "instructions": "Will it gap up tomorrow?"
    },
    "volume_spike": {
      "type": "yes_no",
      "instructions": "Will volume spike tomorrow?"
    },
    "up_5d": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}

Gap down on a guidance cut

ora-fin-0.1.13 questions
  • vol_down Will volatility calm down over the next 5 days?
  • new_low Will it make a new 20-day low in the next week?
  • rally_5pct Will it rally at least 5% at some point in the next month?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "gap_1d": -0.09,
      "return_1d": -0.12,
      "volume_ratio": 5.2,
      "range_pct_1d": 0.08,
      "close_location": 0.15,
      "volatility_5d": 0.95
    }
  },
  "questions": {
    "vol_down": {
      "type": "yes_no",
      "instructions": "Will volatility calm down over the next 5 days?"
    },
    "new_low": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day low in the next week?"
    },
    "rally_5pct": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  }
}

Volatility squeeze (tight range)

ora-fin-0.1.13 questions
  • vol_up Will volatility rise over the next 5 days?
  • big_move Will there be a big move in either direction in the next 5 days?
  • new_high Will it make a new 20-day high in the next week?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "volatility_5d": 0.09,
      "volatility_20d": 0.21,
      "vol_ratio_5_20": 0.43,
      "atr_pct": 0.014,
      "range_pct_1d": 0.008,
      "volume_ratio_5d": 0.7
    }
  },
  "questions": {
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will volatility rise over the next 5 days?"
    },
    "big_move": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    },
    "new_high": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day high in the next week?"
    }
  }
}

Small cap meme spike

ora-fin-0.1.13 questions
  • dip_5pct Will it drop at least 5% at some point in the next month?
  • vol_down Will volatility calm down over the next 5 days?
  • gap_down Will it gap down tomorrow?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "return_1d": 0.27,
      "return_5d": 0.61,
      "volume_ratio": 9.5,
      "volatility_20d": 1.35,
      "rsi_14": 88,
      "dollar_volume_log": 6.8
    }
  },
  "questions": {
    "dip_5pct": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "vol_down": {
      "type": "yes_no",
      "instructions": "Will volatility calm down over the next 5 days?"
    },
    "gap_down": {
      "type": "yes_no",
      "instructions": "Will it gap down tomorrow?"
    }
  }
}

Long-term downtrend, lower lows

ora-fin-0.1.13 questions
  • new_low Will it make a new 20-day low in the next week?
  • beat_spy Will it beat SPY over the next month?
  • rally_5pct Will it rally at least 5% at some point in the next month?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "return_60d": -0.22,
      "return_252d": -0.41,
      "dist_sma_200": -0.27,
      "dist_high_252": -0.48,
      "rsi_14": 38,
      "volatility_60d": 0.44
    }
  },
  "questions": {
    "new_low": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day low in the next week?"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    },
    "rally_5pct": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  }
}

Breakout to a 52-week high

ora-fin-0.1.13 questions
  • new_high Will it make a new 20-day high in the next week?
  • dip_5pct Will it drop at least 5% at some point in the next month?
  • up_5d Will the stock be higher in a week?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "dist_high_252": 0,
      "return_20d": 0.12,
      "volume_ratio": 2.4,
      "rsi_14": 72,
      "dist_sma_50": 0.09,
      "close_location": 0.95
    }
  },
  "questions": {
    "new_high": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day high in the next week?"
    },
    "dip_5pct": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "up_5d": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}

Market selloff, stock holds up

ora-fin-0.1.13 questions
  • beat_spy Will it beat SPY over the next month?
  • vol_up Will volatility rise over the next 5 days?
  • dip_5pct Will it drop at least 5% at some point in the next month?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "market_return_5d": -0.045,
      "market_volatility_20d": 0.27,
      "return_5d": 0.004,
      "volatility_20d": 0.22,
      "dist_sma_200": 0.06
    }
  },
  "questions": {
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will volatility rise over the next 5 days?"
    },
    "dip_5pct": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}

Calm market, defensive stock

ora-fin-0.1.13 questions
  • big_move Will there be a big move in either direction in the next 5 days?
  • dip_5pct Will it drop at least 5% at some point in the next month?
  • rally_5pct Will it rally at least 5% at some point in the next month?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "market_return_5d": 0.008,
      "market_volatility_20d": 0.11,
      "volatility_20d": 0.12,
      "atr_pct": 0.011,
      "return_20d": 0.01,
      "dollar_volume_log": 8.9
    }
  },
  "questions": {
    "big_move": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    },
    "dip_5pct": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "rally_5pct": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  }
}

Volume drying up after a run

ora-fin-0.1.13 questions
  • volume_spike Will volume spike tomorrow?
  • new_high Will it make a new 20-day high in the next week?
  • dip_5pct Will it drop at least 5% at some point in the next month?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "return_20d": 0.15,
      "volume_ratio": 0.45,
      "volume_ratio_5d": 0.6,
      "rsi_14": 66,
      "dist_sma_20": 0.05
    }
  },
  "questions": {
    "volume_spike": {
      "type": "yes_no",
      "instructions": "Will volume spike tomorrow?"
    },
    "new_high": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day high in the next week?"
    },
    "dip_5pct": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}

Reversal day: closed at the low

ora-fin-0.1.13 questions
  • up_1d Will the stock be up tomorrow?
  • gap_down Will it gap down tomorrow?
  • new_low Will it make a new 20-day low in the next week?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "return_1d": -0.031,
      "range_pct_1d": 0.052,
      "close_location": 0.04,
      "volume_ratio": 1.9,
      "rsi_14": 55,
      "dist_sma_20": 0.01
    }
  },
  "questions": {
    "up_1d": {
      "type": "yes_no",
      "instructions": "Will the stock be up tomorrow?"
    },
    "gap_down": {
      "type": "yes_no",
      "instructions": "Will it gap down tomorrow?"
    },
    "new_low": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day low in the next week?"
    }
  }
}

Hammer: closed at the high after a dip

ora-fin-0.1.13 questions
  • up_1d Will the stock be up tomorrow?
  • gap_up Will it gap up tomorrow?
  • rally_5pct Will it rally at least 5% at some point in the next month?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "return_1d": 0.012,
      "range_pct_1d": 0.047,
      "close_location": 0.93,
      "return_5d": -0.06,
      "rsi_14": 33,
      "volume_ratio": 1.6
    }
  },
  "questions": {
    "up_1d": {
      "type": "yes_no",
      "instructions": "Will the stock be up tomorrow?"
    },
    "gap_up": {
      "type": "yes_no",
      "instructions": "Will it gap up tomorrow?"
    },
    "rally_5pct": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  }
}

Extended far above the 200-day

ora-fin-0.1.13 questions
  • dip_5pct Will it drop at least 5% at some point in the next month?
  • beat_spy Will it beat SPY over the next month?
  • vol_up_20 Will volatility be higher over the next month?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "dist_sma_200": 0.42,
      "dist_sma_50": 0.18,
      "return_60d": 0.38,
      "rsi_14": 79,
      "volatility_20d": 0.36
    }
  },
  "questions": {
    "dip_5pct": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    },
    "vol_up_20": {
      "type": "yes_no",
      "instructions": "Will volatility be higher over the next month?"
    }
  }
}

At a 52-week low and still falling

ora-fin-0.1.13 questions
  • new_low Will it make a new 20-day low in the next week?
  • rally_5pct Will it rally at least 5% at some point in the next month?
  • big_move Will there be a big move in either direction in the next 5 days?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "dist_low_252": 0,
      "return_5d": -0.07,
      "return_20d": -0.21,
      "rsi_14": 21,
      "volatility_20d": 0.62,
      "volume_ratio_5d": 1.8
    }
  },
  "questions": {
    "new_low": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day low in the next week?"
    },
    "rally_5pct": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    },
    "big_move": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  }
}

High-volatility regime cooling down

ora-fin-0.1.13 questions
  • vol_down Will volatility calm down over the next 5 days?
  • vol_up_20 Will volatility be higher over the next month?
  • big_move Will there be a big move in either direction in the next 5 days?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "volatility_5d": 0.31,
      "volatility_20d": 0.58,
      "vol_ratio_5_20": 0.53,
      "market_volatility_20d": 0.24,
      "atr_pct": 0.035
    }
  },
  "questions": {
    "vol_down": {
      "type": "yes_no",
      "instructions": "Will volatility calm down over the next 5 days?"
    },
    "vol_up_20": {
      "type": "yes_no",
      "instructions": "Will volatility be higher over the next month?"
    },
    "big_move": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  }
}

Illiquid name, wide daily ranges

ora-fin-0.1.13 questions
  • big_move Will there be a big move in either direction in the next 5 days?
  • gap_up Will it gap up tomorrow?
  • gap_down Will it gap down tomorrow?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "dollar_volume_log": 5.9,
      "atr_pct": 0.072,
      "range_pct_1d": 0.09,
      "volatility_20d": 0.85,
      "volume_ratio": 0.8
    }
  },
  "questions": {
    "big_move": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    },
    "gap_up": {
      "type": "yes_no",
      "instructions": "Will it gap up tomorrow?"
    },
    "gap_down": {
      "type": "yes_no",
      "instructions": "Will it gap down tomorrow?"
    }
  }
}

Minimal context (three numbers)

ora-fin-0.1.13 questions
  • rally_5pct Will it rally at least 5% at some point in the next month?
  • dip_5pct Will it drop at least 5% at some point in the next month?
  • new_low Will it make a new 20-day low in the next week?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "return_20d": -0.05,
      "rsi_14": 41,
      "volatility_20d": 0.27
    }
  },
  "questions": {
    "rally_5pct": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    },
    "dip_5pct": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "new_low": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day low in the next week?"
    }
  }
}

Full 24-field snapshot

ora-fin-0.1.14 questions
  • vol_up Will volatility rise over the next 5 days?
  • up_5d Will the stock be higher in a week?
  • new_high Will it make a new 20-day high in the next week?
  • + 1 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "return_1d": 0.014,
      "return_5d": 0.032,
      "return_20d": 0.058,
      "return_60d": 0.11,
      "return_252d": 0.27,
      "volatility_5d": 0.24,
      "volatility_20d": 0.27,
      "volatility_60d": 0.29,
      "vol_ratio_5_20": 0.89,
      "volume_ratio": 1.3,
      "volume_ratio_5d": 1.1,
      "atr_pct": 0.021,
      "rsi_14": 63,
      "dist_sma_20": 0.028,
      "dist_sma_50": 0.061,
      "dist_sma_200": 0.14,
      "dist_high_252": -0.03,
      "dist_low_252": 0.46,
      "gap_1d": 0.004,
      "range_pct_1d": 0.024,
      "close_location": 0.78,
      "dollar_volume_log": 8.6,
      "market_return_5d": 0.011,
      "market_volatility_20d": 0.15
    }
  },
  "questions": {
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will volatility rise over the next 5 days?"
    },
    "up_5d": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    },
    "new_high": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day high in the next week?"
    },
    "dip_5pct": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}

Gap fill

Real opening gaps, with what actually happened. Run it and compare the answers to the outcome.

TSLA earnings gap: TSLA 2026-10-22 -3.2% + no-signal control

ora-fin-0.1.13 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
  • gap_and_go Is this a gap-and-go day rather than a fade?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2026-10-22",
    "context": {
      "gap_pct": -0.03219,
      "gap_dir": -1,
      "gap_atr": -1.00978,
      "gap_vs_typical": 3.76115,
      "gap_outside_range_atr": 0.526,
      "earnings_day": 1,
      "earnings_next_5d": 0,
      "market_gap_pct": -0.00869,
      "gap_vs_market": -0.0235,
      "prior_return_1d": 0.03414,
      "prior_return_5d": 0.05259,
      "prior_return_20d": 0.01671,
      "prior_rsi_14": 59.77,
      "prior_dist_sma_20": 0.04443,
      "prior_dist_sma_50": 0.06706,
      "prior_dist_high_20": -0.0061,
      "prior_dist_low_20": 0.11735,
      "prior_close_location": 0.71523,
      "prior_volume_ratio": 1.30117,
      "volatility_20d": 0.34942,
      "atr_pct": 0.03188,
      "dollar_volume_log": 10.112,
      "beta_1y": 2.21228,
      "market_volatility_20d": 0.08848,
      "sym_gap_fill_rate": 0.44,
      "sym_gap_fill_rate_dir": 0.4,
      "sym_gap_fill_5d_rate": 0.72,
      "sym_gap_go_rate": 0.5,
      "sym_gaps_1y": 107
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    },
    "gap_and_go": {
      "type": "yes_no",
      "instructions": "Is this a gap-and-go day rather than a fade?"
    }
  }
}

TSLA ordinary gap down: TSLA 2026-10-15 -1.8%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2026-10-15",
    "context": {
      "gap_pct": -0.01792,
      "gap_dir": -1,
      "gap_atr": -0.59541,
      "gap_vs_typical": 2.09405,
      "gap_outside_range_atr": 0.29318,
      "earnings_day": 0,
      "earnings_next_5d": 1,
      "market_gap_pct": -0.00435,
      "gap_vs_market": -0.01357,
      "prior_return_1d": -0.02151,
      "prior_return_5d": -0.02819,
      "prior_return_20d": 0.02536,
      "prior_rsi_14": 49.27,
      "prior_dist_sma_20": -0.01035,
      "prior_dist_sma_50": 0.02576,
      "prior_dist_high_20": -0.05508,
      "prior_dist_low_20": 0.06152,
      "prior_close_location": 0.44122,
      "prior_volume_ratio": 0.89872,
      "volatility_20d": 0.31237,
      "atr_pct": 0.0301,
      "dollar_volume_log": 10.104,
      "beta_1y": 2.20743,
      "market_volatility_20d": 0.10666,
      "sym_gap_fill_rate": 0.44,
      "sym_gap_fill_rate_dir": 0.42,
      "sym_gap_fill_5d_rate": 0.72,
      "sym_gap_go_rate": 0.52,
      "sym_gaps_1y": 107
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

MSFT small gap up: MSFT 2026-10-09 +1.1%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT",
    "as_of": "2026-10-09",
    "context": {
      "gap_pct": 0.01076,
      "gap_dir": 1,
      "gap_atr": 0.49067,
      "gap_vs_typical": 1.79177,
      "gap_outside_range_atr": -0.46014,
      "earnings_day": 0,
      "earnings_next_5d": 0,
      "market_gap_pct": 0.00298,
      "gap_vs_market": 0.00778,
      "prior_return_1d": -0.0135,
      "prior_return_5d": 0.01913,
      "prior_return_20d": 0.06127,
      "prior_rsi_14": 61.76,
      "prior_dist_sma_20": 0.0285,
      "prior_dist_sma_50": 0.04838,
      "prior_dist_high_20": -0.02442,
      "prior_dist_low_20": 0.07261,
      "prior_close_location": 0.13078,
      "prior_volume_ratio": 0.90468,
      "volatility_20d": 0.21365,
      "atr_pct": 0.02194,
      "dollar_volume_log": 10.045,
      "beta_1y": 0.95433,
      "market_volatility_20d": 0.10523,
      "sym_gap_fill_rate": 0.26,
      "sym_gap_fill_rate_dir": 0.32,
      "sym_gap_fill_5d_rate": 0.68,
      "sym_gap_go_rate": 0.48,
      "sym_gaps_1y": 74
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

MSFT earnings gap: MSFT 2026-07-30 +12.1%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT",
    "as_of": "2026-07-30",
    "context": {
      "gap_pct": 0.12125,
      "gap_dir": 1,
      "gap_atr": 3.98592,
      "gap_vs_typical": 22.93164,
      "gap_outside_range_atr": 3.08442,
      "earnings_day": 1,
      "earnings_next_5d": 0,
      "market_gap_pct": 0.00903,
      "gap_vs_market": 0.11222,
      "prior_return_1d": -0.00713,
      "prior_return_5d": 0.00051,
      "prior_return_20d": 0.04698,
      "prior_rsi_14": 50.04,
      "prior_dist_sma_20": 0.00187,
      "prior_dist_sma_50": -0.01837,
      "prior_dist_high_20": -0.03805,
      "prior_dist_low_20": 0.04605,
      "prior_close_location": 0.14388,
      "prior_volume_ratio": 1.47088,
      "volatility_20d": 0.26035,
      "atr_pct": 0.03042,
      "dollar_volume_log": 10.098,
      "beta_1y": 0.7652,
      "market_volatility_20d": 0.10703,
      "sym_gap_fill_rate": 0.34,
      "sym_gap_fill_rate_dir": 0.36,
      "sym_gap_fill_5d_rate": 0.74,
      "sym_gap_go_rate": 0.48,
      "sym_gaps_1y": 62
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

NVDA large gap down (>4%): NVDA 2025-11-25 -4.2%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA",
    "as_of": "2025-11-25",
    "context": {
      "gap_pct": -0.04181,
      "gap_dir": -1,
      "gap_atr": -0.92523,
      "gap_vs_typical": 4.10669,
      "gap_outside_range_atr": 0.18932,
      "earnings_day": 0,
      "earnings_next_5d": 0,
      "market_gap_pct": -0.00016,
      "gap_vs_market": -0.04164,
      "prior_return_1d": 0.02051,
      "prior_return_5d": -0.0217,
      "prior_return_20d": -0.04669,
      "prior_rsi_14": 45.14,
      "prior_dist_sma_20": -0.05172,
      "prior_dist_sma_50": -0.0215,
      "prior_dist_high_20": -0.13972,
      "prior_dist_low_20": 0.05562,
      "prior_close_location": 0.86467,
      "prior_volume_ratio": 1.16733,
      "volatility_20d": 0.46826,
      "atr_pct": 0.04518,
      "dollar_volume_log": 10.634,
      "beta_1y": 1.84137,
      "market_volatility_20d": 0.14714,
      "sym_gap_fill_rate": 0.34,
      "sym_gap_fill_rate_dir": 0.34,
      "sym_gap_fill_5d_rate": 0.68,
      "sym_gap_go_rate": 0.44,
      "sym_gaps_1y": 128
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

NVDA gap up, no earnings: NVDA 2026-10-21 +2.1%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA",
    "as_of": "2026-10-21",
    "context": {
      "gap_pct": 0.02074,
      "gap_dir": 1,
      "gap_atr": 0.76612,
      "gap_vs_typical": 2.39032,
      "gap_outside_range_atr": 0.42657,
      "earnings_day": 0,
      "earnings_next_5d": 0,
      "market_gap_pct": 0.00276,
      "gap_vs_market": 0.01799,
      "prior_return_1d": -0.00286,
      "prior_return_5d": -0.05273,
      "prior_return_20d": -0.05418,
      "prior_rsi_14": 40.93,
      "prior_dist_sma_20": -0.04657,
      "prior_dist_sma_50": -0.02847,
      "prior_dist_high_20": -0.11053,
      "prior_dist_low_20": 0.01739,
      "prior_close_location": 0.65026,
      "prior_volume_ratio": 0.74971,
      "volatility_20d": 0.23582,
      "atr_pct": 0.02707,
      "dollar_volume_log": 10.367,
      "beta_1y": 1.89868,
      "market_volatility_20d": 0.09037,
      "sym_gap_fill_rate": 0.24,
      "sym_gap_fill_rate_dir": 0.3,
      "sym_gap_fill_5d_rate": 0.66,
      "sym_gap_go_rate": 0.54,
      "sym_gaps_1y": 113
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

AAPL gaps with the whole market: AAPL 2026-07-23 -1.3%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AAPL",
    "as_of": "2026-07-23",
    "context": {
      "gap_pct": -0.01278,
      "gap_dir": -1,
      "gap_atr": -0.51892,
      "gap_vs_typical": 3.66191,
      "gap_outside_range_atr": 0.20111,
      "earnings_day": 0,
      "earnings_next_5d": 0,
      "market_gap_pct": -0.01076,
      "gap_vs_market": -0.00202,
      "prior_return_1d": -0.00565,
      "prior_return_5d": -0.00492,
      "prior_return_20d": 0.10733,
      "prior_rsi_14": 62.55,
      "prior_dist_sma_20": 0.05104,
      "prior_dist_sma_50": 0.06889,
      "prior_dist_high_20": -0.02716,
      "prior_dist_low_20": 0.19048,
      "prior_close_location": 0.45053,
      "prior_volume_ratio": 0.59052,
      "volatility_20d": 0.37453,
      "atr_pct": 0.02462,
      "dollar_volume_log": 10.295,
      "beta_1y": 0.84395,
      "market_volatility_20d": 0.10645,
      "sym_gap_fill_rate": 0.24,
      "sym_gap_fill_rate_dir": 0.26,
      "sym_gap_fill_5d_rate": 0.58,
      "sym_gap_go_rate": 0.48,
      "sym_gaps_1y": 34
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

AMD gaps against the market: AMD 2026-08-05 -6.6%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AMD",
    "as_of": "2026-08-05",
    "context": {
      "gap_pct": -0.06573,
      "gap_dir": -1,
      "gap_atr": -0.84462,
      "gap_vs_typical": 4.8597,
      "gap_outside_range_atr": 0.43873,
      "earnings_day": 1,
      "earnings_next_5d": 0,
      "market_gap_pct": 0.00586,
      "gap_vs_market": -0.07159,
      "prior_return_1d": 0.07003,
      "prior_return_5d": 0.14069,
      "prior_return_20d": 0.00479,
      "prior_rsi_14": 52.32,
      "prior_dist_sma_20": 0.01322,
      "prior_dist_sma_50": 0.00827,
      "prior_dist_high_20": -0.09687,
      "prior_dist_low_20": 0.22297,
      "prior_close_location": 0.58647,
      "prior_volume_ratio": 1.37084,
      "volatility_20d": 0.83003,
      "atr_pct": 0.07782,
      "dollar_volume_log": 10.147,
      "beta_1y": 3.1136,
      "market_volatility_20d": 0.14514,
      "sym_gap_fill_rate": 0.42,
      "sym_gap_fill_rate_dir": 0.56,
      "sym_gap_fill_5d_rate": 0.74,
      "sym_gap_go_rate": 0.5,
      "sym_gaps_1y": 150
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

SPY gap down (index ETF): SPY 2026-07-23 -1.1%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY",
    "as_of": "2026-07-23",
    "context": {
      "gap_pct": -0.01076,
      "gap_dir": -1,
      "gap_atr": -1.00517,
      "gap_vs_typical": 3.7872,
      "gap_outside_range_atr": 0.87514,
      "earnings_day": 0,
      "earnings_next_5d": 0,
      "market_gap_pct": -0.01076,
      "gap_vs_market": 0,
      "prior_return_1d": -0.00116,
      "prior_return_5d": -0.0098,
      "prior_return_20d": 0.01885,
      "prior_rsi_14": 52.01,
      "prior_dist_sma_20": 0.00233,
      "prior_dist_sma_50": 0.00453,
      "prior_dist_high_20": -0.01081,
      "prior_dist_low_20": 0.04302,
      "prior_close_location": 0.28493,
      "prior_volume_ratio": 0.6526,
      "volatility_20d": 0.10645,
      "atr_pct": 0.0107,
      "dollar_volume_log": 10.559,
      "beta_1y": 1,
      "market_volatility_20d": 0.10645,
      "sym_gap_fill_rate": 0.28,
      "sym_gap_fill_rate_dir": 0.32,
      "sym_gap_fill_5d_rate": 0.6,
      "sym_gap_go_rate": 0.46,
      "sym_gaps_1y": 17
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

QQQ gap up (index ETF): QQQ 2026-10-19 +1.4%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "QQQ",
    "as_of": "2026-10-19",
    "context": {
      "gap_pct": 0.01383,
      "gap_dir": 1,
      "gap_atr": 0.94748,
      "gap_vs_typical": 2.61732,
      "gap_outside_range_atr": -0.61058,
      "earnings_day": 0,
      "earnings_next_5d": 0,
      "market_gap_pct": 0.00521,
      "gap_vs_market": 0.00861,
      "prior_return_1d": -0.025,
      "prior_return_5d": -0.0552,
      "prior_return_20d": -0.01615,
      "prior_rsi_14": 35.01,
      "prior_dist_sma_20": -0.04406,
      "prior_dist_sma_50": -0.02335,
      "prior_dist_high_20": -0.06955,
      "prior_dist_low_20": 0.00243,
      "prior_close_location": 0.0963,
      "prior_volume_ratio": 1.92931,
      "volatility_20d": 0.18344,
      "atr_pct": 0.01459,
      "dollar_volume_log": 10.421,
      "beta_1y": 1.43609,
      "market_volatility_20d": 0.10459,
      "sym_gap_fill_rate": 0.18,
      "sym_gap_fill_rate_dir": 0.22,
      "sym_gap_fill_5d_rate": 0.62,
      "sym_gap_go_rate": 0.48,
      "sym_gaps_1y": 50
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

Huge gap (>8%), high-volatility name: KORU 2026-10-22 -9.3%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "KORU",
    "as_of": "2026-10-22",
    "context": {
      "gap_pct": -0.09296,
      "gap_dir": -1,
      "gap_atr": -0.60185,
      "gap_vs_typical": 1.77902,
      "gap_outside_range_atr": 0.24399,
      "earnings_day": 0,
      "earnings_next_5d": 0,
      "market_gap_pct": -0.00869,
      "gap_vs_market": -0.08427,
      "prior_return_1d": 0.05291,
      "prior_return_5d": -0.07657,
      "prior_return_20d": -0.43865,
      "prior_rsi_14": 34.76,
      "prior_dist_sma_20": -0.31427,
      "prior_dist_sma_50": -0.38775,
      "prior_dist_high_20": -0.48755,
      "prior_dist_low_20": 0.14258,
      "prior_close_location": 0.6055,
      "prior_volume_ratio": 1.48897,
      "volatility_20d": 1.21975,
      "atr_pct": 0.15447,
      "dollar_volume_log": 8.634,
      "beta_1y": 8.78172,
      "market_volatility_20d": 0.08848,
      "sym_gap_fill_rate": 0.28,
      "sym_gap_fill_rate_dir": 0.28,
      "sym_gap_fill_5d_rate": 0.64,
      "sym_gap_go_rate": 0.56,
      "sym_gaps_1y": 229
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

Gap up after a 5-day rally: CIEN 2026-10-09 +2.4%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "CIEN",
    "as_of": "2026-10-09",
    "context": {
      "gap_pct": 0.02364,
      "gap_dir": 1,
      "gap_atr": 0.41552,
      "gap_vs_typical": 1.6136,
      "gap_outside_range_atr": -0.32969,
      "earnings_day": 0,
      "earnings_next_5d": 0,
      "market_gap_pct": 0.00298,
      "gap_vs_market": 0.02066,
      "prior_return_1d": -0.04596,
      "prior_return_5d": 0.12341,
      "prior_return_20d": 0.2731,
      "prior_rsi_14": 62.74,
      "prior_dist_sma_20": 0.15585,
      "prior_dist_sma_50": 0.12363,
      "prior_dist_high_20": -0.04926,
      "prior_dist_low_20": 0.33759,
      "prior_close_location": 0.21066,
      "prior_volume_ratio": 1.31866,
      "volatility_20d": 0.74022,
      "atr_pct": 0.0569,
      "dollar_volume_log": 9.03,
      "beta_1y": 2.50558,
      "market_volatility_20d": 0.10523,
      "sym_gap_fill_rate": 0.5,
      "sym_gap_fill_rate_dir": 0.52,
      "sym_gap_fill_5d_rate": 0.84,
      "sym_gap_go_rate": 0.52,
      "sym_gaps_1y": 152
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

Gap down into oversold (RSI < 30): INTU 2026-09-28 -2.0%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "INTU",
    "as_of": "2026-09-28",
    "context": {
      "gap_pct": -0.02045,
      "gap_dir": -1,
      "gap_atr": -0.41928,
      "gap_vs_typical": 3.24707,
      "gap_outside_range_atr": 0.09513,
      "earnings_day": 0,
      "earnings_next_5d": 0,
      "market_gap_pct": -0.00389,
      "gap_vs_market": -0.01656,
      "prior_return_1d": -0.00482,
      "prior_return_5d": -0.09036,
      "prior_return_20d": -0.20749,
      "prior_rsi_14": 29.58,
      "prior_dist_sma_20": -0.1366,
      "prior_dist_sma_50": -0.1505,
      "prior_dist_high_20": -0.246,
      "prior_dist_low_20": 0.01606,
      "prior_close_location": 0.73154,
      "prior_volume_ratio": 0.92454,
      "volatility_20d": 0.41765,
      "atr_pct": 0.04877,
      "dollar_volume_log": 9.057,
      "beta_1y": 0.29575,
      "market_volatility_20d": 0.11137,
      "sym_gap_fill_rate": 0.46,
      "sym_gap_fill_rate_dir": 0.32,
      "sym_gap_fill_5d_rate": 0.78,
      "sym_gap_go_rate": 0.48,
      "sym_gaps_1y": 100
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

Gap opens beyond yesterday's range: AMAT 2026-10-22 -6.1%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AMAT",
    "as_of": "2026-10-22",
    "context": {
      "gap_pct": -0.06082,
      "gap_dir": -1,
      "gap_atr": -1.28329,
      "gap_vs_typical": 4.38964,
      "gap_outside_range_atr": 1.14113,
      "earnings_day": 0,
      "earnings_next_5d": 0,
      "market_gap_pct": -0.00869,
      "gap_vs_market": -0.05212,
      "prior_return_1d": 0.00978,
      "prior_return_5d": -0.08439,
      "prior_return_20d": -0.13795,
      "prior_rsi_14": 31.02,
      "prior_dist_sma_20": -0.1501,
      "prior_dist_sma_50": -0.13898,
      "prior_dist_high_20": -0.25274,
      "prior_dist_low_20": 0.02485,
      "prior_close_location": 0.35253,
      "prior_volume_ratio": 0.98715,
      "volatility_20d": 0.46076,
      "atr_pct": 0.04739,
      "dollar_volume_log": 9.481,
      "beta_1y": 2.702,
      "market_volatility_20d": 0.08848,
      "sym_gap_fill_rate": 0.32,
      "sym_gap_fill_rate_dir": 0.4,
      "sym_gap_fill_5d_rate": 0.7,
      "sym_gap_go_rate": 0.44,
      "sym_gaps_1y": 157
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

Small gap inside yesterday's range: SMH 2026-10-16 -1.4%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SMH",
    "as_of": "2026-10-16",
    "context": {
      "gap_pct": -0.01403,
      "gap_dir": -1,
      "gap_atr": -0.49003,
      "gap_vs_typical": 1.28861,
      "gap_outside_range_atr": -0.65067,
      "earnings_day": 0,
      "earnings_next_5d": 0,
      "market_gap_pct": 0.00188,
      "gap_vs_market": -0.01591,
      "prior_return_1d": -0.01045,
      "prior_return_5d": -0.07975,
      "prior_return_20d": -0.00316,
      "prior_rsi_14": 36.46,
      "prior_dist_sma_20": -0.07277,
      "prior_dist_sma_50": -0.03592,
      "prior_dist_high_20": -0.12609,
      "prior_dist_low_20": 0.03376,
      "prior_close_location": 0.91068,
      "prior_volume_ratio": 2.2578,
      "volatility_20d": 0.29883,
      "atr_pct": 0.02863,
      "dollar_volume_log": 9.622,
      "beta_1y": 2.36641,
      "market_volatility_20d": 0.09604,
      "sym_gap_fill_rate": 0.26,
      "sym_gap_fill_rate_dir": 0.3,
      "sym_gap_fill_5d_rate": 0.68,
      "sym_gap_go_rate": 0.4,
      "sym_gaps_1y": 137
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

Earnings gap down, large cap: LRCX 2026-10-22 -10.0%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "LRCX",
    "as_of": "2026-10-22",
    "context": {
      "gap_pct": -0.1004,
      "gap_dir": -1,
      "gap_atr": -1.85473,
      "gap_vs_typical": 5.92306,
      "gap_outside_range_atr": 1.73077,
      "earnings_day": 1,
      "earnings_next_5d": 0,
      "market_gap_pct": -0.00869,
      "gap_vs_market": -0.09171,
      "prior_return_1d": -0.01002,
      "prior_return_5d": -0.091,
      "prior_return_20d": -0.15123,
      "prior_rsi_14": 31.8,
      "prior_dist_sma_20": -0.15334,
      "prior_dist_sma_50": -0.1484,
      "prior_dist_high_20": -0.26024,
      "prior_dist_low_20": 0.00676,
      "prior_close_location": 0.1478,
      "prior_volume_ratio": 1.83819,
      "volatility_20d": 0.43061,
      "atr_pct": 0.05413,
      "dollar_volume_log": 9.416,
      "beta_1y": 3.17786,
      "market_volatility_20d": 0.08848,
      "sym_gap_fill_rate": 0.42,
      "sym_gap_fill_rate_dir": 0.42,
      "sym_gap_fill_5d_rate": 0.68,
      "sym_gap_go_rate": 0.38,
      "sym_gaps_1y": 173
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

Same gap, different stock: TSLA 2025-11-26 +1.1%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2025-11-26",
    "context": {
      "gap_pct": 0.01085,
      "gap_dir": 1,
      "gap_atr": 0.20983,
      "gap_vs_typical": 0.92622,
      "gap_outside_range_atr": 0.16003,
      "earnings_day": 0,
      "earnings_next_5d": 0,
      "market_gap_pct": 0.00388,
      "gap_vs_market": 0.00697,
      "prior_return_1d": 0.00388,
      "prior_return_5d": 0.04523,
      "prior_return_20d": -0.08935,
      "prior_rsi_14": 48.82,
      "prior_dist_sma_20": -0.02098,
      "prior_dist_sma_50": -0.0329,
      "prior_dist_high_20": -0.11532,
      "prior_dist_low_20": 0.09567,
      "prior_close_location": 0.92567,
      "prior_volume_ratio": 0.81696,
      "volatility_20d": 0.55194,
      "atr_pct": 0.0517,
      "dollar_volume_log": 10.572,
      "beta_1y": 2.25248,
      "market_volatility_20d": 0.15133,
      "sym_gap_fill_rate": 0.42,
      "sym_gap_fill_rate_dir": 0.44,
      "sym_gap_fill_5d_rate": 0.72,
      "sym_gap_go_rate": 0.56,
      "sym_gaps_1y": 145
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

Same gap, different stock: MSFT 2026-04-17 +1.1%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT",
    "as_of": "2026-04-17",
    "context": {
      "gap_pct": 0.01085,
      "gap_dir": 1,
      "gap_atr": 0.46494,
      "gap_vs_typical": 2.68078,
      "gap_outside_range_atr": 0.40784,
      "earnings_day": 0,
      "earnings_next_5d": 0,
      "market_gap_pct": 0.00639,
      "gap_vs_market": 0.00446,
      "prior_return_1d": 0.02197,
      "prior_return_5d": 0.12649,
      "prior_return_20d": 0.07265,
      "prior_rsi_14": 70.78,
      "prior_dist_sma_20": 0.11109,
      "prior_dist_sma_50": 0.07233,
      "prior_dist_high_20": -0.00133,
      "prior_dist_low_20": 0.17957,
      "prior_close_location": 0.93548,
      "prior_volume_ratio": 1.24067,
      "volatility_20d": 0.30961,
      "atr_pct": 0.02334,
      "dollar_volume_log": 10.113,
      "beta_1y": 0.98579,
      "market_volatility_20d": 0.18865,
      "sym_gap_fill_rate": 0.34,
      "sym_gap_fill_rate_dir": 0.38,
      "sym_gap_fill_5d_rate": 0.64,
      "sym_gap_go_rate": 0.42,
      "sym_gaps_1y": 41
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

Minimal context, hand-typed: TSLA 2026-10-22 -3.2%

ora-fin-0.1.12 questionsreal outcome
  • fill_today Will the gap fill today?
  • fill_5d Will the gap fill within 5 sessions?
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2026-10-22",
    "context": {
      "gap_pct": -0.03219,
      "gap_dir": -1,
      "gap_atr": -1.00978,
      "earnings_day": 1,
      "market_gap_pct": -0.00869,
      "sym_gap_fill_rate_dir": 0.4
    }
  },
  "questions": {
    "fill_today": {
      "type": "yes_no",
      "instructions": "Will the gap fill today?"
    },
    "fill_5d": {
      "type": "yes_no",
      "instructions": "Will the gap fill within 5 sessions?"
    }
  }
}

Paraphrase check

The same question in 3–4 wordings, with the real outcome. A model that understands the question gives each wording the same answer.

New highs and lows: TSLA 2026-10-21 (2 questions, each in 3–4 wordings)

ora-fin-0.1.18 questionsreal outcome
  • new_high Will it make a new 20-day high in the next week?
  • new_high_alt1 Is it going to print a fresh 20 day peak inside the next 5 sessions?
  • new_high_alt2 Any chance it tags a new 4-week high over the coming week?
  • + 5 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2026-10-21",
    "context": {
      "return_1d": 0.03414,
      "return_5d": 0.05259,
      "return_20d": 0.01671,
      "return_60d": 0.25706,
      "return_252d": -0.13624,
      "volatility_5d": 0.42207,
      "volatility_20d": 0.34942,
      "volatility_60d": 0.3934,
      "vol_ratio_5_20": 1.20792,
      "volume_ratio": 1.30117,
      "volume_ratio_5d": 1.08622,
      "atr_pct": 0.03188,
      "rsi_14": 59.77,
      "dist_sma_20": 0.04443,
      "dist_sma_50": 0.06706,
      "dist_sma_200": -0.0012,
      "dist_high_252": -0.22525,
      "dist_low_252": 0.29958,
      "gap_1d": 0.02087,
      "range_pct_1d": 0.02156,
      "close_location": 0.71523,
      "dollar_volume_log": 10.112,
      "market_return_5d": 0.00453,
      "market_volatility_20d": 0.08848,
      "dist_high_20": -0.0061,
      "dist_low_20": 0.11735,
      "beta_1y": 2.21228,
      "body_pct": 0.013,
      "upper_wick": 0.28477,
      "lower_wick": 0.12,
      "range_vs_atr": 0.67641,
      "sma50_vs_sma200": -0.06397,
      "earnings_next_5d": 1,
      "days_to_earnings": 1,
      "days_since_earnings": 63,
      "earn_usual_move": 0.04462,
      "last_earn_reaction": -0.14524
    }
  },
  "questions": {
    "new_high": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day high in the next week?"
    },
    "new_high_alt1": {
      "type": "yes_no",
      "instructions": "Is it going to print a fresh 20 day peak inside the next 5 sessions?"
    },
    "new_high_alt2": {
      "type": "yes_no",
      "instructions": "Any chance it tags a new 4-week high over the coming week?"
    },
    "new_high_alt3": {
      "type": "yes_no",
      "instructions": "Does it take out the 20-day top within 5 trading days?"
    },
    "new_low": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day low in the next week?"
    },
    "new_low_alt1": {
      "type": "yes_no",
      "instructions": "Will it set a fresh 20-session trough within five days?"
    },
    "new_low_alt2": {
      "type": "yes_no",
      "instructions": "Could it break to a new one-month low this coming week?"
    },
    "new_low_alt3": {
      "type": "yes_no",
      "instructions": "Does it undercut the 20d bottom in the next 5 sessions?"
    }
  }
}

5% moves at any point in a month: MSFT 2026-09-30 (2 questions, each in 3–4 wordings)

ora-fin-0.1.18 questionsreal outcome
  • rally5 Will it rally at least 5% at some point in the next month?
  • rally5_alt1 Could it pop 5% or more at any point over the next 21 sessions?
  • rally5_alt2 Any chance of a 5 percent jump sometime in the coming month?
  • + 5 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT",
    "as_of": "2026-09-30",
    "context": {
      "return_1d": 0.00774,
      "return_5d": 0.02459,
      "return_20d": 0.02371,
      "return_60d": 0.32153,
      "return_252d": 0.0049,
      "volatility_5d": 0.30205,
      "volatility_20d": 0.24151,
      "volatility_60d": 0.38583,
      "vol_ratio_5_20": 1.25066,
      "volume_ratio": 1.3048,
      "volume_ratio_5d": 0.82073,
      "atr_pct": 0.02301,
      "rsi_14": 60.38,
      "dist_sma_20": 0.02477,
      "dist_sma_50": 0.06368,
      "dist_sma_200": 0.18991,
      "dist_high_252": -0.06609,
      "dist_low_252": 0.47154,
      "gap_1d": 0.00362,
      "range_pct_1d": 0.01852,
      "close_location": 0.27053,
      "dollar_volume_log": 10.025,
      "market_return_5d": -0.00675,
      "market_volatility_20d": 0.11145,
      "dist_high_20": -0.01333,
      "dist_low_20": 0.05535,
      "beta_1y": 0.95214,
      "body_pct": 0.00411,
      "upper_wick": 0.72947,
      "lower_wick": 0.04948,
      "range_vs_atr": 0.80503,
      "sma50_vs_sma200": 0.11867,
      "days_to_earnings": 21,
      "days_since_earnings": 43,
      "earn_usual_move": 0.05001,
      "last_earn_reaction": 0.15505
    }
  },
  "questions": {
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    },
    "rally5_alt1": {
      "type": "yes_no",
      "instructions": "Could it pop 5% or more at any point over the next 21 sessions?"
    },
    "rally5_alt2": {
      "type": "yes_no",
      "instructions": "Any chance of a 5 percent jump sometime in the coming month?"
    },
    "rally5_alt3": {
      "type": "yes_no",
      "instructions": "Will it surge 5%+ intraday within the next four weeks?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "drop5_alt1": {
      "type": "yes_no",
      "instructions": "Could we see a 5% or bigger decline at any point over the next 20 sessions?"
    },
    "drop5_alt2": {
      "type": "yes_no",
      "instructions": "Will it slide 5 percent or more at some stage in the coming month?"
    },
    "drop5_alt3": {
      "type": "yes_no",
      "instructions": "Is a 5% pullback likely sometime in the next four weeks?"
    }
  }
}

1 ATR moves tomorrow: TSLA 2026-10-27 (2 questions, each in 3–4 wordings)

ora-fin-0.1.16 questionsreal outcome
  • atr_down Will the low reach today's close minus 1 ATR during the next session?
  • atr_down_alt1 Will tomorrow's low tag 1 ATR under today's close?
  • atr_down_alt2 Does it dip a full ATR below the close tomorrow?
  • + 3 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2026-10-27",
    "context": {
      "return_1d": 0.04045,
      "return_5d": 0.09031,
      "return_20d": 0.1548,
      "return_60d": 0.26509,
      "return_252d": -0.06055,
      "volatility_5d": 0.55003,
      "volatility_20d": 0.38705,
      "volatility_60d": 0.40292,
      "vol_ratio_5_20": 1.42109,
      "volume_ratio": 1.23504,
      "volume_ratio_5d": 1.28101,
      "atr_pct": 0.03345,
      "rsi_14": 65.48,
      "dist_sma_20": 0.08857,
      "dist_sma_50": 0.11292,
      "dist_sma_200": 0.05576,
      "dist_high_252": -0.18317,
      "dist_low_252": 0.37017,
      "gap_1d": 0.01578,
      "range_pct_1d": 0.03235,
      "close_location": 0.9264,
      "dollar_volume_log": 10.143,
      "market_return_5d": 0.00079,
      "market_volatility_20d": 0.09978,
      "dist_high_20": -0.00237,
      "dist_low_20": 0.17804,
      "beta_1y": 2.25779,
      "body_pct": 0.02428,
      "upper_wick": 0.0736,
      "lower_wick": 0.19347,
      "range_vs_atr": 0.96708,
      "sma50_vs_sma200": -0.05136,
      "days_since_earnings": 3,
      "earn_usual_move": 0.04462,
      "last_earn_reaction": -0.03077
    }
  },
  "questions": {
    "atr_down": {
      "type": "yes_no",
      "instructions": "Will the low reach today's close minus 1 ATR during the next session?"
    },
    "atr_down_alt1": {
      "type": "yes_no",
      "instructions": "Will tomorrow's low tag 1 ATR under today's close?"
    },
    "atr_down_alt2": {
      "type": "yes_no",
      "instructions": "Does it dip a full ATR below the close tomorrow?"
    },
    "atr_up": {
      "type": "yes_no",
      "instructions": "Will the high reach today's close plus 1 ATR during the next session?"
    },
    "atr_up_alt1": {
      "type": "yes_no",
      "instructions": "Will tomorrow's high hit 1 ATR over today's close?"
    },
    "atr_up_alt2": {
      "type": "yes_no",
      "instructions": "Can it spike one ATR above the close tomorrow?"
    }
  }
}

Moving averages: MSFT 2026-09-29 (2 questions, each in 3–4 wordings)

ora-fin-0.1.16 questionsreal outcome
  • touch_50 Will it trade back to its 50-day moving average in the next month?
  • touch_50_alt1 Will it revisit the 50 DMA within the next 4 weeks?
  • touch_50_alt2 Does it tag the 50-day SMA sometime in the coming month?
  • + 3 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT",
    "as_of": "2026-09-29",
    "context": {
      "return_1d": -0.00051,
      "return_5d": 0.02201,
      "return_20d": 0.00329,
      "return_60d": 0.31852,
      "return_252d": 0.00331,
      "volatility_5d": 0.30108,
      "volatility_20d": 0.24484,
      "volatility_60d": 0.38578,
      "vol_ratio_5_20": 1.22968,
      "volume_ratio": 0.95177,
      "volume_ratio_5d": 0.75496,
      "atr_pct": 0.02333,
      "rsi_14": 58.46,
      "dist_sma_20": 0.01811,
      "dist_sma_50": 0.06061,
      "dist_sma_200": 0.18122,
      "dist_high_252": -0.07326,
      "dist_low_252": 0.46023,
      "gap_1d": -0.00214,
      "range_pct_1d": 0.02208,
      "close_location": 0.58363,
      "dollar_volume_log": 10.016,
      "market_return_5d": -0.01187,
      "market_volatility_20d": 0.11404,
      "dist_high_20": -0.0201,
      "dist_low_20": 0.04724,
      "beta_1y": 0.95428,
      "body_pct": 0.00163,
      "upper_wick": 0.41637,
      "lower_wick": 0.50979,
      "range_vs_atr": 0.94677,
      "sma50_vs_sma200": 0.11372,
      "days_to_earnings": 22,
      "days_since_earnings": 42,
      "earn_usual_move": 0.05001,
      "last_earn_reaction": 0.15505
    }
  },
  "questions": {
    "touch_50": {
      "type": "yes_no",
      "instructions": "Will it trade back to its 50-day moving average in the next month?"
    },
    "touch_50_alt1": {
      "type": "yes_no",
      "instructions": "Will it revisit the 50 DMA within the next 4 weeks?"
    },
    "touch_50_alt2": {
      "type": "yes_no",
      "instructions": "Does it tag the 50-day SMA sometime in the coming month?"
    },
    "hold_200": {
      "type": "yes_no",
      "instructions": "Will it stay above its 200-day moving average for the next 7 sessions?"
    },
    "hold_200_alt1": {
      "type": "yes_no",
      "instructions": "Will it hold over the 200 DMA for the next 7 trading days?"
    },
    "hold_200_alt2": {
      "type": "yes_no",
      "instructions": "Does every close for the next seven days stay above the 200-day MA?"
    }
  }
}

Where it closes: TSLA 2026-09-16 (4 questions, each in 3–4 wordings)

ora-fin-0.1.113 questionsreal outcome
  • up_week Will the stock be higher in a week?
  • up_week_alt1 Will it close higher in 5 days?
  • up_week_alt2 Does it finish the next 5 sessions above where it closed today?
  • + 10 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2026-09-16",
    "context": {
      "return_1d": 0.00421,
      "return_5d": -0.02645,
      "return_20d": 0.06296,
      "return_60d": -0.11596,
      "return_252d": -0.12672,
      "volatility_5d": 0.1586,
      "volatility_20d": 0.50888,
      "volatility_60d": 0.58256,
      "vol_ratio_5_20": 0.31166,
      "volume_ratio": 0.82525,
      "volume_ratio_5d": 0.76528,
      "atr_pct": 0.03678,
      "rsi_14": 51.11,
      "dist_sma_20": 0.00053,
      "dist_sma_50": 0.01829,
      "dist_sma_200": -0.10024,
      "dist_high_252": -0.28216,
      "dist_low_252": 0.20412,
      "gap_1d": 0.00317,
      "range_pct_1d": 0.02837,
      "close_location": 0.31389,
      "dollar_volume_log": 10.147,
      "market_return_5d": -0.01095,
      "market_volatility_20d": 0.08581,
      "dist_high_20": -0.0676,
      "dist_low_20": 0.06667,
      "beta_1y": 2.23361,
      "body_pct": 0.00103,
      "upper_wick": 0.68611,
      "lower_wick": 0.27747,
      "range_vs_atr": 0.77141,
      "sma50_vs_sma200": -0.11641,
      "days_to_earnings": 26,
      "days_since_earnings": 38,
      "earn_usual_move": 0.04462,
      "last_earn_reaction": -0.14524
    }
  },
  "questions": {
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    },
    "up_week_alt1": {
      "type": "yes_no",
      "instructions": "Will it close higher in 5 days?"
    },
    "up_week_alt2": {
      "type": "yes_no",
      "instructions": "Does it finish the next 5 sessions above where it closed today?"
    },
    "up_week_alt3": {
      "type": "yes_no",
      "instructions": "Is it up a week from now, close to close?"
    },
    "down_week": {
      "type": "yes_no",
      "instructions": "Will the price be down in a week?"
    },
    "down_week_alt1": {
      "type": "yes_no",
      "instructions": "Will it close lower five sessions from now?"
    },
    "down_week_alt2": {
      "type": "yes_no",
      "instructions": "Is it in the red a week out versus today's close?"
    },
    "up3_30d": {
      "type": "yes_no",
      "instructions": "Will it close at least 3% higher in 30 trading days?"
    },
    "up3_30d_alt1": {
      "type": "yes_no",
      "instructions": "Six weeks out, will it be up 3% or more on a closing basis?"
    },
    "up3_30d_alt2": {
      "type": "yes_no",
      "instructions": "Will it finish 30 sessions from now with a 3%+ gain?"
    },
    "down3_15d": {
      "type": "yes_no",
      "instructions": "Will it close at least 3% lower in 15 trading days?"
    },
    "down3_15d_alt1": {
      "type": "yes_no",
      "instructions": "Three weeks from now, is it down 3% or more at the close?"
    },
    "down3_15d_alt2": {
      "type": "yes_no",
      "instructions": "Will it finish 15 days out at least 3 percent below today's close?"
    }
  }
}

Versus the market: MSFT 2026-07-30 (2 questions, each in 3–4 wordings)

ora-fin-0.1.16 questionsreal outcome
  • beat_spy Will it beat SPY over the next month?
  • beat_spy_alt1 Will it outperform the S&P over the coming four weeks?
  • beat_spy_alt2 Does it beat the index over the next 21 sessions?
  • + 3 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT",
    "as_of": "2026-07-30",
    "context": {
      "return_1d": 0.15505,
      "return_5d": 0.18219,
      "return_20d": 0.17387,
      "return_60d": 0.09297,
      "return_252d": -0.1129,
      "volatility_5d": 0.99495,
      "volatility_20d": 0.56212,
      "volatility_60d": 0.44284,
      "vol_ratio_5_20": 1.76999,
      "volume_ratio": 3.4202,
      "volume_ratio_5d": 1.24403,
      "atr_pct": 0.03525,
      "rsi_14": 71.83,
      "dist_sma_20": 0.14738,
      "dist_sma_50": 0.13221,
      "dist_sma_200": 0.04304,
      "dist_high_252": -0.18139,
      "dist_low_252": 0.29179,
      "gap_1d": 0.12125,
      "range_pct_1d": 0.05819,
      "close_location": 0.71086,
      "dollar_volume_log": 10.149,
      "market_return_5d": 0.00475,
      "market_volatility_20d": 0.12427,
      "dist_high_20": -0.01655,
      "dist_low_20": 0.20824,
      "beta_1y": 0.89433,
      "body_pct": 0.03014,
      "upper_wick": 0.28914,
      "lower_wick": 0.208,
      "range_vs_atr": 1.65103,
      "sma50_vs_sma200": -0.07876,
      "days_since_earnings": 0,
      "earn_usual_move": 0.05001,
      "last_earn_reaction": 0.15505
    }
  },
  "questions": {
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    },
    "beat_spy_alt1": {
      "type": "yes_no",
      "instructions": "Will it outperform the S&P over the coming four weeks?"
    },
    "beat_spy_alt2": {
      "type": "yes_no",
      "instructions": "Does it beat the index over the next 21 sessions?"
    },
    "lag_spy": {
      "type": "yes_no",
      "instructions": "Will it underperform SPY by more than 2% in three months?"
    },
    "lag_spy_alt1": {
      "type": "yes_no",
      "instructions": "Will it lag the S&P 500 by over 2% across the next quarter?"
    },
    "lag_spy_alt2": {
      "type": "yes_no",
      "instructions": "Does it trail the market by 2%+ over the next 63 sessions?"
    }
  }
}

Volatility and range: TSLA 2026-09-29 (4 questions, each in 3–4 wordings)

ora-fin-0.1.112 questionsreal outcome
  • move3 Will the stock move more than 3% in either direction in 2 trading days?
  • move3_alt1 Will it swing over 3% either way in the next two sessions?
  • move3_alt2 Is a 3%+ move, up or down, coming within 2 days?
  • + 9 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2026-09-29",
    "context": {
      "return_1d": -0.0129,
      "return_5d": -0.06878,
      "return_20d": -0.04107,
      "return_60d": -0.15944,
      "return_252d": -0.19882,
      "volatility_5d": 0.25764,
      "volatility_20d": 0.41763,
      "volatility_60d": 0.51215,
      "vol_ratio_5_20": 0.61691,
      "volume_ratio": 0.79738,
      "volume_ratio_5d": 0.90354,
      "atr_pct": 0.03532,
      "rsi_14": 44.8,
      "dist_sma_20": -0.03428,
      "dist_sma_50": 0.01552,
      "dist_sma_200": -0.10603,
      "dist_high_252": -0.29266,
      "dist_low_252": 0.1865,
      "gap_1d": 0.00271,
      "range_pct_1d": 0.02001,
      "close_location": 0.16431,
      "dollar_volume_log": 10.145,
      "market_return_5d": -0.01187,
      "market_volatility_20d": 0.11404,
      "dist_high_20": -0.08787,
      "dist_low_20": 0.00832,
      "beta_1y": 2.21702,
      "body_pct": -0.01557,
      "upper_wick": 0.04533,
      "lower_wick": 0.16431,
      "range_vs_atr": 0.56658,
      "sma50_vs_sma200": -0.1197,
      "days_to_earnings": 17,
      "days_since_earnings": 47,
      "earn_usual_move": 0.04462,
      "last_earn_reaction": -0.14524
    }
  },
  "questions": {
    "move3": {
      "type": "yes_no",
      "instructions": "Will the stock move more than 3% in either direction in 2 trading days?"
    },
    "move3_alt1": {
      "type": "yes_no",
      "instructions": "Will it swing over 3% either way in the next two sessions?"
    },
    "move3_alt2": {
      "type": "yes_no",
      "instructions": "Is a 3%+ move, up or down, coming within 2 days?"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will price swings get bigger over the next week compared with the past month?"
    },
    "vol_up_alt1": {
      "type": "yes_no",
      "instructions": "Is volatility going to pick up next week versus the last month?"
    },
    "vol_up_alt2": {
      "type": "yes_no",
      "instructions": "Will the next 5 sessions be choppier than the past 20?"
    },
    "vol_down": {
      "type": "yes_no",
      "instructions": "Will price swings get smaller over the next week compared with the past month?"
    },
    "vol_down_alt1": {
      "type": "yes_no",
      "instructions": "Is volatility going to settle down next week versus the last month?"
    },
    "vol_down_alt2": {
      "type": "yes_no",
      "instructions": "Will the next 5 sessions be quieter than the past 20?"
    },
    "vol30": {
      "type": "yes_no",
      "instructions": "Will annualized volatility over the next 21 sessions exceed 30%?"
    },
    "vol30_alt1": {
      "type": "yes_no",
      "instructions": "Will realized vol over the next month run above 30% annualized?"
    },
    "vol30_alt2": {
      "type": "yes_no",
      "instructions": "Does the coming month's annualised volatility top 30%?"
    }
  }
}

Tomorrow's bar: MSFT 2026-10-27 (6 questions, each in 3–4 wordings)

ora-fin-0.1.118 questionsreal outcome
  • hi_gt Will the high during the next session exceed today's high?
  • hi_gt_alt1 Will it take out today's high tomorrow?
  • hi_gt_alt2 Does tomorrow trade above today's high at any point?
  • + 15 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT",
    "as_of": "2026-10-27",
    "context": {
      "return_1d": -0.00238,
      "return_5d": -0.00102,
      "return_20d": 0.04395,
      "return_60d": 0.09163,
      "return_252d": 0.02311,
      "volatility_5d": 0.22369,
      "volatility_20d": 0.19647,
      "volatility_60d": 0.21707,
      "vol_ratio_5_20": 1.13858,
      "volume_ratio": 0.97895,
      "volume_ratio_5d": 0.66048,
      "atr_pct": 0.02037,
      "rsi_14": 56.33,
      "dist_sma_20": 0.00442,
      "dist_sma_50": 0.04151,
      "dist_sma_200": 0.21884,
      "dist_high_252": -0.03596,
      "dist_low_252": 0.52442,
      "gap_1d": -0.00047,
      "range_pct_1d": 0.01199,
      "close_location": 0.47087,
      "dollar_volume_log": 10.02,
      "market_return_5d": 0.00079,
      "market_volatility_20d": 0.09978,
      "dist_high_20": -0.03596,
      "dist_low_20": 0.04115,
      "beta_1y": 1.00358,
      "body_pct": -0.00192,
      "upper_wick": 0.36897,
      "lower_wick": 0.47087,
      "range_vs_atr": 0.58852,
      "sma50_vs_sma200": 0.17027,
      "earnings_next_5d": 1,
      "days_to_earnings": 2,
      "days_since_earnings": 62,
      "earn_usual_move": 0.05001,
      "last_earn_reaction": 0.15505
    }
  },
  "questions": {
    "hi_gt": {
      "type": "yes_no",
      "instructions": "Will the high during the next session exceed today's high?"
    },
    "hi_gt_alt1": {
      "type": "yes_no",
      "instructions": "Will it take out today's high tomorrow?"
    },
    "hi_gt_alt2": {
      "type": "yes_no",
      "instructions": "Does tomorrow trade above today's high at any point?"
    },
    "lo_lt": {
      "type": "yes_no",
      "instructions": "Will the low during the next session undercut today's low?"
    },
    "lo_lt_alt1": {
      "type": "yes_no",
      "instructions": "Will it break today's low tomorrow?"
    },
    "lo_lt_alt2": {
      "type": "yes_no",
      "instructions": "Does tomorrow trade under today's low at some point?"
    },
    "inside": {
      "type": "yes_no",
      "instructions": "Will tomorrow be an inside day, inside today's high and low?"
    },
    "inside_alt1": {
      "type": "yes_no",
      "instructions": "Will tomorrow's whole range stay within today's high-low?"
    },
    "inside_alt2": {
      "type": "yes_no",
      "instructions": "Is tomorrow an inside bar?"
    },
    "green": {
      "type": "yes_no",
      "instructions": "Will tomorrow's candle be green, closing above its open?"
    },
    "green_alt1": {
      "type": "yes_no",
      "instructions": "Will tomorrow close above its open?"
    },
    "green_alt2": {
      "type": "yes_no",
      "instructions": "Is tomorrow a green day, open to close?"
    },
    "gap_up": {
      "type": "yes_no",
      "instructions": "Will it gap up tomorrow?"
    },
    "gap_up_alt1": {
      "type": "yes_no",
      "instructions": "Will it open more than 1% higher tomorrow?"
    },
    "gap_up_alt2": {
      "type": "yes_no",
      "instructions": "Is a gap higher of 1%+ likely at tomorrow's open?"
    },
    "vol_spike": {
      "type": "yes_no",
      "instructions": "Will volume spike tomorrow?"
    },
    "vol_spike_alt1": {
      "type": "yes_no",
      "instructions": "Will tomorrow's volume come in at more than 2x the 20-day average?"
    },
    "vol_spike_alt2": {
      "type": "yes_no",
      "instructions": "Is a big volume day coming tomorrow, double the usual?"
    }
  }
}

Question grammar (preview)

Many question families on one stock and date.

TSLA 2026-09-18: 12 questions across families

ora-fin-0.1.112 questions
  • rally_5pct_month Will it rally at least 5% within a month?
  • drop_3pct_2w Will it drop at least 3% within two weeks?
  • stop_1_5atr Would a stop 1.5 ATR below today's close be hit within 5 sessions?
  • + 9 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA",
    "as_of": "2026-09-18",
    "context": {
      "return_1d": -0.00527,
      "return_5d": -0.0032,
      "return_20d": 0.05546,
      "return_60d": -0.02998,
      "return_252d": -0.14462,
      "volatility_5d": 0.23944,
      "volatility_20d": 0.48974,
      "volatility_60d": 0.5713,
      "vol_ratio_5_20": 0.48891,
      "volume_ratio": 1.3231,
      "volume_ratio_5d": 0.92901,
      "atr_pct": 0.03608,
      "rsi_14": 53.77,
      "dist_sma_20": 0.01299,
      "dist_sma_50": 0.04004,
      "dist_sma_200": -0.0832,
      "dist_high_252": -0.26975,
      "dist_low_252": 0.22493,
      "gap_1d": 0.00841,
      "range_pct_1d": 0.02786,
      "close_location": 0.34673,
      "dollar_volume_log": 10.163,
      "market_return_5d": -0.00093,
      "market_volatility_20d": 0.09598,
      "dist_high_20": -0.05148,
      "dist_low_20": 0.06347,
      "beta_1y": 2.2341,
      "body_pct": -0.01357,
      "upper_wick": 0.15962,
      "lower_wick": 0.34673,
      "range_vs_atr": 0.77216,
      "sma50_vs_sma200": -0.11849,
      "days_to_earnings": 24,
      "days_since_earnings": 40,
      "earn_usual_move": 0.04462,
      "last_earn_reaction": -0.14524
    }
  },
  "questions": {
    "rally_5pct_month": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% within a month?"
    },
    "drop_3pct_2w": {
      "type": "yes_no",
      "instructions": "Will it drop at least 3% within two weeks?"
    },
    "stop_1_5atr": {
      "type": "yes_no",
      "instructions": "Would a stop 1.5 ATR below today's close be hit within 5 sessions?"
    },
    "fall_before_rise": {
      "type": "yes_no",
      "instructions": "Will it fall 5% before it rises 5% within a month?"
    },
    "new_20d_high": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day high within a week?"
    },
    "back_to_50dma": {
      "type": "yes_no",
      "instructions": "Will it trade back to its 50-day moving average within a month?"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will realized volatility over the next 21 sessions be more than 1.25x the last 20 sessions?"
    },
    "above_todays_high": {
      "type": "yes_no",
      "instructions": "Will it trade above today's high by tomorrow's close?"
    },
    "volume_2x": {
      "type": "yes_no",
      "instructions": "Will tomorrow's volume be more than twice its 20-day average?"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it outperform SPY by more than 2% in a month?"
    },
    "gap_up_1pct": {
      "type": "yes_no",
      "instructions": "Will it gap up more than 1% tomorrow?"
    },
    "control_up_week": {
      "type": "yes_no",
      "instructions": "Will the stock close higher in a week?"
    }
  }
}

MSFT 2026-10-07: 12 questions across families

ora-fin-0.1.112 questions
  • rally_5pct_month Will it rally at least 5% within a month?
  • drop_3pct_2w Will it drop at least 3% within two weeks?
  • stop_1_5atr Would a stop 1.5 ATR below today's close be hit within 5 sessions?
  • + 9 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT",
    "as_of": "2026-10-07",
    "context": {
      "return_1d": 0.00087,
      "return_5d": 0.03287,
      "return_20d": 0.07751,
      "return_60d": 0.37883,
      "return_252d": 0.01051,
      "volatility_5d": 0.09794,
      "volatility_20d": 0.20464,
      "volatility_60d": 0.38166,
      "vol_ratio_5_20": 0.47858,
      "volume_ratio": 0.74627,
      "volume_ratio_5d": 0.70802,
      "atr_pct": 0.02148,
      "rsi_14": 68.21,
      "dist_sma_20": 0.04568,
      "dist_sma_50": 0.06842,
      "dist_sma_200": 0.22562,
      "dist_high_252": -0.03539,
      "dist_low_252": 0.51991,
      "gap_1d": 0.00269,
      "range_pct_1d": 0.01329,
      "close_location": 0.72017,
      "dollar_volume_log": 10.041,
      "market_return_5d": 0.01913,
      "market_volatility_20d": 0.10662,
      "dist_high_20": -0.01107,
      "dist_low_20": 0.09004,
      "beta_1y": 0.95293,
      "body_pct": -0.00182,
      "upper_wick": 0.14276,
      "lower_wick": 0.72017,
      "range_vs_atr": 0.61857,
      "sma50_vs_sma200": 0.14713,
      "days_since_earnings": 48,
      "earn_usual_move": 0.05001,
      "last_earn_reaction": 0.15505
    }
  },
  "questions": {
    "rally_5pct_month": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% within a month?"
    },
    "drop_3pct_2w": {
      "type": "yes_no",
      "instructions": "Will it drop at least 3% within two weeks?"
    },
    "stop_1_5atr": {
      "type": "yes_no",
      "instructions": "Would a stop 1.5 ATR below today's close be hit within 5 sessions?"
    },
    "fall_before_rise": {
      "type": "yes_no",
      "instructions": "Will it fall 5% before it rises 5% within a month?"
    },
    "new_20d_high": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day high within a week?"
    },
    "back_to_50dma": {
      "type": "yes_no",
      "instructions": "Will it trade back to its 50-day moving average within a month?"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will realized volatility over the next 21 sessions be more than 1.25x the last 20 sessions?"
    },
    "above_todays_high": {
      "type": "yes_no",
      "instructions": "Will it trade above today's high by tomorrow's close?"
    },
    "volume_2x": {
      "type": "yes_no",
      "instructions": "Will tomorrow's volume be more than twice its 20-day average?"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it outperform SPY by more than 2% in a month?"
    },
    "gap_up_1pct": {
      "type": "yes_no",
      "instructions": "Will it gap up more than 1% tomorrow?"
    },
    "control_up_week": {
      "type": "yes_no",
      "instructions": "Will the stock close higher in a week?"
    }
  }
}

Minimal context (6 numbers), same questions

ora-fin-0.1.112 questions
  • rally_5pct_month Will it rally at least 5% within a month?
  • drop_3pct_2w Will it drop at least 3% within two weeks?
  • stop_1_5atr Would a stop 1.5 ATR below today's close be hit within 5 sessions?
  • + 9 more
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "context": {
      "return_5d": -0.0032,
      "return_20d": 0.05546,
      "volatility_20d": 0.48974,
      "rsi_14": 53.77,
      "dist_sma_50": 0.04004,
      "atr_pct": 0.03608
    }
  },
  "questions": {
    "rally_5pct_month": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% within a month?"
    },
    "drop_3pct_2w": {
      "type": "yes_no",
      "instructions": "Will it drop at least 3% within two weeks?"
    },
    "stop_1_5atr": {
      "type": "yes_no",
      "instructions": "Would a stop 1.5 ATR below today's close be hit within 5 sessions?"
    },
    "fall_before_rise": {
      "type": "yes_no",
      "instructions": "Will it fall 5% before it rises 5% within a month?"
    },
    "new_20d_high": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day high within a week?"
    },
    "back_to_50dma": {
      "type": "yes_no",
      "instructions": "Will it trade back to its 50-day moving average within a month?"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will realized volatility over the next 21 sessions be more than 1.25x the last 20 sessions?"
    },
    "above_todays_high": {
      "type": "yes_no",
      "instructions": "Will it trade above today's high by tomorrow's close?"
    },
    "volume_2x": {
      "type": "yes_no",
      "instructions": "Will tomorrow's volume be more than twice its 20-day average?"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it outperform SPY by more than 2% in a month?"
    },
    "gap_up_1pct": {
      "type": "yes_no",
      "instructions": "Will it gap up more than 1% tomorrow?"
    },
    "control_up_week": {
      "type": "yes_no",
      "instructions": "Will the stock close higher in a week?"
    }
  }
}

Text (general)

General-purpose questions about text and records, from one question to structured state: the same request shape, answered by the text engine.

Simple

Is this about billing? (yes_no)

ora-text-0.2.01 question
  • billing Is this message about billing, a charge or a refund?
Request JSON
{
  "model": "ora-text-0.2.0",
  "state": "I was charged twice for my subscription this month. Please refund the extra charge.",
  "questions": {
    "billing": {
      "type": "yes_no",
      "instructions": "Is this message about billing, a charge or a refund?"
    }
  }
}

Sentiment (choice)

ora-text-0.2.01 question
  • sentiment Overall sentiment of the message
Request JSON
{
  "model": "ora-text-0.2.0",
  "state": "Absolutely love the new dashboard. Setup took two minutes and the charts are gorgeous!",
  "questions": {
    "sentiment": {
      "type": "choice",
      "instructions": "Overall sentiment of the message",
      "criteria": {
        "positive": "Happy, pleased, enthusiastic",
        "neutral": "Factual, no strong feeling",
        "negative": "Unhappy, annoyed, disappointed"
      }
    }
  }
}
Response

sentiment positive

Spam check (yes_no)

ora-text-0.2.01 question
  • is_spam Is this message spam or a scam (unsolicited prize, urgent click, free money)?
Request JSON
{
  "model": "ora-text-0.2.0",
  "state": "CONGRATULATIONS!!! You have WON a $1000 gift card. Click the link now to claim your free prize before it expires!",
  "questions": {
    "is_spam": {
      "type": "yes_no",
      "instructions": "Is this message spam or a scam (unsolicited prize, urgent click, free money)?"
    }
  }
}

Urgency (score)

ora-text-0.2.01 question
  • urgency How urgent is this?
Request JSON
{
  "model": "ora-text-0.2.0",
  "state": "The production database is down and every customer is getting errors. We need someone on this immediately.",
  "questions": {
    "urgency": {
      "type": "score",
      "instructions": "How urgent is this?",
      "criteria": [
        "Can wait",
        "Needs attention this week",
        "Needs attention today",
        "Emergency, right now"
      ]
    }
  }
}

Medium

Support ticket triage

ora-text-0.2.03 questions
  • department Which team should handle this
  • frustration How frustrated the customer appears
  • is_urgent The message conveys urgency: orders blocked, errors on every request, needs fixing now
Request JSON
{
  "model": "ora-text-0.2.0",
  "state": "Our API integration started returning 500 errors on every request about 20 minutes ago, and we can't process any customer orders until this is fixed.",
  "questions": {
    "department": {
      "type": "choice",
      "instructions": "Which team should handle this",
      "criteria": {
        "billing": "Payment or subscription issues",
        "technical": "Bugs, errors or integration problems",
        "sales": "Pricing or account questions"
      }
    },
    "frustration": {
      "type": "score",
      "instructions": "How frustrated the customer appears",
      "criteria": [
        "Calm, just stating facts",
        "Frustrated but civil",
        "Very angry, strong language"
      ]
    },
    "is_urgent": {
      "type": "yes_no",
      "instructions": "The message conveys urgency: orders blocked, errors on every request, needs fixing now"
    }
  }
}
Response

department technical · frustration 0.63 · is_urgent 0.920

Product review analysis

ora-text-0.2.04 questions
  • overall Overall verdict of the review
  • product_quality How the reviewer rates the product itself (sound, battery)
  • shipping_issue Mentions a problem with shipping, delivery or packaging (late, crushed box)
  • + 1 more
Request JSON
{
  "model": "ora-text-0.2.0",
  "state": "The headphones sound great and the battery lasts all week, but shipping took three weeks and the box arrived crushed. Customer service never replied to my email.",
  "questions": {
    "overall": {
      "type": "choice",
      "instructions": "Overall verdict of the review",
      "criteria": {
        "recommend": "Would recommend the product",
        "mixed": "Good and bad points, mixed feelings",
        "avoid": "Would not recommend"
      }
    },
    "product_quality": {
      "type": "score",
      "instructions": "How the reviewer rates the product itself (sound, battery)",
      "criteria": [
        "Poor",
        "Average",
        "Good",
        "Excellent"
      ]
    },
    "shipping_issue": {
      "type": "yes_no",
      "instructions": "Mentions a problem with shipping, delivery or packaging (late, crushed box)"
    },
    "service_issue": {
      "type": "yes_no",
      "instructions": "Complains about customer service (no reply, unhelpful)"
    }
  }
}

Content moderation

ora-text-0.2.03 questions
  • toxic Contains insults, harassment or abusive language
  • threat Contains a threat of violence or harm
  • action Moderation action to take
Request JSON
{
  "model": "ora-text-0.2.0",
  "state": "You're an idiot if you believe that. People like you shouldn't be allowed to post here. Go away.",
  "questions": {
    "toxic": {
      "type": "yes_no",
      "instructions": "Contains insults, harassment or abusive language",
      "criteria": {
        "true": "Name-calling, insults, telling someone to leave",
        "false": "Civil disagreement or neutral text"
      }
    },
    "threat": {
      "type": "yes_no",
      "instructions": "Contains a threat of violence or harm",
      "criteria": {
        "true": "Threatens to hurt, attack or harm someone",
        "false": "No threat of harm"
      }
    },
    "action": {
      "type": "choice",
      "instructions": "Moderation action to take",
      "criteria": {
        "allow": "Fine to publish",
        "warn": "Rude or insulting, warn the author",
        "remove": "Threats or severe abuse, remove the post"
      }
    }
  }
}

Lead qualification

ora-text-0.2.03 questions
  • intent What the sender wants
  • company_size Size of the sender's company
  • decision_maker The sender runs a team or department and can likely decide on a purchase
Request JSON
{
  "model": "ora-text-0.2.0",
  "state": "Hi, I run engineering at a 400-person fintech. We need structured classification for about 2 million support tickets a month and want to start a pilot next quarter. What does enterprise pricing look like?",
  "questions": {
    "intent": {
      "type": "choice",
      "instructions": "What the sender wants",
      "criteria": {
        "buy": "Ready to buy or start a pilot, asks about pricing",
        "explore": "Researching, early questions",
        "support": "Existing customer with a problem",
        "other": "Anything else"
      }
    },
    "company_size": {
      "type": "score",
      "instructions": "Size of the sender's company",
      "criteria": [
        "Individual or tiny team",
        "Small company",
        "Mid-size company, hundreds of people",
        "Large enterprise, thousands"
      ]
    },
    "decision_maker": {
      "type": "yes_no",
      "instructions": "The sender runs a team or department and can likely decide on a purchase"
    }
  }
}

Advanced

Refund decision on an order record (JSON state)

ora-text-0.2.03 questions
  • next_action What should support do next
  • eligible The order is eligible for a refund under the policy
  • confidence_needed How much human review this decision needs
Request JSON
{
  "model": "ora-text-0.2.0",
  "state": {
    "ticket": {
      "subject": "Duplicate charge",
      "messages": [
        {
          "from": "customer",
          "text": "I was charged twice for order A-104. Please refund the duplicate."
        },
        {
          "from": "support",
          "text": "We are checking the charges."
        }
      ]
    },
    "order": {
      "id": "A-104",
      "charges": [
        {
          "amount_usd": 49,
          "status": "captured"
        },
        {
          "amount_usd": 49,
          "status": "captured"
        }
      ]
    },
    "refund_policy": "Duplicate charges are eligible for a refund."
  },
  "questions": {
    "next_action": {
      "type": "choice",
      "instructions": "What should support do next",
      "criteria": {
        "refund": "Refund the duplicate charge",
        "escalate": "Escalate to a human reviewer",
        "ask_info": "Ask the customer for more information",
        "close": "Nothing to do, close the ticket"
      }
    },
    "eligible": {
      "type": "yes_no",
      "instructions": "The order is eligible for a refund under the policy",
      "criteria": {
        "true": "Duplicate captured charge, policy covers duplicates",
        "false": "Single charge or no policy match"
      }
    },
    "confidence_needed": {
      "type": "score",
      "instructions": "How much human review this decision needs",
      "criteria": [
        "None, fully automatic",
        "Quick glance",
        "Careful review",
        "Senior approval"
      ]
    }
  }
}

Loan application screening (JSON state)

ora-text-0.2.03 questions
  • risk Credit risk of this application
  • decision Underwriting decision
  • affordable The requested amount is affordable relative to income
Request JSON
{
  "model": "ora-text-0.2.0",
  "state": {
    "applicant": {
      "age": 34,
      "employment": "full-time software engineer",
      "years_at_employer": 6,
      "annual_income_usd": 142000
    },
    "request": {
      "amount_usd": 25000,
      "purpose": "debt consolidation",
      "term_months": 36
    },
    "credit": {
      "score": 761,
      "late_payments_24m": 0,
      "utilization_pct": 18,
      "open_accounts": 5
    },
    "notes": "Stable income, long employment history, low utilization."
  },
  "questions": {
    "risk": {
      "type": "score",
      "instructions": "Credit risk of this application",
      "criteria": [
        "Very low risk: high score, no late payments, low utilization",
        "Low risk",
        "Moderate risk",
        "High risk: low score, late payments, high utilization"
      ]
    },
    "decision": {
      "type": "choice",
      "instructions": "Underwriting decision",
      "criteria": {
        "approve": "Strong credit, stable income: approve",
        "review": "Mixed signals: send to an underwriter",
        "decline": "Weak credit or unaffordable: decline"
      }
    },
    "affordable": {
      "type": "yes_no",
      "instructions": "The requested amount is affordable relative to income",
      "criteria": {
        "true": "Amount is small relative to annual income",
        "false": "Amount is large relative to income"
      }
    }
  }
}

Intent routing, 8 intents (conversation JSON)

ora-text-0.2.03 questions
  • intent The customer's main intent in the latest message
  • needs_human This needs a human agent (billing changes, exceptions, angry customer)
  • sentiment Customer mood
Request JSON
{
  "model": "ora-text-0.2.0",
  "state": {
    "channel": "chat",
    "conversation": [
      {
        "role": "user",
        "text": "hey, my card got declined when I tried to upgrade to the annual plan"
      },
      {
        "role": "agent",
        "text": "Sorry about that! Did you see an error message?"
      },
      {
        "role": "user",
        "text": "it said payment failed, card declined. I checked with my bank and the card is fine. can you just switch me to invoice billing instead?"
      }
    ]
  },
  "questions": {
    "intent": {
      "type": "choice",
      "instructions": "The customer's main intent in the latest message",
      "criteria": {
        "payment_failure": "Card declined, payment failed",
        "change_billing_method": "Switch to invoice, change how they pay",
        "upgrade_plan": "Move to a bigger or annual plan",
        "cancel": "Cancel subscription",
        "refund": "Money back",
        "bug_report": "Something in the product is broken",
        "account_access": "Login or password trouble",
        "other": "Anything else"
      }
    },
    "needs_human": {
      "type": "yes_no",
      "instructions": "This needs a human agent (billing changes, exceptions, angry customer)"
    },
    "sentiment": {
      "type": "score",
      "instructions": "Customer mood",
      "criteria": [
        "Angry",
        "Frustrated",
        "Neutral",
        "Positive"
      ]
    }
  }
}

Incident review with structured instructions

ora-text-0.2.03 questions
  • severity
  • category Root cause category
  • prevented_by_ci A CI check could plausibly have caught this before production
Request JSON
{
  "model": "ora-text-0.2.0",
  "state": {
    "incident": {
      "id": "INC-2291",
      "service": "payments-api",
      "started": "2026-10-18T02:14Z",
      "resolved": "2026-10-18T04:02Z",
      "customers_affected": 1830
    },
    "timeline": [
      "02:14 error rate spikes to 38%",
      "02:20 on-call paged",
      "02:55 bad deploy identified",
      "03:10 rollback started",
      "04:02 error rate back to normal"
    ],
    "root_cause": "A config change disabled connection pooling, exhausting database connections under load.",
    "follow_ups": [
      "Add config validation in CI",
      "Alert on connection pool saturation"
    ]
  },
  "questions": {
    "severity": {
      "type": "score",
      "instructions": {
        "task": "Rate the incident severity",
        "consider": [
          "customer impact",
          "duration",
          "whether payments failed"
        ]
      },
      "criteria": [
        "SEV4: minor, no customer impact",
        "SEV3: limited impact",
        "SEV2: significant customer impact",
        "SEV1: major outage, money or data at risk"
      ]
    },
    "category": {
      "type": "choice",
      "instructions": "Root cause category",
      "criteria": {
        "deploy_or_config": {
          "description": "A deploy or config change caused it",
          "examples": [
            "bad deploy",
            "config change",
            "rollback"
          ]
        },
        "capacity": "Load or capacity limits",
        "dependency": "A third-party or upstream failure",
        "data": "Bad data or migration"
      }
    },
    "prevented_by_ci": {
      "type": "yes_no",
      "instructions": "A CI check could plausibly have caught this before production"
    }
  }
}

Tool calling

A query in plain English plus your tool definitions; ora-automation returns the calls to make. Coming soon: the requests are final, answers arrive when the model goes live. Reference: POST /v1/automate.

Lights and lock

Dim the bedroom lights to 30% and lock the front door

ora-automation4 tools · homecoming soon
  • set_lights Turn the lights in a room on or off and set brightness.
  • lock_door Lock or unlock a named door.
  • control_device Switch or toggle any named smart-home device.
  • get_weather Weather forecast for a city on a day.
Request JSON
{
  "model": "ora-automation",
  "query": "Dim the bedroom lights to 30% and lock the front door",
  "tools": [
    {
      "name": "set_lights",
      "description": "Turn the lights in a room on or off and set brightness.",
      "parameters": {
        "type": "object",
        "properties": {
          "room": {
            "type": "string"
          },
          "on": {
            "type": "boolean"
          },
          "brightness": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          }
        },
        "required": [
          "room"
        ]
      }
    },
    {
      "name": "lock_door",
      "description": "Lock or unlock a named door.",
      "parameters": {
        "type": "object",
        "properties": {
          "door": {
            "type": "string"
          },
          "locked": {
            "type": "boolean"
          }
        },
        "required": [
          "door",
          "locked"
        ]
      }
    },
    {
      "name": "control_device",
      "description": "Switch or toggle any named smart-home device.",
      "parameters": {
        "type": "object",
        "properties": {
          "device": {
            "type": "string"
          },
          "action": {
            "type": "string",
            "enum": [
              "on",
              "off",
              "toggle"
            ]
          }
        },
        "required": [
          "device",
          "action"
        ]
      }
    },
    {
      "name": "get_weather",
      "description": "Weather forecast for a city on a day.",
      "parameters": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string"
          },
          "day": {
            "type": "string",
            "description": "today, tomorrow or a date"
          }
        },
        "required": [
          "city"
        ]
      }
    }
  ]
}

Toggle a device

toggle the garage door

ora-automation4 tools · homecoming soon
  • set_lights Turn the lights in a room on or off and set brightness.
  • lock_door Lock or unlock a named door.
  • control_device Switch or toggle any named smart-home device.
  • get_weather Weather forecast for a city on a day.
Request JSON
{
  "model": "ora-automation",
  "query": "toggle the garage door",
  "tools": [
    {
      "name": "set_lights",
      "description": "Turn the lights in a room on or off and set brightness.",
      "parameters": {
        "type": "object",
        "properties": {
          "room": {
            "type": "string"
          },
          "on": {
            "type": "boolean"
          },
          "brightness": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          }
        },
        "required": [
          "room"
        ]
      }
    },
    {
      "name": "lock_door",
      "description": "Lock or unlock a named door.",
      "parameters": {
        "type": "object",
        "properties": {
          "door": {
            "type": "string"
          },
          "locked": {
            "type": "boolean"
          }
        },
        "required": [
          "door",
          "locked"
        ]
      }
    },
    {
      "name": "control_device",
      "description": "Switch or toggle any named smart-home device.",
      "parameters": {
        "type": "object",
        "properties": {
          "device": {
            "type": "string"
          },
          "action": {
            "type": "string",
            "enum": [
              "on",
              "off",
              "toggle"
            ]
          }
        },
        "required": [
          "device",
          "action"
        ]
      }
    },
    {
      "name": "get_weather",
      "description": "Weather forecast for a city on a day.",
      "parameters": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string"
          },
          "day": {
            "type": "string",
            "description": "today, tomorrow or a date"
          }
        },
        "required": [
          "city"
        ]
      }
    }
  ]
}

Weather check

What's the weather in Chicago tomorrow?

ora-automation4 tools · homecoming soon
  • set_lights Turn the lights in a room on or off and set brightness.
  • lock_door Lock or unlock a named door.
  • control_device Switch or toggle any named smart-home device.
  • get_weather Weather forecast for a city on a day.
Request JSON
{
  "model": "ora-automation",
  "query": "What's the weather in Chicago tomorrow?",
  "tools": [
    {
      "name": "set_lights",
      "description": "Turn the lights in a room on or off and set brightness.",
      "parameters": {
        "type": "object",
        "properties": {
          "room": {
            "type": "string"
          },
          "on": {
            "type": "boolean"
          },
          "brightness": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          }
        },
        "required": [
          "room"
        ]
      }
    },
    {
      "name": "lock_door",
      "description": "Lock or unlock a named door.",
      "parameters": {
        "type": "object",
        "properties": {
          "door": {
            "type": "string"
          },
          "locked": {
            "type": "boolean"
          }
        },
        "required": [
          "door",
          "locked"
        ]
      }
    },
    {
      "name": "control_device",
      "description": "Switch or toggle any named smart-home device.",
      "parameters": {
        "type": "object",
        "properties": {
          "device": {
            "type": "string"
          },
          "action": {
            "type": "string",
            "enum": [
              "on",
              "off",
              "toggle"
            ]
          }
        },
        "required": [
          "device",
          "action"
        ]
      }
    },
    {
      "name": "get_weather",
      "description": "Weather forecast for a city on a day.",
      "parameters": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string"
          },
          "day": {
            "type": "string",
            "description": "today, tomorrow or a date"
          }
        },
        "required": [
          "city"
        ]
      }
    }
  ]
}

No tool fits

Tell me a joke about bonds

ora-automation4 tools · homecoming soon
  • set_lights Turn the lights in a room on or off and set brightness.
  • lock_door Lock or unlock a named door.
  • control_device Switch or toggle any named smart-home device.
  • get_weather Weather forecast for a city on a day.
Request JSON
{
  "model": "ora-automation",
  "query": "Tell me a joke about bonds",
  "tools": [
    {
      "name": "set_lights",
      "description": "Turn the lights in a room on or off and set brightness.",
      "parameters": {
        "type": "object",
        "properties": {
          "room": {
            "type": "string"
          },
          "on": {
            "type": "boolean"
          },
          "brightness": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          }
        },
        "required": [
          "room"
        ]
      }
    },
    {
      "name": "lock_door",
      "description": "Lock or unlock a named door.",
      "parameters": {
        "type": "object",
        "properties": {
          "door": {
            "type": "string"
          },
          "locked": {
            "type": "boolean"
          }
        },
        "required": [
          "door",
          "locked"
        ]
      }
    },
    {
      "name": "control_device",
      "description": "Switch or toggle any named smart-home device.",
      "parameters": {
        "type": "object",
        "properties": {
          "device": {
            "type": "string"
          },
          "action": {
            "type": "string",
            "enum": [
              "on",
              "off",
              "toggle"
            ]
          }
        },
        "required": [
          "device",
          "action"
        ]
      }
    },
    {
      "name": "get_weather",
      "description": "Weather forecast for a city on a day.",
      "parameters": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string"
          },
          "day": {
            "type": "string",
            "description": "today, tomorrow or a date"
          }
        },
        "required": [
          "city"
        ]
      }
    }
  ]
}

Alert on a price

Alert me on Slack if NVDA closes above 150

ora-automation3 tools · tradingcoming soon
  • get_quote Latest price for a stock or ETF symbol.
  • place_order Place a buy or sell order.
  • create_alert Create a price alert that notifies a channel.
Request JSON
{
  "model": "ora-automation",
  "query": "Alert me on Slack if NVDA closes above 150",
  "tools": [
    {
      "name": "get_quote",
      "description": "Latest price for a stock or ETF symbol.",
      "parameters": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string"
          }
        },
        "required": [
          "symbol"
        ]
      }
    },
    {
      "name": "place_order",
      "description": "Place a buy or sell order.",
      "parameters": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string"
          },
          "side": {
            "type": "string",
            "enum": [
              "buy",
              "sell"
            ]
          },
          "quantity": {
            "type": "integer",
            "minimum": 1
          },
          "type": {
            "type": "string",
            "enum": [
              "market",
              "limit"
            ]
          },
          "limit_price": {
            "type": "number"
          }
        },
        "required": [
          "symbol",
          "side",
          "quantity",
          "type"
        ]
      }
    },
    {
      "name": "create_alert",
      "description": "Create a price alert that notifies a channel.",
      "parameters": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string"
          },
          "condition": {
            "type": "string",
            "enum": [
              "closes_above",
              "closes_below",
              "crosses_above",
              "crosses_below"
            ]
          },
          "price": {
            "type": "number"
          },
          "channel": {
            "type": "string",
            "enum": [
              "slack",
              "email",
              "webhook"
            ]
          }
        },
        "required": [
          "symbol",
          "condition",
          "price"
        ]
      }
    }
  ]
}

Quote then order

Get a quote for AAPL and buy 10 shares at market

ora-automation3 tools · tradingcoming soon
  • get_quote Latest price for a stock or ETF symbol.
  • place_order Place a buy or sell order.
  • create_alert Create a price alert that notifies a channel.
Request JSON
{
  "model": "ora-automation",
  "query": "Get a quote for AAPL and buy 10 shares at market",
  "tools": [
    {
      "name": "get_quote",
      "description": "Latest price for a stock or ETF symbol.",
      "parameters": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string"
          }
        },
        "required": [
          "symbol"
        ]
      }
    },
    {
      "name": "place_order",
      "description": "Place a buy or sell order.",
      "parameters": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string"
          },
          "side": {
            "type": "string",
            "enum": [
              "buy",
              "sell"
            ]
          },
          "quantity": {
            "type": "integer",
            "minimum": 1
          },
          "type": {
            "type": "string",
            "enum": [
              "market",
              "limit"
            ]
          },
          "limit_price": {
            "type": "number"
          }
        },
        "required": [
          "symbol",
          "side",
          "quantity",
          "type"
        ]
      }
    },
    {
      "name": "create_alert",
      "description": "Create a price alert that notifies a channel.",
      "parameters": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string"
          },
          "condition": {
            "type": "string",
            "enum": [
              "closes_above",
              "closes_below",
              "crosses_above",
              "crosses_below"
            ]
          },
          "price": {
            "type": "number"
          },
          "channel": {
            "type": "string",
            "enum": [
              "slack",
              "email",
              "webhook"
            ]
          }
        },
        "required": [
          "symbol",
          "condition",
          "price"
        ]
      }
    }
  ]
}

Calendar and email

Book a 30 minute call with Sam on Friday at 3pm and email him the invite

ora-automation3 tools · officecoming soon
  • create_event Create a calendar event.
  • send_email Send an email.
  • log_expense Record an expense.
Request JSON
{
  "model": "ora-automation",
  "query": "Book a 30 minute call with Sam on Friday at 3pm and email him the invite",
  "tools": [
    {
      "name": "create_event",
      "description": "Create a calendar event.",
      "parameters": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "attendee": {
            "type": "string"
          },
          "day": {
            "type": "string"
          },
          "time": {
            "type": "string"
          },
          "minutes": {
            "type": "integer"
          }
        },
        "required": [
          "title",
          "day",
          "time"
        ]
      }
    },
    {
      "name": "send_email",
      "description": "Send an email.",
      "parameters": {
        "type": "object",
        "properties": {
          "to": {
            "type": "string"
          },
          "subject": {
            "type": "string"
          },
          "body": {
            "type": "string"
          }
        },
        "required": [
          "to",
          "subject"
        ]
      }
    },
    {
      "name": "log_expense",
      "description": "Record an expense.",
      "parameters": {
        "type": "object",
        "properties": {
          "amount": {
            "type": "number"
          },
          "merchant": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "meals",
              "travel",
              "software",
              "office",
              "other"
            ]
          },
          "date": {
            "type": "string"
          }
        },
        "required": [
          "amount",
          "merchant",
          "category"
        ]
      }
    }
  ]
}

Expense from a receipt

Log a $42.50 lunch at Blue Bottle yesterday as a meals expense

ora-automation3 tools · officecoming soon
  • create_event Create a calendar event.
  • send_email Send an email.
  • log_expense Record an expense.
Request JSON
{
  "model": "ora-automation",
  "query": "Log a $42.50 lunch at Blue Bottle yesterday as a meals expense",
  "tools": [
    {
      "name": "create_event",
      "description": "Create a calendar event.",
      "parameters": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "attendee": {
            "type": "string"
          },
          "day": {
            "type": "string"
          },
          "time": {
            "type": "string"
          },
          "minutes": {
            "type": "integer"
          }
        },
        "required": [
          "title",
          "day",
          "time"
        ]
      }
    },
    {
      "name": "send_email",
      "description": "Send an email.",
      "parameters": {
        "type": "object",
        "properties": {
          "to": {
            "type": "string"
          },
          "subject": {
            "type": "string"
          },
          "body": {
            "type": "string"
          }
        },
        "required": [
          "to",
          "subject"
        ]
      }
    },
    {
      "name": "log_expense",
      "description": "Record an expense.",
      "parameters": {
        "type": "object",
        "properties": {
          "amount": {
            "type": "number"
          },
          "merchant": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "meals",
              "travel",
              "software",
              "office",
              "other"
            ]
          },
          "date": {
            "type": "string"
          }
        },
        "required": [
          "amount",
          "merchant",
          "category"
        ]
      }
    }
  ]
}

Text and alarm

Text Maria that I'm running 10 minutes late and set an alarm for 6:30am

ora-automation3 tools · phonecoming soon
  • send_message Send a text message to a contact.
  • set_alarm Set an alarm.
  • call_contact Start a phone call.
Request JSON
{
  "model": "ora-automation",
  "query": "Text Maria that I'm running 10 minutes late and set an alarm for 6:30am",
  "tools": [
    {
      "name": "send_message",
      "description": "Send a text message to a contact.",
      "parameters": {
        "type": "object",
        "properties": {
          "to": {
            "type": "string"
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "to",
          "text"
        ]
      }
    },
    {
      "name": "set_alarm",
      "description": "Set an alarm.",
      "parameters": {
        "type": "object",
        "properties": {
          "time": {
            "type": "string"
          },
          "label": {
            "type": "string"
          }
        },
        "required": [
          "time"
        ]
      }
    },
    {
      "name": "call_contact",
      "description": "Start a phone call.",
      "parameters": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ]
      }
    }
  ]
}

Drive somewhere

Take me to the airport avoiding tolls and set the temperature to 21 degrees

ora-automation3 tools · carcoming soon
  • navigate_to Start navigation to a destination.
  • set_climate Set the cabin temperature and fan.
  • play_media Play music, a podcast or the radio.
Request JSON
{
  "model": "ora-automation",
  "query": "Take me to the airport avoiding tolls and set the temperature to 21 degrees",
  "tools": [
    {
      "name": "navigate_to",
      "description": "Start navigation to a destination.",
      "parameters": {
        "type": "object",
        "properties": {
          "destination": {
            "type": "string"
          },
          "avoid": {
            "type": "string",
            "enum": [
              "tolls",
              "highways",
              "none"
            ]
          }
        },
        "required": [
          "destination"
        ]
      }
    },
    {
      "name": "set_climate",
      "description": "Set the cabin temperature and fan.",
      "parameters": {
        "type": "object",
        "properties": {
          "temperature_c": {
            "type": "number"
          },
          "zone": {
            "type": "string",
            "enum": [
              "driver",
              "passenger",
              "all"
            ]
          }
        },
        "required": [
          "temperature_c"
        ]
      }
    },
    {
      "name": "play_media",
      "description": "Play music, a podcast or the radio.",
      "parameters": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string"
          },
          "source": {
            "type": "string",
            "enum": [
              "music",
              "podcast",
              "radio"
            ]
          }
        },
        "required": [
          "query"
        ]
      }
    }
  ]
}

CRM after a call

Move the Acme deal to negotiation at $48,000 and remind me to follow up with Dana next Tuesday

ora-automation3 tools · crmcoming soon
  • create_lead Create a sales lead.
  • update_deal Move a deal to a new stage or change its value.
  • schedule_followup Schedule a follow-up task.
Request JSON
{
  "model": "ora-automation",
  "query": "Move the Acme deal to negotiation at $48,000 and remind me to follow up with Dana next Tuesday",
  "tools": [
    {
      "name": "create_lead",
      "description": "Create a sales lead.",
      "parameters": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "company": {
            "type": "string"
          },
          "email": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "company"
        ]
      }
    },
    {
      "name": "update_deal",
      "description": "Move a deal to a new stage or change its value.",
      "parameters": {
        "type": "object",
        "properties": {
          "deal": {
            "type": "string"
          },
          "stage": {
            "type": "string",
            "enum": [
              "qualified",
              "proposal",
              "negotiation",
              "won",
              "lost"
            ]
          },
          "amount": {
            "type": "number"
          }
        },
        "required": [
          "deal"
        ]
      }
    },
    {
      "name": "schedule_followup",
      "description": "Schedule a follow-up task.",
      "parameters": {
        "type": "object",
        "properties": {
          "contact": {
            "type": "string"
          },
          "when": {
            "type": "string"
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "contact",
          "when"
        ]
      }
    }
  ]
}

Trip planning

Find business class flights from Dubai to London on March 3 and book a hotel in London for 4 nights from March 3

ora-automation2 tools · travelcoming soon
  • search_flights Search flights.
  • book_hotel Book a hotel.
Request JSON
{
  "model": "ora-automation",
  "query": "Find business class flights from Dubai to London on March 3 and book a hotel in London for 4 nights from March 3",
  "tools": [
    {
      "name": "search_flights",
      "description": "Search flights.",
      "parameters": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string"
          },
          "to": {
            "type": "string"
          },
          "date": {
            "type": "string"
          },
          "cabin": {
            "type": "string",
            "enum": [
              "economy",
              "premium",
              "business",
              "first"
            ]
          }
        },
        "required": [
          "from",
          "to",
          "date"
        ]
      }
    },
    {
      "name": "book_hotel",
      "description": "Book a hotel.",
      "parameters": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string"
          },
          "check_in": {
            "type": "string"
          },
          "nights": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "city",
          "check_in",
          "nights"
        ]
      }
    }
  ]
}

Shopping

Find running shoes under $120 in size 10

ora-automation3 tools · shopcoming soon
  • search_products Search the catalog.
  • add_to_cart Add a product to the cart.
  • track_order Track an order.
Request JSON
{
  "model": "ora-automation",
  "query": "Find running shoes under $120 in size 10",
  "tools": [
    {
      "name": "search_products",
      "description": "Search the catalog.",
      "parameters": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string"
          },
          "max_price": {
            "type": "number"
          },
          "size": {
            "type": "string"
          }
        },
        "required": [
          "query"
        ]
      }
    },
    {
      "name": "add_to_cart",
      "description": "Add a product to the cart.",
      "parameters": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string"
          },
          "quantity": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "product"
        ]
      }
    },
    {
      "name": "track_order",
      "description": "Track an order.",
      "parameters": {
        "type": "object",
        "properties": {
          "order_id": {
            "type": "string"
          }
        },
        "required": [
          "order_id"
        ]
      }
    }
  ]
}

Where is my order

Where is my order 88-1932?

ora-automation3 tools · shopcoming soon
  • search_products Search the catalog.
  • add_to_cart Add a product to the cart.
  • track_order Track an order.
Request JSON
{
  "model": "ora-automation",
  "query": "Where is my order 88-1932?",
  "tools": [
    {
      "name": "search_products",
      "description": "Search the catalog.",
      "parameters": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string"
          },
          "max_price": {
            "type": "number"
          },
          "size": {
            "type": "string"
          }
        },
        "required": [
          "query"
        ]
      }
    },
    {
      "name": "add_to_cart",
      "description": "Add a product to the cart.",
      "parameters": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string"
          },
          "quantity": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "product"
        ]
      }
    },
    {
      "name": "track_order",
      "description": "Track an order.",
      "parameters": {
        "type": "object",
        "properties": {
          "order_id": {
            "type": "string"
          }
        },
        "required": [
          "order_id"
        ]
      }
    }
  ]
}
Create an account Open the Playground Everything here also lives in the console, next to your keys and usage.