Use cases · Institutions
ETF issuer: 20 ways to use Ora
Watches its funds and their holdings: flows proxies, trend, volatility and distribution dates. Each example is a complete, runnable request with the real answers it returned (36 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 (61)
sma 13offset 5ref 5atr 4div_yield_ttm 3abs 3ema 3adx 2log 2sqrt 2std 2max 2cut_last 2div_count_ttm 2raised_last 2rsi 2lowest 1avg 1percentrank 1diminus 1diplus 1linreg 1roc 1wma 1days_to_ex_div 1pays_dividend 1beat_eps_last 1beat_revenue_last 1days_to_earnings 1last_earnings_move 1harami_bull 1min 1piercing_line 1tweezer_bottom 1cci 1hanging_man 1shooting_star 1gap_down 1gap_up 1crossdown 1crossup 1three_black_crows 1willr 1barssince 1highest 1zscore 1macd 1macdsignal 1obv 1doji 1spinning_top 1days_since_split 1days_to_split 1last_split_ratio 1reverse_split_last 1engulfing_bear 1morning_star 1dark_cloud 1bblower 1bbmid 1bbupper 1
Examples 11–20 of 20 · page 2 of 2
ETF issuer · example 11
Dividend ETF lineup: SCHD, VIG, VYM, NOBL trend and yield
Compare the dividend funds on yield, trend and drawdown odds for the income shelf's quarterly fact sheet.
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"SCHD"} then VIG, VYM, NOBL, one request each. The server fills in the latest completed session.
Questions
yield3 | English → rule | Is the dividend yield above 3%? |
trend | rule | div_yield_ttm > 2 and C > sma(C, 200)Yield above 2% and above the 200-day |
sma200_up | rule | sma(C, 200) > ref(sma(C, 200), -20)The 200-day average is rising |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | yield3rule | trendrule | sma200_uprule | drop5forecast |
|---|---|---|---|---|
SCHD | 0.4287 | 0.9463 | 0.9463 | 0.207 |
VIG | 0.0537 | 0.0537 | 0.9463 | 0.114 |
VYM | 0.0901 | 0.9274 | 0.9463 | 0.111 |
NOBL | 0.0674 | 0.4771 | 0.943 | 0.179 |
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 dividend yield above 3%: true for none of 4. Yield above 2% and above the 200-day: true for SCHD, VYM of 4. The 200-day average is rising: true for SCHD, VIG, VYM, NOBL of 4. Highest odds for “A 5% drawdown within a month”: SCHD at 21%.
Higher yield with a rising 200-day is the strongest line on the fact sheet; drawdown odds help frame the risk paragraph.
Request JSON (SCHD; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SCHD"
},
"questions": {
"yield3": {
"type": "yes_no",
"instructions": "Is the dividend yield above 3%?"
},
"trend": {
"type": "yes_no",
"ask": "div_yield_ttm > 2 and C > sma(C, 200)"
},
"sma200_up": {
"type": "yes_no",
"ask": "sma(C, 200) > ref(sma(C, 200), -20)"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
}
}Response JSON (SCHD, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"yield3": {
"yes_no": 0.4287,
"rule": "div_yield_ttm > 3",
"basis": "pattern"
},
"trend": {
"yes_no": 0.9463,
"rule": "div_yield_ttm > 2 and C > sma(C, 200)",
"basis": "rule"
},
"sma200_up": {
"yes_no": 0.9463,
"rule": "sma(C, 200) > ref(sma(C, 200), -20)",
"basis": "rule"
},
"drop5": {
"yes_no": 0.207
}
},
"context": {
"symbol": "SCHD",
"as_of": "2026-10-30"
}
}ETF issuer · example 12
Weekly sector rotation digest for the sales team
Every Monday before the open, run the sector funds and post the ones crossing their 50-day average either way.
- ScheduleMon at 08:30 ET
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"XLY"} then XLI, XLB, XLC, one request each. The server fills in the latest completed session.
Questions
cross_up | rule | crossup(C, sma(C, 50))Crossed above the 50-day today |
cross_dn | rule | crossdown(C, sma(C, 50))Crossed below the 50-day today |
rsi50 | rule | rsi(C, 14) > 50RSI above 50 |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Symbol | cross_uprule | cross_dnrule | rsi50rule | up_weekforecast | Fired |
|---|---|---|---|---|---|
XLY | 0.05 | 0.05 | 0.8376 | 0.479 | none |
XLI | 0.05 | 0.05 | 0.2592 | 0.511 | none |
XLB | 0.05 | 0.05 | 0.9292 | 0.536 | none |
XLC | 0.05 | 0.05 | 0.0537 | 0.582 | 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.
cross_up >= 0.6→Slacketf-salescross_dn >= 0.6→Slacketf-salesWhat it means
Session of 2026-10-30, 4 symbols: Crossed above the 50-day today: true for none of 4. Crossed below the 50-day today: true for none of 4. RSI above 50: true for XLY, XLB of 4. Highest odds for “Higher in a week”: XLC at 58%. rotating_in fired for none. rotating_out fired for none.
Crosses are rare one-day events, so most Mondays the digest is short; a cross is a prompt for the sales team to call holders.
As a scheduled workflow (Mon at 08: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 sector rotation digest for the sales team",
"symbols": "XLY XLI XLB XLC",
"days": [
1
],
"at_time": "08:30",
"model": "ora-fin-0.1.1",
"questions": {
"cross_up": {
"type": "yes_no",
"ask": "crossup(C, sma(C, 50))"
},
"cross_dn": {
"type": "yes_no",
"ask": "crossdown(C, sma(C, 50))"
},
"rsi50": {
"type": "yes_no",
"ask": "rsi(C, 14) > 50"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "rotating_in",
"when": "cross_up >= 0.6",
"do": "slack",
"connection": "etf-sales",
"message": "{{symbol}} ({{as_of}}) crossed above its 50-day. Higher in a week: {{up_week|pct}}."
},
{
"id": "rotating_out",
"when": "cross_dn >= 0.6",
"do": "slack",
"connection": "etf-sales",
"message": "{{symbol}} ({{as_of}}) crossed below its 50-day. RSI above 50: {{rsi50|pct}}."
}
]
}Request JSON (XLY; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLY"
},
"questions": {
"cross_up": {
"type": "yes_no",
"ask": "crossup(C, sma(C, 50))"
},
"cross_dn": {
"type": "yes_no",
"ask": "crossdown(C, sma(C, 50))"
},
"rsi50": {
"type": "yes_no",
"ask": "rsi(C, 14) > 50"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "rotating_in",
"when": "cross_up >= 0.6",
"do": "slack",
"connection": "etf-sales",
"message": "{{symbol}} ({{as_of}}) crossed above its 50-day. Higher in a week: {{up_week|pct}}."
},
{
"id": "rotating_out",
"when": "cross_dn >= 0.6",
"do": "slack",
"connection": "etf-sales",
"message": "{{symbol}} ({{as_of}}) crossed below its 50-day. RSI above 50: {{rsi50|pct}}."
}
],
"dry_run": true
}Response JSON (XLY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"cross_up": {
"yes_no": 0.05,
"rule": "crossup(C, sma(C, 50))",
"basis": "rule"
},
"cross_dn": {
"yes_no": 0.05,
"rule": "crossdown(C, sma(C, 50))",
"basis": "rule"
},
"rsi50": {
"yes_no": 0.8376,
"rule": "rsi(C, 14) > 50",
"basis": "rule"
},
"up_week": {
"yes_no": 0.479
}
},
"context": {
"symbol": "XLY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "rotating_in",
"fired": false,
"status": "skipped"
},
{
"id": "rotating_out",
"fired": false,
"status": "skipped"
}
]
}ETF issuer · example 13
ARKK: thematic fund stress test
High-beta thematic funds need a closer eye. Check drawdown, volatility and selling pressure on ARKK for the product-risk committee.
- StateARKK
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"ARKK"} 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 |
hv40 | rule | std(log(C / C[-1]), 20) * sqrt(252) > 0.4Annualized 20-day volatility above 40% |
willr | rule | willr(14) < -80Williams %R below -80 (closing near the bottom of its range) |
crows | rule | three_black_crows()three black crows candle: Three red bars, each closing lower and opening inside the previous body. |
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.0988 | false |
hv40Annualized 20-day volatility above 40% | 0.7844 | true |
willrWilliams %R below -80 (closing near the bottom of its range) | 0.5931 | on the line (true) |
crowsthree black crows candle: Three red bars, each closing lower and opening inside the previous body. | 0.0537 | false |
drop10A 10% drawdown within a month | 0.61 | 61% · likely |
Actions
Rules on the answers decide what to send.
drawdown >= 0.6 and drop10 >= 0.4→Emailproduct-riskWhat it means
For ARKK on the session of 2026-10-30: True now: Annualized 20-day volatility above 40%. Not true: More than 20% off the 52-week high; three black crows candle: Three red bars, each closing lower and opening inside the previous body.. On the line: Williams %R below -80 (closing near the bottom of its range). Forecasts: A 10% drawdown within a month 61%. No action fired: every rule was false.
The committee email needs both the drawdown fact and elevated downside odds; one alone is noted in the weekly pack.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "ARKK"
},
"questions": {
"drawdown": {
"type": "yes_no",
"ask": "C < 0.8 * max(H, 252)"
},
"hv40": {
"type": "yes_no",
"ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4"
},
"willr": {
"type": "yes_no",
"ask": "willr(14) < -80"
},
"crows": {
"type": "yes_no",
"ask": "three_black_crows()"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
}
},
"actions": [
{
"id": "committee",
"when": "drawdown >= 0.6 and drop10 >= 0.4",
"do": "email",
"connection": "product-risk",
"subject": "{{symbol}}: drawdown and downside odds ({{as_of}})",
"message": "{{symbol}} is more than 20% below its 52-week high and the odds of a further 10% drop within a month are {{drop10|pct}}. 20-day volatility above 40%: {{hv40|pct}}."
}
],
"dry_run": true
}Response JSON (ARKK, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"drawdown": {
"yes_no": 0.0988,
"rule": "C < 0.8 * max(H, 252)",
"basis": "rule"
},
"hv40": {
"yes_no": 0.7844,
"rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4",
"basis": "rule"
},
"willr": {
"yes_no": 0.5931,
"rule": "willr(14) < -80",
"basis": "rule"
},
"crows": {
"yes_no": 0.0537,
"rule": "three_black_crows()",
"basis": "rule"
},
"drop10": {
"yes_no": 0.61
}
},
"context": {
"symbol": "ARKK",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "committee",
"fired": false,
"status": "skipped"
}
]
}ETF issuer · example 14
Launch timing: is the semiconductor theme (SMH) extended?
Before seeding a new chip fund, check whether the existing chip ETF is stretched far above its averages.
- StateSMH
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"SMH"} The server fills in the latest completed session.
Questions
ext | rule | C > sma(C, 200) * 1.10More than 10% above the 200-day |
stretched | rule | C > sma(C, 20) + 2 * atr(14)Stretched: more than 2 ATR above the 20-day |
zs | rule | zscore(C, 50) > 2Close more than two standard deviations above its 50-day mean |
barsince | rule | barssince(C > highest(C, 20)) <= 5A 20-day closing high within the last five sessions |
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.0985 | false |
stretchedStretched: more than 2 ATR above the 20-day | 0.0547 | false |
zsClose more than two standard deviations above its 50-day mean | 0.0537 | false |
barsinceA 20-day closing high within the last five sessions | 0.0915 | false |
drop10A 10% drawdown within a month | 0.641 | 64% · likely |
What it means
For SMH on the session of 2026-10-30: Not true: More than 10% above the 200-day; Stretched: more than 2 ATR above the 20-day; Close more than two standard deviations above its 50-day mean; A 20-day closing high within the last five sessions. Forecasts: A 10% drawdown within a month 64%.
A launch into a stretched theme risks a weak first quarter; the team weighs these facts next to the drawdown odds and decides on timing.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SMH"
},
"questions": {
"ext": {
"type": "yes_no",
"ask": "C > sma(C, 200) * 1.10"
},
"stretched": {
"type": "yes_no",
"ask": "C > sma(C, 20) + 2 * atr(14)"
},
"zs": {
"type": "yes_no",
"ask": "zscore(C, 50) > 2"
},
"barsince": {
"type": "yes_no",
"ask": "barssince(C > highest(C, 20)) <= 5"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
}
}
}Response JSON (SMH, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"ext": {
"yes_no": 0.0985,
"rule": "C > sma(C, 200) * 1.10",
"basis": "rule"
},
"stretched": {
"yes_no": 0.0547,
"rule": "C > sma(C, 20) + 2 * atr(14)",
"basis": "rule"
},
"zs": {
"yes_no": 0.0537,
"rule": "zscore(C, 50) > 2",
"basis": "rule"
},
"barsince": {
"yes_no": 0.0915,
"rule": "barssince(C > highest(C, 20)) <= 5",
"basis": "rule"
},
"drop10": {
"yes_no": 0.641
}
},
"context": {
"symbol": "SMH",
"as_of": "2026-10-30"
}
}ETF issuer · example 15
Bond ETF shelf: is long duration (TLT) trending?
Duration funds move with rates. Check whether long duration is trending for the fixed-income shelf commentary.
- 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 |
ema | rule | C > ema(C, 21)Above its 21-day exponential average |
obv | rule | obv() > sma(obv(), 20)On-balance volume above its 20-day average |
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 |
emaAbove its 21-day exponential average | 0.8834 | true |
obvOn-balance volume above its 20-day average | 0.8722 | 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; Above its 21-day exponential average; On-balance volume above its 20-day average. Forecasts: Higher in a week 56%.
When long duration trends, the commentary leads with falling rates; when it does not, with rate risk.
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)"
},
"ema": {
"type": "yes_no",
"ask": "C > ema(C, 21)"
},
"obv": {
"type": "yes_no",
"ask": "obv() > sma(obv(), 20)"
},
"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"
},
"ema": {
"yes_no": 0.8834,
"rule": "C > ema(C, 21)",
"basis": "rule"
},
"obv": {
"yes_no": 0.8722,
"rule": "obv() > sma(obv(), 20)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.561
}
},
"context": {
"symbol": "TLT",
"as_of": "2026-10-30"
}
}ETF issuer · example 16
GLD: trend, overbought and indecision candles for the gold fund
Gold funds attract flows on strength. Check trend, overbought RSI and indecision candles before the monthly gold note.
- StateGLD
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"GLD"} 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 |
rsi70 | rule | rsi(C, 14) > 70RSI above 70 |
doji | rule | doji()doji candle: Body at most 10% of the day's range. |
spin | rule | spinning_top()spinning top candle: Small body (10–30% of range) with wicks of at least a quarter of the range on both sides. |
vol_rise | forecast | Will volatility rise over the next 5 days? Volatility rising over 5 days |
Answers
| Question | Answer | Reading |
|---|---|---|
trendStacked averages: close > 20 EMA > 50 > 200 | 0.0537 | false |
rsi70RSI above 70 | 0.0537 | false |
dojidoji candle: Body at most 10% of the day's range. | 0.0579 | false |
spinspinning top candle: Small body (10–30% of range) with wicks of at least a quarter of the range on both sides. | 0.0625 | false |
vol_riseVolatility rising over 5 days | 0.568 | 57% · close to even |
What it means
For GLD on the session of 2026-10-30: Not true: Stacked averages: close > 20 EMA > 50 > 200; RSI above 70; doji candle: Body at most 10% of the day's range.; spinning top candle: Small body (10–30% of range) with wicks of at least a quarter of the range on both sides.. Forecasts: Volatility rising over 5 days 57%.
An intact trend with indecision candles after a run is the cautious note; a clean trend without them is the confident one.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "GLD"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)"
},
"rsi70": {
"type": "yes_no",
"ask": "rsi(C, 14) > 70"
},
"doji": {
"type": "yes_no",
"ask": "doji()"
},
"spin": {
"type": "yes_no",
"ask": "spinning_top()"
},
"vol_rise": {
"type": "yes_no",
"instructions": "Will volatility rise over the next 5 days?"
}
}
}Response JSON (GLD, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.0537,
"rule": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)",
"basis": "rule"
},
"rsi70": {
"yes_no": 0.0537,
"rule": "rsi(C, 14) > 70",
"basis": "rule"
},
"doji": {
"yes_no": 0.0579,
"rule": "doji()",
"basis": "rule"
},
"spin": {
"yes_no": 0.0625,
"rule": "spinning_top()",
"basis": "rule"
},
"vol_rise": {
"yes_no": 0.568
}
},
"context": {
"symbol": "GLD",
"as_of": "2026-10-30"
}
}ETF issuer · example 17
Corporate actions in holdings: is an NVDA split recent or announced?
Splits change share counts in the basket. Flag a recent or announced split in the fund's largest holding for portfolio operations.
- StateNVDA
- Questions4 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"NVDA"} The server fills in the latest completed session.
Questions
split_3y | rule | days_since_split <= 1095Split in the last three years |
announced | rule | days_to_split <= 365A split is announced |
reverse | rule | reverse_split_last > 0.5Last split was a reverse split |
ratio | rule | last_split_ratio >= 4Last split at least 4-for-1 |
Answers
| Question | Answer | Reading |
|---|---|---|
split_3ySplit in the last three years | 0.9463 | true |
announcedA split is announced | 0.0537 | false |
reverseLast split was a reverse split | 0.1409 | false |
ratioLast split at least 4-for-1 | 0.9463 | true |
Actions
Rules on the answers decide what to send.
announced >= 0.6→Webhookfund-opselse→Slackfund-ops{
"text": "NVDA (2026-10-30): no split announced (rule 5%); last split within three years 95%."
}What it means
For NVDA on the session of 2026-10-30: True now: Split in the last three years; Last split at least 4-for-1. Not true: A split is announced; Last split was a reverse split. Fired: no_split (Slack → fund-ops).
An announced split opens an operations ticket; with none announced, the history answers are just context.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "NVDA"
},
"questions": {
"split_3y": {
"type": "yes_no",
"ask": "days_since_split <= 1095"
},
"announced": {
"type": "yes_no",
"ask": "days_to_split <= 365"
},
"reverse": {
"type": "yes_no",
"ask": "reverse_split_last > 0.5"
},
"ratio": {
"type": "yes_no",
"ask": "last_split_ratio >= 4"
}
},
"actions": [
{
"id": "split_ticket",
"when": "announced >= 0.6",
"do": "webhook",
"connection": "fund-ops",
"body": {
"holding": "{{symbol}}",
"event": "split_announced",
"as_of": "{{as_of}}",
"p_announced": "{{announced}}",
"task": "update_basket_share_counts"
}
},
{
"id": "no_split",
"when": "else",
"do": "slack",
"connection": "fund-ops",
"message": "{{symbol}} ({{as_of}}): no split announced (rule {{announced|pct}}); last split within three years {{split_3y|pct}}."
}
],
"dry_run": true
}Response JSON (NVDA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"split_3y": {
"yes_no": 0.9463,
"rule": "days_since_split <= 1095",
"basis": "rule"
},
"announced": {
"yes_no": 0.0537,
"rule": "days_to_split <= 365",
"basis": "rule"
},
"reverse": {
"yes_no": 0.1409,
"rule": "reverse_split_last > 0.5",
"basis": "rule"
},
"ratio": {
"yes_no": 0.9463,
"rule": "last_split_ratio >= 4",
"basis": "rule"
}
},
"context": {
"symbol": "NVDA",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "split_ticket",
"fired": false,
"status": "skipped"
},
{
"id": "no_split",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "fund-ops",
"preview": {
"text": "NVDA (2026-10-30): no split announced (rule 5%); last split within three years 95%."
}
}
]
}days_since_split days_to_split last_split_ratio reverse_split_last
ETF issuer · example 18
EEM: is the emerging-markets fund in or out of favor?
Answer the distribution team's weekly question about the emerging-markets fund with trend, reversal patterns and the forecast.
- 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? |
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. |
adx | rule | adx(14) > 25Trending (ADX above 25) |
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 |
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.0674 | false |
engulf_bearengulfing bear candle: A red body that engulfs yesterday's green body. | 0.0701 | false |
adxTrending (ADX above 25) | 0.8639 | true |
beat_spyBeating SPY over a month | 0.501 | 50% · close to even |
What it means
For EEM on the session of 2026-10-30: True now: Trending (ADX above 25). Not true: Is the stock above its 200-day moving average; 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: Beating SPY over a month 50%.
Trend above the 200-day with no bearish engulfing keeps the fund in the 'in favor' column; a bearish candle moves it to 'watch'.
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?"
},
"morning": {
"type": "yes_no",
"ask": "morning_star()"
},
"engulf_bear": {
"type": "yes_no",
"ask": "engulfing_bear()"
},
"adx": {
"type": "yes_no",
"ask": "adx(14) > 25"
},
"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"
},
"morning": {
"yes_no": 0.0674,
"rule": "morning_star()",
"basis": "rule"
},
"engulf_bear": {
"yes_no": 0.0701,
"rule": "engulfing_bear()",
"basis": "rule"
},
"adx": {
"yes_no": 0.8639,
"rule": "adx(14) > 25",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.501
}
},
"context": {
"symbol": "EEM",
"as_of": "2026-10-30"
}
}ETF issuer · example 19
VNQ: REIT fund income and trend for advisors
Advisors hold VNQ for income. Check the payout, yield and price trend, and whether a top in the price is forming.
- StateVNQ
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"VNQ"} The server fills in the latest completed session.
Questions
yield3 | English → rule | Is the dividend yield above 3%? |
raised | rule | raised_last > 0.5Raised its last dividend |
trend | rule | C > sma(C, 50)Above the 50-day average |
dark | rule | dark_cloud()dark cloud candle: After a green day, opens above its close and closes below the middle of its body (but above its open). |
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 |
|---|---|---|
yield3Is the dividend yield above 3% compiled to div_yield_ttm > 3 | 0.8893 | true |
raisedRaised its last dividend | 0.1409 | false |
trendAbove the 50-day average | 0.7433 | true |
darkdark cloud candle: After a green day, opens above its close and closes below the middle of its body (but above its open). | 0.1885 | 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 dividend yield above 3%; Above the 50-day average. Not true: Raised its last dividend; dark cloud candle: After a green day, opens above its close and closes below the middle of its body (but above its open).. Forecasts: A 5% drawdown within a month 22%.
Yield and payout facts are the income story; a dark cloud cover after a rise is the price caution advisors may hear about.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VNQ"
},
"questions": {
"yield3": {
"type": "yes_no",
"instructions": "Is the dividend yield above 3%?"
},
"raised": {
"type": "yes_no",
"ask": "raised_last > 0.5"
},
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"dark": {
"type": "yes_no",
"ask": "dark_cloud()"
},
"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": {
"yield3": {
"yes_no": 0.8893,
"rule": "div_yield_ttm > 3",
"basis": "pattern"
},
"raised": {
"yes_no": 0.1409,
"rule": "raised_last > 0.5",
"basis": "rule"
},
"trend": {
"yes_no": 0.7433,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"dark": {
"yes_no": 0.1885,
"rule": "dark_cloud()",
"basis": "rule"
},
"drop5": {
"yes_no": 0.218
}
},
"context": {
"symbol": "VNQ",
"as_of": "2026-10-30"
}
}ETF issuer · example 20
Daily fund health digest after the close: SPY, QQQ, IWM, DIA
After every close, each flagship fund gets the same health checks, and the product team gets a webhook row per fund for its dashboard.
- ScheduleMon–Fri at 16:45 ET
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"SPY"} then QQQ, IWM, DIA, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
squeeze | rule | (bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06Bollinger bands narrower than 6% of price |
atr | rule | atr(14) > 1.2 * ref(atr(14), -10)ATR up more than 20% over two weeks |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | trendrule | squeezerule | atrrule | drop5forecast | Fired |
|---|---|---|---|---|---|
SPY | 0.1128 | 0.899 | 0.2117 | 0.203 | dashboard_row |
QQQ | 0.0653 | 0.0789 | 0.5608 | 0.443 | dashboard_row |
IWM | 0.2176 | 0.8386 | 0.0687 | 0.234 | dashboard_row |
DIA | 0.2849 | 0.9092 | 0.0749 | 0.157 | dashboard_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→Webhookproduct-dashboard{
"fund": "SPY",
"as_of": "2026-10-30",
"above_50d": 0.1128,
"squeeze": 0.899,
"atr_expanding": 0.2117,
"p_drop5": 0.203
}{
"fund": "QQQ",
"as_of": "2026-10-30",
"above_50d": 0.0653,
"squeeze": 0.0789,
"atr_expanding": 0.5608,
"p_drop5": 0.443
}{
"fund": "IWM",
"as_of": "2026-10-30",
"above_50d": 0.2176,
"squeeze": 0.8386,
"atr_expanding": 0.0687,
"p_drop5": 0.234
}{
"fund": "DIA",
"as_of": "2026-10-30",
"above_50d": 0.2849,
"squeeze": 0.9092,
"atr_expanding": 0.0749,
"p_drop5": 0.157
}What it means
Session of 2026-10-30, 4 symbols: Above the 50-day average: true for none of 4. Bollinger bands narrower than 6% of price: true for SPY, IWM, DIA of 4. ATR up more than 20% over two weeks: true for none of 4. Highest odds for “A 5% drawdown within a month”: QQQ at 44%. dashboard_row fired for SPY, QQQ, IWM, DIA.
Every fund posts a row every day, so the dashboard always has the latest answers; the team reads it, nothing trades on it.
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 fund health digest after the close: SPY, QQQ, IWM, DIA",
"symbols": "SPY QQQ IWM DIA",
"days": [
1,
2,
3,
4,
5
],
"at_time": "16:45",
"model": "ora-fin-0.1.1",
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"squeeze": {
"type": "yes_no",
"ask": "(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06"
},
"atr": {
"type": "yes_no",
"ask": "atr(14) > 1.2 * ref(atr(14), -10)"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "dashboard_row",
"when": "trend >= 0",
"do": "webhook",
"connection": "product-dashboard",
"body": {
"fund": "{{symbol}}",
"as_of": "{{as_of}}",
"above_50d": "{{trend}}",
"squeeze": "{{squeeze}}",
"atr_expanding": "{{atr}}",
"p_drop5": "{{drop5}}"
}
}
]
}Request JSON (SPY; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"squeeze": {
"type": "yes_no",
"ask": "(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06"
},
"atr": {
"type": "yes_no",
"ask": "atr(14) > 1.2 * ref(atr(14), -10)"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "dashboard_row",
"when": "trend >= 0",
"do": "webhook",
"connection": "product-dashboard",
"body": {
"fund": "{{symbol}}",
"as_of": "{{as_of}}",
"above_50d": "{{trend}}",
"squeeze": "{{squeeze}}",
"atr_expanding": "{{atr}}",
"p_drop5": "{{drop5}}"
}
}
],
"dry_run": true
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.1128,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"squeeze": {
"yes_no": 0.899,
"rule": "(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06",
"basis": "rule"
},
"atr": {
"yes_no": 0.2117,
"rule": "atr(14) > 1.2 * ref(atr(14), -10)",
"basis": "rule"
},
"drop5": {
"yes_no": 0.203
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "dashboard_row",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "product-dashboard",
"preview": {
"body": {
"fund": "SPY",
"as_of": "2026-10-30",
"above_50d": 0.1128,
"squeeze": 0.899,
"atr_expanding": 0.2117,
"p_drop5": 0.203
}
}
}
]
}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: Index provider, Insurance investment office, Pension fund, Endowment, Sovereign wealth fund.