Use cases · Buy side
Fund-of-funds allocator: 20 ways to use Ora
Allocates across managers and ETFs: regime reads, factor sleeves and rebalancing bands. Each example is a complete, runnable request with the real answers it returned (53 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 (37)
sma 18roc 7max 5offset 5ema 3ref 3atr 3adx 2rsi 2lowest 2diminus 1diplus 1crossdown 1log 1sqrt 1std 1div_yield_ttm 1raised_last 1swinghigh 1swinglow 1avg 1crossup 1macd 1zscore 1dark_cloud 1doji 1engulfing_bear 1engulfing_bull 1harami_bear 1abs 1gap_up 1greatest 1least 1outside_bar 1highestbars 1sum 1rma 1
Examples 1–10 of 20 · page 1 of 2
Fund-of-funds allocator · example 1
Factor sleeve regime: momentum, quality, value, low volatility
Compare the four factor ETFs the allocator uses as sleeves on trend and momentum before the monthly rebalance.
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"MTUM"} then QUAL, VLUE, USMV, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
mom | rule | C > C[-63]Higher than three months ago |
near_high | rule | C >= 0.98 * max(H, 252)Within 2% of the 52-week high |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | trendrule | momrule | near_highrule | beat_spyforecast |
|---|---|---|---|---|
MTUM | 0.2691 | 0.1144 | 0.0537 | 0.486 |
QUAL | 0.9463 | 0.6814 | 0.2605 | 0.495 |
VLUE | 0.9291 | 0.6193 | 0.0581 | 0.512 |
USMV | 0.9463 | 0.9439 | 0.8261 | 0.427 |
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 QUAL, VLUE, USMV of 4. Higher than three months ago: true for QUAL, VLUE, USMV of 4. Within 2% of the 52-week high: true for USMV of 4. Highest odds for “Beating SPY over a month”: VLUE at 51%.
Sleeves with trend and momentum keep or gain weight within their bands; the laggard is checked against its long-run role before cutting.
Request JSON (MTUM; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "MTUM"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"mom": {
"type": "yes_no",
"ask": "C > C[-63]"
},
"near_high": {
"type": "yes_no",
"ask": "C >= 0.98 * max(H, 252)"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
}
}Response JSON (MTUM, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.2691,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"mom": {
"yes_no": 0.1144,
"rule": "C > C[-63]",
"basis": "rule"
},
"near_high": {
"yes_no": 0.0537,
"rule": "C >= 0.98 * max(H, 252)",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.486
}
},
"context": {
"symbol": "MTUM",
"as_of": "2026-10-30"
}
}Fund-of-funds allocator · example 2
Growth or value tilt: IWF versus IWD
Decide which style manager gets the next allocation by comparing the two style benchmarks.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"IWF"} then IWD, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)Stacked averages: close > 20 EMA > 50 > 200 |
roc | rule | roc(C, 63) > 5Up more than 5% over three months |
adx | rule | adx(14) > 20 and diplus(14) > diminus(14)Trending up (ADX over 20 and +DI over −DI) |
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
| Symbol | trendrule | rocrule | adxrule | rsirule | beat_spyforecast |
|---|---|---|---|---|---|
IWF | 0.0613 | 0.0583 | 0.0568 | 0.0737 | 0.497 |
IWD | 0.7838 | 0.1384 | 0.8823 | 0.8528 | 0.471 |
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: Stacked averages: close > 20 EMA > 50 > 200: true for IWD of 2. Up more than 5% over three months: true for none of 2. Trending up (ADX over 20 and +DI over −DI): true for IWD of 2. RSI above 50: true for IWD of 2. Highest odds for “Beating SPY over a month”: IWF at 50%.
The stronger style benchmark guides where new money goes; the allocator still respects each manager's band.
Request JSON (IWF; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "IWF"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)"
},
"roc": {
"type": "yes_no",
"ask": "roc(C, 63) > 5"
},
"adx": {
"type": "yes_no",
"ask": "adx(14) > 20 and diplus(14) > diminus(14)"
},
"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 (IWF, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.0613,
"rule": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)",
"basis": "rule"
},
"roc": {
"yes_no": 0.0583,
"rule": "roc(C, 63) > 5",
"basis": "rule"
},
"adx": {
"yes_no": 0.0568,
"rule": "adx(14) > 20 and diplus(14) > diminus(14)",
"basis": "rule"
},
"rsi": {
"yes_no": 0.0737,
"rule": "rsi(C, 14) > 50",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.497
}
},
"context": {
"symbol": "IWF",
"as_of": "2026-10-30"
}
}Fund-of-funds allocator · example 3
Regional allocation: US, Europe, Japan, emerging markets
Read trend across the regions the allocator funds through regional managers.
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"VTI"} then VGK, EWJ, VWO, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
sma_up | rule | sma(C, 200) > ref(sma(C, 200), -20)The 200-day average is rising |
mom | rule | roc(C, 20) > 5Up more than 5% in 20 sessions |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | trendrule | sma_uprule | momrule | drop5forecast |
|---|---|---|---|---|
VTI | 0.9415 | 0.9463 | 0.0537 | 0.187 |
VGK | 0.6118 | 0.8942 | 0.1318 | 0.126 |
EWJ | 0.778 | 0.9463 | 0.0537 | 0.34 |
VWO | 0.0887 | 0.9463 | 0.0537 | 0.255 |
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, VGK, EWJ of 4. The 200-day average is rising: true for VTI, VGK, EWJ, VWO of 4. Up more than 5% in 20 sessions: true for none of 4. Highest odds for “A 5% drawdown within a month”: EWJ at 34%.
Regions with rising 200-day averages hold their weights; a region below a falling average is the first candidate to trim.
Request JSON (VTI; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VTI"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"sma_up": {
"type": "yes_no",
"ask": "sma(C, 200) > ref(sma(C, 200), -20)"
},
"mom": {
"type": "yes_no",
"ask": "roc(C, 20) > 5"
},
"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": {
"trend": {
"yes_no": 0.9415,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"sma_up": {
"yes_no": 0.9463,
"rule": "sma(C, 200) > ref(sma(C, 200), -20)",
"basis": "rule"
},
"mom": {
"yes_no": 0.0537,
"rule": "roc(C, 20) > 5",
"basis": "rule"
},
"drop5": {
"yes_no": 0.187
}
},
"context": {
"symbol": "VTI",
"as_of": "2026-10-30"
}
}Fund-of-funds allocator · example 4
Rebalance band breach: equities versus bonds
When equities run far above trend or bonds fall far below, the allocator rebalances back to policy; check both sides.
- State2 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"VTI"} then AGG, one request each. The server fills in the latest completed session.
Questions
ext | rule | C > sma(C, 200) * 1.10More than 10% above the 200-day |
below | English → rule | Is the stock more than 5% below its 50-day moving average? |
dd | rule | C < 0.8 * max(H, 252)More than 20% off the 52-week high |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | extrule | belowrule | ddrule | drop5forecast | Fired |
|---|---|---|---|---|---|
VTI | 0.0537 | 0.0546 | 0.0537 | 0.187 | none |
AGG | 0.0537 | 0.0537 | 0.0537 | 0.009 | 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.
ext >= 0.6 or below >= 0.6 or dd >= 0.6→Webhookallocation-systemWhat it means
Session of 2026-10-30, 2 symbols: More than 10% above the 200-day: true for none of 2. Is the stock more than 5% below its 50-day moving average: true for none of 2. More than 20% off the 52-week high: true for none of 2. Highest odds for “A 5% drawdown within a month”: VTI at 19%. rebalance fired for none.
The allocation system queues a rebalance check only when a sleeve is far from trend; the trade size comes from the policy weights.
Request JSON (VTI; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VTI"
},
"questions": {
"ext": {
"type": "yes_no",
"ask": "C > sma(C, 200) * 1.10"
},
"below": {
"type": "yes_no",
"instructions": "Is the stock more than 5% below its 50-day moving average?"
},
"dd": {
"type": "yes_no",
"ask": "C < 0.8 * max(H, 252)"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "rebalance",
"when": "ext >= 0.6 or below >= 0.6 or dd >= 0.6",
"do": "webhook",
"connection": "allocation-system",
"body": {
"event": "rebalance_check",
"symbol": "{{symbol}}",
"p_extended": "{{ext}}",
"p_below_50d": "{{below}}",
"p_drawdown": "{{dd}}",
"as_of": "{{as_of}}"
}
}
],
"dry_run": true
}Response JSON (VTI, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"ext": {
"yes_no": 0.0537,
"rule": "C > sma(C, 200) * 1.10",
"basis": "rule"
},
"below": {
"yes_no": 0.0546,
"rule": "C < sma(C, 50) * 0.95",
"basis": "comparison"
},
"dd": {
"yes_no": 0.0537,
"rule": "C < 0.8 * max(H, 252)",
"basis": "rule"
},
"drop5": {
"yes_no": 0.187
}
},
"context": {
"symbol": "VTI",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "rebalance",
"fired": false,
"status": "skipped"
}
]
}Fund-of-funds allocator · example 5
Weekly benchmark health for every manager mandate
Each Friday, check the benchmark of every external manager and email the team where a benchmark breaks down.
- ScheduleFri at 17:00 ET
- State4 symbols
- Questions3 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"SPY"} then IWM, EFA, HYG, one request each. The server fills in the latest completed session.
Questions
breakdown | rule | C < lowest(L, 20)Closed under the 20-day low |
below | English → rule | Is the stock below 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 | breakdownrule | belowrule | drop5forecast | Fired |
|---|---|---|---|---|
SPY | 0.6271 | 0.0549 | 0.203 | flag |
IWM | 0.0741 | 0.4436 | 0.234 | none |
EFA | 0.2037 | 0.3291 | 0.163 | none |
HYG | 0.0811 | 0.8091 | 0.009 | flag |
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 or below >= 0.6→Emailallocation-team{
"subject": "Benchmark alert: SPY (2026-10-30)",
"text": "SPY broke its 20-day low (63%) or is below its 200-day (5%). 5% drawdown odds: 20%. Expect weak relative numbers from managers benchmarked here."
}{
"subject": "Benchmark alert: HYG (2026-10-30)",
"text": "HYG broke its 20-day low (8%) or is below its 200-day (81%). 5% drawdown odds: 1%. Expect weak relative numbers from managers benchmarked here."
}What it means
Session of 2026-10-30, 4 symbols: Closed under the 20-day low: true for SPY of 4. Is the stock below its 200-day moving average: true for HYG of 4. Highest odds for “A 5% drawdown within a month”: IWM at 23%. flag fired for SPY, HYG.
A benchmark breaking down explains manager returns before the monthly reports arrive.
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 benchmark health for every manager mandate",
"symbols": "SPY IWM EFA HYG",
"days": [
5
],
"at_time": "17:00",
"model": "ora-fin-0.1.1",
"questions": {
"breakdown": {
"type": "yes_no",
"ask": "C < lowest(L, 20)"
},
"below": {
"type": "yes_no",
"instructions": "Is the stock below 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": "flag",
"when": "breakdown >= 0.6 or below >= 0.6",
"do": "email",
"connection": "allocation-team",
"subject": "Benchmark alert: {{symbol}} ({{as_of}})",
"message": "{{symbol}} broke its 20-day low ({{breakdown|pct}}) or is below its 200-day ({{below|pct}}). 5% drawdown odds: {{drop5|pct}}. Expect weak relative numbers from managers benchmarked here."
}
]
}Request JSON (SPY; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"breakdown": {
"type": "yes_no",
"ask": "C < lowest(L, 20)"
},
"below": {
"type": "yes_no",
"instructions": "Is the stock below 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": "flag",
"when": "breakdown >= 0.6 or below >= 0.6",
"do": "email",
"connection": "allocation-team",
"subject": "Benchmark alert: {{symbol}} ({{as_of}})",
"message": "{{symbol}} broke its 20-day low ({{breakdown|pct}}) or is below its 200-day ({{below|pct}}). 5% drawdown odds: {{drop5|pct}}. Expect weak relative numbers from managers benchmarked here."
}
],
"dry_run": true
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"breakdown": {
"yes_no": 0.6271,
"rule": "C < lowest(L, 20)",
"basis": "rule"
},
"below": {
"yes_no": 0.0549,
"rule": "C < sma(C, 200)",
"basis": "comparison"
},
"drop5": {
"yes_no": 0.203
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "flag",
"fired": true,
"status": "dry_run",
"do": "email",
"connection": "allocation-team",
"preview": {
"subject": "Benchmark alert: SPY (2026-10-30)",
"text": "SPY broke its 20-day low (63%) or is below its 200-day (5%). 5% drawdown odds: 20%. Expect weak relative numbers from managers benchmarked here."
}
}
]
}Fund-of-funds allocator · example 6
Real assets sleeve: gold, broad commodities, REITs
Check the inflation-hedge sleeve: which real asset is trending and which is stretched.
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"GLD"} then DBC, VNQ, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
stretched | rule | C > sma(C, 20) + 2 * atr(14)Stretched: more than 2 ATR above the 20-day |
mom | rule | roc(C, 63) > 10 and C >= 0.95 * max(H, 63)Up more than 10% in a quarter, near the high |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
Answers
| Symbol | trendrule | stretchedrule | momrule | rally5forecast |
|---|---|---|---|---|
GLD | 0.0537 | 0.063 | 0.0537 | 0.503 |
DBC | 0.9463 | 0.1381 | 0.8089 | 0.392 |
VNQ | 0.6285 | 0.4542 | 0.0537 | 0.247 |
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: Is the stock above its 200-day moving average: true for DBC, VNQ of 3. Stretched: more than 2 ATR above the 20-day: true for none of 3. Up more than 10% in a quarter, near the high: true for DBC of 3. Highest odds for “A 5% rally within a month”: GLD at 50%.
A stretched real asset is trimmed toward its band; a trending one with room keeps its weight.
Request JSON (GLD; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "GLD"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"stretched": {
"type": "yes_no",
"ask": "C > sma(C, 20) + 2 * atr(14)"
},
"mom": {
"type": "yes_no",
"ask": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
}
}
}Response JSON (GLD, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.0537,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"stretched": {
"yes_no": 0.063,
"rule": "C > sma(C, 20) + 2 * atr(14)",
"basis": "rule"
},
"mom": {
"yes_no": 0.0537,
"rule": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)",
"basis": "rule"
},
"rally5": {
"yes_no": 0.503
}
},
"context": {
"symbol": "GLD",
"as_of": "2026-10-30"
}
}Fund-of-funds allocator · example 7
Credit sleeve: high yield, loans and EM debt
The credit managers' benchmarks warn first in risk-off markets; check trend and breakdowns.
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"HYG"} then BKLN, EMB, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 50-day moving average? |
breakdown | rule | C < lowest(L, 20)Closed under the 20-day low |
cross | rule | crossdown(sma(C, 10), sma(C, 50))10-day average crossed under the 50-day today |
down_week | forecast | Will the stock be lower in a week? Lower in a week |
Answers
| Symbol | trendrule | breakdownrule | crossrule | down_weekforecast |
|---|---|---|---|---|
HYG | 0.1914 | 0.0811 | 0.05 | 0.425 |
BKLN | 0.8133 | 0.0609 | 0.05 | 0.434 |
EMB | 0.2584 | 0.0566 | 0.05 | 0.441 |
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: Is the stock above its 50-day moving average: true for BKLN of 3. Closed under the 20-day low: true for none of 3. 10-day average crossed under the 50-day today: true for none of 3. Highest odds for “Lower in a week”: EMB at 44%.
Breakdowns across all three credit benchmarks are a risk-off signal for the whole portfolio, not just the credit sleeve.
Request JSON (HYG; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "HYG"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 50-day moving average?"
},
"breakdown": {
"type": "yes_no",
"ask": "C < lowest(L, 20)"
},
"cross": {
"type": "yes_no",
"ask": "crossdown(sma(C, 10), sma(C, 50))"
},
"down_week": {
"type": "yes_no",
"instructions": "Will the stock be lower in a week?"
}
}
}Response JSON (HYG, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.1914,
"rule": "C > sma(C, 50)",
"basis": "comparison"
},
"breakdown": {
"yes_no": 0.0811,
"rule": "C < lowest(L, 20)",
"basis": "rule"
},
"cross": {
"yes_no": 0.05,
"rule": "crossdown(sma(C, 10), sma(C, 50))",
"basis": "rule"
},
"down_week": {
"yes_no": 0.425
}
},
"context": {
"symbol": "HYG",
"as_of": "2026-10-30"
}
}Fund-of-funds allocator · example 8
Volatility regime gate for adding risk
Add to equity managers only when the market is calm; read SPY realized volatility and the VXX trend.
- StateSPY
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"SPY"} The server fills in the latest completed session.
Questions
calm | English → rule | Is 20-day historical volatility below 20%? |
vol5 | English → rule | Is 5-day volatility higher than 20-day volatility? |
atr | rule | atr(14) > 1.2 * ref(atr(14), -10)ATR up 20% in two weeks |
vol_month | forecast | Will volatility be higher over the next month? Higher volatility next month |
hv30 | forecast | Will annualized volatility over the next 21 sessions exceed 30%? Next-month volatility above 30% |
Answers
| Question | Answer | Reading |
|---|---|---|
calmIs 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 |
atrATR up 20% in two weeks | 0.2117 | false |
vol_monthHigher volatility next month | 0.69 | 69% · likely |
hv30Next-month volatility above 30% | 0.564 | 56% · close to even |
Actions
Rules on the answers decide what to send.
calm >= 0.6 and atr < 0.5→Slackallocation-teamelse→Slackallocation-team{
"text": "SPY (2026-10-30): calm regime (20-day vol under 20% 95%). Higher vol next month 69%. Equity adds can proceed per plan."
}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: Higher volatility next month 69%; Next-month volatility above 30% 56%. Fired: add_risk (Slack → allocation-team).
The gate turns a vague feeling about the market into a rule the team agreed on in advance.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"calm": {
"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": {
"type": "yes_no",
"ask": "atr(14) > 1.2 * ref(atr(14), -10)"
},
"vol_month": {
"type": "yes_no",
"instructions": "Will volatility be higher over the next month?"
},
"hv30": {
"type": "yes_no",
"instructions": "Will annualized volatility over the next 21 sessions exceed 30%?"
}
},
"actions": [
{
"id": "add_risk",
"when": "calm >= 0.6 and atr < 0.5",
"do": "slack",
"connection": "allocation-team",
"message": "SPY ({{as_of}}): calm regime (20-day vol under 20% {{calm|pct}}). Higher vol next month {{vol_month|pct}}. Equity adds can proceed per plan."
},
{
"id": "defer",
"when": "else",
"do": "slack",
"connection": "allocation-team",
"message": "SPY ({{as_of}}): volatility not calm (5d over 20d {{vol5|pct}}, ATR expanding {{atr|pct}}). Defer equity adds a week."
}
],
"dry_run": true
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"calm": {
"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": {
"yes_no": 0.2117,
"rule": "atr(14) > 1.2 * ref(atr(14), -10)",
"basis": "rule"
},
"vol_month": {
"yes_no": 0.69
},
"hv30": {
"yes_no": 0.564
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "add_risk",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "allocation-team",
"preview": {
"text": "SPY (2026-10-30): calm regime (20-day vol under 20% 95%). Higher vol next month 69%. Equity adds can proceed per plan."
}
},
{
"id": "defer",
"fired": false,
"status": "skipped"
}
]
}Fund-of-funds allocator · example 9
Income managers: dividend ETF health
Check the dividend strategies that income managers are benchmarked against: trend, yield and payout growth.
- State3 symbols
- Questions3 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"SCHD"} then VYM, NOBL, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
yield | English → rule | Is the dividend yield above 3%? |
raised | rule | raised_last > 0.5Raised its last dividend |
Answers
| Symbol | trendrule | yieldrule | raisedrule |
|---|---|---|---|
SCHD | 0.9463 | 0.4287 | 0.8591 |
VYM | 0.9274 | 0.0901 | 0.1409 |
NOBL | 0.9335 | 0.0674 | 0.1409 |
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: Is the stock above its 200-day moving average: true for SCHD, VYM, NOBL of 3. Is the dividend yield above 3%: true for none of 3. Raised its last dividend: true for SCHD of 3.
Income benchmarks in an uptrend with steady payouts mean the income sleeve is doing its job; a falling trend is a review.
Request JSON (SCHD; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SCHD"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"yield": {
"type": "yes_no",
"instructions": "Is the dividend yield above 3%?"
},
"raised": {
"type": "yes_no",
"ask": "raised_last > 0.5"
}
}
}Response JSON (SCHD, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.9463,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"yield": {
"yes_no": 0.4287,
"rule": "div_yield_ttm > 3",
"basis": "pattern"
},
"raised": {
"yes_no": 0.8591,
"rule": "raised_last > 0.5",
"basis": "rule"
}
},
"context": {
"symbol": "SCHD",
"as_of": "2026-10-30"
}
}Fund-of-funds allocator · example 10
Small caps versus large caps for a size tilt
Decide whether to fund the small-cap manager by comparing IJR and MDY with SPY.
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"IJR"} then MDY, SPY, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)Stacked averages: close > 20 EMA > 50 > 200 |
hh_hl | rule | (swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))Higher swing highs and higher swing lows |
mom | rule | roc(C, 20) > 5Up more than 5% in 20 sessions |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | trendrule | hh_hlrule | momrule | beat_spyforecast |
|---|---|---|---|---|
IJR | 0.2402 | 0.0685 | 0.1102 | 0.46 |
MDY | 0.2268 | 0.2037 | 0.0741 | 0.446 |
SPY | 0.0794 | 0.1736 | 0.0537 | 0.514 |
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: Stacked averages: close > 20 EMA > 50 > 200: true for none of 3. Higher swing highs and higher swing lows: true for none of 3. Up more than 5% in 20 sessions: true for none of 3. Highest odds for “Beating SPY over a month”: SPY at 51%.
Small and mid caps making higher swings while beating SPY support the size tilt; lagging ones keep it neutral.
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 > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)"
},
"hh_hl": {
"type": "yes_no",
"ask": "(swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))"
},
"mom": {
"type": "yes_no",
"ask": "roc(C, 20) > 5"
},
"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.2402,
"rule": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)",
"basis": "rule"
},
"hh_hl": {
"yes_no": 0.0685,
"rule": "(swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))",
"basis": "rule"
},
"mom": {
"yes_no": 0.1102,
"rule": "roc(C, 20) > 5",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.46
}
},
"context": {
"symbol": "IJR",
"as_of": "2026-10-30"
}
}Information, not investment advice. Rules answer from the latest completed daily session; forecasts are probabilities. Actions ran as dry runs: nothing was sent. More in Buy side: Financial advisor / RIA, Wealth manager, Family office, Hedge fund PM, Quant researcher, Portfolio manager (long-only), Risk manager, Private equity, VC / growth investor.