Use cases · Buy side
Financial advisor / RIA: 20 ways to use Ora
Client portfolios, rebalancing, reviews and timely notes before clients call. 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 (50)
sma 14max 7offset 5atr 4days_to_earnings 3rsi 3abs 3log 3sqrt 3std 3ref 3pays_dividend 2swinglow 2cut_last 2min 2beat_eps_last 1beat_revenue_last 1shooting_star 1swinghigh 1div_yield_ttm 1years_of_growth 1beat_streak 1last_earnings_move 1next_report_amc 1misses_last4 1macd 1avg 1days_since_earnings 1harami_bull 1morning_star 1piercing_line 1tweezer_bottom 1crossdown 1bblower 1ema 1roc 1linreg 1days_since_split 1days_to_split 1last_split_ratio 1reverse_split_last 1splits_5y 1highest 1lowest 1atr_pct 1adx 1diminus 1diplus 1wma 1days_to_ex_div 1
Examples 11–20 of 20 · page 2 of 2
Financial advisor / RIA · example 11
Did a bullish reversal candle print in UNH after the selloff?
Before suggesting clients add to a beaten-down name, look for reversal candles near the lows.
- StateUNH
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"UNH"} The server fills in the latest completed session.
Questions
morning | rule | morning_star()morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first. |
piercing | rule | piercing_line()piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open). |
harami | rule | harami_bull()harami bull candle: A small green body inside yesterday's red body. |
tweezer | rule | tweezer_bottom()tweezer bottom candle: Red then green, with lows within 0.1% of each other. |
near_low | English → rule | Is the stock within 10% of its 52-week low? |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
morningmorning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first. | 0.0925 | false |
piercingpiercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open). | 0.1039 | false |
haramiharami bull candle: A small green body inside yesterday's red body. | 0.1039 | false |
tweezertweezer bottom candle: Red then green, with lows within 0.1% of each other. | 0.1039 | false |
near_lowIs the stock within 10% of its 52-week low compiled to abs(C / min(L, 252) - 1) <= 0.1 | 0.0537 | false |
up_weekHigher in a week | 0.485 | 49% · close to even |
What it means
For UNH on the session of 2026-10-30: Not true: morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first.; piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open).; harami bull candle: A small green body inside yesterday's red body.; tweezer bottom candle: Red then green, with lows within 0.1% of each other.; Is the stock within 10% of its 52-week low. Forecasts: Higher in a week 49%.
Candles are evidence of buying interest at the lows, not a signal by themselves; they matter more when they print near the 52-week low.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "UNH"
},
"questions": {
"morning": {
"type": "yes_no",
"ask": "morning_star()"
},
"piercing": {
"type": "yes_no",
"ask": "piercing_line()"
},
"harami": {
"type": "yes_no",
"ask": "harami_bull()"
},
"tweezer": {
"type": "yes_no",
"ask": "tweezer_bottom()"
},
"near_low": {
"type": "yes_no",
"instructions": "Is the stock within 10% of its 52-week low?"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (UNH, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"morning": {
"yes_no": 0.0925,
"rule": "morning_star()",
"basis": "rule"
},
"piercing": {
"yes_no": 0.1039,
"rule": "piercing_line()",
"basis": "rule"
},
"harami": {
"yes_no": 0.1039,
"rule": "harami_bull()",
"basis": "rule"
},
"tweezer": {
"yes_no": 0.1039,
"rule": "tweezer_bottom()",
"basis": "rule"
},
"near_low": {
"yes_no": 0.0537,
"rule": "abs(C / min(L, 252) - 1) <= 0.1",
"basis": "comparison"
},
"up_week": {
"yes_no": 0.485
}
},
"context": {
"symbol": "UNH",
"as_of": "2026-10-30"
}
}abs harami_bull min morning_star piercing_line tweezer_bottom
Financial advisor / RIA · example 12
Friday model-portfolio digest to the advisor channel
Every Friday after the close, check each ETF in the growth model and post to Slack any sleeve that broke its 50-day.
- ScheduleFri at 16:45 ET
- State5 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"VTI"} then VEA, VWO, QQQ, IWM, one request each. The server fills in the latest completed session.
Questions
above_50d | rule | C > sma(C, 50)Above the 50-day average |
cross_down | rule | crossdown(C, sma(C, 50))Crossed below the 50-day today |
trend | English → rule | Is the stock above its 200-day moving average? |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Symbol | above_50drule | cross_downrule | trendrule | up_weekforecast | Fired |
|---|---|---|---|---|---|
VTI | 0.1242 | 0.95 | 0.9415 | 0.57 | lost_50d |
VEA | 0.1314 | 0.05 | 0.5877 | 0.559 | lost_50d |
VWO | 0.0561 | 0.05 | 0.0887 | 0.516 | lost_50d |
QQQ | 0.0653 | 0.05 | 0.7987 | 0.561 | lost_50d |
IWM | 0.2176 | 0.05 | 0.5564 | 0.526 | lost_50d |
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.
cross_down >= 0.6 or above_50d < 0.4→Slackadvisor-team{
"text": "VTI (2026-10-30) is below its 50-day (crossed today 95%). 200-day trend 94%; higher in a week 57%."
}{
"text": "VEA (2026-10-30) is below its 50-day (crossed today 5%). 200-day trend 59%; higher in a week 56%."
}{
"text": "VWO (2026-10-30) is below its 50-day (crossed today 5%). 200-day trend 9%; higher in a week 52%."
}{
"text": "QQQ (2026-10-30) is below its 50-day (crossed today 5%). 200-day trend 80%; higher in a week 56%."
}{
"text": "IWM (2026-10-30) is below its 50-day (crossed today 5%). 200-day trend 56%; higher in a week 53%."
}What it means
Session of 2026-10-30, 5 symbols: Above the 50-day average: true for none of 5. Crossed below the 50-day today: true for VTI of 5. Is the stock above its 200-day moving average: true for VTI, QQQ of 5. Highest odds for “Higher in a week”: VTI at 57%. lost_50d fired for VTI, VEA, VWO, QQQ, IWM.
Each sleeve gets its own answers; only sleeves below the 50-day reach the channel, so the digest stays short.
As a scheduled workflow (Fri at 16: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": "Friday model-portfolio digest to the advisor channel",
"symbols": "VTI VEA VWO QQQ IWM",
"days": [
5
],
"at_time": "16:45",
"model": "ora-fin-0.1.1",
"questions": {
"above_50d": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"cross_down": {
"type": "yes_no",
"ask": "crossdown(C, sma(C, 50))"
},
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "lost_50d",
"when": "cross_down >= 0.6 or above_50d < 0.4",
"do": "slack",
"connection": "advisor-team",
"message": "{{symbol}} ({{as_of}}) is below its 50-day (crossed today {{cross_down|pct}}). 200-day trend {{trend|pct}}; higher in a week {{up_week|pct}}."
}
]
}Request JSON (VTI; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VTI"
},
"questions": {
"above_50d": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"cross_down": {
"type": "yes_no",
"ask": "crossdown(C, sma(C, 50))"
},
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "lost_50d",
"when": "cross_down >= 0.6 or above_50d < 0.4",
"do": "slack",
"connection": "advisor-team",
"message": "{{symbol}} ({{as_of}}) is below its 50-day (crossed today {{cross_down|pct}}). 200-day trend {{trend|pct}}; higher in a week {{up_week|pct}}."
}
],
"dry_run": true
}Response JSON (VTI, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"above_50d": {
"yes_no": 0.1242,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"cross_down": {
"yes_no": 0.95,
"rule": "crossdown(C, sma(C, 50))",
"basis": "rule"
},
"trend": {
"yes_no": 0.9415,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"up_week": {
"yes_no": 0.57
}
},
"context": {
"symbol": "VTI",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "lost_50d",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "advisor-team",
"preview": {
"text": "VTI (2026-10-30) is below its 50-day (crossed today 95%). 200-day trend 94%; higher in a week 57%."
}
}
]
}Financial advisor / RIA · example 13
Roth conversion timing: is VOO in a dip?
Converting during a market dip moves more shares for the same tax; check whether the broad market is pulled back right now.
- StateVOO
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"VOO"} 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? |
rsi40 | English → rule | Is RSI below 40? |
below_band | rule | C < bblower(C, 20, 2)Closed under the lower Bollinger band |
trend | English → rule | Is the stock above its 200-day moving average? |
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.0617 | false |
rsi40Is RSI below 40 compiled to rsi(C, 14) < 40 | 0.4424 | on the line (false) |
below_bandClosed under the lower Bollinger band | 0.5834 | on the line (true) |
trendIs the stock above its 200-day moving average compiled to C > sma(C, 200) | 0.9463 | true |
rally5A 5% rally within a month | 0.22 | 22% · unlikely |
What it means
For VOO 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. On the line: Is RSI below 40; Closed under the lower Bollinger band. Forecasts: A 5% rally within a month 22%.
A pullback inside a long-term uptrend is the kind of window advisors use for conversions; no dip simply means convert on the normal schedule.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VOO"
},
"questions": {
"pullback": {
"type": "yes_no",
"instructions": "Has the stock pulled back at least 5% from its 20-day high?"
},
"rsi40": {
"type": "yes_no",
"instructions": "Is RSI below 40?"
},
"below_band": {
"type": "yes_no",
"ask": "C < bblower(C, 20, 2)"
},
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
}
}
}Response JSON (VOO, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"pullback": {
"yes_no": 0.0617,
"rule": "C <= max(H, 20) * 0.95",
"basis": "pattern"
},
"rsi40": {
"yes_no": 0.4424,
"rule": "rsi(C, 14) < 40",
"basis": "comparison"
},
"below_band": {
"yes_no": 0.5834,
"rule": "C < bblower(C, 20, 2)",
"basis": "rule"
},
"trend": {
"yes_no": 0.9463,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"rally5": {
"yes_no": 0.22
}
},
"context": {
"symbol": "VOO",
"as_of": "2026-10-30"
}
}Financial advisor / RIA · example 14
Which sectors lead? XLK, XLV, XLE and XLF for client tilts
Compare momentum and trend across four sector ETFs before adjusting a client's sector tilt.
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"XLK"} then XLV, XLE, XLF, one request each. The server fills in the latest completed session.
Questions
roc20 | rule | roc(C, 20) > 5Up more than 5% in 20 sessions |
stacked | 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 |
quarter_leader | rule | roc(C, 63) > 10 and C >= 0.95 * max(H, 63)Up more than 10% in a quarter, near the high |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | roc20rule | stackedrule | quarter_leaderrule | beat_spyforecast |
|---|---|---|---|---|
XLK | 0.0537 | 0.0701 | 0.0624 | 0.498 |
XLV | 0.9157 | 0.9384 | 0.8322 | 0.534 |
XLE | 0.897 | 0.9266 | 0.9336 | 0.55 |
XLF | 0.606 | 0.3831 | 0.0785 | 0.448 |
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: Up more than 5% in 20 sessions: true for XLV, XLE, XLF of 4. Stacked averages: close > 20 EMA > 50 > 200: true for XLV, XLE of 4. Up more than 10% in a quarter, near the high: true for XLV, XLE of 4. Highest odds for “Beating SPY over a month”: XLE at 55%.
Sectors with stacked averages and a quarter of leadership are the tilt candidates; the beat-SPY forecast is a tie-breaker, not a mandate.
Request JSON (XLK; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLK"
},
"questions": {
"roc20": {
"type": "yes_no",
"ask": "roc(C, 20) > 5"
},
"stacked": {
"type": "yes_no",
"ask": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)"
},
"quarter_leader": {
"type": "yes_no",
"ask": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)"
},
"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": {
"roc20": {
"yes_no": 0.0537,
"rule": "roc(C, 20) > 5",
"basis": "rule"
},
"stacked": {
"yes_no": 0.0701,
"rule": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)",
"basis": "rule"
},
"quarter_leader": {
"yes_no": 0.0624,
"rule": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.498
}
},
"context": {
"symbol": "XLK",
"as_of": "2026-10-30"
}
}Financial advisor / RIA · example 15
Rate check for an income client: SHY vs IEF trend
Before recommending bonds or a fixed product, see whether short and intermediate Treasury ETFs are trending.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"SHY"} then IEF, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
sma50_rising | rule | sma(C, 50) > ref(sma(C, 50), -10)The 50-day average is rising |
linreg_up | rule | linreg(C, 20) > ref(linreg(C, 20), -5)20-day regression line rising over a week |
atr_low | English → rule | Is the 14-day ATR less than 2% of the price? |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Symbol | trendrule | sma50_risingrule | linreg_uprule | atr_lowrule | up_weekforecast |
|---|---|---|---|---|---|
SHY | 0.8971 | 0.1624 | 0.899 | 0.9463 | 0.594 |
IEF | 0.8514 | 0.0882 | 0.8977 | 0.9463 | 0.483 |
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 SHY, IEF of 2. The 50-day average is rising: true for none of 2. 20-day regression line rising over a week: true for SHY, IEF of 2. Is the 14-day ATR less than 2% of the price: true for SHY, IEF of 2. Highest odds for “Higher in a week”: SHY at 59%.
Rising bond prices mean falling yields; the trend rules tell the advisor which way rates have been moving before the conversation.
Request JSON (SHY; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SHY"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"sma50_rising": {
"type": "yes_no",
"ask": "sma(C, 50) > ref(sma(C, 50), -10)"
},
"linreg_up": {
"type": "yes_no",
"ask": "linreg(C, 20) > ref(linreg(C, 20), -5)"
},
"atr_low": {
"type": "yes_no",
"instructions": "Is the 14-day ATR less than 2% of the price?"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (SHY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.8971,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"sma50_rising": {
"yes_no": 0.1624,
"rule": "sma(C, 50) > ref(sma(C, 50), -10)",
"basis": "rule"
},
"linreg_up": {
"yes_no": 0.899,
"rule": "linreg(C, 20) > ref(linreg(C, 20), -5)",
"basis": "rule"
},
"atr_low": {
"yes_no": 0.9463,
"rule": "atr(14) / C < 0.02",
"basis": "pattern"
},
"up_week": {
"yes_no": 0.594
}
},
"context": {
"symbol": "SHY",
"as_of": "2026-10-30"
}
}Financial advisor / RIA · example 16
Explaining an NVDA split to a client
A client sees a lower share price and more shares; confirm the split history so the advisor can explain it clearly.
- StateNVDA
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"NVDA"} The server fills in the latest completed session.
Questions
split_3y | English → rule | Has the stock split in the past three years? |
ratio4 | rule | last_split_ratio >= 4Last split at least 4-for-1 |
reverse | English → rule | Was the last split a reverse split? |
announced | English → rule | Is a stock split coming up? |
multi | rule | splits_5y >= 2Two or more splits in five years |
Answers
| Question | Answer | Reading |
|---|---|---|
split_3yHas the stock split in the past three years compiled to days_since_split <= 1095 | 0.9463 | true |
ratio4Last split at least 4-for-1 | 0.9463 | true |
reverseWas the last split a reverse split compiled to reverse_split_last > 0.5 | 0.1409 | false |
announcedIs a stock split coming up compiled to days_to_split <= 365 | 0.0537 | false |
multiTwo or more splits in five years | 0.1409 | false |
What it means
For NVDA on the session of 2026-10-30: True now: Has the stock split in the past three years; Last split at least 4-for-1. Not true: Was the last split a reverse split; Is a stock split coming up; Two or more splits in five years.
Split facts come from the corporate-action record and explain share-count changes; they say nothing about value, which is the point to make to the client.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "NVDA"
},
"questions": {
"split_3y": {
"type": "yes_no",
"instructions": "Has the stock split in the past three years?"
},
"ratio4": {
"type": "yes_no",
"ask": "last_split_ratio >= 4"
},
"reverse": {
"type": "yes_no",
"instructions": "Was the last split a reverse split?"
},
"announced": {
"type": "yes_no",
"instructions": "Is a stock split coming up?"
},
"multi": {
"type": "yes_no",
"ask": "splits_5y >= 2"
}
}
}Response JSON (NVDA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"split_3y": {
"yes_no": 0.9463,
"rule": "days_since_split <= 1095",
"basis": "pattern"
},
"ratio4": {
"yes_no": 0.9463,
"rule": "last_split_ratio >= 4",
"basis": "rule"
},
"reverse": {
"yes_no": 0.1409,
"rule": "reverse_split_last > 0.5",
"basis": "pattern"
},
"announced": {
"yes_no": 0.0537,
"rule": "days_to_split <= 365",
"basis": "pattern"
},
"multi": {
"yes_no": 0.1409,
"rule": "splits_5y >= 2",
"basis": "rule"
}
},
"context": {
"symbol": "NVDA",
"as_of": "2026-10-30"
}
}days_since_split days_to_split last_split_ratio reverse_split_last splits_5y
Financial advisor / RIA · example 17
Stop review on CVX and XOM energy positions
Check whether energy holdings closed below a protective stop level and email the advisor with the result.
- State2 symbols
- Questions4 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"CVX"} then XOM, one request each. The server fills in the latest completed session.
Questions
chandelier | rule | C < highest(H, 22) - 3 * atr(22)Chandelier exit: 3 ATR under the 22-day high |
low_break | rule | C < lowest(L, 20)Closed under the 20-day low |
swing_low | rule | C < swinglow(5, 1)Closed below the latest swing low |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | chandelierrule | low_breakrule | swing_lowrule | drop5forecast | Fired |
|---|---|---|---|---|---|
CVX | 0.055 | 0.0537 | 0.0537 | 0.496 | ok |
XOM | 0.0537 | 0.0537 | 0.0537 | 0.506 | ok |
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.
chandelier >= 0.6 or swing_low >= 0.6→Emailmeelse→Emailme{
"subject": "CVX: stops intact",
"text": "CVX (2026-10-30) is above its stop levels. 5% drawdown odds: 50%."
}{
"subject": "XOM: stops intact",
"text": "XOM (2026-10-30) is above its stop levels. 5% drawdown odds: 51%."
}What it means
Session of 2026-10-30, 2 symbols: Chandelier exit: 3 ATR under the 22-day high: true for none of 2. Closed under the 20-day low: true for none of 2. Closed below the latest swing low: true for none of 2. Highest odds for “A 5% drawdown within a month”: XOM at 51%. stop_hit fired for none. ok fired for CVX, XOM.
Exact stop checks decide the email; the drawdown forecast is included so the advisor sees the risk even when stops hold.
Request JSON (CVX; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "CVX"
},
"questions": {
"chandelier": {
"type": "yes_no",
"ask": "C < highest(H, 22) - 3 * atr(22)"
},
"low_break": {
"type": "yes_no",
"ask": "C < lowest(L, 20)"
},
"swing_low": {
"type": "yes_no",
"ask": "C < swinglow(5, 1)"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "stop_hit",
"when": "chandelier >= 0.6 or swing_low >= 0.6",
"do": "email",
"connection": "me",
"subject": "{{symbol}}: protective stop level broken",
"message": "{{symbol}} ({{as_of}}) closed through a stop level (chandelier {{chandelier|pct}}, swing low {{swing_low|pct}}). Review client accounts holding it."
},
{
"id": "ok",
"when": "else",
"do": "email",
"connection": "me",
"subject": "{{symbol}}: stops intact",
"message": "{{symbol}} ({{as_of}}) is above its stop levels. 5% drawdown odds: {{drop5|pct}}."
}
],
"dry_run": true
}Response JSON (CVX, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"chandelier": {
"yes_no": 0.055,
"rule": "C < highest(H, 22) - 3 * atr(22)",
"basis": "rule"
},
"low_break": {
"yes_no": 0.0537,
"rule": "C < lowest(L, 20)",
"basis": "rule"
},
"swing_low": {
"yes_no": 0.0537,
"rule": "C < swinglow(5, 1)",
"basis": "rule"
},
"drop5": {
"yes_no": 0.496
}
},
"context": {
"symbol": "CVX",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "stop_hit",
"fired": false,
"status": "skipped"
},
{
"id": "ok",
"fired": true,
"status": "dry_run",
"do": "email",
"connection": "me",
"preview": {
"subject": "CVX: stops intact",
"text": "CVX (2026-10-30) is above its stop levels. 5% drawdown odds: 50%."
}
}
]
}Financial advisor / RIA · example 18
A client wants to buy TSLA today: suitability context
Give the advisor volatility and trend facts to discuss position size before a client buys a volatile stock.
- StateTSLA
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"TSLA"} The server fills in the latest completed session.
Questions
atr3 | rule | atr_pct(14) > 3A typical day moves more than 3% |
hv40 | English → rule | Is 20-day historical volatility above 40%? |
trend | English → rule | Is the stock above its 50-day moving average? |
gap_risk | English → rule | Is earnings in the next 14 days? |
drop10 | forecast | Will it drop at least 10% at some point in the next month? A 10% drawdown within a month |
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 |
|---|---|---|
atr3A typical day moves more than 3% | 0.848 | true |
hv40Is 20-day historical volatility above 40% compiled to std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) > 0.4 | 0.3248 | false |
trendIs the stock above its 50-day moving average compiled to C > sma(C, 50) | 0.8961 | true |
gap_riskIs earnings in the next 14 days compiled to days_to_earnings <= 14 | 0.0537 | false |
drop10A 10% drawdown within a month | 0.638 | 64% · likely |
rally10A 10% rally within a month | 0.687 | 69% · likely |
What it means
For TSLA on the session of 2026-10-30: True now: A typical day moves more than 3%; Is the stock above its 50-day moving average. Not true: Is 20-day historical volatility above 40%; Is earnings in the next 14 days. Forecasts: A 10% drawdown within a month 64%; A 10% rally within a month 69%.
High ATR and volatility facts argue for a smaller position; both ten-percent forecasts show that big moves are possible in either direction.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TSLA"
},
"questions": {
"atr3": {
"type": "yes_no",
"ask": "atr_pct(14) > 3"
},
"hv40": {
"type": "yes_no",
"instructions": "Is 20-day historical volatility above 40%?"
},
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 50-day moving average?"
},
"gap_risk": {
"type": "yes_no",
"instructions": "Is earnings in the next 14 days?"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
},
"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": {
"atr3": {
"yes_no": 0.848,
"rule": "atr_pct(14) > 3",
"basis": "rule"
},
"hv40": {
"yes_no": 0.3248,
"rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) > 0.4",
"basis": "pattern"
},
"trend": {
"yes_no": 0.8961,
"rule": "C > sma(C, 50)",
"basis": "comparison"
},
"gap_risk": {
"yes_no": 0.0537,
"rule": "days_to_earnings <= 14",
"basis": "pattern"
},
"drop10": {
"yes_no": 0.638
},
"rally10": {
"yes_no": 0.687
}
},
"context": {
"symbol": "TSLA",
"as_of": "2026-10-30"
}
}Financial advisor / RIA · example 19
Is the GLD hedge working for nervous clients?
For clients who asked for a gold allocation, check the gold ETF's trend and momentum against a cooling market.
- StateGLD
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"GLD"} The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
near_high | rule | C >= 0.98 * max(H, 252)Within 2% of the 52-week high |
adx | rule | adx(14) > 20 and diplus(14) > diminus(14)Trending up (ADX over 20 and +DI over −DI) |
wma | rule | wma(C, 10) > wma(C, 30)10-day weighted average above the 30-day |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Question | Answer | Reading |
|---|---|---|
trendIs the stock above its 200-day moving average compiled to C > sma(C, 200) | 0.0537 | false |
near_highWithin 2% of the 52-week high | 0.0537 | false |
adxTrending up (ADX over 20 and +DI over −DI) | 0.074 | false |
wma10-day weighted average above the 30-day | 0.1787 | false |
beat_spyBeating SPY over a month | 0.544 | 54% · close to even |
What it means
For GLD on the session of 2026-10-30: Not true: Is the stock above its 200-day moving average; Within 2% of the 52-week high; Trending up (ADX over 20 and +DI over −DI); 10-day weighted average above the 30-day. Forecasts: Beating SPY over a month 54%.
A trending gold ETF near its high is doing its job as a diversifier; the forecast compares it with the market over the next month.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "GLD"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"near_high": {
"type": "yes_no",
"ask": "C >= 0.98 * max(H, 252)"
},
"adx": {
"type": "yes_no",
"ask": "adx(14) > 20 and diplus(14) > diminus(14)"
},
"wma": {
"type": "yes_no",
"ask": "wma(C, 10) > wma(C, 30)"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
}
}Response JSON (GLD, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.0537,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"near_high": {
"yes_no": 0.0537,
"rule": "C >= 0.98 * max(H, 252)",
"basis": "rule"
},
"adx": {
"yes_no": 0.074,
"rule": "adx(14) > 20 and diplus(14) > diminus(14)",
"basis": "rule"
},
"wma": {
"yes_no": 0.1787,
"rule": "wma(C, 10) > wma(C, 30)",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.544
}
},
"context": {
"symbol": "GLD",
"as_of": "2026-10-30"
}
}Financial advisor / RIA · example 20
RMD timing: sell from strength in SCHD or VIG?
When a client must take a required distribution, pick the dividend ETF that is closer to its high to sell from strength.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"SCHD"} then VIG, one request each. The server fills in the latest completed session.
Questions
near_high | rule | C >= 0.98 * max(H, 252)Within 2% of the 52-week high |
range_top | English → rule | Is the stock in the top 10% of its 20-day range? |
rsi50 | rule | rsi(C, 14) > 50RSI above 50 |
ex_soon | rule | days_to_ex_div <= 30Goes ex-dividend within 30 days |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | near_highrule | range_toprule | rsi50rule | ex_soonrule | drop5forecast | Fired |
|---|---|---|---|---|---|---|
SCHD | 0.7495 | 0.5262 | 0.9174 | 0.0537 | 0.207 | sell_here |
VIG | 0.7997 | 0.4019 | 0.9101 | 0.0537 | 0.114 | sell_here |
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.
near_high >= 0.6 and ex_soon < 0.4→Webhookrebalance-queue{
"action": "propose_sale",
"reason": "rmd",
"symbol": "SCHD",
"p_near_high": 0.7495,
"p_ex_soon": 0.0537,
"as_of": "2026-10-30"
}{
"action": "propose_sale",
"reason": "rmd",
"symbol": "VIG",
"p_near_high": 0.7997,
"p_ex_soon": 0.0537,
"as_of": "2026-10-30"
}What it means
Session of 2026-10-30, 2 symbols: Within 2% of the 52-week high: true for SCHD, VIG of 2. Is the stock in the top 10% of its 20-day range: true for none of 2. RSI above 50: true for SCHD, VIG of 2. Goes ex-dividend within 30 days: true for none of 2. Highest odds for “A 5% drawdown within a month”: SCHD at 21%. sell_here fired for SCHD, VIG.
The sale proposal queues only for the fund near its high and not about to go ex-dividend; the advisor still approves every trade.
Request JSON (SCHD; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SCHD"
},
"questions": {
"near_high": {
"type": "yes_no",
"ask": "C >= 0.98 * max(H, 252)"
},
"range_top": {
"type": "yes_no",
"instructions": "Is the stock in the top 10% of its 20-day range?"
},
"rsi50": {
"type": "yes_no",
"ask": "rsi(C, 14) > 50"
},
"ex_soon": {
"type": "yes_no",
"ask": "days_to_ex_div <= 30"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "sell_here",
"when": "near_high >= 0.6 and ex_soon < 0.4",
"do": "webhook",
"connection": "rebalance-queue",
"body": {
"action": "propose_sale",
"reason": "rmd",
"symbol": "{{symbol}}",
"p_near_high": "{{near_high}}",
"p_ex_soon": "{{ex_soon}}",
"as_of": "{{as_of}}"
}
}
],
"dry_run": true
}Response JSON (SCHD, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"near_high": {
"yes_no": 0.7495,
"rule": "C >= 0.98 * max(H, 252)",
"basis": "rule"
},
"range_top": {
"yes_no": 0.5262,
"rule": "(C - min(L, 20)) / (max(H, 20) - min(L, 20)) >= 0.9",
"basis": "pattern"
},
"rsi50": {
"yes_no": 0.9174,
"rule": "rsi(C, 14) > 50",
"basis": "rule"
},
"ex_soon": {
"yes_no": 0.0537,
"rule": "days_to_ex_div <= 30",
"basis": "rule"
},
"drop5": {
"yes_no": 0.207
}
},
"context": {
"symbol": "SCHD",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "sell_here",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "rebalance-queue",
"preview": {
"body": {
"action": "propose_sale",
"reason": "rmd",
"symbol": "SCHD",
"p_near_high": 0.7495,
"p_ex_soon": 0.0537,
"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 Buy side: Wealth manager, Family office, Hedge fund PM, Quant researcher, Portfolio manager (long-only), Risk manager, Private equity, VC / growth investor, Fund-of-funds allocator.