Use cases · Buy side
Family office: 20 ways to use Ora
A concentrated, multi-asset book with a small team: watch everything, act on exceptions. Each example is a complete, runnable request with the real answers it returned (48 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 13offset 5max 5atr 5log 4sqrt 4std 4roc 4beat_eps_last 3lowest 3avg 3highest 3beat_revenue_last 2doji 2min 2rsi 2outside_bar 2swinghigh 2swinglow 2ref 2raised_last 1years_of_growth 1adx 1diminus 1diplus 1macd 1macdsignal 1revenue_growth_yoy 1mean 1median 1crossup 1eps_growth_yoy 1last_earnings_gap 1pre_earnings_close 1gravestone_doji 1inside_bar 1marubozu 1spinning_top 1ema 1bblower 1bbmid 1bbupper 1cut_last 1days_to_ex_div 1div_ttm 1div_yield_ttm 1pays_dividend 1atr_pct 1cci 1abs 1
Examples 11–20 of 20 · page 2 of 2
Family office · example 11
Emerging markets tilt: INDA, EWZ, MCHI and EWT
The family likes country bets; compare trend and momentum across four emerging markets before adding to one.
- State4 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"INDA"} then EWZ, MCHI, EWT, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
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 |
roc | rule | roc(C, 63) > 10Up more than 10% over three months |
near_high | rule | C >= 0.98 * max(H, 252)Within 2% of the 52-week high |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | trendrule | stackedrule | rocrule | near_highrule | beat_spyforecast |
|---|---|---|---|---|---|
INDA | 0.0895 | 0.0537 | 0.0537 | 0.0537 | 0.349 |
EWZ | 0.0888 | 0.0602 | 0.0694 | 0.0537 | 0.392 |
MCHI | 0.0537 | 0.0537 | 0.0537 | 0.0537 | 0.403 |
EWT | 0.9131 | 0.0655 | 0.088 | 0.0537 | 0.582 |
true false not known for rules; forecasts are odds. Hover a column for its question.
What it means
Session of 2026-10-30, 4 symbols: Is the stock above its 200-day moving average: true for EWT of 4. Stacked averages: close > 20 EMA > 50 > 200: true for none of 4. Up more than 10% over three months: true for none of 4. Within 2% of the 52-week high: true for none of 4. Highest odds for “Beating SPY over a month”: EWT at 58%.
The country with trend, momentum and a nearby high is the cleaner add; laggards wait until their trend turns.
Request JSON (INDA; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "INDA"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"stacked": {
"type": "yes_no",
"ask": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)"
},
"roc": {
"type": "yes_no",
"ask": "roc(C, 63) > 10"
},
"near_high": {
"type": "yes_no",
"ask": "C >= 0.98 * max(H, 252)"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
}
}Response JSON (INDA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.0895,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"stacked": {
"yes_no": 0.0537,
"rule": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)",
"basis": "rule"
},
"roc": {
"yes_no": 0.0537,
"rule": "roc(C, 63) > 10",
"basis": "rule"
},
"near_high": {
"yes_no": 0.0537,
"rule": "C >= 0.98 * max(H, 252)",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.349
}
},
"context": {
"symbol": "INDA",
"as_of": "2026-10-30"
}
}Family office · example 12
When to hedge a concentrated AMZN stake with puts
Puts are cheaper when volatility is low; check whether volatility is calm and the stock is extended before buying protection.
- StateAMZN
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"AMZN"} The server fills in the latest completed session.
Questions
hv_low | English → rule | Is 20-day historical volatility below 20%? |
ext | English → rule | Is price extended more than 2 ATR above its 20-day average? |
squeeze | rule | (bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06Bollinger bands narrower than 6% of price |
vol_up | forecast | Will volatility be higher over the next month? Higher volatility next month |
drop10 | forecast | Will it drop at least 10% at some point in the next month? A 10% drawdown within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
hv_lowIs 20-day historical volatility below 20% compiled to std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2 | 0.1317 | false |
extIs price extended more than 2 ATR above its 20-day average compiled to C - sma(C, 20) > 2 * atr(14) | 0.0537 | false |
squeezeBollinger bands narrower than 6% of price | 0.2727 | false |
vol_upHigher volatility next month | 0.368 | 37% · unlikely |
drop10A 10% drawdown within a month | 0.462 | 46% · close to even |
Actions
Rules on the answers decide what to send.
hv_low >= 0.6 and (ext >= 0.6 or drop10 >= 0.35)→Slackfo-investmentselse→Slackfo-investments{
"text": "AMZN (2026-10-30): no hedge trigger. Calm volatility 13%, extended 5%."
}What it means
For AMZN on the session of 2026-10-30: Not true: Is 20-day historical volatility below 20%; Is price extended more than 2 ATR above its 20-day average; Bollinger bands narrower than 6% of price. Forecasts: Higher volatility next month 37%; A 10% drawdown within a month 46%. Fired: wait (Slack → fo-investments).
Low realized volatility and real downside odds together make protection worth pricing; otherwise the team waits.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AMZN"
},
"questions": {
"hv_low": {
"type": "yes_no",
"instructions": "Is 20-day historical volatility below 20%?"
},
"ext": {
"type": "yes_no",
"instructions": "Is price extended more than 2 ATR above its 20-day average?"
},
"squeeze": {
"type": "yes_no",
"ask": "(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06"
},
"vol_up": {
"type": "yes_no",
"instructions": "Will volatility be higher over the next month?"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
}
},
"actions": [
{
"id": "hedge_now",
"when": "hv_low >= 0.6 and (ext >= 0.6 or drop10 >= 0.35)",
"do": "slack",
"connection": "fo-investments",
"message": "{{symbol}} ({{as_of}}): volatility is calm ({{hv_low|pct}}) and downside odds are {{drop10|pct}}. Price protective puts on the concentrated stake."
},
{
"id": "wait",
"when": "else",
"do": "slack",
"connection": "fo-investments",
"message": "{{symbol}} ({{as_of}}): no hedge trigger. Calm volatility {{hv_low|pct}}, extended {{ext|pct}}."
}
],
"dry_run": true
}Response JSON (AMZN, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"hv_low": {
"yes_no": 0.1317,
"rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2",
"basis": "pattern"
},
"ext": {
"yes_no": 0.0537,
"rule": "C - sma(C, 20) > 2 * atr(14)",
"basis": "pattern"
},
"squeeze": {
"yes_no": 0.2727,
"rule": "(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06",
"basis": "rule"
},
"vol_up": {
"yes_no": 0.368
},
"drop10": {
"yes_no": 0.462
}
},
"context": {
"symbol": "AMZN",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "hedge_now",
"fired": false,
"status": "skipped"
},
{
"id": "wait",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "fo-investments",
"preview": {
"text": "AMZN (2026-10-30): no hedge trigger. Calm volatility 13%, extended 5%."
}
}
]
}Family office · example 13
Trust income: do the dividend holdings cover the distribution?
A family trust distributes income quarterly; confirm each dividend holding is paying and not cutting.
- State4 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"PG"} then PEP, KO, MO, one request each. The server fills in the latest completed session.
Questions
pays | rule | pays_dividend > 0.5Pays a dividend |
no_cut | rule | cut_last < 0.5Did not cut its last dividend |
yield3 | rule | div_yield_ttm > 3Yield above 3% |
div2 | English → rule | Has the stock paid more than $2 per share in dividends over the past year? |
ex_soon | rule | days_to_ex_div <= 30Goes ex-dividend within 30 days |
Answers
| Symbol | paysrule | no_cutrule | yield3rule | div2rule | ex_soonrule |
|---|---|---|---|---|---|
PG | 0.8591 | 0.8591 | 0.2091 | 0.9463 | 0.0537 |
PEP | 0.8591 | 0.8591 | 0.9463 | 0.9463 | 0.0537 |
KO | 0.8591 | 0.8591 | 0.0537 | 0.9463 | 0.2049 |
MO | 0.8591 | 0.8591 | 0.9463 | 0.9463 | 0.0537 |
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: Pays a dividend: true for PG, PEP, KO, MO of 4. Did not cut its last dividend: true for PG, PEP, KO, MO of 4. Yield above 3%: true for PEP, MO of 4. Has the stock paid more than $2 per share in dividends over the past year: true for PG, PEP, KO, MO of 4.
Payout facts per holding show whether trust income is on track; a cut would mean adjusting the distribution plan.
Request JSON (PG; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "PG"
},
"questions": {
"pays": {
"type": "yes_no",
"ask": "pays_dividend > 0.5"
},
"no_cut": {
"type": "yes_no",
"ask": "cut_last < 0.5"
},
"yield3": {
"type": "yes_no",
"ask": "div_yield_ttm > 3"
},
"div2": {
"type": "yes_no",
"instructions": "Has the stock paid more than $2 per share in dividends over the past year?"
},
"ex_soon": {
"type": "yes_no",
"ask": "days_to_ex_div <= 30"
}
}
}Response JSON (PG, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"pays": {
"yes_no": 0.8591,
"rule": "pays_dividend > 0.5",
"basis": "rule"
},
"no_cut": {
"yes_no": 0.8591,
"rule": "cut_last < 0.5",
"basis": "rule"
},
"yield3": {
"yes_no": 0.2091,
"rule": "div_yield_ttm > 3",
"basis": "rule"
},
"div2": {
"yes_no": 0.9463,
"rule": "div_ttm > 2",
"basis": "pattern"
},
"ex_soon": {
"yes_no": 0.0537,
"rule": "days_to_ex_div <= 30",
"basis": "rule"
}
},
"context": {
"symbol": "PG",
"as_of": "2026-10-30"
}
}Family office · example 14
Is the IPO window open? Growth proxies ARKK and IWM
The family has late-stage venture stakes that could list; read the growth-market mood from speculative and small-cap ETFs.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"ARKK"} then IWM, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
momentum | rule | roc(C, 20) > 5 and V > avg(V, 50) and C > sma(C, 50)Momentum with participation |
hh_hl | rule | (swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))Higher swing highs and higher swing lows |
vol_low | English → rule | Is 20-day historical volatility below 20%? |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
Answers
| Symbol | trendrule | momentumrule | hh_hlrule | vol_lowrule | rally5forecast |
|---|---|---|---|---|---|
ARKK | 0.8132 | 0.0701 | 0.0604 | 0.0537 | 0.681 |
IWM | 0.5564 | 0.0719 | 0.1294 | 0.9387 | 0.285 |
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: Is the stock above its 200-day moving average: true for ARKK of 2. Momentum with participation: true for none of 2. Higher swing highs and higher swing lows: true for none of 2. Is 20-day historical volatility below 20%: true for IWM of 2. Highest odds for “A 5% rally within a month”: ARKK at 68%.
Rising growth proxies with calm volatility are the conditions bankers look for; weak readings suggest waiting on any listing plans.
Request JSON (ARKK; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "ARKK"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"momentum": {
"type": "yes_no",
"ask": "roc(C, 20) > 5 and V > avg(V, 50) and C > sma(C, 50)"
},
"hh_hl": {
"type": "yes_no",
"ask": "(swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))"
},
"vol_low": {
"type": "yes_no",
"instructions": "Is 20-day historical volatility below 20%?"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
}
}
}Response JSON (ARKK, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.8132,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"momentum": {
"yes_no": 0.0701,
"rule": "roc(C, 20) > 5 and V > avg(V, 50) and C > sma(C, 50)",
"basis": "rule"
},
"hh_hl": {
"yes_no": 0.0604,
"rule": "(swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))",
"basis": "rule"
},
"vol_low": {
"yes_no": 0.0537,
"rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2",
"basis": "pattern"
},
"rally5": {
"yes_no": 0.681
}
},
"context": {
"symbol": "ARKK",
"as_of": "2026-10-30"
}
}Family office · example 15
Friday CIO email: the family's largest five positions
Every Friday afternoon, email the CIO each top position's trend and month-ahead odds.
- ScheduleFri at 15:30 ET
- State5 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"AAPL"} then NVDA, MSFT, SPY, GLD, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
above_50d | rule | C > sma(C, 50)Above the 50-day average |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
Answers
| Symbol | trendrule | above_50drule | drop5forecast | rally5forecast | Fired |
|---|---|---|---|---|---|
AAPL | 0.9463 | 0.9119 | 0.365 | 0.446 | line |
NVDA | 0.5455 | 0.0746 | 0.523 | 0.616 | line |
MSFT | 0.9463 | 0.7088 | 0.422 | 0.495 | line |
SPY | 0.9451 | 0.1128 | 0.203 | 0.229 | line |
GLD | 0.0537 | 0.0807 | 0.435 | 0.503 | line |
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→Emailcio{
"subject": "Weekly: AAPL",
"text": "AAPL (2026-10-30): above 200-day 95%, above 50-day 91%. Month ahead: 5% drop 36%, 5% rally 45%."
}{
"subject": "Weekly: NVDA",
"text": "NVDA (2026-10-30): above 200-day 55%, above 50-day 7%. Month ahead: 5% drop 52%, 5% rally 62%."
}{
"subject": "Weekly: MSFT",
"text": "MSFT (2026-10-30): above 200-day 95%, above 50-day 71%. Month ahead: 5% drop 42%, 5% rally 50%."
}{
"subject": "Weekly: SPY",
"text": "SPY (2026-10-30): above 200-day 95%, above 50-day 11%. Month ahead: 5% drop 20%, 5% rally 23%."
}{
"subject": "Weekly: GLD",
"text": "GLD (2026-10-30): above 200-day 5%, above 50-day 8%. Month ahead: 5% drop 44%, 5% rally 50%."
}What it means
Session of 2026-10-30, 5 symbols: Is the stock above its 200-day moving average: true for AAPL, MSFT, SPY of 5. Above the 50-day average: true for AAPL, MSFT of 5. Highest odds for “A 5% drawdown within a month”: NVDA at 52%. line fired for AAPL, NVDA, MSFT, SPY, GLD.
The CIO gets the same format every week for every large position, so changes stand out at a glance.
As a scheduled workflow (Fri at 15:30 ET)
Create it under Workflows in the console: it runs these questions for every symbol on the schedule and fires the actions per symbol. The answers above are what one run returned.
{
"name": "Friday CIO email: the family's largest five positions",
"symbols": "AAPL NVDA MSFT SPY GLD",
"days": [
5
],
"at_time": "15:30",
"model": "ora-fin-0.1.1",
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"above_50d": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "line",
"when": "trend >= 0",
"do": "email",
"connection": "cio",
"subject": "Weekly: {{symbol}}",
"message": "{{symbol}} ({{as_of}}): above 200-day {{trend|pct}}, above 50-day {{above_50d|pct}}. Month ahead: 5% drop {{drop5|pct}}, 5% rally {{rally5|pct}}."
}
]
}Request JSON (AAPL; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AAPL"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"above_50d": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "line",
"when": "trend >= 0",
"do": "email",
"connection": "cio",
"subject": "Weekly: {{symbol}}",
"message": "{{symbol}} ({{as_of}}): above 200-day {{trend|pct}}, above 50-day {{above_50d|pct}}. Month ahead: 5% drop {{drop5|pct}}, 5% rally {{rally5|pct}}."
}
],
"dry_run": true
}Response JSON (AAPL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.9463,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"above_50d": {
"yes_no": 0.9119,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"drop5": {
"yes_no": 0.365
},
"rally5": {
"yes_no": 0.446
}
},
"context": {
"symbol": "AAPL",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "line",
"fired": true,
"status": "dry_run",
"do": "email",
"connection": "cio",
"preview": {
"subject": "Weekly: AAPL",
"text": "AAPL (2026-10-30): above 200-day 95%, above 50-day 91%. Month ahead: 5% drop 36%, 5% rally 45%."
}
}
]
}Family office · example 16
Private credit exposure: what do BKLN and HYG say?
The family holds private credit funds; listed loan and high-yield ETFs give an early read on credit stress.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"BKLN"} then HYG, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
breakdown | rule | C < lowest(L, 20)Closed under the 20-day low |
lowest | rule | C < lowest(C, 60)Closed below every close of the previous 60 sessions |
atr_exp | rule | atr(14) > 1.2 * ref(atr(14), -10)ATR up 20% in two weeks |
down_week | forecast | Will the stock be lower in a week? Lower in a week |
Answers
| Symbol | trendrule | breakdownrule | lowestrule | atr_exprule | down_weekforecast |
|---|---|---|---|---|---|
BKLN | 0.8133 | 0.0609 | 0.0557 | 0.4422 | 0.434 |
HYG | 0.1914 | 0.0811 | 0.1168 | 0.0777 | 0.425 |
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 BKLN of 2. Closed under the 20-day low: true for none of 2. Closed below every close of the previous 60 sessions: true for none of 2. ATR up 20% in two weeks: true for none of 2. Highest odds for “Lower in a week”: BKLN at 43%.
Loan and high-yield ETFs breaking to new lows would prompt calls to the private credit managers about marks and defaults.
Request JSON (BKLN; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "BKLN"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"breakdown": {
"type": "yes_no",
"ask": "C < lowest(L, 20)"
},
"lowest": {
"type": "yes_no",
"ask": "C < lowest(C, 60)"
},
"atr_exp": {
"type": "yes_no",
"ask": "atr(14) > 1.2 * ref(atr(14), -10)"
},
"down_week": {
"type": "yes_no",
"instructions": "Will the stock be lower in a week?"
}
}
}Response JSON (BKLN, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.8133,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"breakdown": {
"yes_no": 0.0609,
"rule": "C < lowest(L, 20)",
"basis": "rule"
},
"lowest": {
"yes_no": 0.0557,
"rule": "C < lowest(C, 60)",
"basis": "rule"
},
"atr_exp": {
"yes_no": 0.4422,
"rule": "atr(14) > 1.2 * ref(atr(14), -10)",
"basis": "rule"
},
"down_week": {
"yes_no": 0.434
}
},
"context": {
"symbol": "BKLN",
"as_of": "2026-10-30"
}
}Family office · example 17
Dollar-cost averaging into VTI: buy more on weak weeks
Automate the family's monthly buy so it doubles on weak weeks and stays normal otherwise.
- StateVTI
- Questions4 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"VTI"} The server fills in the latest completed session.
Questions
down_week | English → rule | Is the stock down over the last week? |
rsi40 | English → rule | Is RSI below 40? |
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
| Question | Answer | Reading |
|---|---|---|
down_weekIs the stock down over the last week compiled to C < C[-5] | 0.6846 | true |
rsi40Is RSI below 40 compiled to rsi(C, 14) < 40 | 0.3777 | false |
trendIs the stock above its 200-day moving average compiled to C > sma(C, 200) | 0.9415 | true |
up_weekHigher in a week | 0.57 | 57% · close to even |
Actions
Rules on the answers decide what to send.
down_week >= 0.6 and trend >= 0.6→Webhookbroker-omselse→Webhookbroker-oms{
"side": "buy",
"symbol": "VTI",
"notional_usd": 50000,
"reason": "dca_weak_week",
"as_of": "2026-10-30"
}What it means
For VTI on the session of 2026-10-30: True now: Is the stock down over the last week; Is the stock above its 200-day moving average. Not true: Is RSI below 40. Forecasts: Higher in a week 57%. Fired: double (Webhook → broker-oms).
The rule only changes the size of a buy that happens anyway; a down week inside an uptrend gets the larger amount.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VTI"
},
"questions": {
"down_week": {
"type": "yes_no",
"instructions": "Is the stock down over the last week?"
},
"rsi40": {
"type": "yes_no",
"instructions": "Is RSI below 40?"
},
"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": "double",
"when": "down_week >= 0.6 and trend >= 0.6",
"do": "webhook",
"connection": "broker-oms",
"body": {
"side": "buy",
"symbol": "{{symbol}}",
"notional_usd": 50000,
"reason": "dca_weak_week",
"as_of": "{{as_of}}"
}
},
{
"id": "normal",
"when": "else",
"do": "webhook",
"connection": "broker-oms",
"body": {
"side": "buy",
"symbol": "{{symbol}}",
"notional_usd": 25000,
"reason": "dca_regular",
"as_of": "{{as_of}}"
}
}
],
"dry_run": true
}Response JSON (VTI, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"down_week": {
"yes_no": 0.6846,
"rule": "C < C[-5]",
"basis": "pattern"
},
"rsi40": {
"yes_no": 0.3777,
"rule": "rsi(C, 14) < 40",
"basis": "comparison"
},
"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": "double",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "broker-oms",
"preview": {
"body": {
"side": "buy",
"symbol": "VTI",
"notional_usd": 50000,
"reason": "dca_weak_week",
"as_of": "2026-10-30"
}
}
},
{
"id": "normal",
"fired": false,
"status": "skipped"
}
]
}Family office · example 18
Volatility budget for a TSLA position the family won't sell
Some positions are held for conviction; measure how much they move so the rest of the book can be sized around them.
- 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%? |
range | English → rule | Was today's range more than 1.5 ATR? |
outside | English → rule | Is today an outside day? |
vol_up | forecast | Will volatility be higher over the next month? Higher volatility next month |
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 |
|---|---|---|
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 |
rangeWas today's range more than 1.5 ATR compiled to (H - L) > 1.5 * atr(14) | 0.1662 | false |
outsideIs today an outside day compiled to outside_bar() | 0.3172 | false |
vol_upHigher volatility next month | 0.446 | 45% · close to even |
big5A big move either way in 5 days | 0.248 | 25% · unlikely |
What it means
For TSLA on the session of 2026-10-30: True now: A typical day moves more than 3%. Not true: Is 20-day historical volatility above 40%; Was today's range more than 1.5 ATR; Is today an outside day. Forecasts: Higher volatility next month 45%; A big move either way in 5 days 25%.
If the conviction holding is in a high-volatility regime, the family trims risk elsewhere rather than in the position itself.
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%?"
},
"range": {
"type": "yes_no",
"instructions": "Was today's range more than 1.5 ATR?"
},
"outside": {
"type": "yes_no",
"instructions": "Is today an outside day?"
},
"vol_up": {
"type": "yes_no",
"instructions": "Will volatility be higher over the next month?"
},
"big5": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
}
}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"
},
"range": {
"yes_no": 0.1662,
"rule": "(H - L) > 1.5 * atr(14)",
"basis": "pattern"
},
"outside": {
"yes_no": 0.3172,
"rule": "outside_bar()",
"basis": "pattern"
},
"vol_up": {
"yes_no": 0.446
},
"big5": {
"yes_no": 0.248
}
},
"context": {
"symbol": "TSLA",
"as_of": "2026-10-30"
}
}Family office · example 19
Biotech sleeve: XBI and IBB trend and breakout check
The family funds medical research and holds biotech ETFs; check whether the sector is breaking out.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"XBI"} then IBB, one request each. The server fills in the latest completed session.
Questions
breakout | rule | C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)20-day breakout on 1.5× volume |
near_high | rule | C >= 0.98 * max(H, 252)Within 2% of the 52-week high |
cci | rule | cci(20) > 100CCI above 100 |
hh_hl | English → rule | Is the stock making higher swing highs and higher swing lows? |
rally10 | forecast | Will it rally at least 10% at some point in the next month? A 10% rally within a month |
Answers
| Symbol | breakoutrule | near_highrule | ccirule | hh_hlrule | rally10forecast |
|---|---|---|---|---|---|
XBI | 0.0665 | 0.0783 | 0.6401 | 0.119 | 0.579 |
IBB | 0.4676 | 0.4663 | 0.8241 | 0.2804 | 0.487 |
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: 20-day breakout on 1.5× volume: true for none of 2. Within 2% of the 52-week high: true for none of 2. CCI above 100: true for XBI, IBB of 2. Is the stock making higher swing highs and higher swing lows: true for none of 2. Highest odds for “A 10% rally within a month”: XBI at 58%.
A volume-backed breakout with strong CCI is the case for adding; without it the sleeve stays at its weight.
Request JSON (XBI; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XBI"
},
"questions": {
"breakout": {
"type": "yes_no",
"ask": "C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)"
},
"near_high": {
"type": "yes_no",
"ask": "C >= 0.98 * max(H, 252)"
},
"cci": {
"type": "yes_no",
"ask": "cci(20) > 100"
},
"hh_hl": {
"type": "yes_no",
"instructions": "Is the stock making higher swing highs and higher swing lows?"
},
"rally10": {
"type": "yes_no",
"instructions": "Will it rally at least 10% at some point in the next month?"
}
}
}Response JSON (XBI, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"breakout": {
"yes_no": 0.0665,
"rule": "C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"near_high": {
"yes_no": 0.0783,
"rule": "C >= 0.98 * max(H, 252)",
"basis": "rule"
},
"cci": {
"yes_no": 0.6401,
"rule": "cci(20) > 100",
"basis": "rule"
},
"hh_hl": {
"yes_no": 0.119,
"rule": "(swinghigh(5, 1) > swinghigh(5, 2)) and (swinglow(5, 1) > swinglow(5, 2))",
"basis": "pattern"
},
"rally10": {
"yes_no": 0.579
}
},
"context": {
"symbol": "XBI",
"as_of": "2026-10-30"
}
}Family office · example 20
Estate planning: is BLK near a high or a low today?
For a gifting plan valued on a date, know where the stock sits in its range to choose a better valuation window.
- StateBLK
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"BLK"} The server fills in the latest completed session.
Questions
near_high | English → rule | Is the stock within 5% of its 52-week high? |
near_low | English → rule | Is the stock within 10% of its 52-week low? |
range_top | English → rule | Is the stock in the top 10% of its 20-day range? |
lower_third | rule | C < lowest(L, 20) + (highest(H, 20) - lowest(L, 20)) / 3In the lower third of its 20-day range |
down_week | forecast | Will the stock be lower in a week? Lower in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
near_highIs the stock within 5% of its 52-week high compiled to abs(C / max(H, 252) - 1) <= 0.05 | 0.7709 | true |
near_lowIs the stock within 10% of its 52-week low compiled to abs(C / min(L, 252) - 1) <= 0.1 | 0.0537 | false |
range_topIs the stock in the top 10% of its 20-day range compiled to (C - min(L, 20)) / (max(H, 20) - min(L, 20)) >= 0.9 | 0.262 | false |
lower_thirdIn the lower third of its 20-day range | 0.0957 | false |
down_weekLower in a week | 0.446 | 45% · close to even |
What it means
For BLK on the session of 2026-10-30: True now: Is the stock within 5% of its 52-week high. Not true: Is the stock within 10% of its 52-week low; Is the stock in the top 10% of its 20-day range; In the lower third of its 20-day range. Forecasts: Lower in a week 45%.
Gifts valued near a low transfer more shares for the same exemption; the facts show where the stock sits today, the planners pick the date.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "BLK"
},
"questions": {
"near_high": {
"type": "yes_no",
"instructions": "Is the stock within 5% of its 52-week high?"
},
"near_low": {
"type": "yes_no",
"instructions": "Is the stock within 10% of its 52-week low?"
},
"range_top": {
"type": "yes_no",
"instructions": "Is the stock in the top 10% of its 20-day range?"
},
"lower_third": {
"type": "yes_no",
"ask": "C < lowest(L, 20) + (highest(H, 20) - lowest(L, 20)) / 3"
},
"down_week": {
"type": "yes_no",
"instructions": "Will the stock be lower in a week?"
}
}
}Response JSON (BLK, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"near_high": {
"yes_no": 0.7709,
"rule": "abs(C / max(H, 252) - 1) <= 0.05",
"basis": "comparison"
},
"near_low": {
"yes_no": 0.0537,
"rule": "abs(C / min(L, 252) - 1) <= 0.1",
"basis": "comparison"
},
"range_top": {
"yes_no": 0.262,
"rule": "(C - min(L, 20)) / (max(H, 20) - min(L, 20)) >= 0.9",
"basis": "pattern"
},
"lower_third": {
"yes_no": 0.0957,
"rule": "C < lowest(L, 20) + (highest(H, 20) - lowest(L, 20)) / 3",
"basis": "rule"
},
"down_week": {
"yes_no": 0.446
}
},
"context": {
"symbol": "BLK",
"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: Financial advisor / RIA, Wealth manager, Hedge fund PM, Quant researcher, Portfolio manager (long-only), Risk manager, Private equity, VC / growth investor, Fund-of-funds allocator.