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 1–10 of 20 · page 1 of 2
Sell-side sales trader · example 1
Morning color on SPY, QQQ, IWM and DIA for clients
Before the open, a quick read on the index ETFs: trend, yesterday's candle, volume and next-week odds, posted to the sales channel.
- ScheduleMon–Fri at 07:45 ET
- State4 symbols
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"SPY"} then QQQ, IWM, DIA, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 50-day moving average? |
up_close | rule | C > C[-1]Closed higher than yesterday |
vol | rule | V > avg(V, 20)Volume above its 20-day average |
outside | rule | outside_bar()outside bar candle: Today's high above yesterday's and low below it. |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Symbol | trendrule | up_closerule | volrule | outsiderule | up_weekforecast | Fired |
|---|---|---|---|---|---|---|
SPY | 0.1128 | 0.0552 | 0.9463 | 0.0614 | 0.598 | color |
QQQ | 0.0653 | 0.0537 | 0.9463 | 0.0537 | 0.561 | color |
IWM | 0.2176 | 0.0707 | 0.4577 | 0.1147 | 0.526 | color |
DIA | 0.2849 | 0.0784 | 0.8961 | 0.2587 | 0.567 | 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→Slacksales-desk{
"text": "SPY (2026-10-30): above 50-day 11%, closed up 6%, volume above average 95%, outside bar 6%. Higher in a week: 60%."
}{
"text": "QQQ (2026-10-30): above 50-day 7%, closed up 5%, volume above average 95%, outside bar 5%. Higher in a week: 56%."
}{
"text": "IWM (2026-10-30): above 50-day 22%, closed up 7%, volume above average 46%, outside bar 11%. Higher in a week: 53%."
}{
"text": "DIA (2026-10-30): above 50-day 28%, closed up 8%, volume above average 90%, outside bar 26%. Higher in a week: 57%."
}What it means
Session of 2026-10-30, 4 symbols: Is the stock above its 50-day moving average: true for none of 4. Closed higher than yesterday: true for none of 4. Volume above its 20-day average: true for SPY, QQQ, DIA of 4. outside bar candle: Today's high above yesterday's and low below it.: true for none of 4. Highest odds for “Higher in a week”: SPY at 60%. color fired for SPY, QQQ, IWM, DIA.
Every index posts one line of color; sales traders lift the lines that fit each client's book.
As a scheduled workflow (Mon–Fri at 07:45 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": "Morning color on SPY, QQQ, IWM and DIA for clients",
"symbols": "SPY QQQ IWM DIA",
"days": [
1,
2,
3,
4,
5
],
"at_time": "07:45",
"model": "ora-fin-0.1.1",
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 50-day moving average?"
},
"up_close": {
"type": "yes_no",
"ask": "C > C[-1]"
},
"vol": {
"type": "yes_no",
"ask": "V > avg(V, 20)"
},
"outside": {
"type": "yes_no",
"ask": "outside_bar()"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "color",
"when": "trend >= 0",
"do": "slack",
"connection": "sales-desk",
"message": "{{symbol}} ({{as_of}}): above 50-day {{trend|pct}}, closed up {{up_close|pct}}, volume above average {{vol|pct}}, outside bar {{outside|pct}}. Higher in a week: {{up_week|pct}}."
}
]
}Request JSON (SPY; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 50-day moving average?"
},
"up_close": {
"type": "yes_no",
"ask": "C > C[-1]"
},
"vol": {
"type": "yes_no",
"ask": "V > avg(V, 20)"
},
"outside": {
"type": "yes_no",
"ask": "outside_bar()"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "color",
"when": "trend >= 0",
"do": "slack",
"connection": "sales-desk",
"message": "{{symbol}} ({{as_of}}): above 50-day {{trend|pct}}, closed up {{up_close|pct}}, volume above average {{vol|pct}}, outside bar {{outside|pct}}. Higher in a week: {{up_week|pct}}."
}
],
"dry_run": true
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.1128,
"rule": "C > sma(C, 50)",
"basis": "comparison"
},
"up_close": {
"yes_no": 0.0552,
"rule": "C > C[-1]",
"basis": "rule"
},
"vol": {
"yes_no": 0.9463,
"rule": "V > avg(V, 20)",
"basis": "rule"
},
"outside": {
"yes_no": 0.0614,
"rule": "outside_bar()",
"basis": "rule"
},
"up_week": {
"yes_no": 0.598
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "color",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "sales-desk",
"preview": {
"text": "SPY (2026-10-30): above 50-day 11%, closed up 6%, volume above average 95%, outside bar 6%. Higher in a week: 60%."
}
}
]
}Sell-side sales trader · example 2
TSLA moved on volume: talking points for clients
When a crowded name moves, give the desk exact talking points: size of move versus ATR, volume and where it closed in the range.
- StateTSLA
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"TSLA"} The server fills in the latest completed session.
Questions
big | rule | abs(C - C[-1]) > 1.5 * atr(14)Today's move was bigger than 1.5 ATR |
vol2x | English → rule | Was today's volume twice its 20-day average? |
top_q | rule | (C - L) / (H - L) > 0.75Closed in the top quarter of the day's range |
bottom_q | rule | (C - L) / (H - L) < 0.25Closed in the bottom quarter of the day's range |
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 |
|---|---|---|
bigToday's move was bigger than 1.5 ATR | 0.054 | false |
vol2xWas today's volume twice its 20-day average compiled to V > 2 * ref(avg(V, 20), -1) | 0.0589 | false |
top_qClosed in the top quarter of the day's range | 0.4656 | on the line (false) |
bottom_qClosed in the bottom quarter of the day's range | 0.0788 | false |
big5A big move either way in 5 days | 0.248 | 25% · unlikely |
Actions
Rules on the answers decide what to send.
big >= 0.6 and vol2x >= 0.6→Slacksales-deskWhat it means
For TSLA on the session of 2026-10-30: Not true: Today's move was bigger than 1.5 ATR; Was today's volume twice its 20-day average; Closed in the bottom quarter of the day's range. On the line: Closed in the top quarter of the day's range. Forecasts: A big move either way in 5 days 25%. No action fired: every rule was false.
Only a big move on heavy volume asks the desk to call; the close-in-range answers say whether buyers or sellers finished the day.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TSLA"
},
"questions": {
"big": {
"type": "yes_no",
"ask": "abs(C - C[-1]) > 1.5 * atr(14)"
},
"vol2x": {
"type": "yes_no",
"instructions": "Was today's volume twice its 20-day average?"
},
"top_q": {
"type": "yes_no",
"ask": "(C - L) / (H - L) > 0.75"
},
"bottom_q": {
"type": "yes_no",
"ask": "(C - L) / (H - L) < 0.25"
},
"big5": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
},
"actions": [
{
"id": "call_clients",
"when": "big >= 0.6 and vol2x >= 0.6",
"do": "slack",
"connection": "sales-desk",
"message": "{{symbol}} ({{as_of}}): move over 1.5 ATR on twice normal volume. Closed top quarter {{top_q|pct}} / bottom quarter {{bottom_q|pct}}. Call the holders."
}
],
"dry_run": true
}Response JSON (TSLA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"big": {
"yes_no": 0.054,
"rule": "abs(C - C[-1]) > 1.5 * atr(14)",
"basis": "rule"
},
"vol2x": {
"yes_no": 0.0589,
"rule": "V > 2 * ref(avg(V, 20), -1)",
"basis": "pattern"
},
"top_q": {
"yes_no": 0.4656,
"rule": "(C - L) / (H - L) > 0.75",
"basis": "rule"
},
"bottom_q": {
"yes_no": 0.0788,
"rule": "(C - L) / (H - L) < 0.25",
"basis": "rule"
},
"big5": {
"yes_no": 0.248
}
},
"context": {
"symbol": "TSLA",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "call_clients",
"fired": false,
"status": "skipped"
}
]
}Sell-side sales trader · example 3
NFLX after earnings: gap, follow-through and the next levels
The morning after a report, tell clients whether the gap held, how the stock closed and where resistance sits.
- StateNFLX
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"NFLX"} The server fills in the latest completed session.
Questions
gap | rule | last_earnings_gap > 0Gapped up after the last report |
faded | rule | O > C[-1] and C < C[-1]Gapped up but closed under yesterday's close |
near_res | rule | C <= swinghigh(5) and C >= 0.97 * swinghigh(5)Within 3% under the last swing high |
above_sw | rule | C > swinghigh(5)Above its last confirmed swing high |
fill | English → rule | Did today's gap up fill? |
Answers
| Question | Answer | Reading |
|---|---|---|
gapGapped up after the last report | 0.0537 | false |
fadedGapped up but closed under yesterday's close | 0.4872 | on the line (false) |
near_resWithin 3% under the last swing high | 0.0967 | false |
above_swAbove its last confirmed swing high | 0.0771 | false |
fillDid today's gap up fill compiled to (O > C[-1] * 1) and (L <= C[-1]) | 0.6813 | true |
What it means
For NFLX on the session of 2026-10-30: True now: Did today's gap up fill. Not true: Gapped up after the last report; Within 3% under the last swing high; Above its last confirmed swing high. On the line: Gapped up but closed under yesterday's close.
A gap that held and cleared the swing high is a strong-color day; a faded gap is a different conversation.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "NFLX"
},
"questions": {
"gap": {
"type": "yes_no",
"ask": "last_earnings_gap > 0"
},
"faded": {
"type": "yes_no",
"ask": "O > C[-1] and C < C[-1]"
},
"near_res": {
"type": "yes_no",
"ask": "C <= swinghigh(5) and C >= 0.97 * swinghigh(5)"
},
"above_sw": {
"type": "yes_no",
"ask": "C > swinghigh(5)"
},
"fill": {
"type": "yes_no",
"instructions": "Did today's gap up fill?"
}
}
}Response JSON (NFLX, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"gap": {
"yes_no": 0.0537,
"rule": "last_earnings_gap > 0",
"basis": "rule"
},
"faded": {
"yes_no": 0.4872,
"rule": "O > C[-1] and C < C[-1]",
"basis": "rule"
},
"near_res": {
"yes_no": 0.0967,
"rule": "C <= swinghigh(5) and C >= 0.97 * swinghigh(5)",
"basis": "rule"
},
"above_sw": {
"yes_no": 0.0771,
"rule": "C > swinghigh(5)",
"basis": "rule"
},
"fill": {
"yes_no": 0.6813,
"rule": "(O > C[-1] * 1) and (L <= C[-1])",
"basis": "pattern"
}
},
"context": {
"symbol": "NFLX",
"as_of": "2026-10-30"
}
}Sell-side sales trader · example 4
Sector rotation color: XLK, XLF, XLE, XLV, XLU, XLP
Which sector funds lead over a quarter and which are breaking down, for the weekly client call.
- State6 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"XLK"} then XLF, XLE, XLV, XLU, XLP, one request each. The server fills in the latest completed session.
Questions
quarter | rule | roc(C, 63) > 10 and C >= 0.95 * max(H, 63)Up more than 10% in a quarter, near the high |
three_m | rule | C > C[-63]Higher than three months ago |
breakdown | rule | C < lowest(L, 20)Closed under the 20-day low |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | quarterrule | three_mrule | breakdownrule | beat_spyforecast |
|---|---|---|---|---|
XLK | 0.0624 | 0.6105 | 0.6706 | 0.498 |
XLF | 0.0785 | 0.3514 | 0.0555 | 0.448 |
XLE | 0.9336 | 0.9463 | 0.0537 | 0.55 |
XLV | 0.8322 | 0.9463 | 0.0537 | 0.534 |
XLU | 0.0549 | 0.2605 | 0.054 | 0.445 |
XLP | 0.0812 | 0.9305 | 0.0537 | 0.498 |
true false not known for rules; forecasts are odds. Hover a column for its question.
What it means
Session of 2026-10-30, 6 symbols: Up more than 10% in a quarter, near the high: true for XLE, XLV of 6. Higher than three months ago: true for XLK, XLE, XLV, XLP of 6. Closed under the 20-day low: true for XLK of 6. Highest odds for “Beating SPY over a month”: XLE at 55%.
Leaders and laggards fall out of the same four questions; the forecast column is shown as odds next to the facts.
Request JSON (XLK; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLK"
},
"questions": {
"quarter": {
"type": "yes_no",
"ask": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)"
},
"three_m": {
"type": "yes_no",
"ask": "C > C[-63]"
},
"breakdown": {
"type": "yes_no",
"ask": "C < lowest(L, 20)"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
}
}Response JSON (XLK, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"quarter": {
"yes_no": 0.0624,
"rule": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)",
"basis": "rule"
},
"three_m": {
"yes_no": 0.6105,
"rule": "C > C[-63]",
"basis": "rule"
},
"breakdown": {
"yes_no": 0.6706,
"rule": "C < lowest(L, 20)",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.498
}
},
"context": {
"symbol": "XLK",
"as_of": "2026-10-30"
}
}Sell-side sales trader · example 5
JPM block interest: is liquidity there today?
Before pitching a block, check average dollar volume, today's volume versus the median and the day's range.
- StateJPM
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"JPM"} The server fills in the latest completed session.
Questions
liquid | rule | avg(C * V, 20) > 100000000Trades more than $100 million a day |
dry | rule | V < 0.6 * avg(V, 20)Volume under 60% of normal |
median | rule | V > median(V, 20)Volume above its 20-day median |
wide | rule | (H - L) > 2 * avg(H - L, 20)Range more than twice the 20-day average range |
spike | forecast | Will volume spike tomorrow? A volume spike tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
liquidTrades more than $100 million a day | 0.9463 | true |
dryVolume under 60% of normal | 0.0949 | false |
medianVolume above its 20-day median | 0.8074 | true |
wideRange more than twice the 20-day average range | 0.2888 | false |
spikeA volume spike tomorrow | 0.02 | 2% · unlikely |
What it means
For JPM on the session of 2026-10-30: True now: Trades more than $100 million a day; Volume above its 20-day median. Not true: Volume under 60% of normal; Range more than twice the 20-day average range. Forecasts: A volume spike tomorrow 2%.
Ample dollar volume and normal participation support working a block today; a dry-up day argues for patience.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "JPM"
},
"questions": {
"liquid": {
"type": "yes_no",
"ask": "avg(C * V, 20) > 100000000"
},
"dry": {
"type": "yes_no",
"ask": "V < 0.6 * avg(V, 20)"
},
"median": {
"type": "yes_no",
"ask": "V > median(V, 20)"
},
"wide": {
"type": "yes_no",
"ask": "(H - L) > 2 * avg(H - L, 20)"
},
"spike": {
"type": "yes_no",
"instructions": "Will volume spike tomorrow?"
}
}
}Response JSON (JPM, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"liquid": {
"yes_no": 0.9463,
"rule": "avg(C * V, 20) > 100000000",
"basis": "rule"
},
"dry": {
"yes_no": 0.0949,
"rule": "V < 0.6 * avg(V, 20)",
"basis": "rule"
},
"median": {
"yes_no": 0.8074,
"rule": "V > median(V, 20)",
"basis": "rule"
},
"wide": {
"yes_no": 0.2888,
"rule": "(H - L) > 2 * avg(H - L, 20)",
"basis": "rule"
},
"spike": {
"yes_no": 0.02
}
},
"context": {
"symbol": "JPM",
"as_of": "2026-10-30"
}
}Sell-side sales trader · example 6
AAPL reversal color: key reversal or engulfing at the lows
Give clients a crisp reversal story only when the candle evidence is there.
- StateAAPL
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"AAPL"} The server fills in the latest completed session.
Questions
key_rev | rule | L < lowest(L, 10) and C > C[-1]New 10-day low, but closed up on the day |
engulf | rule | engulfing_bull()engulfing bull candle: A green body that engulfs yesterday's red body. |
dragonfly | rule | dragonfly_doji()dragonfly doji candle: Doji with a long lower wick (60%+ of the range) and almost no upper wick. |
failed_bd | rule | L < lowest(L, 20) and C > lowest(L, 20)Undercut the 20-day low and closed back above it |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
key_revNew 10-day low, but closed up on the day | 0.127 | false |
engulfengulfing bull candle: A green body that engulfs yesterday's red body. | 0.2066 | false |
dragonflydragonfly doji candle: Doji with a long lower wick (60%+ of the range) and almost no upper wick. | 0.1795 | false |
failed_bdUndercut the 20-day low and closed back above it | 0.2556 | false |
up_weekHigher in a week | 0.59 | 59% · close to even |
Actions
Rules on the answers decide what to send.
key_rev >= 0.6 or engulf >= 0.6 or failed_bd >= 0.6→Slacksales-deskelse→Slacksales-desk{
"text": "AAPL (2026-10-30): no reversal candle today; do not pitch a bounce yet."
}What it means
For AAPL on the session of 2026-10-30: Not true: New 10-day low, but closed up on the day; engulfing bull candle: A green body that engulfs yesterday's red body.; dragonfly doji candle: Doji with a long lower wick (60%+ of the range) and almost no upper wick.; Undercut the 20-day low and closed back above it. Forecasts: Higher in a week 59%. Fired: none (Slack → sales-desk).
The desk pitches a bounce only when a rule is true; the else branch keeps everyone from overselling a quiet tape.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AAPL"
},
"questions": {
"key_rev": {
"type": "yes_no",
"ask": "L < lowest(L, 10) and C > C[-1]"
},
"engulf": {
"type": "yes_no",
"ask": "engulfing_bull()"
},
"dragonfly": {
"type": "yes_no",
"ask": "dragonfly_doji()"
},
"failed_bd": {
"type": "yes_no",
"ask": "L < lowest(L, 20) and C > lowest(L, 20)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "reversal",
"when": "key_rev >= 0.6 or engulf >= 0.6 or failed_bd >= 0.6",
"do": "slack",
"connection": "sales-desk",
"message": "{{symbol}} ({{as_of}}): reversal evidence at the lows (key reversal {{key_rev|pct}}, engulfing {{engulf|pct}}, failed breakdown {{failed_bd|pct}}). Higher in a week {{up_week|pct}}."
},
{
"id": "none",
"when": "else",
"do": "slack",
"connection": "sales-desk",
"message": "{{symbol}} ({{as_of}}): no reversal candle today; do not pitch a bounce yet."
}
],
"dry_run": true
}Response JSON (AAPL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"key_rev": {
"yes_no": 0.127,
"rule": "L < lowest(L, 10) and C > C[-1]",
"basis": "rule"
},
"engulf": {
"yes_no": 0.2066,
"rule": "engulfing_bull()",
"basis": "rule"
},
"dragonfly": {
"yes_no": 0.1795,
"rule": "dragonfly_doji()",
"basis": "rule"
},
"failed_bd": {
"yes_no": 0.2556,
"rule": "L < lowest(L, 20) and C > lowest(L, 20)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.59
}
},
"context": {
"symbol": "AAPL",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "reversal",
"fired": false,
"status": "skipped"
},
{
"id": "none",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "sales-desk",
"preview": {
"text": "AAPL (2026-10-30): no reversal candle today; do not pitch a bounce yet."
}
}
]
}Sell-side sales trader · example 7
Semis client email: NVDA, AMD, MU, SMH breakout check
Send a semiconductor client list a short email per name breaking out on volume.
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"NVDA"} then AMD, MU, SMH, one request each. The server fills in the latest completed session.
Questions
bo | rule | C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)20-day breakout on 1.5× volume |
donchian | rule | C > highest(C, 55)55-day closing breakout |
near_high | rule | C >= 0.98 * max(H, 252)Within 2% of the 52-week high |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
Answers
| Symbol | borule | donchianrule | near_highrule | rally5forecast | Fired |
|---|---|---|---|---|---|
NVDA | 0.0537 | 0.0537 | 0.0537 | 0.616 | none |
AMD | 0.0537 | 0.0537 | 0.0537 | 0.836 | none |
MU | 0.0543 | 0.0685 | 0.0537 | 0.855 | none |
SMH | 0.0537 | 0.0567 | 0.0537 | 0.728 | 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.
bo >= 0.6→Emailsemis-clientsWhat it means
Session of 2026-10-30, 4 symbols: 20-day breakout on 1.5× volume: true for none of 4. 55-day closing breakout: true for none of 4. Within 2% of the 52-week high: true for none of 4. Highest odds for “A 5% rally within a month”: MU at 86%. client_email fired for none.
Only breakouts generate client mail; everything else stays off the client's inbox.
Request JSON (NVDA; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "NVDA"
},
"questions": {
"bo": {
"type": "yes_no",
"ask": "C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)"
},
"donchian": {
"type": "yes_no",
"ask": "C > highest(C, 55)"
},
"near_high": {
"type": "yes_no",
"ask": "C >= 0.98 * max(H, 252)"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "client_email",
"when": "bo >= 0.6",
"do": "email",
"connection": "semis-clients",
"subject": "{{symbol}} breaking out on volume ({{as_of}})",
"message": "{{symbol}} closed at a 20-day high on 1.5x volume. 55-day breakout {{donchian|pct}}, near the 52-week high {{near_high|pct}}. 5% rally odds within a month: {{rally5|pct}}."
}
],
"dry_run": true
}Response JSON (NVDA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"bo": {
"yes_no": 0.0537,
"rule": "C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"donchian": {
"yes_no": 0.0537,
"rule": "C > highest(C, 55)",
"basis": "rule"
},
"near_high": {
"yes_no": 0.0537,
"rule": "C >= 0.98 * max(H, 252)",
"basis": "rule"
},
"rally5": {
"yes_no": 0.616
}
},
"context": {
"symbol": "NVDA",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "client_email",
"fired": false,
"status": "skipped"
}
]
}Sell-side sales trader · example 8
T and VZ: ex-dates and yield for income clients
Tell income-focused accounts which telecoms go ex soon and whether the payout is intact.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"T"} then VZ, one request each. The server fills in the latest completed session.
Questions
ex_soon | rule | days_to_ex_div <= 30Goes ex-dividend within 30 days |
yield3 | rule | div_yield_ttm > 3Yield above 3% |
no_cut | rule | cut_last < 0.5Did not cut its last dividend |
trend | rule | div_yield_ttm > 2 and C > sma(C, 200)Yield above 2% and above the 200-day |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | ex_soonrule | yield3rule | no_cutrule | trendrule | drop5forecast |
|---|---|---|---|---|---|
T | 0.0537 | 0.9463 | 0.8591 | 0.0674 | 0.463 |
VZ | 0.0537 | 0.9463 | 0.8591 | 0.3448 | 0.421 |
true false not known for rules; forecasts are odds. Hover a column for its question.
What it means
Session of 2026-10-30, 2 symbols: Goes ex-dividend within 30 days: true for none of 2. Yield above 3%: true for T, VZ of 2. Did not cut its last dividend: true for T, VZ of 2. Yield above 2% and above the 200-day: true for none of 2. Highest odds for “A 5% drawdown within a month”: T at 46%.
Ex-date and yield facts form the pitch; the drawdown odds are the risk line clients ask for.
Request JSON (T; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "T"
},
"questions": {
"ex_soon": {
"type": "yes_no",
"ask": "days_to_ex_div <= 30"
},
"yield3": {
"type": "yes_no",
"ask": "div_yield_ttm > 3"
},
"no_cut": {
"type": "yes_no",
"ask": "cut_last < 0.5"
},
"trend": {
"type": "yes_no",
"ask": "div_yield_ttm > 2 and C > sma(C, 200)"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
}
}Response JSON (T, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"ex_soon": {
"yes_no": 0.0537,
"rule": "days_to_ex_div <= 30",
"basis": "rule"
},
"yield3": {
"yes_no": 0.9463,
"rule": "div_yield_ttm > 3",
"basis": "rule"
},
"no_cut": {
"yes_no": 0.8591,
"rule": "cut_last < 0.5",
"basis": "rule"
},
"trend": {
"yes_no": 0.0674,
"rule": "div_yield_ttm > 2 and C > sma(C, 200)",
"basis": "rule"
},
"drop5": {
"yes_no": 0.463
}
},
"context": {
"symbol": "T",
"as_of": "2026-10-30"
}
}Sell-side sales trader · example 9
Oil color to Microsoft Teams: USO, XLE, XOP
Post a one-line oil color to the macro sales channel in Teams via an incoming webhook.
- State3 symbols
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"USO"} then XLE, XOP, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
hv | rule | std(log(C / C[-1]), 20) * sqrt(252) > 0.4Annualized 20-day volatility above 40% |
gap_dn | rule | O < C[-1] * 0.99Opened more than 1% below yesterday's close |
rsi50 | rule | rsi(C, 14) > 50RSI above 50 |
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
| Symbol | trendrule | hvrule | gap_dnrule | rsi50rule | big5forecast | Fired |
|---|---|---|---|---|---|---|
USO | 0.9434 | 0.1075 | 0.1203 | 0.9368 | 0.403 | teams |
XLE | 0.9432 | 0.0537 | 0.0587 | 0.9318 | 0.398 | teams |
XOP | 0.9204 | 0.0537 | 0.0714 | 0.8999 | 0.347 | teams |
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→Webhookteams-macro-sales{
"text": "USO (2026-10-30): above 50-day 94%, 20-day vol over 40% 11%, gapped down 1% 12%, RSI over 50 94%. Big move in 5 days: 40%."
}{
"text": "XLE (2026-10-30): above 50-day 94%, 20-day vol over 40% 5%, gapped down 1% 6%, RSI over 50 93%. Big move in 5 days: 40%."
}{
"text": "XOP (2026-10-30): above 50-day 92%, 20-day vol over 40% 5%, gapped down 1% 7%, RSI over 50 90%. Big move in 5 days: 35%."
}What it means
Session of 2026-10-30, 3 symbols: Above the 50-day average: true for USO, XLE, XOP of 3. Annualized 20-day volatility above 40%: true for none of 3. Opened more than 1% below yesterday's close: true for none of 3. RSI above 50: true for USO, XLE, XOP of 3. Highest odds for “A big move either way in 5 days”: USO at 40%. teams fired for USO, XLE, XOP.
Teams expects a text field, so the body is just the color line; every symbol posts.
Request JSON (USO; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "USO"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"hv": {
"type": "yes_no",
"ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4"
},
"gap_dn": {
"type": "yes_no",
"ask": "O < C[-1] * 0.99"
},
"rsi50": {
"type": "yes_no",
"ask": "rsi(C, 14) > 50"
},
"big5": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
},
"actions": [
{
"id": "teams",
"when": "trend >= 0",
"do": "webhook",
"connection": "teams-macro-sales",
"body": {
"text": "{{symbol}} ({{as_of}}): above 50-day {{trend|pct}}, 20-day vol over 40% {{hv|pct}}, gapped down 1% {{gap_dn|pct}}, RSI over 50 {{rsi50|pct}}. Big move in 5 days: {{big5|pct}}."
}
}
],
"dry_run": true
}Response JSON (USO, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.9434,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"hv": {
"yes_no": 0.1075,
"rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4",
"basis": "rule"
},
"gap_dn": {
"yes_no": 0.1203,
"rule": "O < C[-1] * 0.99",
"basis": "rule"
},
"rsi50": {
"yes_no": 0.9368,
"rule": "rsi(C, 14) > 50",
"basis": "rule"
},
"big5": {
"yes_no": 0.403
}
},
"context": {
"symbol": "USO",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "teams",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "teams-macro-sales",
"preview": {
"body": {
"text": "USO (2026-10-30): above 50-day 94%, 20-day vol over 40% 11%, gapped down 1% 12%, RSI over 50 94%. Big move in 5 days: 40%."
}
}
}
]
}Sell-side sales trader · example 10
BA: selling pressure color from volume and closes
Without short-interest data, describe selling pressure from the tape: down days on volume, OBV and lower closes.
- StateBA
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"BA"} The server fills in the latest completed session.
Questions
down_vol | rule | C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)Down on heavy volume |
obv_down | rule | obv() < ref(obv(), -20)On-balance volume lower than 20 sessions ago |
lower3 | English → rule | Has the stock closed lower 3 days in a row? |
sign_down | rule | sum(sign(C - C[-1]), 10) < -2More down closes than up closes, by over two, in ten sessions |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
down_volDown on heavy volume | 0.1406 | false |
obv_downOn-balance volume lower than 20 sessions ago | 0.9463 | true |
lower3Has the stock closed lower 3 days in a row compiled to (C < C[-1]) and (C[-1] < C[-2]) and (C[-2] < C[-3]) | 0.107 | false |
sign_downMore down closes than up closes, by over two, in ten sessions | 0.45 | on the line (false) |
drop5A 5% drawdown within a month | 0.426 | 43% · close to even |
What it means
For BA on the session of 2026-10-30: True now: On-balance volume lower than 20 sessions ago. Not true: Down on heavy volume; Has the stock closed lower 3 days in a row. On the line: More down closes than up closes, by over two, in ten sessions. Forecasts: A 5% drawdown within a month 43%.
Several pressure rules true is a fair description of persistent selling; the color never claims to know positioning.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "BA"
},
"questions": {
"down_vol": {
"type": "yes_no",
"ask": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)"
},
"obv_down": {
"type": "yes_no",
"ask": "obv() < ref(obv(), -20)"
},
"lower3": {
"type": "yes_no",
"instructions": "Has the stock closed lower 3 days in a row?"
},
"sign_down": {
"type": "yes_no",
"ask": "sum(sign(C - C[-1]), 10) < -2"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
}
}Response JSON (BA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"down_vol": {
"yes_no": 0.1406,
"rule": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"obv_down": {
"yes_no": 0.9463,
"rule": "obv() < ref(obv(), -20)",
"basis": "rule"
},
"lower3": {
"yes_no": 0.107,
"rule": "(C < C[-1]) and (C[-1] < C[-2]) and (C[-2] < C[-3])",
"basis": "pattern"
},
"sign_down": {
"yes_no": 0.45,
"rule": "sum(sign(C - C[-1]), 10) < -2",
"basis": "rule"
},
"drop5": {
"yes_no": 0.426
}
},
"context": {
"symbol": "BA",
"as_of": "2026-10-30"
}
}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.