Use cases · Institutions
Endowment: 20 ways to use Ora
Spending-rule portfolios: regime reads across equities, real assets and bonds. Each example is a complete, runnable request with the real answers it returned (37 requests, captured 2026-10-31), what they mean and, where it fits, the action it would send.
ora-fin-0.1.1. Another model changes the request JSON and the Playground link; run it there to see its answers.Rule functions and facts used by this player (39)
sma 12offset 10max 4std 4log 3sqrt 3roc 3atr 3abs 3adx 2avg 2highestbars 2ref 2rsi 2highest 1ema 1lowestbars 1inside_bar 1outside_bar 1pays_dividend 1dragonfly_doji 1hammer 1inverted_hammer 1shooting_star 1cum 1days_to_ex_div 1div_yield_ttm 1raised_last 1lowest 1days_to_earnings 1last_earnings_move 1sum 1engulfing_bear 1morning_star 1tweezer_bottom 1tweezer_top 1zscore 1greatest 1least 1
Examples 11–20 of 20 · page 2 of 2
Endowment · example 11
Oil reversal watch: USO candles after big moves
Oil exposure in the real-assets sleeve swings sharply. Look for reversal patterns after big moves.
- StateUSO
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"USO"} The server fills in the latest completed session.
Questions
hammer | rule | hammer()hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back. |
shooting | rule | shooting_star()shooting star candle: Upper wick at least twice the body, lower wick at most 10% of the range, after a five-bar rise. |
inv_hammer | rule | inverted_hammer()inverted hammer candle: Shooting-star shape after a five-bar decline. |
dragonfly | rule | dragonfly_doji()dragonfly doji candle: Doji with a long lower wick (60%+ of the range) and almost no upper wick. |
big_move | 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 |
|---|---|---|
hammerhammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back. | 0.0631 | false |
shootingshooting star candle: Upper wick at least twice the body, lower wick at most 10% of the range, after a five-bar rise. | 0.4372 | on the line (false) |
inv_hammerinverted hammer candle: Shooting-star shape after a five-bar decline. | 0.5017 | on the line (true) |
dragonflydragonfly doji candle: Doji with a long lower wick (60%+ of the range) and almost no upper wick. | 0.0631 | false |
big_moveA big move either way in 5 days | 0.403 | 40% · close to even |
What it means
For USO on the session of 2026-10-30: Not true: hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back.; dragonfly doji candle: Doji with a long lower wick (60%+ of the range) and almost no upper wick.. On the line: shooting star candle: Upper wick at least twice the body, lower wick at most 10% of the range, after a five-bar rise.; inverted hammer candle: Shooting-star shape after a five-bar decline.. Forecasts: A big move either way in 5 days 40%.
Patterns are one-day facts; the big-move forecast says whether more volatility is likely, which matters more for sizing.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "USO"
},
"questions": {
"hammer": {
"type": "yes_no",
"ask": "hammer()"
},
"shooting": {
"type": "yes_no",
"ask": "shooting_star()"
},
"inv_hammer": {
"type": "yes_no",
"ask": "inverted_hammer()"
},
"dragonfly": {
"type": "yes_no",
"ask": "dragonfly_doji()"
},
"big_move": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
}
}Response JSON (USO, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"hammer": {
"yes_no": 0.0631,
"rule": "hammer()",
"basis": "rule"
},
"shooting": {
"yes_no": 0.4372,
"rule": "shooting_star()",
"basis": "rule"
},
"inv_hammer": {
"yes_no": 0.5017,
"rule": "inverted_hammer()",
"basis": "rule"
},
"dragonfly": {
"yes_no": 0.0631,
"rule": "dragonfly_doji()",
"basis": "rule"
},
"big_move": {
"yes_no": 0.403
}
},
"context": {
"symbol": "USO",
"as_of": "2026-10-30"
}
}Endowment · example 12
Developed markets: VGK momentum vs the US
Track whether Europe is outperforming to inform the non-US equity weight discussion.
- StateVGK
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"VGK"} The server fills in the latest completed session.
Questions
roc | rule | roc(C, 20) > 5Up more than 5% in 20 sessions |
trend | rule | C > sma(C, 50)Above the 50-day average |
cum | rule | cum(C > C[-1]) > cum(C < C[-1])More up days than down days over the fund's whole history |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Question | Answer | Reading |
|---|---|---|
rocUp more than 5% in 20 sessions | 0.1318 | false |
trendAbove the 50-day average | 0.3016 | false |
cumMore up days than down days over the fund's whole history | 0.9463 | true |
beat_spyBeating SPY over a month | 0.407 | 41% · close to even |
What it means
For VGK on the session of 2026-10-30: True now: More up days than down days over the fund's whole history. Not true: Up more than 5% in 20 sessions; Above the 50-day average. Forecasts: Beating SPY over a month 41%.
Short-term momentum and the odds of beating SPY frame the discussion; the long-run up-day count is context, not a signal.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VGK"
},
"questions": {
"roc": {
"type": "yes_no",
"ask": "roc(C, 20) > 5"
},
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"cum": {
"type": "yes_no",
"ask": "cum(C > C[-1]) > cum(C < C[-1])"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
}
}Response JSON (VGK, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"roc": {
"yes_no": 0.1318,
"rule": "roc(C, 20) > 5",
"basis": "rule"
},
"trend": {
"yes_no": 0.3016,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"cum": {
"yes_no": 0.9463,
"rule": "cum(C > C[-1]) > cum(C < C[-1])",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.407
}
},
"context": {
"symbol": "VGK",
"as_of": "2026-10-30"
}
}Endowment · example 13
Income for spending: VIG dividend growth
Part of annual spending comes from portfolio income. Check payout growth and yield of the dividend-growth fund.
- StateVIG
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"VIG"} The server fills in the latest completed session.
Questions
yield | English → rule | Is the dividend yield above 2%? |
raised | rule | raised_last > 0.5Raised its last dividend |
ex_soon | rule | days_to_ex_div <= 30Goes ex-dividend within 30 days |
trend | rule | C > sma(C, 50)Above the 50-day average |
raise_next | forecast | Will the company raise its dividend next year? Raising the dividend next year |
Answers
| Question | Answer | Reading |
|---|---|---|
yieldIs the dividend yield above 2% compiled to div_yield_ttm > 2 | 0.0537 | false |
raisedRaised its last dividend | 0.1409 | false |
ex_soonGoes ex-dividend within 30 days | 0.0537 | false |
trendAbove the 50-day average | 0.9219 | true |
raise_nextRaising the dividend next year | 0.505 | 51% · close to even |
What it means
For VIG on the session of 2026-10-30: True now: Above the 50-day average. Not true: Is the dividend yield above 2%; Raised its last dividend; Goes ex-dividend within 30 days. Forecasts: Raising the dividend next year 51%.
Rising payouts help the spending budget; the forecast on next year's raise is probability, so the budget uses the facts.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VIG"
},
"questions": {
"yield": {
"type": "yes_no",
"instructions": "Is the dividend yield above 2%?"
},
"raised": {
"type": "yes_no",
"ask": "raised_last > 0.5"
},
"ex_soon": {
"type": "yes_no",
"ask": "days_to_ex_div <= 30"
},
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"raise_next": {
"type": "yes_no",
"instructions": "Will the company raise its dividend next year?"
}
}
}Response JSON (VIG, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"yield": {
"yes_no": 0.0537,
"rule": "div_yield_ttm > 2",
"basis": "pattern"
},
"raised": {
"yes_no": 0.1409,
"rule": "raised_last > 0.5",
"basis": "rule"
},
"ex_soon": {
"yes_no": 0.0537,
"rule": "days_to_ex_div <= 30",
"basis": "rule"
},
"trend": {
"yes_no": 0.9219,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"raise_next": {
"yes_no": 0.505
}
},
"context": {
"symbol": "VIG",
"as_of": "2026-10-30"
}
}Endowment · example 14
Daily risk escalation for the CIO: equity sleeves
After each close, any core equity sleeve that falls more than 3% or makes a 20-day low is escalated.
- ScheduleMon–Fri at 16:45 ET
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"VTI"} then VEA, VWO, one request each. The server fills in the latest completed session.
Questions
down3 | English → rule | Did the stock fall more than 3% today? |
low20 | English → rule | Did the stock make a new 20-day low today? |
big_atr | rule | abs(C - C[-1]) > 1.5 * atr(14)Today's move was bigger than 1.5 ATR |
gap_down | forecast | Will it gap down tomorrow? A gap down tomorrow |
Answers
| Symbol | down3rule | low20rule | big_atrrule | gap_downforecast | Fired |
|---|---|---|---|---|---|
VTI | 0.0717 | 0.7296 | 0.793 | 0.029 | desk |
VEA | 0.0716 | 0.3758 | 0.2861 | 0.029 | none |
VWO | 0.1102 | 0.7785 | 0.6166 | 0.049 | desk |
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.
down3 >= 0.6→Emailciolow20 >= 0.6→Slackendowment-office{
"text": "VTI (2026-10-30) made a new 20-day low."
}{
"text": "VWO (2026-10-30) made a new 20-day low."
}What it means
Session of 2026-10-30, 3 symbols: Did the stock fall more than 3% today: true for none of 3. Did the stock make a new 20-day low today: true for VTI, VWO of 3. Today's move was bigger than 1.5 ATR: true for VTI, VWO of 3. Highest odds for “A gap down tomorrow”: VWO at 5%. cio fired for none. desk fired for VTI, VWO.
Quiet days send nothing; the CIO email needs a 3% loss, a new low only goes to the team channel.
As a scheduled workflow (Mon–Fri at 16:45 ET)
Create it under Workflows in the console: it runs these questions for every symbol on the schedule and fires the actions per symbol. The answers above are what one run returned.
{
"name": "Daily risk escalation for the CIO: equity sleeves",
"symbols": "VTI VEA VWO",
"days": [
1,
2,
3,
4,
5
],
"at_time": "16:45",
"model": "ora-fin-0.1.1",
"questions": {
"down3": {
"type": "yes_no",
"instructions": "Did the stock fall more than 3% today?"
},
"low20": {
"type": "yes_no",
"instructions": "Did the stock make a new 20-day low today?"
},
"big_atr": {
"type": "yes_no",
"ask": "abs(C - C[-1]) > 1.5 * atr(14)"
},
"gap_down": {
"type": "yes_no",
"instructions": "Will it gap down tomorrow?"
}
},
"actions": [
{
"id": "cio",
"when": "down3 >= 0.6",
"do": "email",
"connection": "cio",
"subject": "{{symbol}} fell more than 3% ({{as_of}})",
"message": "{{symbol}} fell more than 3% today; move bigger than 1.5 ATR {{big_atr|pct}}; gap-down odds tomorrow {{gap_down|pct}}."
},
{
"id": "desk",
"when": "low20 >= 0.6",
"do": "slack",
"connection": "endowment-office",
"message": "{{symbol}} ({{as_of}}) made a new 20-day low."
}
]
}Request JSON (VTI; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VTI"
},
"questions": {
"down3": {
"type": "yes_no",
"instructions": "Did the stock fall more than 3% today?"
},
"low20": {
"type": "yes_no",
"instructions": "Did the stock make a new 20-day low today?"
},
"big_atr": {
"type": "yes_no",
"ask": "abs(C - C[-1]) > 1.5 * atr(14)"
},
"gap_down": {
"type": "yes_no",
"instructions": "Will it gap down tomorrow?"
}
},
"actions": [
{
"id": "cio",
"when": "down3 >= 0.6",
"do": "email",
"connection": "cio",
"subject": "{{symbol}} fell more than 3% ({{as_of}})",
"message": "{{symbol}} fell more than 3% today; move bigger than 1.5 ATR {{big_atr|pct}}; gap-down odds tomorrow {{gap_down|pct}}."
},
{
"id": "desk",
"when": "low20 >= 0.6",
"do": "slack",
"connection": "endowment-office",
"message": "{{symbol}} ({{as_of}}) made a new 20-day low."
}
],
"dry_run": true
}Response JSON (VTI, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"down3": {
"yes_no": 0.0717,
"rule": "C / C[-1] - 1 < -0.03",
"basis": "pattern"
},
"low20": {
"yes_no": 0.7296,
"rule": "L < lowest(L, 20)",
"basis": "pattern"
},
"big_atr": {
"yes_no": 0.793,
"rule": "abs(C - C[-1]) > 1.5 * atr(14)",
"basis": "rule"
},
"gap_down": {
"yes_no": 0.029
}
},
"context": {
"symbol": "VTI",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "cio",
"fired": false,
"status": "skipped"
},
{
"id": "desk",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "endowment-office",
"preview": {
"text": "VTI (2026-10-30) made a new 20-day low."
}
}
]
}Endowment · example 15
A gifted stock position: LLY concentration review
A donor gifted a large block of shares. Decide when to sell down by checking trend, extension and the earnings calendar.
- StateLLY
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"LLY"} The server fills in the latest completed session.
Questions
ext | English → rule | Is the stock more than 10% above its 200-day moving average? |
stretched | rule | C > sma(C, 20) + 2 * atr(14)Stretched: more than 2 ATR above the 20-day |
earn14 | English → rule | Is earnings in the next 14 days? |
big_react | rule | abs(last_earnings_move) > 5Last earnings move bigger than 5% |
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 |
|---|---|---|
extIs the stock more than 10% above its 200-day moving average compiled to C > sma(C, 200) * 1.1 | 0.9463 | true |
stretchedStretched: more than 2 ATR above the 20-day | 0.919 | true |
earn14Is earnings in the next 14 days compiled to days_to_earnings <= 14 | 0.0537 | false |
big_reactLast earnings move bigger than 5% | 0.8277 | true |
drop10A 10% drawdown within a month | 0.583 | 58% · close to even |
Actions
Rules on the answers decide what to send.
stretched >= 0.6 and earn14 < 0.4→Emailinvestment-committeeelse→Slackendowment-office{
"subject": "LLY gift: stretched, no report soon (2026-10-30)",
"text": "LLY is 2 ATR above its 20-day with no report in 14 days. Consider selling the next slice under the gift policy. 10% drawdown odds: 58%."
}What it means
For LLY on the session of 2026-10-30: True now: Is the stock more than 10% above its 200-day moving average; Stretched: more than 2 ATR above the 20-day; Last earnings move bigger than 5%. Not true: Is earnings in the next 14 days. Forecasts: A 10% drawdown within a month 58%. Fired: sell_slice (Email → investment-committee).
The gift policy sells in slices; the email only proposes a slice when the stock is stretched and no report is close.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "LLY"
},
"questions": {
"ext": {
"type": "yes_no",
"instructions": "Is the stock more than 10% above its 200-day moving average?"
},
"stretched": {
"type": "yes_no",
"ask": "C > sma(C, 20) + 2 * atr(14)"
},
"earn14": {
"type": "yes_no",
"instructions": "Is earnings in the next 14 days?"
},
"big_react": {
"type": "yes_no",
"ask": "abs(last_earnings_move) > 5"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
}
},
"actions": [
{
"id": "sell_slice",
"when": "stretched >= 0.6 and earn14 < 0.4",
"do": "email",
"connection": "investment-committee",
"subject": "{{symbol}} gift: stretched, no report soon ({{as_of}})",
"message": "{{symbol}} is 2 ATR above its 20-day with no report in 14 days. Consider selling the next slice under the gift policy. 10% drawdown odds: {{drop10|pct}}."
},
{
"id": "wait",
"when": "else",
"do": "slack",
"connection": "endowment-office",
"message": "{{symbol}} ({{as_of}}): no sell-down trigger (stretched {{stretched|pct}}, report within 14 days {{earn14|pct}})."
}
],
"dry_run": true
}Response JSON (LLY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"ext": {
"yes_no": 0.9463,
"rule": "C > sma(C, 200) * 1.1",
"basis": "comparison"
},
"stretched": {
"yes_no": 0.919,
"rule": "C > sma(C, 20) + 2 * atr(14)",
"basis": "rule"
},
"earn14": {
"yes_no": 0.0537,
"rule": "days_to_earnings <= 14",
"basis": "pattern"
},
"big_react": {
"yes_no": 0.8277,
"rule": "abs(last_earnings_move) > 5",
"basis": "rule"
},
"drop10": {
"yes_no": 0.583
}
},
"context": {
"symbol": "LLY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "sell_slice",
"fired": true,
"status": "dry_run",
"do": "email",
"connection": "investment-committee",
"preview": {
"subject": "LLY gift: stretched, no report soon (2026-10-30)",
"text": "LLY is 2 ATR above its 20-day with no report in 14 days. Consider selling the next slice under the gift policy. 10% drawdown odds: 58%."
}
},
{
"id": "wait",
"fired": false,
"status": "skipped"
}
]
}Endowment · example 16
Small-cap breadth: IJR and MDY vs IWM
Check whether small and mid caps are participating in the market move, as context for the small-buyout program.
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"IJR"} then MDY, IWM, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
golden | rule | sma(C, 50) > sma(C, 200)50-day above the 200-day |
mostly | rule | sum(C > C[-1], 10) >= 6Up on at least six of the last ten days |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | trendrule | goldenrule | mostlyrule | beat_spyforecast |
|---|---|---|---|---|
IJR | 0.5379 | 0.8644 | 0.858 | 0.46 |
MDY | 0.3508 | 0.8032 | 0.8332 | 0.446 |
IWM | 0.2176 | 0.8318 | 0.9174 | 0.459 |
true false not known for rules; forecasts are odds. Hover a column for its question.
What it means
Session of 2026-10-30, 3 symbols: Above the 50-day average: true for none of 3. 50-day above the 200-day: true for IJR, MDY, IWM of 3. Up on at least six of the last ten days: true for IJR, MDY, IWM of 3. Highest odds for “Beating SPY over a month”: IJR at 46%.
Small and mid caps in uptrends support exit conditions for buyout managers; weak breadth points the other way.
Request JSON (IJR; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "IJR"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"golden": {
"type": "yes_no",
"ask": "sma(C, 50) > sma(C, 200)"
},
"mostly": {
"type": "yes_no",
"ask": "sum(C > C[-1], 10) >= 6"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
}
}Response JSON (IJR, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.5379,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"golden": {
"yes_no": 0.8644,
"rule": "sma(C, 50) > sma(C, 200)",
"basis": "rule"
},
"mostly": {
"yes_no": 0.858,
"rule": "sum(C > C[-1], 10) >= 6",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.46
}
},
"context": {
"symbol": "IJR",
"as_of": "2026-10-30"
}
}Endowment · example 17
TLT turning point: tweezers, stars and engulfing candles
Look for reversal candles in long bonds that often mark turns in rates, for the duration discussion.
- StateTLT
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"TLT"} The server fills in the latest completed session.
Questions
tweezer_b | rule | tweezer_bottom()tweezer bottom candle: Red then green, with lows within 0.1% of each other. |
tweezer_t | rule | tweezer_top()tweezer top candle: Green then red, with highs within 0.1%. |
morning | rule | morning_star()morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first. |
engulf_bear | rule | engulfing_bear()engulfing bear candle: A red body that engulfs yesterday's green body. |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
tweezer_btweezer bottom candle: Red then green, with lows within 0.1% of each other. | 0.2166 | false |
tweezer_ttweezer top candle: Green then red, with highs within 0.1%. | 0.3493 | false |
morningmorning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first. | 0.1346 | false |
engulf_bearengulfing bear candle: A red body that engulfs yesterday's green body. | 0.2201 | false |
up_weekHigher in a week | 0.561 | 56% · close to even |
What it means
For TLT on the session of 2026-10-30: Not true: tweezer bottom candle: Red then green, with lows within 0.1% of each other.; tweezer top candle: Green then red, with highs within 0.1%.; morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first.; engulfing bear candle: A red body that engulfs yesterday's green body.. Forecasts: Higher in a week 56%.
A reversal candle in long bonds is a timing note for the duration discussion; the policy duration does not change on a candle.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TLT"
},
"questions": {
"tweezer_b": {
"type": "yes_no",
"ask": "tweezer_bottom()"
},
"tweezer_t": {
"type": "yes_no",
"ask": "tweezer_top()"
},
"morning": {
"type": "yes_no",
"ask": "morning_star()"
},
"engulf_bear": {
"type": "yes_no",
"ask": "engulfing_bear()"
},
"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": {
"tweezer_b": {
"yes_no": 0.2166,
"rule": "tweezer_bottom()",
"basis": "rule"
},
"tweezer_t": {
"yes_no": 0.3493,
"rule": "tweezer_top()",
"basis": "rule"
},
"morning": {
"yes_no": 0.1346,
"rule": "morning_star()",
"basis": "rule"
},
"engulf_bear": {
"yes_no": 0.2201,
"rule": "engulfing_bear()",
"basis": "rule"
},
"up_week": {
"yes_no": 0.561
}
},
"context": {
"symbol": "TLT",
"as_of": "2026-10-30"
}
}Endowment · example 18
Risk budget: realized volatility of the equity core
The endowment targets a volatility budget. Check realized volatility of SPY against thresholds and the forecast.
- StateSPY
- Questions4 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"SPY"} The server fills in the latest completed session.
Questions
hv20 | rule | std(log(C / C[-1]), 20) * sqrt(252) > 0.220-day realized volatility above 20% |
hv60 | rule | std(log(C / C[-1]), 60) * sqrt(252) > 0.1860-day realized volatility above 18% |
vol5 | English → rule | Is 5-day volatility higher than 20-day volatility? |
hv30 | forecast | Will annualized volatility over the next 21 sessions exceed 30%? Next-month volatility above 30% |
Answers
| Question | Answer | Reading |
|---|---|---|
hv2020-day realized volatility above 20% | 0.0537 | false |
hv6060-day realized volatility above 18% | 0.0537 | false |
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 |
hv30Next-month volatility above 30% | 0.564 | 56% · close to even |
Actions
Rules on the answers decide what to send.
hv20 >= 0.6 and hv30 >= 0.55→Emailinvestment-committeeelse→Slackendowment-office{
"text": "SPY (2026-10-30): volatility within budget (20-day 5%, 60-day 5%)."
}What it means
For SPY on the session of 2026-10-30: True now: Is 5-day volatility higher than 20-day volatility. Not true: 20-day realized volatility above 20%; 60-day realized volatility above 18%. Forecasts: Next-month volatility above 30% 56%. Fired: within (Slack → endowment-office).
Realized volatility above budget thresholds is the trigger to discuss de-risking; the forecast tells the committee whether it is expected to persist.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"hv20": {
"type": "yes_no",
"ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.2"
},
"hv60": {
"type": "yes_no",
"ask": "std(log(C / C[-1]), 60) * sqrt(252) > 0.18"
},
"vol5": {
"type": "yes_no",
"instructions": "Is 5-day volatility higher than 20-day volatility?"
},
"hv30": {
"type": "yes_no",
"instructions": "Will annualized volatility over the next 21 sessions exceed 30%?"
}
},
"actions": [
{
"id": "over_budget",
"when": "hv20 >= 0.6 and hv30 >= 0.55",
"do": "email",
"connection": "investment-committee",
"subject": "Volatility over budget ({{as_of}})",
"message": "{{symbol}} 20-day realized volatility is above 20% and next-month volatility above 30% has odds of {{hv30|pct}}. De-risking discussion requested."
},
{
"id": "within",
"when": "else",
"do": "slack",
"connection": "endowment-office",
"message": "{{symbol}} ({{as_of}}): volatility within budget (20-day {{hv20|pct}}, 60-day {{hv60|pct}})."
}
],
"dry_run": true
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"hv20": {
"yes_no": 0.0537,
"rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.2",
"basis": "rule"
},
"hv60": {
"yes_no": 0.0537,
"rule": "std(log(C / C[-1]), 60) * sqrt(252) > 0.18",
"basis": "rule"
},
"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"
},
"hv30": {
"yes_no": 0.564
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "over_budget",
"fired": false,
"status": "skipped"
},
{
"id": "within",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "endowment-office",
"preview": {
"text": "SPY (2026-10-30): volatility within budget (20-day 5%, 60-day 5%)."
}
}
]
}Endowment · example 19
Gold and silver: which metal is leading?
Compare GLD and SLV on momentum and extension as a simple read of the metals market for the real-assets manager meeting.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"GLD"} then SLV, one request each. The server fills in the latest completed session.
Questions
roc | rule | roc(C, 20) > 5Up more than 5% over 20 sessions |
zs | rule | zscore(C, 20) > 2Close more than two standard deviations above its 20-day mean |
highestbars | rule | highestbars(H, 50) <= 5The 50-day high was set within the last five sessions |
rsi70 | rule | rsi(C, 14) > 70RSI above 70 |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | rocrule | zsrule | highestbarsrule | rsi70rule | drop5forecast |
|---|---|---|---|---|---|
GLD | 0.0839 | 0.0537 | 0.0569 | 0.0537 | 0.435 |
SLV | 0.0656 | 0.0537 | 0.0583 | 0.0537 | 0.612 |
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: Up more than 5% over 20 sessions: true for none of 2. Close more than two standard deviations above its 20-day mean: true for none of 2. The 50-day high was set within the last five sessions: true for none of 2. RSI above 70: true for none of 2. Highest odds for “A 5% drawdown within a month”: SLV at 61%.
The metal with fresher highs and stronger momentum is leading; stretch rules remind the manager how far the move has run.
Request JSON (GLD; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "GLD"
},
"questions": {
"roc": {
"type": "yes_no",
"ask": "roc(C, 20) > 5"
},
"zs": {
"type": "yes_no",
"ask": "zscore(C, 20) > 2"
},
"highestbars": {
"type": "yes_no",
"ask": "highestbars(H, 50) <= 5"
},
"rsi70": {
"type": "yes_no",
"ask": "rsi(C, 14) > 70"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
}
}Response JSON (GLD, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"roc": {
"yes_no": 0.0839,
"rule": "roc(C, 20) > 5",
"basis": "rule"
},
"zs": {
"yes_no": 0.0537,
"rule": "zscore(C, 20) > 2",
"basis": "rule"
},
"highestbars": {
"yes_no": 0.0569,
"rule": "highestbars(H, 50) <= 5",
"basis": "rule"
},
"rsi70": {
"yes_no": 0.0537,
"rule": "rsi(C, 14) > 70",
"basis": "rule"
},
"drop5": {
"yes_no": 0.435
}
},
"context": {
"symbol": "GLD",
"as_of": "2026-10-30"
}
}Endowment · example 20
Technology concentration: how extended is XLK?
Index funds are heavy in technology. Check how extended the technology sector fund is for the concentration-risk paper.
- StateXLK
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"XLK"} The server fills in the latest completed session.
Questions
ext | rule | C > sma(C, 200) * 1.10More than 10% above the 200-day |
near_high | rule | C >= 0.98 * max(H, 252)Within 2% of the 52-week high |
greatest | rule | H - greatest(O, C) > 2 * abs(C - O)Upper wick more than twice the body (selling into strength) |
least | rule | least(O, C) - L > 2 * abs(C - O)Lower wick more than twice the body (buying into weakness) |
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 |
|---|---|---|
extMore than 10% above the 200-day | 0.1261 | false |
near_highWithin 2% of the 52-week high | 0.0537 | false |
greatestUpper wick more than twice the body (selling into strength) | 0.0601 | false |
leastLower wick more than twice the body (buying into weakness) | 0.1085 | false |
drop10A 10% drawdown within a month | 0.474 | 47% · close to even |
What it means
For XLK on the session of 2026-10-30: Not true: More than 10% above the 200-day; Within 2% of the 52-week high; Upper wick more than twice the body (selling into strength); Lower wick more than twice the body (buying into weakness). Forecasts: A 10% drawdown within a month 47%.
Extension near highs with long upper wicks is the exhaustion picture; the paper reports it next to the drawdown odds.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLK"
},
"questions": {
"ext": {
"type": "yes_no",
"ask": "C > sma(C, 200) * 1.10"
},
"near_high": {
"type": "yes_no",
"ask": "C >= 0.98 * max(H, 252)"
},
"greatest": {
"type": "yes_no",
"ask": "H - greatest(O, C) > 2 * abs(C - O)"
},
"least": {
"type": "yes_no",
"ask": "least(O, C) - L > 2 * abs(C - O)"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
}
}
}Response JSON (XLK, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"ext": {
"yes_no": 0.1261,
"rule": "C > sma(C, 200) * 1.10",
"basis": "rule"
},
"near_high": {
"yes_no": 0.0537,
"rule": "C >= 0.98 * max(H, 252)",
"basis": "rule"
},
"greatest": {
"yes_no": 0.0601,
"rule": "H - greatest(O, C) > 2 * abs(C - O)",
"basis": "rule"
},
"least": {
"yes_no": 0.1085,
"rule": "least(O, C) - L > 2 * abs(C - O)",
"basis": "rule"
},
"drop10": {
"yes_no": 0.474
}
},
"context": {
"symbol": "XLK",
"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, Pension fund, Sovereign wealth fund.