Use cases · Institutions
Insurance investment office: 20 ways to use Ora
Liability-aware portfolios: rates, credit, income and drawdown limits. Each example is a complete, runnable request with the real answers it returned (32 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 (44)
sma 11offset 8ref 7rsi 4atr 4highest 3log 3abs 3avg 2ema 2max 2div_yield_ttm 2sqrt 2std 2last_earnings_move 2min 2sum 2linreg 1macd 1macdsignal 1lowest 1cut_last 1pays_dividend 1years_of_growth 1evening_star 1harami_bear 1cci 1miss_eps_last 1misses_last4 1gravestone_doji 1shooting_star 1between 1engulfing_bull 1morning_star 1piercing_line 1days_to_earnings 1roc 1atr_pct 1three_white_soldiers 1doji 1hammer 1hanging_man 1outside_bar 1sign 1
Examples 1–10 of 20 · page 1 of 2
Insurance investment office · example 1
TLT: is the duration trend turning for the ALM desk?
Asset-liability matching depends on rates. Read the trend in long Treasuries before the monthly ALM meeting.
- StateTLT
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"TLT"} The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
long | English → rule | Is the stock above its 200-day moving average? |
macd | English → rule | Is the MACD line above its signal line? |
linreg | rule | linreg(C, 50) > ref(linreg(C, 50), -10)50-day regression line higher than two weeks ago |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
trendAbove the 50-day average | 0.8482 | true |
longIs the stock above its 200-day moving average compiled to C > sma(C, 200) | 0.1127 | false |
macdIs the MACD line above its signal line compiled to macd(C) > macdsignal(C) | 0.9084 | true |
linreg50-day regression line higher than two weeks ago | 0.8753 | true |
up_weekHigher in a week | 0.561 | 56% · close to even |
What it means
For TLT on the session of 2026-10-30: True now: Above the 50-day average; Is the MACD line above its signal line; 50-day regression line higher than two weeks ago. Not true: Is the stock above its 200-day moving average. Forecasts: Higher in a week 56%.
Rising bond prices mean falling yields, which lifts the value of long liabilities too; the desk uses the trend read to frame the duration-gap discussion.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TLT"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"long": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"macd": {
"type": "yes_no",
"instructions": "Is the MACD line above its signal line?"
},
"linreg": {
"type": "yes_no",
"ask": "linreg(C, 50) > ref(linreg(C, 50), -10)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (TLT, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.8482,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"long": {
"yes_no": 0.1127,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"macd": {
"yes_no": 0.9084,
"rule": "macd(C) > macdsignal(C)",
"basis": "comparison"
},
"linreg": {
"yes_no": 0.8753,
"rule": "linreg(C, 50) > ref(linreg(C, 50), -10)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.561
}
},
"context": {
"symbol": "TLT",
"as_of": "2026-10-30"
}
}Insurance investment office · example 2
HYG vs LQD: is credit risk appetite fading?
High yield weakening while investment grade holds is an early credit warning. Compare the two bond funds on the same rules.
- State2 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"HYG"} then LQD, 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 |
down_vol | rule | C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)Down on heavy volume |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | trendrule | breakdownrule | down_volrule | drop5forecast | Fired |
|---|---|---|---|---|---|
HYG | 0.1914 | 0.0811 | 0.1932 | 0.009 | none |
LQD | 0.6552 | 0.0537 | 0.1547 | 0.022 | 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.
breakdown >= 0.6→Emailcredit-committeeWhat it means
Session of 2026-10-30, 2 symbols: Above the 50-day average: true for LQD of 2. Closed under the 20-day low: true for none of 2. Down on heavy volume: true for none of 2. Highest odds for “A 5% drawdown within a month”: LQD at 2%. credit_warning fired for none.
A breakdown in HYG without one in LQD is the classic spread-widening signal; the committee reviews before any reallocation.
Request JSON (HYG; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "HYG"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"breakdown": {
"type": "yes_no",
"ask": "C < lowest(L, 20)"
},
"down_vol": {
"type": "yes_no",
"ask": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "credit_warning",
"when": "breakdown >= 0.6",
"do": "email",
"connection": "credit-committee",
"subject": "{{symbol}} broke its 20-day low ({{as_of}})",
"message": "{{symbol}} closed under its 20-day low (rule {{breakdown|pct}}), down on volume {{down_vol|pct}}. Review credit-risk budget usage."
}
],
"dry_run": true
}Response JSON (HYG, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.1914,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"breakdown": {
"yes_no": 0.0811,
"rule": "C < lowest(L, 20)",
"basis": "rule"
},
"down_vol": {
"yes_no": 0.1932,
"rule": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"drop5": {
"yes_no": 0.009
}
},
"context": {
"symbol": "HYG",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "credit_warning",
"fired": false,
"status": "skipped"
}
]
}Insurance investment office · example 3
TIP: is the inflation hedge working?
Check the inflation-linked bond fund's trend and momentum for the quarterly inflation-risk report.
- StateTIP
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"TIP"} The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
sma50_up | rule | sma(C, 50) > ref(sma(C, 50), -10)The 50-day average is rising |
rsi50 | rule | rsi(C, 14) > 50RSI above 50 |
ema | rule | C > ema(C, 50)Above its 50-day exponential average |
vol_up | forecast | Will volatility be higher over the next month? Higher volatility next month |
Answers
| Question | Answer | Reading |
|---|---|---|
trendIs the stock above its 200-day moving average compiled to C > sma(C, 200) | 0.3682 | false |
sma50_upThe 50-day average is rising | 0.1203 | false |
rsi50RSI above 50 | 0.9112 | true |
emaAbove its 50-day exponential average | 0.866 | true |
vol_upHigher volatility next month | 0.52 | 52% · close to even |
Actions
Rules on the answers decide what to send.
trend >= 0→Emailinvestment-committee{
"subject": "TIP inflation hedge read (2026-10-30)",
"text": "TIP: above the 200-day 37%, 50-day rising 12%, above the 50-day EMA 87%. Higher volatility next month: 52%."
}What it means
For TIP on the session of 2026-10-30: True now: RSI above 50; Above its 50-day exponential average. Not true: Is the stock above its 200-day moving average; The 50-day average is rising. Forecasts: Higher volatility next month 52%. Fired: hedge_report (Email → investment-committee).
Trend rules true mean the hedge has been adding value lately; the report states the facts and leaves the hedge ratio to the committee.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TIP"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"sma50_up": {
"type": "yes_no",
"ask": "sma(C, 50) > ref(sma(C, 50), -10)"
},
"rsi50": {
"type": "yes_no",
"ask": "rsi(C, 14) > 50"
},
"ema": {
"type": "yes_no",
"ask": "C > ema(C, 50)"
},
"vol_up": {
"type": "yes_no",
"instructions": "Will volatility be higher over the next month?"
}
},
"actions": [
{
"id": "hedge_report",
"when": "trend >= 0",
"do": "email",
"connection": "investment-committee",
"subject": "{{symbol}} inflation hedge read ({{as_of}})",
"message": "{{symbol}}: above the 200-day {{trend|pct}}, 50-day rising {{sma50_up|pct}}, above the 50-day EMA {{ema|pct}}. Higher volatility next month: {{vol_up|pct}}."
}
],
"dry_run": true
}Response JSON (TIP, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.3682,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"sma50_up": {
"yes_no": 0.1203,
"rule": "sma(C, 50) > ref(sma(C, 50), -10)",
"basis": "rule"
},
"rsi50": {
"yes_no": 0.9112,
"rule": "rsi(C, 14) > 50",
"basis": "rule"
},
"ema": {
"yes_no": 0.866,
"rule": "C > ema(C, 50)",
"basis": "rule"
},
"vol_up": {
"yes_no": 0.52
}
},
"context": {
"symbol": "TIP",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "hedge_report",
"fired": true,
"status": "dry_run",
"do": "email",
"connection": "investment-committee",
"preview": {
"subject": "TIP inflation hedge read (2026-10-30)",
"text": "TIP: above the 200-day 37%, 50-day rising 12%, above the 50-day EMA 87%. Higher volatility next month: 52%."
}
}
]
}Insurance investment office · example 4
Equity sleeve drawdown limit: VTI
Regulatory capital charges rise with equity risk. Alert the CIO if the US equity fund is in a 20% drawdown or falling fast.
- StateVTI
- Questions4 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"VTI"} The server fills in the latest completed session.
Questions
drawdown | rule | C < 0.8 * max(H, 252)More than 20% off the 52-week high |
down5 | English → rule | Is the stock down more than 5% over the last month? |
chandelier | rule | C < highest(H, 22) - 3 * atr(22)Chandelier exit: 3 ATR under the 22-day high |
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 |
|---|---|---|
drawdownMore than 20% off the 52-week high | 0.0537 | false |
down5Is the stock down more than 5% over the last month compiled to C / C[-21] - 1 < -0.05 | 0.0662 | false |
chandelierChandelier exit: 3 ATR under the 22-day high | 0.6764 | true |
drop10A 10% drawdown within a month | 0.189 | 19% · unlikely |
Actions
Rules on the answers decide what to send.
drawdown >= 0.6→Emailciodown5 >= 0.6 or chandelier >= 0.6→Slackinvestment-office{
"text": "VTI (2026-10-30): down over 5% this month (7%) or below its chandelier stop (68%). Watch the limit."
}What it means
For VTI on the session of 2026-10-30: True now: Chandelier exit: 3 ATR under the 22-day high. Not true: More than 20% off the 52-week high; Is the stock down more than 5% over the last month. Forecasts: A 10% drawdown within a month 19%. Fired: warning (Slack → investment-office).
The limit email needs the drawdown fact; the earlier warning goes to the team channel so nobody is surprised at month end.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VTI"
},
"questions": {
"drawdown": {
"type": "yes_no",
"ask": "C < 0.8 * max(H, 252)"
},
"down5": {
"type": "yes_no",
"instructions": "Is the stock down more than 5% over the last month?"
},
"chandelier": {
"type": "yes_no",
"ask": "C < highest(H, 22) - 3 * atr(22)"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
}
},
"actions": [
{
"id": "limit_breach",
"when": "drawdown >= 0.6",
"do": "email",
"connection": "cio",
"subject": "{{symbol}}: equity drawdown limit ({{as_of}})",
"message": "{{symbol}} is more than 20% below its 52-week high. 10% further drawdown odds: {{drop10|pct}}. Capital-charge review needed."
},
{
"id": "warning",
"when": "down5 >= 0.6 or chandelier >= 0.6",
"do": "slack",
"connection": "investment-office",
"message": "{{symbol}} ({{as_of}}): down over 5% this month ({{down5|pct}}) or below its chandelier stop ({{chandelier|pct}}). Watch the limit."
}
],
"dry_run": true
}Response JSON (VTI, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"drawdown": {
"yes_no": 0.0537,
"rule": "C < 0.8 * max(H, 252)",
"basis": "rule"
},
"down5": {
"yes_no": 0.0662,
"rule": "C / C[-21] - 1 < -0.05",
"basis": "pattern"
},
"chandelier": {
"yes_no": 0.6764,
"rule": "C < highest(H, 22) - 3 * atr(22)",
"basis": "rule"
},
"drop10": {
"yes_no": 0.189
}
},
"context": {
"symbol": "VTI",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "limit_breach",
"fired": false,
"status": "skipped"
},
{
"id": "warning",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "investment-office",
"preview": {
"text": "VTI (2026-10-30): down over 5% this month (7%) or below its chandelier stop (68%). Watch the limit."
}
}
]
}Insurance investment office · example 5
Dividend payer for the general account: is JNJ still paying and growing?
The general account holds dividend payers for steady income. Confirm this one still pays, grows and has not cut.
- StateJNJ
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"JNJ"} The server fills in the latest completed session.
Questions
pays | rule | pays_dividend > 0.5Pays a dividend |
grower | rule | years_of_growth >= 10Ten years of dividend growth |
cut | English → rule | Did the stock cut its dividend last time? |
yield3 | English → rule | Is the dividend yield above 3%? |
raise_next | forecast | Will the company raise its dividend next year? Raising the dividend next year |
Answers
| Question | Answer | Reading |
|---|---|---|
paysPays a dividend | 0.8591 | true |
growerTen years of dividend growth | 0.9463 | true |
cutDid the stock cut its dividend last time compiled to cut_last > 0.5 | 0.1409 | false |
yield3Is the dividend yield above 3% compiled to div_yield_ttm > 3 | 0.0648 | false |
raise_nextRaising the dividend next year | 0.495 | 50% · close to even |
What it means
For JNJ on the session of 2026-10-30: True now: Pays a dividend; Ten years of dividend growth. Not true: Did the stock cut its dividend last time; Is the dividend yield above 3%. Forecasts: Raising the dividend next year 50%.
Payout facts come from the dividend record; a cut would trigger a review of the income budget, the forecast is context only.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "JNJ"
},
"questions": {
"pays": {
"type": "yes_no",
"ask": "pays_dividend > 0.5"
},
"grower": {
"type": "yes_no",
"ask": "years_of_growth >= 10"
},
"cut": {
"type": "yes_no",
"instructions": "Did the stock cut its dividend last time?"
},
"yield3": {
"type": "yes_no",
"instructions": "Is the dividend yield above 3%?"
},
"raise_next": {
"type": "yes_no",
"instructions": "Will the company raise its dividend next year?"
}
}
}Response JSON (JNJ, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"pays": {
"yes_no": 0.8591,
"rule": "pays_dividend > 0.5",
"basis": "rule"
},
"grower": {
"yes_no": 0.9463,
"rule": "years_of_growth >= 10",
"basis": "rule"
},
"cut": {
"yes_no": 0.1409,
"rule": "cut_last > 0.5",
"basis": "pattern"
},
"yield3": {
"yes_no": 0.0648,
"rule": "div_yield_ttm > 3",
"basis": "pattern"
},
"raise_next": {
"yes_no": 0.495
}
},
"context": {
"symbol": "JNJ",
"as_of": "2026-10-30"
}
}Insurance investment office · example 6
VNQ: real-estate sleeve health
Insurers hold real estate for long-dated income. Check REIT trend, income and a possible top pattern.
- StateVNQ
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"VNQ"} The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
yield3 | rule | div_yield_ttm > 3Yield above 3% |
evening | rule | evening_star()evening star candle: A green bar, a small bar that stays above its close, then a red bar closing below the middle of the first. |
harami_bear | rule | harami_bear()harami bear candle: A small red body inside yesterday's green body. |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
trendIs the stock above its 200-day moving average compiled to C > sma(C, 200) | 0.6285 | true |
yield3Yield above 3% | 0.8893 | true |
eveningevening star candle: A green bar, a small bar that stays above its close, then a red bar closing below the middle of the first. | 0.0581 | false |
harami_bearharami bear candle: A small red body inside yesterday's green body. | 0.0856 | false |
drop5A 5% drawdown within a month | 0.218 | 22% · unlikely |
What it means
For VNQ on the session of 2026-10-30: True now: Is the stock above its 200-day moving average; Yield above 3%. Not true: evening star candle: A green bar, a small bar that stays above its close, then a red bar closing below the middle of the first.; harami bear candle: A small red body inside yesterday's green body.. Forecasts: A 5% drawdown within a month 22%.
A bearish three-bar or harami pattern after a rise is a caution for the quarterly review, not a sale on its own.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VNQ"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"yield3": {
"type": "yes_no",
"ask": "div_yield_ttm > 3"
},
"evening": {
"type": "yes_no",
"ask": "evening_star()"
},
"harami_bear": {
"type": "yes_no",
"ask": "harami_bear()"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
}
}Response JSON (VNQ, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.6285,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"yield3": {
"yes_no": 0.8893,
"rule": "div_yield_ttm > 3",
"basis": "rule"
},
"evening": {
"yes_no": 0.0581,
"rule": "evening_star()",
"basis": "rule"
},
"harami_bear": {
"yes_no": 0.0856,
"rule": "harami_bear()",
"basis": "rule"
},
"drop5": {
"yes_no": 0.218
}
},
"context": {
"symbol": "VNQ",
"as_of": "2026-10-30"
}
}Insurance investment office · example 7
Volatility regime check on SPY before rebalancing
Rebalance into equities in calm regimes, wait in turbulent ones. Read SPY's realized volatility and expansion before the trade.
- StateSPY
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"SPY"} The server fills in the latest completed session.
Questions
hv_low | English → rule | Is 20-day historical volatility below 20%? |
vol5 | English → rule | Is 5-day volatility higher than 20-day volatility? |
atr_exp | rule | atr(14) > 1.2 * ref(atr(14), -10)ATR up 20% in two weeks |
vol_rise | forecast | Will volatility rise over the next 5 days? Volatility rising over 5 days |
hv30 | forecast | Will annualized volatility over the next 21 sessions exceed 30%? Next-month volatility above 30% |
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.9463 | true |
vol5Is 5-day volatility higher than 20-day volatility compiled to std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19) | 0.8872 | true |
atr_expATR up 20% in two weeks | 0.2117 | false |
vol_riseVolatility rising over 5 days | 0.558 | 56% · close to even |
hv30Next-month volatility above 30% | 0.564 | 56% · close to even |
Actions
Rules on the answers decide what to send.
hv_low >= 0.6 and vol_rise < 0.6→Webhookrebalancing-systemelse→Slackinvestment-office{
"ticket": "rebalance_equity",
"underlying": "SPY",
"as_of": "2026-10-30",
"regime": "calm",
"p_hv_low": 0.9463,
"p_vol_rise": 0.558
}What it means
For SPY on the session of 2026-10-30: True now: Is 20-day historical volatility below 20%; Is 5-day volatility higher than 20-day volatility. Not true: ATR up 20% in two weeks. Forecasts: Volatility rising over 5 days 56%; Next-month volatility above 30% 56%. Fired: go (Webhook → rebalancing-system).
The ticket only opens in a calm regime with no rising-volatility forecast; otherwise the team waits and the channel says why.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"hv_low": {
"type": "yes_no",
"instructions": "Is 20-day historical volatility below 20%?"
},
"vol5": {
"type": "yes_no",
"instructions": "Is 5-day volatility higher than 20-day volatility?"
},
"atr_exp": {
"type": "yes_no",
"ask": "atr(14) > 1.2 * ref(atr(14), -10)"
},
"vol_rise": {
"type": "yes_no",
"instructions": "Will volatility rise over the next 5 days?"
},
"hv30": {
"type": "yes_no",
"instructions": "Will annualized volatility over the next 21 sessions exceed 30%?"
}
},
"actions": [
{
"id": "go",
"when": "hv_low >= 0.6 and vol_rise < 0.6",
"do": "webhook",
"connection": "rebalancing-system",
"body": {
"ticket": "rebalance_equity",
"underlying": "{{symbol}}",
"as_of": "{{as_of}}",
"regime": "calm",
"p_hv_low": "{{hv_low}}",
"p_vol_rise": "{{vol_rise}}"
}
},
{
"id": "wait",
"when": "else",
"do": "slack",
"connection": "investment-office",
"message": "{{symbol}} ({{as_of}}): volatility not calm (20-day under 20% {{hv_low|pct}}, rising over 5 days {{vol_rise|pct}}). Hold the rebalance."
}
],
"dry_run": true
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"hv_low": {
"yes_no": 0.9463,
"rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2",
"basis": "pattern"
},
"vol5": {
"yes_no": 0.8872,
"rule": "std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19)",
"basis": "pattern"
},
"atr_exp": {
"yes_no": 0.2117,
"rule": "atr(14) > 1.2 * ref(atr(14), -10)",
"basis": "rule"
},
"vol_rise": {
"yes_no": 0.558
},
"hv30": {
"yes_no": 0.564
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "go",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "rebalancing-system",
"preview": {
"body": {
"ticket": "rebalance_equity",
"underlying": "SPY",
"as_of": "2026-10-30",
"regime": "calm",
"p_hv_low": 0.9463,
"p_vol_rise": 0.558
}
}
},
{
"id": "wait",
"fired": false,
"status": "skipped"
}
]
}Insurance investment office · example 8
EMB: emerging-market debt risk read
Emerging-market bonds are a yield pickup with currency risk. Check trend, breakout and momentum on the EM debt fund.
- StateEMB
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"EMB"} The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
rsi50 | rule | rsi(C, 14) > 50RSI above 50 |
breakout | rule | C > highest(C, 20)20-day closing breakout |
cci | rule | cci(20) < -100CCI below -100 (weak relative to its mean) |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
trendAbove the 50-day average | 0.2584 | false |
rsi50RSI above 50 | 0.6777 | true |
breakout20-day closing breakout | 0.3984 | false |
cciCCI below -100 (weak relative to its mean) | 0.0649 | false |
up_weekHigher in a week | 0.51 | 51% · close to even |
What it means
For EMB on the session of 2026-10-30: True now: RSI above 50. Not true: Above the 50-day average; 20-day closing breakout; CCI below -100 (weak relative to its mean). Forecasts: Higher in a week 51%.
EMB below its 50-day with weak CCI is the picture that pressures the allocation; the desk reviews it with the dollar trend from the FX team.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "EMB"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"rsi50": {
"type": "yes_no",
"ask": "rsi(C, 14) > 50"
},
"breakout": {
"type": "yes_no",
"ask": "C > highest(C, 20)"
},
"cci": {
"type": "yes_no",
"ask": "cci(20) < -100"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (EMB, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.2584,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"rsi50": {
"yes_no": 0.6777,
"rule": "rsi(C, 14) > 50",
"basis": "rule"
},
"breakout": {
"yes_no": 0.3984,
"rule": "C > highest(C, 20)",
"basis": "rule"
},
"cci": {
"yes_no": 0.0649,
"rule": "cci(20) < -100",
"basis": "rule"
},
"up_week": {
"yes_no": 0.51
}
},
"context": {
"symbol": "EMB",
"as_of": "2026-10-30"
}
}Insurance investment office · example 9
Weekly ALM digest: bonds, credit and equities
Every Friday after the close, the investment office gets one trend row per core fund for the ALM pack.
- ScheduleFri at 17:00 ET
- State4 symbols
- Questions3 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"TLT"} then LQD, HYG, VTI, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
long | 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 | trendrule | longrule | drop5forecast | Fired |
|---|---|---|---|---|
TLT | 0.8482 | 0.1127 | 0.164 | pack_row |
LQD | 0.6552 | 0.0841 | 0.022 | pack_row |
HYG | 0.1914 | 0.1909 | 0.009 | pack_row |
VTI | 0.1242 | 0.9415 | 0.187 | pack_row |
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→Webhookalm-pack{
"fund": "TLT",
"as_of": "2026-10-30",
"above_50d": 0.8482,
"above_200d": 0.1127,
"p_drop5": 0.164
}{
"fund": "LQD",
"as_of": "2026-10-30",
"above_50d": 0.6552,
"above_200d": 0.0841,
"p_drop5": 0.022
}{
"fund": "HYG",
"as_of": "2026-10-30",
"above_50d": 0.1914,
"above_200d": 0.1909,
"p_drop5": 0.009
}{
"fund": "VTI",
"as_of": "2026-10-30",
"above_50d": 0.1242,
"above_200d": 0.9415,
"p_drop5": 0.187
}What it means
Session of 2026-10-30, 4 symbols: Above the 50-day average: true for TLT, LQD of 4. Is the stock above its 200-day moving average: true for VTI of 4. Highest odds for “A 5% drawdown within a month”: VTI at 19%. pack_row fired for TLT, LQD, HYG, VTI.
Every fund posts a row; the pack shows the facts and the drawdown odds side by side for the committee.
As a scheduled workflow (Fri at 17: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 ALM digest: bonds, credit and equities",
"symbols": "TLT LQD HYG VTI",
"days": [
5
],
"at_time": "17:00",
"model": "ora-fin-0.1.1",
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"long": {
"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": "pack_row",
"when": "trend >= 0",
"do": "webhook",
"connection": "alm-pack",
"body": {
"fund": "{{symbol}}",
"as_of": "{{as_of}}",
"above_50d": "{{trend}}",
"above_200d": "{{long}}",
"p_drop5": "{{drop5}}"
}
}
]
}Request JSON (TLT; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TLT"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"long": {
"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": "pack_row",
"when": "trend >= 0",
"do": "webhook",
"connection": "alm-pack",
"body": {
"fund": "{{symbol}}",
"as_of": "{{as_of}}",
"above_50d": "{{trend}}",
"above_200d": "{{long}}",
"p_drop5": "{{drop5}}"
}
}
],
"dry_run": true
}Response JSON (TLT, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.8482,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"long": {
"yes_no": 0.1127,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"drop5": {
"yes_no": 0.164
}
},
"context": {
"symbol": "TLT",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "pack_row",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "alm-pack",
"preview": {
"body": {
"fund": "TLT",
"as_of": "2026-10-30",
"above_50d": 0.8482,
"above_200d": 0.1127,
"p_drop5": 0.164
}
}
}
]
}Insurance investment office · example 10
Bank bond issuer BAC: earnings misses as a credit flag
The portfolio owns bank bonds. Equity-side earnings misses and drawdowns are early warnings for the credit analysts.
- StateBAC
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"BAC"} The server fills in the latest completed session.
Questions
miss | English → rule | Did the stock miss EPS estimates last quarter? |
any_miss | English → rule | Has the stock missed EPS estimates in any of the last 4 quarters? |
drawdown | rule | C < 0.8 * max(H, 252)More than 20% off the 52-week high |
earn_fell | English → rule | Did the stock fall after its last earnings report? |
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 |
|---|---|---|
missDid the stock miss EPS estimates last quarter compiled to miss_eps_last > 0.5 | 0.8591 | true |
any_missHas the stock missed EPS estimates in any of the last 4 quarters compiled to misses_last4 >= 1 | 0.55 | on the line (true) |
drawdownMore than 20% off the 52-week high | 0.7068 | true |
earn_fellDid the stock fall after its last earnings report compiled to last_earnings_move < 0 | 0.9463 | true |
drop10A 10% drawdown within a month | 0.446 | 45% · close to even |
What it means
For BAC on the session of 2026-10-30: True now: Did the stock miss EPS estimates last quarter; More than 20% off the 52-week high; Did the stock fall after its last earnings report. On the line: Has the stock missed EPS estimates in any of the last 4 quarters. Forecasts: A 10% drawdown within a month 45%.
A miss with a falling stock is a reason for the credit analyst to re-check the issuer; it is not a rating action.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "BAC"
},
"questions": {
"miss": {
"type": "yes_no",
"instructions": "Did the stock miss EPS estimates last quarter?"
},
"any_miss": {
"type": "yes_no",
"instructions": "Has the stock missed EPS estimates in any of the last 4 quarters?"
},
"drawdown": {
"type": "yes_no",
"ask": "C < 0.8 * max(H, 252)"
},
"earn_fell": {
"type": "yes_no",
"instructions": "Did the stock fall after its last earnings report?"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
}
}
}Response JSON (BAC, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"miss": {
"yes_no": 0.8591,
"rule": "miss_eps_last > 0.5",
"basis": "pattern"
},
"any_miss": {
"yes_no": 0.55,
"rule": "misses_last4 >= 1",
"basis": "pattern"
},
"drawdown": {
"yes_no": 0.7068,
"rule": "C < 0.8 * max(H, 252)",
"basis": "rule"
},
"earn_fell": {
"yes_no": 0.9463,
"rule": "last_earnings_move < 0",
"basis": "pattern"
},
"drop10": {
"yes_no": 0.446
}
},
"context": {
"symbol": "BAC",
"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 Institutions: ETF issuer, Index provider, Pension fund, Endowment, Sovereign wealth fund.