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.
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.
- StateMSFT
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"MSFT"} The server fills in the latest completed session.
Questions
soon | English → rule | Is earnings in the next 14 days? |
amc | English → rule | Does the stock report after the close next time? |
big_react | English → rule | Was the last earnings reaction bigger than 5%? |
trend | rule | days_to_earnings <= 10 and C > sma(C, 50)Earnings within 10 days, above the 50-day |
big5 | forecast | Will there be a big move in either direction in the next 5 days? A big move either way in 5 days |
Answers
| Question | Answer | Reading |
|---|---|---|
soonIs earnings in the next 14 days compiled to days_to_earnings <= 14 | 0.0537 | false |
amcDoes the stock report after the close next time compiled to next_report_amc > 0.5 | 0.8591 | true |
big_reactWas the last earnings reaction bigger than 5% compiled to abs(last_earnings_move) > 5 | 0.0537 | false |
trendEarnings within 10 days, above the 50-day | 0.0537 | false |
big5A big move either way in 5 days | 0.397 | 40% · 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"
}
}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.
- StateQQQ
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"QQQ"} The server fills in the latest completed session.
Questions
trend_day | rule | (O <= L + 0.2 * (H - L)) and (C >= H - 0.2 * (H - L))A trend day up: opened near the low, closed near the high |
inside | rule | H < H[-1] and L > L[-1]An inside day |
nr7 | rule | (H - L) < lowest(H - L, 6)Narrowest range of the last seven sessions (NR7) |
wide | rule | (H - L) > 2 * avg(H - L, 20)Range more than twice the 20-day average range |
tr_atr | rule | tr() > 1.5 * ref(atr(14), -1)True range 1.5× yesterday's ATR |
up_tom | forecast | Will the stock be up tomorrow? Up tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
trend_dayA trend day up: opened near the low, closed near the high | 0.0537 | false |
insideAn inside day | 0.0537 | false |
nr7Narrowest range of the last seven sessions (NR7) | 0.0555 | false |
wideRange more than twice the 20-day average range | 0.1755 | false |
tr_atrTrue range 1.5× yesterday's ATR | 0.9434 | true |
up_tomUp tomorrow | 0.533 | 53% · 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"
}
}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.
- ScheduleFri at 16:30 ET
- State5 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"NKE"} then SBUX, MCD, HD, LOW, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
drawdown | rule | C < 0.8 * max(H, 252)More than 20% off the 52-week high |
earn | rule | days_to_earnings <= 10Reports earnings within 10 days |
beat | English → rule | Did the stock beat EPS estimates last quarter? |
Answers
| Symbol | trendrule | drawdownrule | earnrule | beatrule |
|---|---|---|---|---|
NKE | 0.0537 | 0.9463 | 0.0537 | 0.8591 |
SBUX | 0.8058 | 0.0545 | 0.0537 | 0.8591 |
MCD | 0.0657 | 0.8175 | 0.9187 | 0.8591 |
HD | 0.4455 | 0.1282 | 0.0563 | 0.8591 |
LOW | 0.1012 | 0.9247 | 0.0537 | 0.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"
}
}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.
- StateAMD
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"AMD"} The server fills in the latest completed session.
Questions
pullback | rule | (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_rise | English → rule | Is RSI rising, higher than yesterday? |
macd_up | rule | macdhist(C) > ref(macdhist(C), -1)MACD histogram rising |
rr | rule | C > 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_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
pullbackUptrend pullback to the 20-day (entry zone) | 0.1064 | false |
rsi_riseIs RSI rising, higher than yesterday compiled to rsi(C, 14) > ref(rsi(C, 14), -1) | 0.0576 | false |
macd_upMACD histogram rising | 0.0938 | false |
rrAt least 2:1 to the last swing high, stop at the last swing low | 0.5233 | on the line (true) |
up_weekHigher in a week | 0.577 | 58% · close to even |
Actions
Rules on the answers decide what to send.
pullback >= 0.6 and rr >= 0.6→Webhooksales-crmelse→Slacksales-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%)."
}
}
]
}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.
- State4 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"TLT"} then IEF, HYG, LQD, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 50-day moving average? |
roc | rule | roc(C, 10) > 010-day rate of change positive |
atr_lo | English → rule | Is the 14-day ATR less than 2% of the price? |
zs | rule | zscore(C, 20) > 1Close more than one standard deviation above its 20-day mean |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Symbol | trendrule | rocrule | atr_lorule | zsrule | up_weekforecast |
|---|---|---|---|---|---|
TLT | 0.8482 | 0.8396 | 0.9463 | 0.6377 | 0.561 |
IEF | 0.8514 | 0.8875 | 0.9463 | 0.778 | 0.483 |
HYG | 0.1914 | 0.8453 | 0.9463 | 0.555 | 0.499 |
LQD | 0.6552 | 0.801 | 0.9463 | 0.6473 | 0.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"
}
}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.
- StateDIS
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"DIS"} The server fills in the latest completed session.
Questions
cross | English → rule | Did a golden cross happen today? |
death | English → rule | Did a death cross happen today? |
setup | English → rule | Is the 50-day moving average above the 200-day? |
cross50 | rule | crossup(C, sma(C, 50))Crossed above the 50-day today |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
crossDid 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.093 | false |
deathDid 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.0914 | false |
setupIs the 50-day moving average above the 200-day compiled to sma(C, 50) > sma(C, 200) | 0.9086 | true |
cross50Crossed above the 50-day today | 0.05 | false |
up_weekHigher in a week | 0.562 | 56% · 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"
}
}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.
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"UNH"} then LLY, ABBV, MRK, one request each. The server fills in the latest completed session.
Questions
hh_hl | rule | (swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))Higher swing highs and higher swing lows |
rsi50 | rule | rsi(C, 14) > 50RSI above 50 |
higher_wk_low | rule | min(L, 5) > ref(min(L, 5), -5)This week's low is above last week's |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | hh_hlrule | rsi50rule | higher_wk_lowrule | beat_spyforecast | Fired |
|---|---|---|---|---|---|
UNH | 0.2565 | 0.7746 | 0.741 | 0.458 | none |
LLY | 0.9263 | 0.9448 | 0.775 | 0.518 | strength |
ABBV | 0.9311 | 0.9463 | 0.7475 | 0.551 | strength |
MRK | 0.2818 | 0.8078 | 0.1683 | 0.52 | none |
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{
"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%."
}{
"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%."
}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"
}
]
}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.
- StateMSTR
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"MSTR"} The server fills in the latest completed session.
Questions
fill | English → rule | Did today's gap up fill? |
unfilled | rule | L > H[-1]An unfilled gap up |
ext | English → rule | Is price extended more than 2 ATR above its 20-day average? |
atr3 | rule | atr_pct(14) > 3A typical day moves more than 3% |
gap_dn_tom | forecast | Will it gap down tomorrow? A gap down tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
fillDid today's gap up fill compiled to (O > C[-1] * 1) and (L <= C[-1]) | 0.0606 | false |
unfilledAn unfilled gap up | 0.0537 | false |
extIs price extended more than 2 ATR above its 20-day average compiled to C - sma(C, 20) > 2 * atr(14) | 0.0576 | false |
atr3A typical day moves more than 3% | 0.9463 | true |
gap_dn_tomA gap down tomorrow | 0.249 | 25% · 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"
}
}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.
- StateWFC
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"WFC"} The server fills in the latest completed session.
Questions
above_mid | rule | C > hl2()Closed above the middle of the day's range |
top_q | rule | (C - L) / (H - L) > 0.75Closed in the top quarter of the day's range |
ohlc4 | rule | ohlc4() > sma(C, 10)The day's average price above the 10-day average close |
green | rule | C > OClosed above its open |
up_tom | forecast | Will the stock be up tomorrow? Up tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
above_midClosed above the middle of the day's range | 0.1367 | false |
top_qClosed in the top quarter of the day's range | 0.0759 | false |
ohlc4The day's average price above the 10-day average close | 0.7987 | true |
greenClosed above its open | 0.0983 | false |
up_tomUp tomorrow | 0.522 | 52% · 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"
}
}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.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"GLD"} then GDX, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 50-day moving average? |
near_high | rule | C >= 0.98 * max(H, 252)Within 2% of the 52-week high |
log_up | rule | log(C / C[-20]) > 0.05Log return over 20 sessions above 5% |
slope | rule | linreg(C, 20) > ref(linreg(C, 20), -5)20-day regression line rising over five sessions |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | trendrule | near_highrule | log_uprule | sloperule | beat_spyforecast | Fired |
|---|---|---|---|---|---|---|
GLD | 0.0807 | 0.0537 | 0.0802 | 0.1885 | 0.544 | color |
GDX | 0.1025 | 0.0537 | 0.1255 | 0.2155 | 0.468 | color |
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{
"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%."
}{
"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%."
}
}
]
}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.