Use cases · Institutions
Pension fund: 20 ways to use Ora
Policy portfolio, rebalancing ranges and risk-off signals for a long-horizon board. 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 (42)
sma 14offset 8ref 7max 4roc 3avg 3lowest 3atr 3log 2sqrt 2std 2macd 1macdhist 1macdsignal 1wma 1obv 1three_black_crows 1zscore 1engulfing_bull 1harami_bull 1rsi 1div_count_ttm 1div_yield_ttm 1raised_last 1dark_cloud 1engulfing_bear 1evening_star 1tweezer_top 1min 1cut_last 1marubozu 1pays_dividend 1highest 1percentrank 1beat_eps_last 1days_to_earnings 1lowestbars 1spinning_top 1ema 1linreg 1mean 1rec 1
Examples 1–10 of 20 · page 1 of 2
Pension fund · example 1
Policy portfolio trend board: VTI, VEA, VWO, BND
Before the quarterly board meeting, show the trend state of each policy-portfolio building block in plain words.
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"VTI"} then VEA, VWO, BND, one request each. The server fills in the latest completed session.
Questions
above_200d | English → rule | Is the stock above its 200-day moving average? |
sma200_up | rule | sma(C, 200) > ref(sma(C, 200), -20)The 200-day average is rising |
three_month | rule | C > C[-63]Higher than three months ago |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | above_200drule | sma200_uprule | three_monthrule | drop5forecast |
|---|---|---|---|---|
VTI | 0.9415 | 0.9463 | 0.3524 | 0.187 |
VEA | 0.5877 | 0.9463 | 0.1666 | 0.223 |
VWO | 0.0887 | 0.9463 | 0.055 | 0.255 |
BND | 0.2013 | 0.0674 | 0.2986 | 0.007 |
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 VTI of 4. The 200-day average is rising: true for VTI, VEA, VWO of 4. Higher than three months ago: true for none of 4. Highest odds for “A 5% drawdown within a month”: VWO at 26%.
The board sees which asset classes are in long-term uptrends; the policy weights stay where the investment policy statement puts them.
Request JSON (VTI; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VTI"
},
"questions": {
"above_200d": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"sma200_up": {
"type": "yes_no",
"ask": "sma(C, 200) > ref(sma(C, 200), -20)"
},
"three_month": {
"type": "yes_no",
"ask": "C > C[-63]"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
}
}Response JSON (VTI, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"above_200d": {
"yes_no": 0.9415,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"sma200_up": {
"yes_no": 0.9463,
"rule": "sma(C, 200) > ref(sma(C, 200), -20)",
"basis": "rule"
},
"three_month": {
"yes_no": 0.3524,
"rule": "C > C[-63]",
"basis": "rule"
},
"drop5": {
"yes_no": 0.187
}
},
"context": {
"symbol": "VTI",
"as_of": "2026-10-30"
}
}Pension fund · example 2
Rebalancing band trigger: has VTI moved more than the band?
The fund rebalances when equities move outside a band. Check the three-month move and open a rebalancing ticket when it is breached.
- StateVTI
- Questions4 asked
- Answersreal, captured
- Actions3 rules · dry run
State
{"symbol":"VTI"} The server fills in the latest completed session.
Questions
up_band | rule | roc(C, 63) > 8Up more than 8% over three months |
down_band | rule | roc(C, 63) < -8Down more than 8% over three months |
trend | rule | C > sma(C, 50)Above the 50-day average |
vol_rise | forecast | Will volatility rise over the next 5 days? Volatility rising over 5 days |
Answers
| Question | Answer | Reading |
|---|---|---|
up_bandUp more than 8% over three months | 0.0537 | false |
down_bandDown more than 8% over three months | 0.0537 | false |
trendAbove the 50-day average | 0.1242 | false |
vol_riseVolatility rising over 5 days | 0.518 | 52% · close to even |
Actions
Rules on the answers decide what to send.
up_band >= 0.6→Webhookrebalancing-systemdown_band >= 0.6→Webhookrebalancing-systemelse→Slackpension-investments{
"text": "VTI (2026-10-30) is inside its rebalancing band (up 5%, down 5%)."
}What it means
For VTI on the session of 2026-10-30: Not true: Up more than 8% over three months; Down more than 8% over three months; Above the 50-day average. Forecasts: Volatility rising over 5 days 52%. Fired: inside (Slack → pension-investments).
The band is a mechanical rule from the policy; a ticket opens only when the move clears it, and staff execute with the custodian.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VTI"
},
"questions": {
"up_band": {
"type": "yes_no",
"ask": "roc(C, 63) > 8"
},
"down_band": {
"type": "yes_no",
"ask": "roc(C, 63) < -8"
},
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"vol_rise": {
"type": "yes_no",
"instructions": "Will volatility rise over the next 5 days?"
}
},
"actions": [
{
"id": "trim",
"when": "up_band >= 0.6",
"do": "webhook",
"connection": "rebalancing-system",
"body": {
"ticket": "rebalance",
"asset": "{{symbol}}",
"direction": "trim_to_target",
"as_of": "{{as_of}}",
"p_band": "{{up_band}}"
}
},
{
"id": "add",
"when": "down_band >= 0.6",
"do": "webhook",
"connection": "rebalancing-system",
"body": {
"ticket": "rebalance",
"asset": "{{symbol}}",
"direction": "add_to_target",
"as_of": "{{as_of}}",
"p_band": "{{down_band}}"
}
},
{
"id": "inside",
"when": "else",
"do": "slack",
"connection": "pension-investments",
"message": "{{symbol}} ({{as_of}}) is inside its rebalancing band (up {{up_band|pct}}, down {{down_band|pct}})."
}
],
"dry_run": true
}Response JSON (VTI, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"up_band": {
"yes_no": 0.0537,
"rule": "roc(C, 63) > 8",
"basis": "rule"
},
"down_band": {
"yes_no": 0.0537,
"rule": "roc(C, 63) < -8",
"basis": "rule"
},
"trend": {
"yes_no": 0.1242,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"vol_rise": {
"yes_no": 0.518
}
},
"context": {
"symbol": "VTI",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "trim",
"fired": false,
"status": "skipped"
},
{
"id": "add",
"fired": false,
"status": "skipped"
},
{
"id": "inside",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "pension-investments",
"preview": {
"text": "VTI (2026-10-30) is inside its rebalancing band (up 5%, down 5%)."
}
}
]
}Pension fund · example 3
Risk-off read for the board: SPY trend, volatility and breadth
A long-horizon board wants one plain question answered: is the market in a risk-off regime right now?
- StateSPY
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"SPY"} The server fills in the latest completed session.
Questions
below_200d | English → rule | Is the stock below its 200-day moving average? |
death | English → rule | Did a death cross happen today? |
hv | rule | std(log(C / C[-1]), 20) * sqrt(252) > 0.4Annualized 20-day volatility above 40% |
drawdown | rule | C < 0.8 * max(H, 252)More than 20% off the 52-week 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 |
|---|---|---|
below_200dIs the stock below its 200-day moving average compiled to C < sma(C, 200) | 0.0549 | false |
deathDid a death cross happen today compiled to (sma(C, 50) < sma(C, 200)) and (ref(sma(C, 50), -1) >= ref(sma(C, 200), -1)) | 0.0537 | false |
hvAnnualized 20-day volatility above 40% | 0.0537 | false |
drawdownMore than 20% off the 52-week high | 0.0537 | false |
drop10A 10% drawdown within a month | 0.205 | 21% · unlikely |
Actions
Rules on the answers decide what to send.
below_200d >= 0.6 and drawdown >= 0.6→Emailinvestment-committeeelse→Emailinvestment-committee{
"subject": "Regime check: not risk-off (2026-10-30)",
"text": "SPY: below the 200-day 5%, 20% drawdown 5%. No action."
}What it means
For SPY on the session of 2026-10-30: Not true: Is the stock below its 200-day moving average; Did a death cross happen today; Annualized 20-day volatility above 40%; More than 20% off the 52-week high. Forecasts: A 10% drawdown within a month 21%. Fired: normal (Email → investment-committee).
The committee gets a short email either way, and the regime label comes from exact rules, so it is reproducible.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"below_200d": {
"type": "yes_no",
"instructions": "Is the stock below its 200-day moving average?"
},
"death": {
"type": "yes_no",
"instructions": "Did a death cross happen today?"
},
"hv": {
"type": "yes_no",
"ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4"
},
"drawdown": {
"type": "yes_no",
"ask": "C < 0.8 * max(H, 252)"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
}
},
"actions": [
{
"id": "risk_off",
"when": "below_200d >= 0.6 and drawdown >= 0.6",
"do": "email",
"connection": "investment-committee",
"subject": "Risk-off regime: {{symbol}} ({{as_of}})",
"message": "{{symbol}} is below its 200-day and more than 20% off its high. Further 10% drawdown odds: {{drop10|pct}}. No policy change without committee approval."
},
{
"id": "normal",
"when": "else",
"do": "email",
"connection": "investment-committee",
"subject": "Regime check: not risk-off ({{as_of}})",
"message": "{{symbol}}: below the 200-day {{below_200d|pct}}, 20% drawdown {{drawdown|pct}}. No action."
}
],
"dry_run": true
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"below_200d": {
"yes_no": 0.0549,
"rule": "C < sma(C, 200)",
"basis": "comparison"
},
"death": {
"yes_no": 0.0537,
"rule": "(sma(C, 50) < sma(C, 200)) and (ref(sma(C, 50), -1) >= ref(sma(C, 200), -1))",
"basis": "pattern"
},
"hv": {
"yes_no": 0.0537,
"rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4",
"basis": "rule"
},
"drawdown": {
"yes_no": 0.0537,
"rule": "C < 0.8 * max(H, 252)",
"basis": "rule"
},
"drop10": {
"yes_no": 0.205
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "risk_off",
"fired": false,
"status": "skipped"
},
{
"id": "normal",
"fired": true,
"status": "dry_run",
"do": "email",
"connection": "investment-committee",
"preview": {
"subject": "Regime check: not risk-off (2026-10-30)",
"text": "SPY: below the 200-day 5%, 20% drawdown 5%. No action."
}
}
]
}Pension fund · example 4
Liability hedge: TLT trend and momentum
Long Treasuries hedge the liabilities. Check whether long-bond prices are trending, which affects the funded-status swing.
- 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 |
macd | rule | macd(C) > macdsignal(C)MACD above its signal line |
hist | rule | macdhist(C) > ref(macdhist(C), -1)MACD histogram rising |
wma | rule | wma(C, 20) > wma(C, 50)20-day weighted average above the 50-day |
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 |
macdMACD above its signal line | 0.9084 | true |
histMACD histogram rising | 0.2733 | false |
wma20-day weighted average above the 50-day | 0.8569 | 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; MACD above its signal line; 20-day weighted average above the 50-day. Not true: MACD histogram rising. Forecasts: Higher in a week 56%.
Rising long-bond prices lift both the hedge and the liability value; the funded-status report shows the facts next to each other.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TLT"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"macd": {
"type": "yes_no",
"ask": "macd(C) > macdsignal(C)"
},
"hist": {
"type": "yes_no",
"ask": "macdhist(C) > ref(macdhist(C), -1)"
},
"wma": {
"type": "yes_no",
"ask": "wma(C, 20) > wma(C, 50)"
},
"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"
},
"macd": {
"yes_no": 0.9084,
"rule": "macd(C) > macdsignal(C)",
"basis": "rule"
},
"hist": {
"yes_no": 0.2733,
"rule": "macdhist(C) > ref(macdhist(C), -1)",
"basis": "rule"
},
"wma": {
"yes_no": 0.8569,
"rule": "wma(C, 20) > wma(C, 50)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.561
}
},
"context": {
"symbol": "TLT",
"as_of": "2026-10-30"
}
}Pension fund · example 5
Weekly funded-status inputs: equities and long bonds
Every Friday after the close, post the trend answers for the growth and hedge assets to the funded-status dashboard.
- ScheduleFri at 17:30 ET
- State3 symbols
- Questions3 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"VTI"} then TLT, LQD, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
up_month | English → rule | Is the stock up over the last month? |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | trendrule | up_monthrule | drop5forecast | Fired |
|---|---|---|---|---|
VTI | 0.1242 | 0.2517 | 0.187 | row |
TLT | 0.8482 | 0.9298 | 0.164 | row |
LQD | 0.6552 | 0.9078 | 0.022 | 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→Webhookfunded-status-dashboard{
"asset": "VTI",
"as_of": "2026-10-30",
"above_50d": 0.1242,
"up_month": 0.2517,
"p_drop5": 0.187
}{
"asset": "TLT",
"as_of": "2026-10-30",
"above_50d": 0.8482,
"up_month": 0.9298,
"p_drop5": 0.164
}{
"asset": "LQD",
"as_of": "2026-10-30",
"above_50d": 0.6552,
"up_month": 0.9078,
"p_drop5": 0.022
}What it means
Session of 2026-10-30, 3 symbols: Above the 50-day average: true for TLT, LQD of 3. Is the stock up over the last month: true for TLT, LQD of 3. Highest odds for “A 5% drawdown within a month”: VTI at 19%. row fired for VTI, TLT, LQD.
One row per asset each week; actuarial staff combine them with the liability side, the rows themselves are not a funded-status number.
As a scheduled workflow (Fri at 17: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": "Weekly funded-status inputs: equities and long bonds",
"symbols": "VTI TLT LQD",
"days": [
5
],
"at_time": "17:30",
"model": "ora-fin-0.1.1",
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"up_month": {
"type": "yes_no",
"instructions": "Is the stock up over the last month?"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "row",
"when": "trend >= 0",
"do": "webhook",
"connection": "funded-status-dashboard",
"body": {
"asset": "{{symbol}}",
"as_of": "{{as_of}}",
"above_50d": "{{trend}}",
"up_month": "{{up_month}}",
"p_drop5": "{{drop5}}"
}
}
]
}Request JSON (VTI; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VTI"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"up_month": {
"type": "yes_no",
"instructions": "Is the stock up over the last month?"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "row",
"when": "trend >= 0",
"do": "webhook",
"connection": "funded-status-dashboard",
"body": {
"asset": "{{symbol}}",
"as_of": "{{as_of}}",
"above_50d": "{{trend}}",
"up_month": "{{up_month}}",
"p_drop5": "{{drop5}}"
}
}
],
"dry_run": true
}Response JSON (VTI, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.1242,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"up_month": {
"yes_no": 0.2517,
"rule": "C > C[-21]",
"basis": "pattern"
},
"drop5": {
"yes_no": 0.187
}
},
"context": {
"symbol": "VTI",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "row",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "funded-status-dashboard",
"preview": {
"body": {
"asset": "VTI",
"as_of": "2026-10-30",
"above_50d": 0.1242,
"up_month": 0.2517,
"p_drop5": 0.187
}
}
}
]
}Pension fund · example 6
Public proxy for private real estate: XLRE
Private real estate is marked with a lag. Watch its listed proxy to anticipate the next valuation round.
- StateXLRE
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"XLRE"} 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 |
trend | English → rule | Is the stock above its 200-day moving average? |
down_month | English → rule | Is the stock down more than 5% over the last 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 |
|---|---|---|
drawdownMore than 20% off the 52-week high | 0.0537 | false |
trendIs the stock above its 200-day moving average compiled to C > sma(C, 200) | 0.5384 | on the line (true) |
down_monthIs the stock down more than 5% over the last month compiled to C / C[-21] - 1 < -0.05 | 0.0537 | false |
drop10A 10% drawdown within a month | 0.202 | 20% · unlikely |
What it means
For XLRE on the session of 2026-10-30: Not true: More than 20% off the 52-week high; Is the stock down more than 5% over the last month. On the line: Is the stock above its 200-day moving average. Forecasts: A 10% drawdown within a month 20%.
A listed proxy falling hard today often shows up in private marks a quarter later; staff warn the board early.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLRE"
},
"questions": {
"drawdown": {
"type": "yes_no",
"ask": "C < 0.8 * max(H, 252)"
},
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"down_month": {
"type": "yes_no",
"instructions": "Is the stock down more than 5% over the last month?"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
}
}
}Response JSON (XLRE, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"drawdown": {
"yes_no": 0.0537,
"rule": "C < 0.8 * max(H, 252)",
"basis": "rule"
},
"trend": {
"yes_no": 0.5384,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"down_month": {
"yes_no": 0.0537,
"rule": "C / C[-21] - 1 < -0.05",
"basis": "pattern"
},
"drop10": {
"yes_no": 0.202
}
},
"context": {
"symbol": "XLRE",
"as_of": "2026-10-30"
}
}Pension fund · example 7
Inflation sleeve: TIP, DBC and GLD together
The real-assets sleeve should help when inflation surprises. Check the three funds on the same trend and momentum rules.
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"TIP"} then DBC, GLD, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
roc | rule | roc(C, 20) > 5Up more than 5% in 20 sessions |
obv | rule | obv() > sma(obv(), 20)On-balance volume above its 20-day average |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
Answers
| Symbol | trendrule | rocrule | obvrule | rally5forecast | Fired |
|---|---|---|---|---|---|
TIP | 0.8649 | 0.0772 | 0.8919 | 0.008 | sleeve_row |
DBC | 0.8888 | 0.2584 | 0.2279 | 0.392 | sleeve_row |
GLD | 0.0807 | 0.0839 | 0.1358 | 0.503 | sleeve_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→Webhookrisk-dashboard{
"sleeve": "inflation",
"fund": "TIP",
"as_of": "2026-10-30",
"above_50d": 0.8649,
"roc20_5": 0.0772,
"p_rally5": 0.008
}{
"sleeve": "inflation",
"fund": "DBC",
"as_of": "2026-10-30",
"above_50d": 0.8888,
"roc20_5": 0.2584,
"p_rally5": 0.392
}{
"sleeve": "inflation",
"fund": "GLD",
"as_of": "2026-10-30",
"above_50d": 0.0807,
"roc20_5": 0.0839,
"p_rally5": 0.503
}What it means
Session of 2026-10-30, 3 symbols: Above the 50-day average: true for TIP, DBC of 3. Up more than 5% in 20 sessions: true for none of 3. On-balance volume above its 20-day average: true for TIP of 3. Highest odds for “A 5% rally within a month”: GLD at 50%. sleeve_row fired for TIP, DBC, GLD.
If all three trend, the sleeve is doing its job; mixed answers are normal and are noted in the quarterly report.
Request JSON (TIP; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TIP"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"roc": {
"type": "yes_no",
"ask": "roc(C, 20) > 5"
},
"obv": {
"type": "yes_no",
"ask": "obv() > sma(obv(), 20)"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "sleeve_row",
"when": "trend >= 0",
"do": "webhook",
"connection": "risk-dashboard",
"body": {
"sleeve": "inflation",
"fund": "{{symbol}}",
"as_of": "{{as_of}}",
"above_50d": "{{trend}}",
"roc20_5": "{{roc}}",
"p_rally5": "{{rally5}}"
}
}
],
"dry_run": true
}Response JSON (TIP, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.8649,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"roc": {
"yes_no": 0.0772,
"rule": "roc(C, 20) > 5",
"basis": "rule"
},
"obv": {
"yes_no": 0.8919,
"rule": "obv() > sma(obv(), 20)",
"basis": "rule"
},
"rally5": {
"yes_no": 0.008
}
},
"context": {
"symbol": "TIP",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "sleeve_row",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "risk-dashboard",
"preview": {
"body": {
"sleeve": "inflation",
"fund": "TIP",
"as_of": "2026-10-30",
"above_50d": 0.8649,
"roc20_5": 0.0772,
"p_rally5": 0.008
}
}
}
]
}Pension fund · example 8
Credit sleeve health: HYG drawdown checks
The credit sleeve supplies income; check high yield for breakdowns and heavy selling before the monthly credit review.
- StateHYG
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"HYG"} The server fills in the latest completed session.
Questions
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 |
zs | rule | zscore(C, 20) < -2Two deviations under the 20-day mean |
crows | rule | three_black_crows()three black crows candle: Three red bars, each closing lower and opening inside the previous 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 |
|---|---|---|
breakdownClosed under the 20-day low | 0.0811 | false |
down_volDown on heavy volume | 0.1932 | false |
zsTwo deviations under the 20-day mean | 0.0641 | false |
crowsthree black crows candle: Three red bars, each closing lower and opening inside the previous body. | 0.1432 | false |
drop5A 5% drawdown within a month | 0.009 | 1% · unlikely |
Actions
Rules on the answers decide what to send.
breakdown >= 0.6 or zs >= 0.6→Slackcredit-reviewWhat it means
For HYG on the session of 2026-10-30: Not true: Closed under the 20-day low; Down on heavy volume; Two deviations under the 20-day mean; three black crows candle: Three red bars, each closing lower and opening inside the previous body.. Forecasts: A 5% drawdown within a month 1%. No action fired: every rule was false.
A breakdown or an extreme z-score adds the fund to the credit review agenda; nothing is sold automatically.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "HYG"
},
"questions": {
"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)"
},
"zs": {
"type": "yes_no",
"ask": "zscore(C, 20) < -2"
},
"crows": {
"type": "yes_no",
"ask": "three_black_crows()"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "credit_review",
"when": "breakdown >= 0.6 or zs >= 0.6",
"do": "slack",
"connection": "credit-review",
"message": "{{symbol}} ({{as_of}}): 20-day breakdown {{breakdown|pct}}, z-score under -2 {{zs|pct}}. Add to the monthly credit review."
}
],
"dry_run": true
}Response JSON (HYG, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"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"
},
"zs": {
"yes_no": 0.0641,
"rule": "zscore(C, 20) < -2",
"basis": "rule"
},
"crows": {
"yes_no": 0.1432,
"rule": "three_black_crows()",
"basis": "rule"
},
"drop5": {
"yes_no": 0.009
}
},
"context": {
"symbol": "HYG",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "credit_review",
"fired": false,
"status": "skipped"
}
]
}Pension fund · example 9
Emerging markets allocation: EEM momentum and reversals
Check emerging-market equities for trend and reversal candles ahead of a possible tactical tilt discussion.
- StateEEM
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"EEM"} The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
engulf | rule | engulfing_bull()engulfing bull candle: A green body that engulfs yesterday's red body. |
harami | rule | harami_bull()harami bull candle: A small green body inside yesterday's red body. |
rsi | rule | rsi(C, 14) > 50RSI above 50 |
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.1449 | false |
engulfengulfing bull candle: A green body that engulfs yesterday's red body. | 0.0823 | false |
haramiharami bull candle: A small green body inside yesterday's red body. | 0.0701 | false |
rsiRSI above 50 | 0.072 | false |
beat_spyBeating SPY over a month | 0.501 | 50% · close to even |
What it means
For EEM on the session of 2026-10-30: Not true: Is the stock above its 200-day moving average; engulfing bull candle: A green body that engulfs yesterday's red body.; harami bull candle: A small green body inside yesterday's red body.; RSI above 50. Forecasts: Beating SPY over a month 50%.
Any tilt needs the committee; the answers describe the current state of the market, not a recommendation.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "EEM"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"engulf": {
"type": "yes_no",
"ask": "engulfing_bull()"
},
"harami": {
"type": "yes_no",
"ask": "harami_bull()"
},
"rsi": {
"type": "yes_no",
"ask": "rsi(C, 14) > 50"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
}
}Response JSON (EEM, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.1449,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"engulf": {
"yes_no": 0.0823,
"rule": "engulfing_bull()",
"basis": "rule"
},
"harami": {
"yes_no": 0.0701,
"rule": "harami_bull()",
"basis": "rule"
},
"rsi": {
"yes_no": 0.072,
"rule": "rsi(C, 14) > 50",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.501
}
},
"context": {
"symbol": "EEM",
"as_of": "2026-10-30"
}
}Pension fund · example 10
Benchmark context for growth managers: IWF
The fund uses growth and value managers. See whether the growth style is in favor so manager performance is judged in context.
- StateIWF
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"IWF"} The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
leader | rule | roc(C, 63) > 10 and C >= 0.95 * max(H, 63)Up more than 10% in a quarter, near the high |
momentum | rule | roc(C, 20) > 5 and V > avg(V, 50) and C > sma(C, 50)Momentum with participation |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Question | Answer | Reading |
|---|---|---|
trendAbove the 50-day average | 0.0608 | false |
leaderUp more than 10% in a quarter, near the high | 0.0537 | false |
momentumMomentum with participation | 0.0537 | false |
beat_spyBeating SPY over a month | 0.497 | 50% · close to even |
What it means
For IWF on the session of 2026-10-30: Not true: Above the 50-day average; Up more than 10% in a quarter, near the high; Momentum with participation. Forecasts: Beating SPY over a month 50%.
A growth manager trailing when the growth benchmark is weak is expected; the context goes into the manager review notes.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "IWF"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"leader": {
"type": "yes_no",
"ask": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)"
},
"momentum": {
"type": "yes_no",
"ask": "roc(C, 20) > 5 and V > avg(V, 50) and C > sma(C, 50)"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
}
}Response JSON (IWF, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.0608,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"leader": {
"yes_no": 0.0537,
"rule": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)",
"basis": "rule"
},
"momentum": {
"yes_no": 0.0537,
"rule": "roc(C, 20) > 5 and V > avg(V, 50) and C > sma(C, 50)",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.497
}
},
"context": {
"symbol": "IWF",
"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, Insurance investment office, Endowment, Sovereign wealth fund.