Ora
All guides All guides

Getting started

Your first decision in the Playground Call the API from your code Save, share and reuse queries

Financial decisions

Decide on a stock with just its symbol Write your own rule Read probabilities and choose thresholds

Rule playground

From English to rule Combining conditions Offsets and windows Reading beliefs Rules plus forecasts in one request Turning a rule into an alert or workflow

Automation

Send a Slack alert when a rule fires Send decisions to your own system Run a watchlist every day after the close

Production

Handle errors, rate limits and retries

Cookbooks

All cookbooks Rank a watchlist by probability Send a pre-open digest Trend filter plus entry trigger Breakout confirmation with volume RSI and Bollinger mean-reversion checks Gap-fill playbook to your order system Confidence-gated actions Detect two-way risk Size positions by volatility regime Risk guardrail before an order Ask many questions in one request Self-consistency: three wordings Route support tickets Is a headline relevant to a symbol?

Use cases

Tag financial news for trading signalsGuardrails for LLM appsSupport ticket triage and routingFilter retrieved passages before your LLM answersVerify claims and citations against a source

Guides / Cookbooks

Cookbooks · Signals: rules plus forecasts · Intermediate · about 8 min

RSI and Bollinger mean-reversion checks

Check whether a stock is stretched to the downside with RSI and Bollinger rules, then ask whether the next week leans toward a bounce.

  1. When to use it

    "Oversold" is a fact about today; a bounce is a forecast. A mean-reversion entry wants both, and keeping them as separate answers stops a deep RSI from being read as a prediction.

  2. The request

    {
      "model": "ora-fin1",
      "state": {
        "symbol": "AMZN"
      },
      "questions": {
        "oversold": {
          "type": "yes_no",
          "ask": "rsi(C,14) < 30"
        },
        "below_band": {
          "type": "yes_no",
          "ask": "C < bblower(C,20,2)"
        },
        "stretched": {
          "type": "yes_no",
          "ask": "rsi(C,14) < 35 or C < bblower(C,20,2)"
        },
        "oversold_en": {
          "type": "yes_no",
          "instructions": "Is its 14-day RSI below 30?"
        },
        "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?"
        }
      }
    }
    Open this in the Playground
  3. The real response

    AMZN:

    {
      "model": "ora-fin1",
      "answers": {
        "oversold": {
          "type": "yes_no",
          "yes_no": 0.1,
          "rule": "rsi(C,14) < 30",
          "basis": "rule"
        },
        "below_band": {
          "type": "yes_no",
          "yes_no": 0.5676,
          "rule": "C < bblower(C,20,2)",
          "basis": "rule"
        },
        "stretched": {
          "type": "yes_no",
          "yes_no": 0.5676,
          "rule": "rsi(C,14) < 35 or C < bblower(C,20,2)",
          "basis": "rule"
        },
        "oversold_en": {
          "type": "yes_no",
          "yes_no": 0.1,
          "rule": "rsi(C, 14) < 30",
          "basis": "comparison",
          "explain": "rsi < 30"
        },
        "up_week": {
          "type": "yes_no",
          "yes_no": 0.493
        },
        "drop5": {
          "type": "yes_no",
          "yes_no": 0.462
        }
      },
      "usage": {
        "input_tokens": 455,
        "output_tokens": 24
      },
      "context": {
        "source": "server",
        "symbol": "AMZN",
        "as_of": "2026-10-30"
      },
      "version": "ora-fin-0.1.1"
    }

    RSI is not oversold (oversold 0.1; the English version compiled to the same rule), but the close sits about on its lower Bollinger band (below_band 0.5676, near the line). or takes the higher part, so stretched is 0.5676. The forecast does not lean either way (up_week 0.493). For MSFT the band belief is 0.4578 and up_week 0.574.

  4. The code

    Requires curl 7.76+. Save as run.sh, then: bash run.sh
    curl -sS https://oramodel.com/v1/systemone \
      -H "Authorization: Bearer $JEV_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
      "model": "ora-fin1",
      "state": {
        "symbol": "AMZN"
      },
      "questions": {
        "oversold": {
          "type": "yes_no",
          "ask": "rsi(C,14) < 30"
        },
        "below_band": {
          "type": "yes_no",
          "ask": "C < bblower(C,20,2)"
        },
        "stretched": {
          "type": "yes_no",
          "ask": "rsi(C,14) < 35 or C < bblower(C,20,2)"
        },
        "oversold_en": {
          "type": "yes_no",
          "instructions": "Is its 14-day RSI below 30?"
        },
        "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?"
        }
      }
    }'
  5. Act on it

    Require both a stretch and a lean before you treat it as a setup, and keep the rule's belief as a strength, not a switch:

    a = {k: v["yes_no"] for k, v in data["answers"].items()}
    if a["stretched"] >= 0.6 and a["up_week"] >= 0.55:
        add_to_reversion_list(symbol, strength=a["stretched"])
    elif a["stretched"] >= 0.6:
        note(symbol, "stretched, but no bounce lean in the forecast")

    On this session neither symbol clears both lines, so nothing is added.

  6. Variations

Information, not investment advice. Every number on this page is a real response for the session shown; answers change with each session.

What's next

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