Use cases · Builders
Broker app: 20 ways to use Ora
Pre-trade warnings, event badges and smart alerts for millions of self-directed accounts. Each example is a complete, runnable request with the real answers it returned (37 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 (36)
offset 8sma 7atr 5log 3sqrt 3std 3max 3ref 3days_to_earnings 2avg 2highest 2lowest 2days_since_split 2days_to_ex_div 2days_to_split 2rsi 2abs 1last_earnings_move 1next_report_amc 1atr_pct 1tr 1gap_down 1gap_up 1div_yield_ttm 1raised_last 1years_of_growth 1days_since_reverse_split 1reverse_split_last 1adx 1ema 1bbupper 1macd 1hanging_man 1shooting_star 1three_black_crows 1inside_bar 1
Examples 11–20 of 20 · page 2 of 2
Broker app · example 11
Trend chip on every quote page: up, down or sideways (DIS)
Show a single trend chip using moving averages and ADX, computed the same way for every stock.
- StateDIS
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"DIS"} The server fills in the latest completed session.
Questions
up | rule | C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)Stacked averages: close > 20 EMA > 50 > 200 |
down | rule | C < ema(C, 20) and ema(C, 20) < sma(C, 50) and sma(C, 50) < sma(C, 200)averages stacked downward: price under the 20-day EMA, under the 50-day, under the 200-day |
trending | rule | adx(14) > 25Trending (ADX above 25) |
rising | rule | sma(C, 50) > ref(sma(C, 50), -10)The 50-day average is rising |
Answers
| Question | Answer | Reading |
|---|---|---|
upStacked averages: close > 20 EMA > 50 > 200 | 0.7817 | true |
downaverages stacked downward: price under the 20-day EMA, under the 50-day, under the 200-day | 0.0914 | false |
trendingTrending (ADX above 25) | 0.7349 | true |
risingThe 50-day average is rising | 0.9309 | true |
What it means
For DIS on the session of 2026-10-30: True now: Stacked averages: close > 20 EMA > 50 > 200; Trending (ADX above 25); The 50-day average is rising. Not true: averages stacked downward: price under the 20-day EMA, under the 50-day, under the 200-day.
The chip is up when the up stack is true, down when the down stack is true, and sideways otherwise; ADX adds 'strong' when it is true.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "DIS"
},
"questions": {
"up": {
"type": "yes_no",
"ask": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)"
},
"down": {
"type": "yes_no",
"ask": "C < ema(C, 20) and ema(C, 20) < sma(C, 50) and sma(C, 50) < sma(C, 200)"
},
"trending": {
"type": "yes_no",
"ask": "adx(14) > 25"
},
"rising": {
"type": "yes_no",
"ask": "sma(C, 50) > ref(sma(C, 50), -10)"
}
}
}Response JSON (DIS, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"up": {
"yes_no": 0.7817,
"rule": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)",
"basis": "rule"
},
"down": {
"yes_no": 0.0914,
"rule": "C < ema(C, 20) and ema(C, 20) < sma(C, 50) and sma(C, 50) < sma(C, 200)",
"basis": "rule"
},
"trending": {
"yes_no": 0.7349,
"rule": "adx(14) > 25",
"basis": "rule"
},
"rising": {
"yes_no": 0.9309,
"rule": "sma(C, 50) > ref(sma(C, 50), -10)",
"basis": "rule"
}
},
"context": {
"symbol": "DIS",
"as_of": "2026-10-30"
}
}Broker app · example 12
Short-sale ticket context: is TSLA stretched to the upside?
Give customers opening a short a quick context line: how stretched the stock is and how likely a squeeze-sized rally is.
- StateTSLA
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"TSLA"} The server fills in the latest completed session.
Questions
stretched | rule | C > sma(C, 20) + 2 * atr(14)Stretched: more than 2 ATR above the 20-day |
ob | English → rule | Is the stock overbought on RSI, above 70? |
upper | English → rule | Did the stock close above the upper Bollinger Band? |
rally10 | forecast | Will it rally at least 10% at some point in the next month? A 10% rally within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
stretchedStretched: more than 2 ATR above the 20-day | 0.2042 | false |
obIs the stock overbought on RSI, above 70 compiled to rsi(C, 14) > 70 | 0.0873 | false |
upperDid the stock close above the upper Bollinger Band compiled to C > bbupper(C, 20) | 0.2572 | false |
rally10A 10% rally within a month | 0.687 | 69% · likely |
What it means
For TSLA on the session of 2026-10-30: Not true: Stretched: more than 2 ATR above the 20-day; Is the stock overbought on RSI, above 70; Did the stock close above the upper Bollinger Band. Forecasts: A 10% rally within a month 69%.
The context line shows the stretch facts and the rally odds side by side; shorting stays the customer's decision.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TSLA"
},
"questions": {
"stretched": {
"type": "yes_no",
"ask": "C > sma(C, 20) + 2 * atr(14)"
},
"ob": {
"type": "yes_no",
"instructions": "Is the stock overbought on RSI, above 70?"
},
"upper": {
"type": "yes_no",
"instructions": "Did the stock close above the upper Bollinger Band?"
},
"rally10": {
"type": "yes_no",
"instructions": "Will it rally at least 10% at some point in the next month?"
}
}
}Response JSON (TSLA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"stretched": {
"yes_no": 0.2042,
"rule": "C > sma(C, 20) + 2 * atr(14)",
"basis": "rule"
},
"ob": {
"yes_no": 0.0873,
"rule": "rsi(C, 14) > 70",
"basis": "pattern"
},
"upper": {
"yes_no": 0.2572,
"rule": "C > bbupper(C, 20)",
"basis": "comparison"
},
"rally10": {
"yes_no": 0.687
}
},
"context": {
"symbol": "TSLA",
"as_of": "2026-10-30"
}
}Broker app · example 13
Explain why SPY and VOO move together in a customer's portfolio
Answer identical questions for two near-identical funds to show customers the overlap.
- State2 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"SPY"} then VOO, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
rsi | rule | rsi(C, 14) > 50RSI above 50 |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Symbol | trendrule | rsirule | drop5forecast | up_weekforecast |
|---|---|---|---|---|
SPY | 0.1128 | 0.0919 | 0.203 | 0.598 |
VOO | 0.1149 | 0.0938 | 0.194 | 0.589 |
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: Above the 50-day average: true for none of 2. RSI above 50: true for none of 2. Highest odds for “A 5% drawdown within a month”: SPY at 20%.
Two funds tracking the same index give nearly identical answers, which makes the overlap visible without a chart.
Request JSON (SPY; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"rsi": {
"type": "yes_no",
"ask": "rsi(C, 14) > 50"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.1128,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"rsi": {
"yes_no": 0.0919,
"rule": "rsi(C, 14) > 50",
"basis": "rule"
},
"drop5": {
"yes_no": 0.203
},
"up_week": {
"yes_no": 0.598
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
}
}Broker app · example 14
Weekly statement insert for customers holding sector funds
Each Friday, add one line per sector fund to the weekly statement email: trend and momentum facts.
- ScheduleFri at 18:00 ET
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"XLK"} then XLF, XLE, XLV, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
month | English → rule | Is the stock up over the last month? |
macd | English → rule | Is MACD above zero? |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | trendrule | monthrule | macdrule | beat_spyforecast | Fired |
|---|---|---|---|---|---|
XLK | 0.92 | 0.0654 | 0.1146 | 0.498 | insert |
XLF | 0.919 | 0.9009 | 0.7625 | 0.448 | insert |
XLE | 0.9463 | 0.9419 | 0.943 | 0.55 | insert |
XLV | 0.9463 | 0.9454 | 0.9439 | 0.534 | insert |
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→Emailstatements{
"subject": "Your sector funds this week",
"text": "XLK (2026-10-30): above its 200-day 92%, up over the month 7%, MACD above zero 11%. Information only, not a recommendation."
}{
"subject": "Your sector funds this week",
"text": "XLF (2026-10-30): above its 200-day 92%, up over the month 90%, MACD above zero 76%. Information only, not a recommendation."
}{
"subject": "Your sector funds this week",
"text": "XLE (2026-10-30): above its 200-day 95%, up over the month 94%, MACD above zero 94%. Information only, not a recommendation."
}{
"subject": "Your sector funds this week",
"text": "XLV (2026-10-30): above its 200-day 95%, up over the month 95%, MACD above zero 94%. Information only, not a recommendation."
}What it means
Session of 2026-10-30, 4 symbols: Is the stock above its 200-day moving average: true for XLK, XLF, XLE, XLV of 4. Is the stock up over the last month: true for XLF, XLE, XLV of 4. Is MACD above zero: true for XLF, XLE, XLV of 4. Highest odds for “Beating SPY over a month”: XLE at 55%. insert fired for XLK, XLF, XLE, XLV.
The statement shows facts with a clear 'information only' line; the forecast is held back for the app, where odds are explained.
As a scheduled workflow (Fri at 18:00 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": "Weekly statement insert for customers holding sector funds",
"symbols": "XLK XLF XLE XLV",
"days": [
5
],
"at_time": "18:00",
"model": "ora-fin-0.1.1",
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"month": {
"type": "yes_no",
"instructions": "Is the stock up over the last month?"
},
"macd": {
"type": "yes_no",
"instructions": "Is MACD above zero?"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
},
"actions": [
{
"id": "insert",
"when": "trend >= 0",
"do": "email",
"connection": "statements",
"subject": "Your sector funds this week",
"message": "{{symbol}} ({{as_of}}): above its 200-day {{trend|pct}}, up over the month {{month|pct}}, MACD above zero {{macd|pct}}. Information only, not a recommendation."
}
]
}Request JSON (XLK; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLK"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"month": {
"type": "yes_no",
"instructions": "Is the stock up over the last month?"
},
"macd": {
"type": "yes_no",
"instructions": "Is MACD above zero?"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
},
"actions": [
{
"id": "insert",
"when": "trend >= 0",
"do": "email",
"connection": "statements",
"subject": "Your sector funds this week",
"message": "{{symbol}} ({{as_of}}): above its 200-day {{trend|pct}}, up over the month {{month|pct}}, MACD above zero {{macd|pct}}. Information only, not a recommendation."
}
],
"dry_run": true
}Response JSON (XLK, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.92,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"month": {
"yes_no": 0.0654,
"rule": "C > C[-21]",
"basis": "pattern"
},
"macd": {
"yes_no": 0.1146,
"rule": "macd(C) > 0",
"basis": "pattern"
},
"beat_spy": {
"yes_no": 0.498
}
},
"context": {
"symbol": "XLK",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "insert",
"fired": true,
"status": "dry_run",
"do": "email",
"connection": "statements",
"preview": {
"subject": "Your sector funds this week",
"text": "XLK (2026-10-30): above its 200-day 92%, up over the month 7%, MACD above zero 11%. Information only, not a recommendation."
}
}
]
}Broker app · example 15
Pattern alerts for chart users: shooting star and hanging man on AAPL
Let chart users subscribe to bearish candle alerts on their holdings.
- StateAAPL
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"AAPL"} The server fills in the latest completed session.
Questions
star | rule | shooting_star()shooting star candle: Upper wick at least twice the body, lower wick at most 10% of the range, after a five-bar rise. |
hanging | rule | hanging_man()hanging man candle: Hammer shape, closing above the close five bars back. |
star_high | rule | shooting_star() and H > highest(H, 20)Shooting star at a 20-day high |
crows | rule | three_black_crows()three black crows candle: Three red bars, each closing lower and opening inside the previous body. |
Answers
| Question | Answer | Reading |
|---|---|---|
starshooting star candle: Upper wick at least twice the body, lower wick at most 10% of the range, after a five-bar rise. | 0.0537 | false |
hanginghanging man candle: Hammer shape, closing above the close five bars back. | 0.1795 | false |
star_highShooting star at a 20-day high | 0.0537 | false |
crowsthree black crows candle: Three red bars, each closing lower and opening inside the previous body. | 0.1039 | false |
Actions
Rules on the answers decide what to send.
star >= 0.6 or hanging >= 0.6 or crows >= 0.6→Webhookpush-gatewayWhat it means
For AAPL on the session of 2026-10-30: Not true: shooting star candle: Upper wick at least twice the body, lower wick at most 10% of the range, after a five-bar rise.; hanging man candle: Hammer shape, closing above the close five bars back.; Shooting star at a 20-day high; three black crows candle: Three red bars, each closing lower and opening inside the previous body.. No action fired: every rule was false.
Pattern pushes go only to users who subscribed and only when a pattern is true; the app links to a lesson on what the candle means.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AAPL"
},
"questions": {
"star": {
"type": "yes_no",
"ask": "shooting_star()"
},
"hanging": {
"type": "yes_no",
"ask": "hanging_man()"
},
"star_high": {
"type": "yes_no",
"ask": "shooting_star() and H > highest(H, 20)"
},
"crows": {
"type": "yes_no",
"ask": "three_black_crows()"
}
},
"actions": [
{
"id": "pattern_push",
"when": "star >= 0.6 or hanging >= 0.6 or crows >= 0.6",
"do": "webhook",
"connection": "push-gateway",
"body": {
"topic": "patterns_{{symbol}}",
"symbol": "{{symbol}}",
"shooting_star": "{{star}}",
"hanging_man": "{{hanging}}",
"three_black_crows": "{{crows}}",
"as_of": "{{as_of}}"
}
}
],
"dry_run": true
}Response JSON (AAPL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"star": {
"yes_no": 0.0537,
"rule": "shooting_star()",
"basis": "rule"
},
"hanging": {
"yes_no": 0.1795,
"rule": "hanging_man()",
"basis": "rule"
},
"star_high": {
"yes_no": 0.0537,
"rule": "shooting_star() and H > highest(H, 20)",
"basis": "rule"
},
"crows": {
"yes_no": 0.1039,
"rule": "three_black_crows()",
"basis": "rule"
}
},
"context": {
"symbol": "AAPL",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "pattern_push",
"fired": false,
"status": "skipped"
}
]
}Broker app · example 16
Risk label on spot crypto ETFs: IBIT, ETHA and BITO
Attach a 'high volatility' label to crypto funds on days their volatility rules are true.
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"IBIT"} then ETHA, BITO, one request each. The server fills in the latest completed session.
Questions
atr | English → rule | Is the 14-day ATR more than 3% of the price? |
hv | rule | std(log(C / C[-1]), 20) * sqrt(252) > 0.4Annualized 20-day volatility above 40% |
wide | rule | (H - L) > 2 * avg(H - L, 20)Range more than twice the 20-day average range |
drop10 | forecast | Will it drop at least 10% at some point in the next month? A 10% drawdown within a month |
Answers
| Symbol | atrrule | hvrule | widerule | drop10forecast |
|---|---|---|---|---|
IBIT | 0.2365 | 0.1239 | 0.1048 | 0.566 |
ETHA | 0.9452 | 0.3361 | 0.0754 | 0.655 |
BITO | 0.2832 | 0.1228 | 0.0957 | 0.524 |
true false not known for rules; forecasts are odds. Hover a column for its question.
What it means
Session of 2026-10-30, 3 symbols: Is the 14-day ATR more than 3% of the price: true for ETHA of 3. Annualized 20-day volatility above 40%: true for none of 3. Range more than twice the 20-day average range: true for none of 3. Highest odds for “A 10% drawdown within a month”: ETHA at 66%.
Labels are exact and refreshed after each close; a fund can lose the label when volatility settles.
Request JSON (IBIT; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "IBIT"
},
"questions": {
"atr": {
"type": "yes_no",
"instructions": "Is the 14-day ATR more than 3% of the price?"
},
"hv": {
"type": "yes_no",
"ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4"
},
"wide": {
"type": "yes_no",
"ask": "(H - L) > 2 * avg(H - L, 20)"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
}
}
}Response JSON (IBIT, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"atr": {
"yes_no": 0.2365,
"rule": "atr(14) / C > 0.03",
"basis": "pattern"
},
"hv": {
"yes_no": 0.1239,
"rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4",
"basis": "rule"
},
"wide": {
"yes_no": 0.1048,
"rule": "(H - L) > 2 * avg(H - L, 20)",
"basis": "rule"
},
"drop10": {
"yes_no": 0.566
}
},
"context": {
"symbol": "IBIT",
"as_of": "2026-10-30"
}
}Broker app · example 17
Fractional-share nudge for high-priced stocks after a pullback (COST)
Suggest fractional buys to customers following a high-priced stock when it pulls back inside its uptrend.
- StateCOST
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"COST"} The server fills in the latest completed session.
Questions
pullback | English → rule | Has the stock pulled back at least 5% from its 20-day high? |
trend | English → rule | Is the stock above its 200-day moving average? |
entry | English → rule | Is the stock in an uptrend with a pullback to the 20-day (entry zone)? |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
pullbackHas the stock pulled back at least 5% from its 20-day high compiled to C <= max(H, 20) * 0.95 | 0.0782 | false |
trendIs the stock above its 200-day moving average compiled to C > sma(C, 200) | 0.9022 | true |
entryIs the stock in an uptrend with a pullback to the 20-day (entry zone) compiled to (C > sma(C, 50)) and (sma(C, 50) > sma(C, 200)) and (L <= sma(C, 20) * 1.01) and (C >= sma(C, 20)) | 0.0538 | false |
rally5A 5% rally within a month | 0.353 | 35% · unlikely |
Actions
Rules on the answers decide what to send.
pullback >= 0.6 and trend >= 0.6→Webhookin-app-messagesWhat it means
For COST on the session of 2026-10-30: True now: Is the stock above its 200-day moving average. Not true: Has the stock pulled back at least 5% from its 20-day high; Is the stock in an uptrend with a pullback to the 20-day (entry zone). Forecasts: A 5% rally within a month 35%. No action fired: every rule was false.
The nudge is educational and only fires on a real pullback in an uptrend; it links to fractional trading, not to a buy button.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "COST"
},
"questions": {
"pullback": {
"type": "yes_no",
"instructions": "Has the stock pulled back at least 5% from its 20-day high?"
},
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"entry": {
"type": "yes_no",
"instructions": "Is the stock in an uptrend with a pullback to the 20-day (entry zone)?"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "nudge",
"when": "pullback >= 0.6 and trend >= 0.6",
"do": "webhook",
"connection": "in-app-messages",
"body": {
"segment": "followers_{{symbol}}",
"template": "fractional_pullback",
"symbol": "{{symbol}}",
"as_of": "{{as_of}}"
}
}
],
"dry_run": true
}Response JSON (COST, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"pullback": {
"yes_no": 0.0782,
"rule": "C <= max(H, 20) * 0.95",
"basis": "pattern"
},
"trend": {
"yes_no": 0.9022,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"entry": {
"yes_no": 0.0538,
"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": "pattern"
},
"rally5": {
"yes_no": 0.353
}
},
"context": {
"symbol": "COST",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "nudge",
"fired": false,
"status": "skipped"
}
]
}Broker app · example 18
International ADR note: TSM, ASML and NVO trend
Show customers holding foreign stocks a trend summary next to a note that currency moves affect ADR prices.
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"TSM"} then ASML, NVO, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
golden | English → rule | Is the 50-day moving average above the 200-day? |
dd | rule | C < 0.8 * max(H, 252)More than 20% off the 52-week high |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Symbol | trendrule | goldenrule | ddrule | up_weekforecast |
|---|---|---|---|---|
TSM | 0.7124 | 0.9463 | 0.1622 | 0.564 |
ASML | 0.363 | 0.9048 | 0.6997 | 0.564 |
NVO | 0.12 | 0.0793 | 0.9455 | 0.535 |
true false not known for rules; forecasts are odds. Hover a column for its question.
What it means
Session of 2026-10-30, 3 symbols: Is the stock above its 200-day moving average: true for TSM of 3. Is the 50-day moving average above the 200-day: true for TSM, ASML of 3. More than 20% off the 52-week high: true for ASML, NVO of 3. Highest odds for “Higher in a week”: TSM at 56%.
Trend facts are computed on the US-listed price, which already includes currency moves; the note explains that to customers.
Request JSON (TSM; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TSM"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"golden": {
"type": "yes_no",
"instructions": "Is the 50-day moving average above the 200-day?"
},
"dd": {
"type": "yes_no",
"ask": "C < 0.8 * max(H, 252)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (TSM, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.7124,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"golden": {
"yes_no": 0.9463,
"rule": "sma(C, 50) > sma(C, 200)",
"basis": "comparison"
},
"dd": {
"yes_no": 0.1622,
"rule": "C < 0.8 * max(H, 252)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.564
}
},
"context": {
"symbol": "TSM",
"as_of": "2026-10-30"
}
}Broker app · example 19
Inside-bar breakout alert for active traders (QQQ)
Offer active traders an alert when price breaks out of an inside bar, with stop distance context.
- StateQQQ
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"QQQ"} The server fills in the latest completed session.
Questions
inside_break | English → rule | Did the stock break out above yesterday's inside bar? |
inside_today | English → rule | Is today an inside day? |
stop | English → rule | Is a stop below yesterday's low less than 1 ATR away? |
new_high | forecast | Will it make a new 20-day high in the next week? A new 20-day high next week |
Answers
| Question | Answer | Reading |
|---|---|---|
inside_breakDid the stock break out above yesterday's inside bar compiled to (H[-1] <= H[-2]) and (L[-1] >= L[-2]) and (C > H[-1]) | 0.0537 | false |
inside_todayIs today an inside day compiled to inside_bar() | 0.0537 | false |
stopIs a stop below yesterday's low less than 1 ATR away compiled to (C > L[-1]) and (C - L[-1] < 1 * atr(14)) | 0.0582 | false |
new_highA new 20-day high next week | 0.04 | 4% · unlikely |
Actions
Rules on the answers decide what to send.
inside_break >= 0.6→Slackactive-trader-communityWhat it means
For QQQ on the session of 2026-10-30: Not true: Did the stock break out above yesterday's inside bar; Is today an inside day; Is a stop below yesterday's low less than 1 ATR away. Forecasts: A new 20-day high next week 4%. No action fired: every rule was false.
The alert goes to the broker's active-trader channel; the stop-distance fact helps traders size, the forecast is labeled as odds.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "QQQ"
},
"questions": {
"inside_break": {
"type": "yes_no",
"instructions": "Did the stock break out above yesterday's inside bar?"
},
"inside_today": {
"type": "yes_no",
"instructions": "Is today an inside day?"
},
"stop": {
"type": "yes_no",
"instructions": "Is a stop below yesterday's low less than 1 ATR away?"
},
"new_high": {
"type": "yes_no",
"instructions": "Will it make a new 20-day high in the next week?"
}
},
"actions": [
{
"id": "alert",
"when": "inside_break >= 0.6",
"do": "slack",
"connection": "active-trader-community",
"message": "{{symbol}} ({{as_of}}) broke out above an inside bar. Stop under yesterday's low within 1 ATR: {{stop|pct}}. New 20-day high next week: {{new_high|pct}}."
}
],
"dry_run": true
}Response JSON (QQQ, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"inside_break": {
"yes_no": 0.0537,
"rule": "(H[-1] <= H[-2]) and (L[-1] >= L[-2]) and (C > H[-1])",
"basis": "pattern"
},
"inside_today": {
"yes_no": 0.0537,
"rule": "inside_bar()",
"basis": "pattern"
},
"stop": {
"yes_no": 0.0582,
"rule": "(C > L[-1]) and (C - L[-1] < 1 * atr(14))",
"basis": "pattern"
},
"new_high": {
"yes_no": 0.04
}
},
"context": {
"symbol": "QQQ",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "alert",
"fired": false,
"status": "skipped"
}
]
}Broker app · example 20
Quarterly account-review trigger: bonds vs stocks drift (AGG and VTI)
Trigger an advisor review offer when stocks and bonds have moved far apart over three months.
- State2 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"AGG"} then VTI, one request each. The server fills in the latest completed session.
Questions
up10 | English → rule | Is the stock up more than 10% over the last three months? |
down5 | English → rule | Is the stock down more than 5% over the last month? |
trend | English → rule | Is the stock above its 200-day moving average? |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | up10rule | down5rule | trendrule | drop5forecast | Fired |
|---|---|---|---|---|---|
AGG | 0.0537 | 0.0537 | 0.248 | 0.009 | none |
VTI | 0.0537 | 0.0662 | 0.9415 | 0.187 | 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.
up10 >= 0.6 or down5 >= 0.6→Emailadvice-teamWhat it means
Session of 2026-10-30, 2 symbols: Is the stock up more than 10% over the last three months: true for none of 2. Is the stock down more than 5% over the last month: true for none of 2. Is the stock above its 200-day moving average: true for VTI of 2. Highest odds for “A 5% drawdown within a month”: VTI at 19%. offer fired for none.
The advice team offers a review to affected customers; nothing changes in an account without the customer.
Request JSON (AGG; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AGG"
},
"questions": {
"up10": {
"type": "yes_no",
"instructions": "Is the stock up more than 10% over the last three months?"
},
"down5": {
"type": "yes_no",
"instructions": "Is the stock down more than 5% over the last month?"
},
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "offer",
"when": "up10 >= 0.6 or down5 >= 0.6",
"do": "email",
"connection": "advice-team",
"subject": "Review offer: {{symbol}} moved",
"message": "{{symbol}} ({{as_of}}) moved enough (up 10% in three months {{up10|pct}}, down 5% this month {{down5|pct}}) that holders' mixes may have drifted. Offer a review."
}
],
"dry_run": true
}Response JSON (AGG, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"up10": {
"yes_no": 0.0537,
"rule": "C / C[-63] - 1 > 0.1",
"basis": "pattern"
},
"down5": {
"yes_no": 0.0537,
"rule": "C / C[-21] - 1 < -0.05",
"basis": "pattern"
},
"trend": {
"yes_no": 0.248,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"drop5": {
"yes_no": 0.009
}
},
"context": {
"symbol": "AGG",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "offer",
"fired": false,
"status": "skipped"
}
]
}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 Builders: Quant developer, Fintech app builder, Robo-advisor, Algo / bot developer, Data vendor / platform, Trading educator / newsletter.