Ora
All use cases All industries

Individuals

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

Buy side

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

Sell side

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

Corporates

Investor relations teamCorporate treasuryCFO officeBank credit analystFinancial journalist / media

Builders

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

Institutions

ETF issuerIndex providerInsurance investment officePension fundEndowmentSovereign wealth fund

Use cases · Sell side

Sell-side sales trader: 20 ways to use Ora

Turns the morning tape into client color: movers, levels, volume and events. Each example is a complete, runnable request with the real answers it returned (45 requests, captured 2026-10-31), what they mean and, where it fits, the action it would send.

Answers were captured on ora-fin-0.1.1. Another model changes the request JSON and the Playground link; run it there to see its answers.
Rule functions and facts used by this player (40)

sma 11offset 10ref 8avg 6atr 4max 4swinghigh 3lowest 3rsi 3abs 2roc 2log 2days_to_earnings 2swinglow 2outside_bar 1last_earnings_gap 1median 1dragonfly_doji 1engulfing_bull 1highest 1cut_last 1days_to_ex_div 1div_yield_ttm 1sqrt 1std 1obv 1sign 1sum 1last_earnings_move 1next_report_amc 1tr 1beat_eps_last 1macdhist 1zscore 1crossup 1min 1atr_pct 1hl2 1ohlc4 1linreg 1

Examples 11–20 of 20 · page 2 of 2

Sell-side sales trader · example 11

MSFT into earnings: what to tell clients before the print

Combine the report date, the last reaction and the trend into a pre-earnings talking point.

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

State

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

Questions

soonEnglish → ruleIs earnings in the next 14 days?
amcEnglish → ruleDoes the stock report after the close next time?
big_reactEnglish → ruleWas the last earnings reaction bigger than 5%?
trendruledays_to_earnings <= 10 and C > sma(C, 50)
Earnings within 10 days, above the 50-day
big5forecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days

Answers

QuestionAnswerReading
soon
Is earnings in the next 14 days
compiled to days_to_earnings <= 14
0.0537false
amc
Does the stock report after the close next time
compiled to next_report_amc > 0.5
0.8591true
big_react
Was the last earnings reaction bigger than 5%
compiled to abs(last_earnings_move) > 5
0.0537false
trend
Earnings within 10 days, above the 50-day
0.0537false
big5
A big move either way in 5 days
0.39740% · unlikely

What it means

For MSFT on the session of 2026-10-30: True now: Does the stock report after the close next time. Not true: Is earnings in the next 14 days; Was the last earnings reaction bigger than 5%; Earnings within 10 days, above the 50-day. Forecasts: A big move either way in 5 days 40%.

Date and timing facts set the calendar; the last reaction and the trend frame how clients may want to be positioned.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT"
  },
  "questions": {
    "soon": {
      "type": "yes_no",
      "instructions": "Is earnings in the next 14 days?"
    },
    "amc": {
      "type": "yes_no",
      "instructions": "Does the stock report after the close next time?"
    },
    "big_react": {
      "type": "yes_no",
      "instructions": "Was the last earnings reaction bigger than 5%?"
    },
    "trend": {
      "type": "yes_no",
      "ask": "days_to_earnings <= 10 and C > sma(C, 50)"
    },
    "big5": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  }
}
Response JSON (MSFT, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "soon": {
      "yes_no": 0.0537,
      "rule": "days_to_earnings <= 14",
      "basis": "pattern"
    },
    "amc": {
      "yes_no": 0.8591,
      "rule": "next_report_amc > 0.5",
      "basis": "pattern"
    },
    "big_react": {
      "yes_no": 0.0537,
      "rule": "abs(last_earnings_move) > 5",
      "basis": "pattern"
    },
    "trend": {
      "yes_no": 0.0537,
      "rule": "days_to_earnings <= 10 and C > sma(C, 50)",
      "basis": "rule"
    },
    "big5": {
      "yes_no": 0.397
    }
  },
  "context": {
    "symbol": "MSFT",
    "as_of": "2026-10-30"
  }
}

abs days_to_earnings last_earnings_move next_report_amc sma

Sell-side sales trader · example 12

QQQ: trend day or chop? Session-type color

Describe yesterday's session type for clients: trend day, inside day, NR7 or wide range.

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

State

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

Questions

trend_dayrule(O <= L + 0.2 * (H - L)) and (C >= H - 0.2 * (H - L))
A trend day up: opened near the low, closed near the high
insideruleH < H[-1] and L > L[-1]
An inside day
nr7rule(H - L) < lowest(H - L, 6)
Narrowest range of the last seven sessions (NR7)
widerule(H - L) > 2 * avg(H - L, 20)
Range more than twice the 20-day average range
tr_atrruletr() > 1.5 * ref(atr(14), -1)
True range 1.5× yesterday's ATR
up_tomforecastWill the stock be up tomorrow?
Up tomorrow

Answers

QuestionAnswerReading
trend_day
A trend day up: opened near the low, closed near the high
0.0537false
inside
An inside day
0.0537false
nr7
Narrowest range of the last seven sessions (NR7)
0.0555false
wide
Range more than twice the 20-day average range
0.1755false
tr_atr
True range 1.5× yesterday's ATR
0.9434true
up_tom
Up tomorrow
0.53353% · close to even

What it means

For QQQ on the session of 2026-10-30: True now: True range 1.5× yesterday's ATR. Not true: A trend day up: opened near the low, closed near the high; An inside day; Narrowest range of the last seven sessions (NR7); Range more than twice the 20-day average range. Forecasts: Up tomorrow 53%.

One true rule usually names the day; a quiet inside or NR7 day sets up the 'watch for expansion' line.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "QQQ"
  },
  "questions": {
    "trend_day": {
      "type": "yes_no",
      "ask": "(O <= L + 0.2 * (H - L)) and (C >= H - 0.2 * (H - L))"
    },
    "inside": {
      "type": "yes_no",
      "ask": "H < H[-1] and L > L[-1]"
    },
    "nr7": {
      "type": "yes_no",
      "ask": "(H - L) < lowest(H - L, 6)"
    },
    "wide": {
      "type": "yes_no",
      "ask": "(H - L) > 2 * avg(H - L, 20)"
    },
    "tr_atr": {
      "type": "yes_no",
      "ask": "tr() > 1.5 * ref(atr(14), -1)"
    },
    "up_tom": {
      "type": "yes_no",
      "instructions": "Will the stock be up tomorrow?"
    }
  }
}
Response JSON (QQQ, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend_day": {
      "yes_no": 0.0537,
      "rule": "(O <= L + 0.2 * (H - L)) and (C >= H - 0.2 * (H - L))",
      "basis": "rule"
    },
    "inside": {
      "yes_no": 0.0537,
      "rule": "H < H[-1] and L > L[-1]",
      "basis": "rule"
    },
    "nr7": {
      "yes_no": 0.0555,
      "rule": "(H - L) < lowest(H - L, 6)",
      "basis": "rule"
    },
    "wide": {
      "yes_no": 0.1755,
      "rule": "(H - L) > 2 * avg(H - L, 20)",
      "basis": "rule"
    },
    "tr_atr": {
      "yes_no": 0.9434,
      "rule": "tr() > 1.5 * ref(atr(14), -1)",
      "basis": "rule"
    },
    "up_tom": {
      "yes_no": 0.533
    }
  },
  "context": {
    "symbol": "QQQ",
    "as_of": "2026-10-30"
  }
}

atr avg lowest offset ref tr

Sell-side sales trader · example 13

Consumer discretionary list: NKE, SBUX, MCD, HD, LOW

A weekly scan for the consumer client list: who is above the 200-day, who is in a 20% drawdown, who reports soon.

ora-fin-0.1.15 symbols, one request each4 questionsworkflow · Fri at 16:30 ET
  1. ScheduleFri at 16:30 ET
  2. State5 symbols
  3. Questions4 asked
  4. Answersreal, captured
  5. Actionsnone

State

{"symbol":"NKE"} then SBUX, MCD, HD, LOW, one request each. The server fills in the latest completed session.

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
earnruledays_to_earnings <= 10
Reports earnings within 10 days
beatEnglish → ruleDid the stock beat EPS estimates last quarter?

Answers

Symboltrendruledrawdownruleearnrulebeatrule
NKE0.05370.94630.05370.8591
SBUX0.80580.05450.05370.8591
MCD0.06570.81750.91870.8591
HD0.44550.12820.05630.8591
LOW0.10120.92470.05370.8591

true false not known for rules; forecasts are odds. Hover a column for its question.

What it means

Session of 2026-10-30, 5 symbols: Is the stock above its 200-day moving average: true for SBUX of 5. More than 20% off the 52-week high: true for NKE, MCD, LOW of 5. Reports earnings within 10 days: true for MCD of 5. Did the stock beat EPS estimates last quarter: true for NKE, SBUX, MCD, HD, LOW of 5.

A Friday workflow refreshes the list; the drawdown and earnings columns decide who leads Monday's call.

As a scheduled workflow (Fri at 16:30 ET)

Create it under Workflows in the console: it runs these questions for every symbol on the schedule and fires the actions per symbol. The answers above are what one run returned.

{
  "name": "Consumer discretionary list: NKE, SBUX, MCD, HD, LOW",
  "symbols": "NKE SBUX MCD HD LOW",
  "days": [
    5
  ],
  "at_time": "16:30",
  "model": "ora-fin-0.1.1",
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "earn": {
      "type": "yes_no",
      "ask": "days_to_earnings <= 10"
    },
    "beat": {
      "type": "yes_no",
      "instructions": "Did the stock beat EPS estimates last quarter?"
    }
  }
}
Request JSON (NKE; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NKE"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "earn": {
      "type": "yes_no",
      "ask": "days_to_earnings <= 10"
    },
    "beat": {
      "type": "yes_no",
      "instructions": "Did the stock beat EPS estimates last quarter?"
    }
  }
}
Response JSON (NKE, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.0537,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "drawdown": {
      "yes_no": 0.9463,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "earn": {
      "yes_no": 0.0537,
      "rule": "days_to_earnings <= 10",
      "basis": "rule"
    },
    "beat": {
      "yes_no": 0.8591,
      "rule": "beat_eps_last > 0.5",
      "basis": "pattern"
    }
  },
  "context": {
    "symbol": "NKE",
    "as_of": "2026-10-30"
  }
}

beat_eps_last days_to_earnings max sma

Sell-side sales trader · example 14

Log an AMD pitch idea to the CRM with the evidence

When a setup is true, write a pitch record to the CRM so compliance and management can see the basis.

ora-fin-0.1.1AMD5 questions2 actions
  1. StateAMD
  2. Questions5 asked
  3. Answersreal, captured
  4. Actions2 rules · dry run

State

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

Questions

pullbackrule(C > sma(C, 50)) and (sma(C, 50) > sma(C, 200)) and (L <= sma(C, 20) * 1.01) and (C >= sma(C, 20))
Uptrend pullback to the 20-day (entry zone)
rsi_riseEnglish → ruleIs RSI rising, higher than yesterday?
macd_uprulemacdhist(C) > ref(macdhist(C), -1)
MACD histogram rising
rrruleC > swinglow(5) and C < swinghigh(5) and swinghigh(5) - C >= 2 * (C - swinglow(5))
At least 2:1 to the last swing high, stop at the last swing low
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
pullback
Uptrend pullback to the 20-day (entry zone)
0.1064false
rsi_rise
Is RSI rising, higher than yesterday
compiled to rsi(C, 14) > ref(rsi(C, 14), -1)
0.0576false
macd_up
MACD histogram rising
0.0938false
rr
At least 2:1 to the last swing high, stop at the last swing low
0.5233on the line (true)
up_week
Higher in a week
0.57758% · close to even

Actions

Rules on the answers decide what to send.

pullback >= 0.6 and rr >= 0.6→Webhooksales-crm
else→Slacksales-desk
What each action would send 1 of 2 fired · dry run, nothing sent
crmrule false: skipped
no_pitchwould send (dry run)Slack → sales-desk
{
  "text": "AMD (2026-10-30): no pullback pitch today (entry 11%, 2:1 reward 52%)."
}

What it means

For AMD on the session of 2026-10-30: Not true: Uptrend pullback to the 20-day (entry zone); Is RSI rising, higher than yesterday; MACD histogram rising. On the line: At least 2:1 to the last swing high, stop at the last swing low. Forecasts: Higher in a week 58%. Fired: no_pitch (Slack → sales-desk).

A pitch is logged only with its evidence attached; otherwise the desk is told there is nothing to pitch.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AMD"
  },
  "questions": {
    "pullback": {
      "type": "yes_no",
      "ask": "(C > sma(C, 50)) and (sma(C, 50) > sma(C, 200)) and (L <= sma(C, 20) * 1.01) and (C >= sma(C, 20))"
    },
    "rsi_rise": {
      "type": "yes_no",
      "instructions": "Is RSI rising, higher than yesterday?"
    },
    "macd_up": {
      "type": "yes_no",
      "ask": "macdhist(C) > ref(macdhist(C), -1)"
    },
    "rr": {
      "type": "yes_no",
      "ask": "C > swinglow(5) and C < swinghigh(5) and swinghigh(5) - C >= 2 * (C - swinglow(5))"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  },
  "actions": [
    {
      "id": "crm",
      "when": "pullback >= 0.6 and rr >= 0.6",
      "do": "webhook",
      "connection": "sales-crm",
      "body": {
        "ticker": "{{symbol}}",
        "as_of": "{{as_of}}",
        "idea": "pullback_entry_long",
        "evidence": {
          "pullback_entry": "{{pullback}}",
          "risk_reward_2to1": "{{rr}}",
          "rsi_rising": "{{rsi_rise}}",
          "macd_hist_rising": "{{macd_up}}"
        },
        "model_up_week": "{{up_week}}"
      }
    },
    {
      "id": "no_pitch",
      "when": "else",
      "do": "slack",
      "connection": "sales-desk",
      "message": "{{symbol}} ({{as_of}}): no pullback pitch today (entry {{pullback|pct}}, 2:1 reward {{rr|pct}})."
    }
  ],
  "dry_run": true
}
Response JSON (AMD, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "pullback": {
      "yes_no": 0.1064,
      "rule": "(C > sma(C, 50)) and (sma(C, 50) > sma(C, 200)) and (L <= sma(C, 20) * 1.01) and (C >= sma(C, 20))",
      "basis": "rule"
    },
    "rsi_rise": {
      "yes_no": 0.0576,
      "rule": "rsi(C, 14) > ref(rsi(C, 14), -1)",
      "basis": "pattern"
    },
    "macd_up": {
      "yes_no": 0.0938,
      "rule": "macdhist(C) > ref(macdhist(C), -1)",
      "basis": "rule"
    },
    "rr": {
      "yes_no": 0.5233,
      "rule": "C > swinglow(5) and C < swinghigh(5) and swinghigh(5) - C >= 2 * (C - swinglow(5))",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.577
    }
  },
  "context": {
    "symbol": "AMD",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "crm",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "no_pitch",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "sales-desk",
      "preview": {
        "text": "AMD (2026-10-30): no pullback pitch today (entry 11%, 2:1 reward 52%)."
      }
    }
  ]
}

macdhist ref rsi sma swinghigh swinglow

Sell-side sales trader · example 15

Rates color from bond ETFs: TLT, IEF, HYG, LQD

Give equity clients a rates and credit read from the bond ETFs: trend, momentum and volatility.

ora-fin-0.1.14 symbols, one request each5 questions
  1. State4 symbols
  2. Questions5 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"TLT"} then IEF, HYG, LQD, one request each. The server fills in the latest completed session.

Questions

trendEnglish → ruleIs the stock above its 50-day moving average?
rocruleroc(C, 10) > 0
10-day rate of change positive
atr_loEnglish → ruleIs the 14-day ATR less than 2% of the price?
zsrulezscore(C, 20) > 1
Close more than one standard deviation above its 20-day mean
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

Symboltrendrulerocruleatr_lorulezsruleup_weekforecast
TLT0.84820.83960.94630.63770.561
IEF0.85140.88750.94630.7780.483
HYG0.19140.84530.94630.5550.499
LQD0.65520.8010.94630.64730.547

true false not known for rules; forecasts are odds. Hover a column for its question.

What it means

Session of 2026-10-30, 4 symbols: Is the stock above its 50-day moving average: true for TLT, IEF, LQD of 4. 10-day rate of change positive: true for TLT, IEF, HYG, LQD of 4. Is the 14-day ATR less than 2% of the price: true for TLT, IEF, HYG, LQD of 4. Close more than one standard deviation above its 20-day mean: true for TLT, IEF, LQD of 4. Highest odds for “Higher in a week”: TLT at 56%.

Bond trend and momentum frame the macro opener; credit (HYG, LQD) shows whether risk appetite agrees.

Request JSON (TLT; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TLT"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 50-day moving average?"
    },
    "roc": {
      "type": "yes_no",
      "ask": "roc(C, 10) > 0"
    },
    "atr_lo": {
      "type": "yes_no",
      "instructions": "Is the 14-day ATR less than 2% of the price?"
    },
    "zs": {
      "type": "yes_no",
      "ask": "zscore(C, 20) > 1"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (TLT, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.8482,
      "rule": "C > sma(C, 50)",
      "basis": "comparison"
    },
    "roc": {
      "yes_no": 0.8396,
      "rule": "roc(C, 10) > 0",
      "basis": "rule"
    },
    "atr_lo": {
      "yes_no": 0.9463,
      "rule": "atr(14) / C < 0.02",
      "basis": "pattern"
    },
    "zs": {
      "yes_no": 0.6377,
      "rule": "zscore(C, 20) > 1",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.561
    }
  },
  "context": {
    "symbol": "TLT",
    "as_of": "2026-10-30"
  }
}

atr roc sma zscore

Sell-side sales trader · example 16

DIS: did the headline golden cross actually happen?

Clients ask about crosses they read about; check the exact event and the state behind it.

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

State

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

Questions

crossEnglish → ruleDid a golden cross happen today?
deathEnglish → ruleDid a death cross happen today?
setupEnglish → ruleIs the 50-day moving average above the 200-day?
cross50rulecrossup(C, sma(C, 50))
Crossed above the 50-day today
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
cross
Did a golden cross happen today
compiled to (sma(C, 50) > sma(C, 200)) and (ref(sma(C, 50), -1) <= ref(sma(C, 200), -1))
0.093false
death
Did a death cross happen today
compiled to (sma(C, 50) < sma(C, 200)) and (ref(sma(C, 50), -1) >= ref(sma(C, 200), -1))
0.0914false
setup
Is the 50-day moving average above the 200-day
compiled to sma(C, 50) > sma(C, 200)
0.9086true
cross50
Crossed above the 50-day today
0.05false
up_week
Higher in a week
0.56256% · close to even

What it means

For DIS on the session of 2026-10-30: True now: Is the 50-day moving average above the 200-day. Not true: Did a golden cross happen today; Did a death cross happen today; Crossed above the 50-day today. Forecasts: Higher in a week 56%.

The cross is a one-day event; the setup answer says whether the averages are aligned regardless of the headline.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "DIS"
  },
  "questions": {
    "cross": {
      "type": "yes_no",
      "instructions": "Did a golden cross happen today?"
    },
    "death": {
      "type": "yes_no",
      "instructions": "Did a death cross happen today?"
    },
    "setup": {
      "type": "yes_no",
      "instructions": "Is the 50-day moving average above the 200-day?"
    },
    "cross50": {
      "type": "yes_no",
      "ask": "crossup(C, sma(C, 50))"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (DIS, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "cross": {
      "yes_no": 0.093,
      "rule": "(sma(C, 50) > sma(C, 200)) and (ref(sma(C, 50), -1) <= ref(sma(C, 200), -1))",
      "basis": "pattern"
    },
    "death": {
      "yes_no": 0.0914,
      "rule": "(sma(C, 50) < sma(C, 200)) and (ref(sma(C, 50), -1) >= ref(sma(C, 200), -1))",
      "basis": "pattern"
    },
    "setup": {
      "yes_no": 0.9086,
      "rule": "sma(C, 50) > sma(C, 200)",
      "basis": "comparison"
    },
    "cross50": {
      "yes_no": 0.05,
      "rule": "crossup(C, sma(C, 50))",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.562
    }
  },
  "context": {
    "symbol": "DIS",
    "as_of": "2026-10-30"
  }
}

crossup ref sma

Sell-side sales trader · example 17

Weekly strength email: UNH, LLY, ABBV, MRK

Email healthcare clients the names with higher swing highs and lows and RSI above 50.

ora-fin-0.1.14 symbols, one request each4 questions1 action
  1. State4 symbols
  2. Questions4 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

{"symbol":"UNH"} then LLY, ABBV, MRK, one request each. The server fills in the latest completed session.

Questions

hh_hlrule(swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))
Higher swing highs and higher swing lows
rsi50rulersi(C, 14) > 50
RSI above 50
higher_wk_lowrulemin(L, 5) > ref(min(L, 5), -5)
This week's low is above last week's
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symbolhh_hlrulersi50rulehigher_wk_lowrulebeat_spyforecastFired
UNH0.25650.77460.7410.458none
LLY0.92630.94480.7750.518strength
ABBV0.93110.94630.74750.551strength
MRK0.28180.80780.16830.52none

true false not known for rules; forecasts are odds. Hover a column for its question.

Actions

Rules on the answers decide what to send. Each symbol runs its own request, so each one can fire.

hh_hl >= 0.6 and rsi50 >= 0.6→Emailhealthcare-clients
UNH 0 of 1 fired · dry run, nothing sent
LLY 1 of 1 fired · dry run, nothing sent
strengthwould send (dry run)Email → healthcare-clients
{
  "subject": "LLY: higher highs and higher lows (2026-10-30)",
  "text": "LLY is making higher swing highs and lows with RSI over 50. Higher weekly low 78%. Odds of beating SPY over a month 52%."
}
ABBV 1 of 1 fired · dry run, nothing sent
strengthwould send (dry run)Email → healthcare-clients
{
  "subject": "ABBV: higher highs and higher lows (2026-10-30)",
  "text": "ABBV is making higher swing highs and lows with RSI over 50. Higher weekly low 75%. Odds of beating SPY over a month 55%."
}
MRK 0 of 1 fired · dry run, nothing sent

What it means

Session of 2026-10-30, 4 symbols: Higher swing highs and higher swing lows: true for LLY, ABBV of 4. RSI above 50: true for UNH, LLY, ABBV, MRK of 4. This week's low is above last week's: true for UNH, LLY, ABBV of 4. Highest odds for “Beating SPY over a month”: ABBV at 55%. strength fired for LLY, ABBV.

Mail goes only for names whose structure and momentum agree; the rest are left out of the client note.

Request JSON (UNH; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "UNH"
  },
  "questions": {
    "hh_hl": {
      "type": "yes_no",
      "ask": "(swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))"
    },
    "rsi50": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 50"
    },
    "higher_wk_low": {
      "type": "yes_no",
      "ask": "min(L, 5) > ref(min(L, 5), -5)"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  },
  "actions": [
    {
      "id": "strength",
      "when": "hh_hl >= 0.6 and rsi50 >= 0.6",
      "do": "email",
      "connection": "healthcare-clients",
      "subject": "{{symbol}}: higher highs and higher lows ({{as_of}})",
      "message": "{{symbol}} is making higher swing highs and lows with RSI over 50. Higher weekly low {{higher_wk_low|pct}}. Odds of beating SPY over a month {{beat_spy|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (UNH, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "hh_hl": {
      "yes_no": 0.2565,
      "rule": "(swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))",
      "basis": "rule"
    },
    "rsi50": {
      "yes_no": 0.7746,
      "rule": "rsi(C, 14) > 50",
      "basis": "rule"
    },
    "higher_wk_low": {
      "yes_no": 0.741,
      "rule": "min(L, 5) > ref(min(L, 5), -5)",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.458
    }
  },
  "context": {
    "symbol": "UNH",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "strength",
      "fired": false,
      "status": "skipped"
    }
  ]
}

min ref rsi swinghigh swinglow

Sell-side sales trader · example 18

MSTR: did the gap fill, and is the stock still extended?

For a high-beta bitcoin proxy, tell clients whether today's gap filled and how stretched the stock is.

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

State

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

Questions

fillEnglish → ruleDid today's gap up fill?
unfilledruleL > H[-1]
An unfilled gap up
extEnglish → ruleIs price extended more than 2 ATR above its 20-day average?
atr3ruleatr_pct(14) > 3
A typical day moves more than 3%
gap_dn_tomforecastWill it gap down tomorrow?
A gap down tomorrow

Answers

QuestionAnswerReading
fill
Did today's gap up fill
compiled to (O > C[-1] * 1) and (L <= C[-1])
0.0606false
unfilled
An unfilled gap up
0.0537false
ext
Is price extended more than 2 ATR above its 20-day average
compiled to C - sma(C, 20) > 2 * atr(14)
0.0576false
atr3
A typical day moves more than 3%
0.9463true
gap_dn_tom
A gap down tomorrow
0.24925% · unlikely

What it means

For MSTR on the session of 2026-10-30: True now: A typical day moves more than 3%. Not true: Did today's gap up fill; An unfilled gap up; Is price extended more than 2 ATR above its 20-day average. Forecasts: A gap down tomorrow 25%.

Gap and stretch facts are the color; the gap-down-tomorrow forecast is shown as odds, not a prediction to repeat as fact.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSTR"
  },
  "questions": {
    "fill": {
      "type": "yes_no",
      "instructions": "Did today's gap up fill?"
    },
    "unfilled": {
      "type": "yes_no",
      "ask": "L > H[-1]"
    },
    "ext": {
      "type": "yes_no",
      "instructions": "Is price extended more than 2 ATR above its 20-day average?"
    },
    "atr3": {
      "type": "yes_no",
      "ask": "atr_pct(14) > 3"
    },
    "gap_dn_tom": {
      "type": "yes_no",
      "instructions": "Will it gap down tomorrow?"
    }
  }
}
Response JSON (MSTR, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "fill": {
      "yes_no": 0.0606,
      "rule": "(O > C[-1] * 1) and (L <= C[-1])",
      "basis": "pattern"
    },
    "unfilled": {
      "yes_no": 0.0537,
      "rule": "L > H[-1]",
      "basis": "rule"
    },
    "ext": {
      "yes_no": 0.0576,
      "rule": "C - sma(C, 20) > 2 * atr(14)",
      "basis": "pattern"
    },
    "atr3": {
      "yes_no": 0.9463,
      "rule": "atr_pct(14) > 3",
      "basis": "rule"
    },
    "gap_dn_tom": {
      "yes_no": 0.249
    }
  },
  "context": {
    "symbol": "MSTR",
    "as_of": "2026-10-30"
  }
}

atr atr_pct offset sma

Sell-side sales trader · example 19

WFC: where did it close, and who won the day?

Use close location and mid-range measures to describe the session for bank clients.

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

State

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

Questions

above_midruleC > hl2()
Closed above the middle of the day's range
top_qrule(C - L) / (H - L) > 0.75
Closed in the top quarter of the day's range
ohlc4ruleohlc4() > sma(C, 10)
The day's average price above the 10-day average close
greenruleC > O
Closed above its open
up_tomforecastWill the stock be up tomorrow?
Up tomorrow

Answers

QuestionAnswerReading
above_mid
Closed above the middle of the day's range
0.1367false
top_q
Closed in the top quarter of the day's range
0.0759false
ohlc4
The day's average price above the 10-day average close
0.7987true
green
Closed above its open
0.0983false
up_tom
Up tomorrow
0.52252% · close to even

What it means

For WFC on the session of 2026-10-30: True now: The day's average price above the 10-day average close. Not true: Closed above the middle of the day's range; Closed in the top quarter of the day's range; Closed above its open. Forecasts: Up tomorrow 52%.

Closing high in the range with a green candle tells clients buyers finished the day.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "WFC"
  },
  "questions": {
    "above_mid": {
      "type": "yes_no",
      "ask": "C > hl2()"
    },
    "top_q": {
      "type": "yes_no",
      "ask": "(C - L) / (H - L) > 0.75"
    },
    "ohlc4": {
      "type": "yes_no",
      "ask": "ohlc4() > sma(C, 10)"
    },
    "green": {
      "type": "yes_no",
      "ask": "C > O"
    },
    "up_tom": {
      "type": "yes_no",
      "instructions": "Will the stock be up tomorrow?"
    }
  }
}
Response JSON (WFC, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "above_mid": {
      "yes_no": 0.1367,
      "rule": "C > hl2()",
      "basis": "rule"
    },
    "top_q": {
      "yes_no": 0.0759,
      "rule": "(C - L) / (H - L) > 0.75",
      "basis": "rule"
    },
    "ohlc4": {
      "yes_no": 0.7987,
      "rule": "ohlc4() > sma(C, 10)",
      "basis": "rule"
    },
    "green": {
      "yes_no": 0.0983,
      "rule": "C > O",
      "basis": "rule"
    },
    "up_tom": {
      "yes_no": 0.522
    }
  },
  "context": {
    "symbol": "WFC",
    "as_of": "2026-10-30"
  }
}

hl2 ohlc4 sma

Sell-side sales trader · example 20

Gold color: GLD vs GDX miners leverage check

Tell metals clients whether miners are confirming gold's trend or lagging it.

ora-fin-0.1.12 symbols, one request each5 questions1 action
  1. State2 symbols
  2. Questions5 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

{"symbol":"GLD"} then GDX, one request each. The server fills in the latest completed session.

Questions

trendEnglish → ruleIs the stock above its 50-day moving average?
near_highruleC >= 0.98 * max(H, 252)
Within 2% of the 52-week high
log_uprulelog(C / C[-20]) > 0.05
Log return over 20 sessions above 5%
sloperulelinreg(C, 20) > ref(linreg(C, 20), -5)
20-day regression line rising over five sessions
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symboltrendrulenear_highrulelog_uprulesloperulebeat_spyforecastFired
GLD0.08070.05370.08020.18850.544color
GDX0.10250.05370.12550.21550.468color

true false not known for rules; forecasts are odds. Hover a column for its question.

Actions

Rules on the answers decide what to send. Each symbol runs its own request, so each one can fire.

trend >= 0→Slackmetals-sales
GLD 1 of 1 fired · dry run, nothing sent
colorwould send (dry run)Slack → metals-sales
{
  "text": "GLD (2026-10-30): above 50-day 8%, near 52-week high 5%, up over 5% in 20 sessions 8%. Beat SPY over a month 54%."
}
GDX 1 of 1 fired · dry run, nothing sent
colorwould send (dry run)Slack → metals-sales
{
  "text": "GDX (2026-10-30): above 50-day 10%, near 52-week high 5%, up over 5% in 20 sessions 13%. Beat SPY over a month 47%."
}

What it means

Session of 2026-10-30, 2 symbols: Is the stock above its 50-day moving average: true for none of 2. Within 2% of the 52-week high: true for none of 2. Log return over 20 sessions above 5%: true for none of 2. 20-day regression line rising over five sessions: true for none of 2. Highest odds for “Beating SPY over a month”: GLD at 54%. color fired for GLD, GDX.

Miners confirming gold means both lines read the same; a lagging GDX is its own talking point.

Request JSON (GLD; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "GLD"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 50-day moving average?"
    },
    "near_high": {
      "type": "yes_no",
      "ask": "C >= 0.98 * max(H, 252)"
    },
    "log_up": {
      "type": "yes_no",
      "ask": "log(C / C[-20]) > 0.05"
    },
    "slope": {
      "type": "yes_no",
      "ask": "linreg(C, 20) > ref(linreg(C, 20), -5)"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  },
  "actions": [
    {
      "id": "color",
      "when": "trend >= 0",
      "do": "slack",
      "connection": "metals-sales",
      "message": "{{symbol}} ({{as_of}}): above 50-day {{trend|pct}}, near 52-week high {{near_high|pct}}, up over 5% in 20 sessions {{log_up|pct}}. Beat SPY over a month {{beat_spy|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (GLD, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.0807,
      "rule": "C > sma(C, 50)",
      "basis": "comparison"
    },
    "near_high": {
      "yes_no": 0.0537,
      "rule": "C >= 0.98 * max(H, 252)",
      "basis": "rule"
    },
    "log_up": {
      "yes_no": 0.0802,
      "rule": "log(C / C[-20]) > 0.05",
      "basis": "rule"
    },
    "slope": {
      "yes_no": 0.1885,
      "rule": "linreg(C, 20) > ref(linreg(C, 20), -5)",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.544
    }
  },
  "context": {
    "symbol": "GLD",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "color",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "metals-sales",
      "preview": {
        "text": "GLD (2026-10-30): above 50-day 8%, near 52-week high 5%, up over 5% in 20 sessions 8%. Beat SPY over a month 54%."
      }
    }
  ]
}

linreg log max offset ref sma

Information, not investment advice. Rules answer from the latest completed daily session; forecasts are probabilities. Actions ran as dry runs: nothing was sent. More in Sell side: Equity research analyst, Execution trader / desk, Market maker, Prop trading firm, Compliance officer.

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