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 1–10 of 20 · page 1 of 2
ETF issuer · example 1
Sector ETF trend board: XLK, XLF, XLE, XLV
A product team checks which sector funds are in an uptrend and which are breaking down, to plan marketing and capital-markets outreach for the week.
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"XLK"} then XLF, XLE, XLV, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
long | English → rule | Is the stock above its 200-day moving average? |
breakdown | rule | C < lowest(L, 20)Closed under the 20-day low |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | trendrule | longrule | breakdownrule | beat_spyforecast |
|---|---|---|---|---|
XLK | 0.0776 | 0.92 | 0.6706 | 0.498 |
XLF | 0.6692 | 0.919 | 0.0555 | 0.448 |
XLE | 0.9432 | 0.9463 | 0.0537 | 0.55 |
XLV | 0.9447 | 0.9463 | 0.0537 | 0.534 |
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: Above the 50-day average: true for XLF, XLE, XLV of 4. Is the stock above its 200-day moving average: true for XLK, XLF, XLE, XLV of 4. Closed under the 20-day low: true for XLK of 4. Highest odds for “Beating SPY over a month”: XLE at 55%.
Funds with both trend rules true are the ones advisors are asking about; a breakdown flags a fund where outflows and questions are likely.
Request JSON (XLK; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLK"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"long": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"breakdown": {
"type": "yes_no",
"ask": "C < lowest(L, 20)"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
}
}Response JSON (XLK, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.0776,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"long": {
"yes_no": 0.92,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"breakdown": {
"yes_no": 0.6706,
"rule": "C < lowest(L, 20)",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.498
}
},
"context": {
"symbol": "XLK",
"as_of": "2026-10-30"
}
}ETF issuer · example 2
XLK: is heavy volume a creation/redemption signal?
Volume far above normal in an ETF often comes with creations or redemptions. Flag days when XLK trades heavy and whether price went up or down with it.
- StateXLK
- Questions5 asked
- Answersreal, captured
- Actions3 rules · dry run
State
{"symbol":"XLK"} The server fills in the latest completed session.
Questions
spike | rule | V > 2 * ref(avg(V, 20), -1)Volume more than twice the previous 20-day average |
up_vol | rule | C > C[-1] and V > 1.5 * ref(avg(V, 20), -1)Up on heavy volume |
down_vol | rule | C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)Down on heavy volume |
rank | rule | percentrank(V, 50) > 90Volume in the top tenth of 50 sessions |
spike_next | forecast | Will volume spike tomorrow? A volume spike tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
spikeVolume more than twice the previous 20-day average | 0.7826 | true |
up_volUp on heavy volume | 0.0537 | false |
down_volDown on heavy volume | 0.936 | true |
rankVolume in the top tenth of 50 sessions | 0.6754 | true |
spike_nextA volume spike tomorrow | 0.117 | 12% · unlikely |
Actions
Rules on the answers decide what to send.
spike >= 0.6 and up_vol >= 0.6→Slackcapital-marketsspike >= 0.6 and down_vol >= 0.6→Slackcapital-marketselse→Slackcapital-markets{
"text": "XLK (2026-10-30): heavy volume on a down day (94%). Expect redemption requests."
}What it means
For XLK on the session of 2026-10-30: True now: Volume more than twice the previous 20-day average; Down on heavy volume; Volume in the top tenth of 50 sessions. Not true: Up on heavy volume. Forecasts: A volume spike tomorrow 12%. Fired: flow_down (Slack → capital-markets).
Volume rules are exact on the daily bar; they are a proxy for primary-market activity, not the flow figures themselves, so the desk confirms with the authorized participants.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLK"
},
"questions": {
"spike": {
"type": "yes_no",
"ask": "V > 2 * ref(avg(V, 20), -1)"
},
"up_vol": {
"type": "yes_no",
"ask": "C > C[-1] and V > 1.5 * ref(avg(V, 20), -1)"
},
"down_vol": {
"type": "yes_no",
"ask": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)"
},
"rank": {
"type": "yes_no",
"ask": "percentrank(V, 50) > 90"
},
"spike_next": {
"type": "yes_no",
"instructions": "Will volume spike tomorrow?"
}
},
"actions": [
{
"id": "flow_up",
"when": "spike >= 0.6 and up_vol >= 0.6",
"do": "slack",
"connection": "capital-markets",
"message": "{{symbol}} ({{as_of}}): volume over twice its 20-day average on an up day ({{up_vol|pct}}). Check the creation basket with the AP desk."
},
{
"id": "flow_down",
"when": "spike >= 0.6 and down_vol >= 0.6",
"do": "slack",
"connection": "capital-markets",
"message": "{{symbol}} ({{as_of}}): heavy volume on a down day ({{down_vol|pct}}). Expect redemption requests."
},
{
"id": "quiet",
"when": "else",
"do": "slack",
"connection": "capital-markets",
"message": "{{symbol}} ({{as_of}}): normal volume (spike rule {{spike|pct}})."
}
],
"dry_run": true
}Response JSON (XLK, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"spike": {
"yes_no": 0.7826,
"rule": "V > 2 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"up_vol": {
"yes_no": 0.0537,
"rule": "C > C[-1] and V > 1.5 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"down_vol": {
"yes_no": 0.936,
"rule": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"rank": {
"yes_no": 0.6754,
"rule": "percentrank(V, 50) > 90",
"basis": "rule"
},
"spike_next": {
"yes_no": 0.117
}
},
"context": {
"symbol": "XLK",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "flow_up",
"fired": false,
"status": "skipped"
},
{
"id": "flow_down",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "capital-markets",
"preview": {
"text": "XLK (2026-10-30): heavy volume on a down day (94%). Expect redemption requests."
}
},
{
"id": "quiet",
"fired": false,
"status": "skipped"
}
]
}ETF issuer · example 3
SPLV: is the low-volatility factor doing its job?
Check that the minimum-volatility fund is actually calmer than usual and holding its trend, for the monthly factor commentary.
- StateSPLV
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"SPLV"} The server fills in the latest completed session.
Questions
atr_low | English → rule | Is the 14-day ATR less than 2% of the price? |
hv_low | English → rule | Is 20-day historical volatility below 20%? |
trend | English → rule | Is the stock above its 200-day moving average? |
adx | rule | adx(14) > 20 and diplus(14) > diminus(14)ADX above 20 with +DI over -DI (a directional uptrend) |
vol_up | forecast | Will volatility be higher over the next month? Higher volatility next month |
Answers
| Question | Answer | Reading |
|---|---|---|
atr_lowIs the 14-day ATR less than 2% of the price compiled to atr(14) / C < 0.02 | 0.9463 | true |
hv_lowIs 20-day historical volatility below 20% compiled to std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2 | 0.9463 | true |
trendIs the stock above its 200-day moving average compiled to C > sma(C, 200) | 0.9123 | true |
adxADX above 20 with +DI over -DI (a directional uptrend) | 0.9216 | true |
vol_upHigher volatility next month | 0.487 | 49% · close to even |
What it means
For SPLV on the session of 2026-10-30: True now: Is the 14-day ATR less than 2% of the price; Is 20-day historical volatility below 20%; Is the stock above its 200-day moving average; ADX above 20 with +DI over -DI (a directional uptrend). Forecasts: Higher volatility next month 49%.
If the volatility rules are true the fund is behaving as marketed; a higher-volatility forecast is a talking point for the next commentary, not a change to the methodology.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPLV"
},
"questions": {
"atr_low": {
"type": "yes_no",
"instructions": "Is the 14-day ATR less than 2% of the price?"
},
"hv_low": {
"type": "yes_no",
"instructions": "Is 20-day historical volatility below 20%?"
},
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"adx": {
"type": "yes_no",
"ask": "adx(14) > 20 and diplus(14) > diminus(14)"
},
"vol_up": {
"type": "yes_no",
"instructions": "Will volatility be higher over the next month?"
}
}
}Response JSON (SPLV, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"atr_low": {
"yes_no": 0.9463,
"rule": "atr(14) / C < 0.02",
"basis": "pattern"
},
"hv_low": {
"yes_no": 0.9463,
"rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2",
"basis": "pattern"
},
"trend": {
"yes_no": 0.9123,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"adx": {
"yes_no": 0.9216,
"rule": "adx(14) > 20 and diplus(14) > diminus(14)",
"basis": "rule"
},
"vol_up": {
"yes_no": 0.487
}
},
"context": {
"symbol": "SPLV",
"as_of": "2026-10-30"
}
}ETF issuer · example 4
MTUM vs QUAL vs VLUE: which factor fund is leading?
Rank the three factor funds on the same questions for a factor-rotation note to distribution partners.
- State3 symbols
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"MTUM"} then QUAL, VLUE, one request each. The server fills in the latest completed session.
Questions
roc | rule | roc(C, 20) > 5Up more than 5% in 20 sessions |
linreg | rule | linreg(C, 20) > ref(linreg(C, 20), -5)20-day regression line rising over the last week |
near_high | rule | C >= 0.98 * max(H, 252)Within 2% of the 52-week high |
wma | rule | wma(C, 10) > wma(C, 30)10-day weighted average above the 30-day |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | rocrule | linregrule | near_highrule | wmarule | beat_spyforecast | Fired |
|---|---|---|---|---|---|---|
MTUM | 0.0537 | 0.2169 | 0.0537 | 0.0888 | 0.486 | lagging |
QUAL | 0.0554 | 0.137 | 0.2605 | 0.2228 | 0.495 | lagging |
VLUE | 0.058 | 0.6939 | 0.0581 | 0.3095 | 0.512 | lagging |
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.
roc >= 0.6 and wma >= 0.6→Slacketf-saleselse→Slacketf-sales{
"text": "MTUM (2026-10-30) is not leading (20-day momentum 5%)."
}{
"text": "QUAL (2026-10-30) is not leading (20-day momentum 6%)."
}{
"text": "VLUE (2026-10-30) is not leading (20-day momentum 6%)."
}What it means
Session of 2026-10-30, 3 symbols: Up more than 5% in 20 sessions: true for none of 3. 20-day regression line rising over the last week: true for VLUE of 3. Within 2% of the 52-week high: true for none of 3. 10-day weighted average above the 30-day: true for none of 3. Highest odds for “Beating SPY over a month”: VLUE at 51%. leader fired for none. lagging fired for MTUM, QUAL, VLUE.
The fund with the most rules true and the best odds against SPY leads the note; the forecast is a probability, so the note says so.
Request JSON (MTUM; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "MTUM"
},
"questions": {
"roc": {
"type": "yes_no",
"ask": "roc(C, 20) > 5"
},
"linreg": {
"type": "yes_no",
"ask": "linreg(C, 20) > ref(linreg(C, 20), -5)"
},
"near_high": {
"type": "yes_no",
"ask": "C >= 0.98 * max(H, 252)"
},
"wma": {
"type": "yes_no",
"ask": "wma(C, 10) > wma(C, 30)"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
},
"actions": [
{
"id": "leader",
"when": "roc >= 0.6 and wma >= 0.6",
"do": "slack",
"connection": "etf-sales",
"message": "{{symbol}} ({{as_of}}) leads on momentum: up 5% in 20 days ({{roc|pct}}), weighted trend {{wma|pct}}. Odds of beating SPY over a month: {{beat_spy|pct}}."
},
{
"id": "lagging",
"when": "else",
"do": "slack",
"connection": "etf-sales",
"message": "{{symbol}} ({{as_of}}) is not leading (20-day momentum {{roc|pct}})."
}
],
"dry_run": true
}Response JSON (MTUM, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"roc": {
"yes_no": 0.0537,
"rule": "roc(C, 20) > 5",
"basis": "rule"
},
"linreg": {
"yes_no": 0.2169,
"rule": "linreg(C, 20) > ref(linreg(C, 20), -5)",
"basis": "rule"
},
"near_high": {
"yes_no": 0.0537,
"rule": "C >= 0.98 * max(H, 252)",
"basis": "rule"
},
"wma": {
"yes_no": 0.0888,
"rule": "wma(C, 10) > wma(C, 30)",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.486
}
},
"context": {
"symbol": "MTUM",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "leader",
"fired": false,
"status": "skipped"
},
{
"id": "lagging",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "etf-sales",
"preview": {
"text": "MTUM (2026-10-30) is not leading (20-day momentum 5%)."
}
}
]
}ETF issuer · example 5
SCHD: distribution calendar and yield check
Before the quarterly distribution, confirm the fund's ex-date, trailing yield and payout record for the investor-communications calendar.
- StateSCHD
- Questions6 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"SCHD"} The server fills in the latest completed session.
Questions
pays | rule | pays_dividend > 0.5Pays a dividend |
ex_soon | rule | days_to_ex_div <= 30Goes ex-dividend within 30 days |
yield3 | English → rule | Is the dividend yield above 3%? |
quarterly | rule | div_count_ttm >= 4Pays at least quarterly |
raised | rule | raised_last > 0.5Raised its last dividend |
no_cut | rule | cut_last < 0.5Did not cut its last dividend |
Answers
| Question | Answer | Reading |
|---|---|---|
paysPays a dividend | 0.8591 | true |
ex_soonGoes ex-dividend within 30 days | 0.0537 | false |
yield3Is the dividend yield above 3% compiled to div_yield_ttm > 3 | 0.4287 | on the line (false) |
quarterlyPays at least quarterly | 0.55 | on the line (true) |
raisedRaised its last dividend | 0.8591 | true |
no_cutDid not cut its last dividend | 0.8591 | true |
Actions
Rules on the answers decide what to send.
ex_soon >= 0.6→Emailinvestor-communicationsWhat it means
For SCHD on the session of 2026-10-30: True now: Pays a dividend; Raised its last dividend; Did not cut its last dividend. Not true: Goes ex-dividend within 30 days. On the line: Is the dividend yield above 3%; Pays at least quarterly. No action fired: every rule was false.
Ex-dates count only once declared; if nothing is declared the email waits, and the team checks the board calendar instead.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SCHD"
},
"questions": {
"pays": {
"type": "yes_no",
"ask": "pays_dividend > 0.5"
},
"ex_soon": {
"type": "yes_no",
"ask": "days_to_ex_div <= 30"
},
"yield3": {
"type": "yes_no",
"instructions": "Is the dividend yield above 3%?"
},
"quarterly": {
"type": "yes_no",
"ask": "div_count_ttm >= 4"
},
"raised": {
"type": "yes_no",
"ask": "raised_last > 0.5"
},
"no_cut": {
"type": "yes_no",
"ask": "cut_last < 0.5"
}
},
"actions": [
{
"id": "ex_notice",
"when": "ex_soon >= 0.6",
"do": "email",
"connection": "investor-communications",
"subject": "{{symbol}} ex-date within 30 days ({{as_of}})",
"message": "{{symbol}} goes ex-distribution within 30 days. Trailing yield above 3%: {{yield3|pct}}. Last payment raised: {{raised|pct}}. Schedule the distribution notice."
}
],
"dry_run": true
}Response JSON (SCHD, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"pays": {
"yes_no": 0.8591,
"rule": "pays_dividend > 0.5",
"basis": "rule"
},
"ex_soon": {
"yes_no": 0.0537,
"rule": "days_to_ex_div <= 30",
"basis": "rule"
},
"yield3": {
"yes_no": 0.4287,
"rule": "div_yield_ttm > 3",
"basis": "pattern"
},
"quarterly": {
"yes_no": 0.55,
"rule": "div_count_ttm >= 4",
"basis": "rule"
},
"raised": {
"yes_no": 0.8591,
"rule": "raised_last > 0.5",
"basis": "rule"
},
"no_cut": {
"yes_no": 0.8591,
"rule": "cut_last < 0.5",
"basis": "rule"
}
},
"context": {
"symbol": "SCHD",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "ex_notice",
"fired": false,
"status": "skipped"
}
]
}cut_last days_to_ex_div div_count_ttm div_yield_ttm pays_dividend raised_last
ETF issuer · example 6
JEPI: a monthly payer holding up under the market?
Covered-call income fund: confirm the monthly payout record and see whether the price is eroding under the distribution.
- StateJEPI
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"JEPI"} The server fills in the latest completed session.
Questions
monthly | English → rule | Does the stock pay a monthly dividend? |
cut | English → rule | Did the stock cut its dividend last time? |
below_200d | English → rule | Is the stock below its 200-day moving average? |
down_month | English → rule | Is the stock down more than 5% 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
| Question | Answer | Reading |
|---|---|---|
monthlyDoes the stock pay a monthly dividend compiled to div_count_ttm >= 11 | 0.8591 | true |
cutDid the stock cut its dividend last time compiled to cut_last > 0.5 | 0.8591 | true |
below_200dIs the stock below its 200-day moving average compiled to C < sma(C, 200) | 0.0537 | false |
down_monthIs the stock down more than 5% over the last month compiled to C / C[-21] - 1 < -0.05 | 0.0537 | false |
drop5A 5% drawdown within a month | 0.071 | 7% · unlikely |
What it means
For JEPI on the session of 2026-10-30: True now: Does the stock pay a monthly dividend; Did the stock cut its dividend last time. Not true: Is the stock below its 200-day moving average; Is the stock down more than 5% over the last month. Forecasts: A 5% drawdown within a month 7%.
Monthly payers show eleven or more ex-dates a year; a cut plus a price below the 200-day is the combination investors will ask about first.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "JEPI"
},
"questions": {
"monthly": {
"type": "yes_no",
"instructions": "Does the stock pay a monthly dividend?"
},
"cut": {
"type": "yes_no",
"instructions": "Did the stock cut its dividend last time?"
},
"below_200d": {
"type": "yes_no",
"instructions": "Is the stock below its 200-day moving average?"
},
"down_month": {
"type": "yes_no",
"instructions": "Is the stock down more than 5% over the last month?"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
}
}Response JSON (JEPI, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"monthly": {
"yes_no": 0.8591,
"rule": "div_count_ttm >= 11",
"basis": "pattern"
},
"cut": {
"yes_no": 0.8591,
"rule": "cut_last > 0.5",
"basis": "pattern"
},
"below_200d": {
"yes_no": 0.0537,
"rule": "C < sma(C, 200)",
"basis": "comparison"
},
"down_month": {
"yes_no": 0.0537,
"rule": "C / C[-21] - 1 < -0.05",
"basis": "pattern"
},
"drop5": {
"yes_no": 0.071
}
},
"context": {
"symbol": "JEPI",
"as_of": "2026-10-30"
}
}ETF issuer · example 7
XLK's top holdings: AAPL, MSFT, NVDA earnings and trend
The largest weights drive the fund. Check each one for an upcoming report, last-quarter beat and trend before the fund's monthly review.
- State3 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"AAPL"} then MSFT, NVDA, one request each. The server fills in the latest completed session.
Questions
earn_soon | rule | days_to_earnings <= 10Reports earnings within 10 days |
beat | rule | beat_eps_last > 0.5 and beat_revenue_last > 0.5Beat on EPS and revenue last quarter |
trend | rule | C > sma(C, 50)Above the 50-day average |
big_react | rule | abs(last_earnings_move) > 5Last earnings move bigger than 5% |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | earn_soonrule | beatrule | trendrule | big_reactrule | drop5forecast |
|---|---|---|---|---|---|
AAPL | 0.9392 | 0.8591 | 0.9119 | 0.9463 | 0.365 |
MSFT | 0.0537 | 0.8591 | 0.7088 | 0.0537 | 0.422 |
NVDA | 0.0563 | 0.8591 | 0.0746 | 0.9463 | 0.523 |
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: Reports earnings within 10 days: true for AAPL of 3. Beat on EPS and revenue last quarter: true for AAPL, MSFT, NVDA of 3. Above the 50-day average: true for AAPL, MSFT of 3. Last earnings move bigger than 5%: true for AAPL, NVDA of 3. Highest odds for “A 5% drawdown within a month”: NVDA at 52%.
A heavy holding that reports soon and moved a lot last time is the fund-level event risk to mention in the review.
Request JSON (AAPL; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AAPL"
},
"questions": {
"earn_soon": {
"type": "yes_no",
"ask": "days_to_earnings <= 10"
},
"beat": {
"type": "yes_no",
"ask": "beat_eps_last > 0.5 and beat_revenue_last > 0.5"
},
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"big_react": {
"type": "yes_no",
"ask": "abs(last_earnings_move) > 5"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
}
}Response JSON (AAPL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"earn_soon": {
"yes_no": 0.9392,
"rule": "days_to_earnings <= 10",
"basis": "rule"
},
"beat": {
"yes_no": 0.8591,
"rule": "beat_eps_last > 0.5 and beat_revenue_last > 0.5",
"basis": "rule"
},
"trend": {
"yes_no": 0.9119,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"big_react": {
"yes_no": 0.9463,
"rule": "abs(last_earnings_move) > 5",
"basis": "rule"
},
"drop5": {
"yes_no": 0.365
}
},
"context": {
"symbol": "AAPL",
"as_of": "2026-10-30"
}
}abs beat_eps_last beat_revenue_last days_to_earnings last_earnings_move sma
ETF issuer · example 8
XLE: reversal candles at the lows for the energy update?
Energy has swung hard: look for reversal patterns in the sector fund before writing the sector update.
- StateXLE
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"XLE"} The server fills in the latest completed session.
Questions
piercing | rule | piercing_line()piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open). |
harami | rule | harami_bull()harami bull candle: A small green body inside yesterday's red body. |
tweezer | rule | tweezer_bottom()tweezer bottom candle: Red then green, with lows within 0.1% of each other. |
near_low | English → rule | Is the stock within 10% of its 52-week low? |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
piercingpiercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open). | 0.1025 | false |
haramiharami bull candle: A small green body inside yesterday's red body. | 0.1565 | false |
tweezertweezer bottom candle: Red then green, with lows within 0.1% of each other. | 0.0537 | false |
near_lowIs the stock within 10% of its 52-week low compiled to abs(C / min(L, 252) - 1) <= 0.1 | 0.0537 | false |
up_weekHigher in a week | 0.592 | 59% · close to even |
What it means
For XLE on the session of 2026-10-30: Not true: piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open).; harami bull candle: A small green body inside yesterday's red body.; tweezer bottom candle: Red then green, with lows within 0.1% of each other.; Is the stock within 10% of its 52-week low. Forecasts: Higher in a week 59%.
Candles are one-day facts; a reversal pattern near the lows is a story for the update only when the trend rules agree.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLE"
},
"questions": {
"piercing": {
"type": "yes_no",
"ask": "piercing_line()"
},
"harami": {
"type": "yes_no",
"ask": "harami_bull()"
},
"tweezer": {
"type": "yes_no",
"ask": "tweezer_bottom()"
},
"near_low": {
"type": "yes_no",
"instructions": "Is the stock within 10% of its 52-week low?"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (XLE, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"piercing": {
"yes_no": 0.1025,
"rule": "piercing_line()",
"basis": "rule"
},
"harami": {
"yes_no": 0.1565,
"rule": "harami_bull()",
"basis": "rule"
},
"tweezer": {
"yes_no": 0.0537,
"rule": "tweezer_bottom()",
"basis": "rule"
},
"near_low": {
"yes_no": 0.0537,
"rule": "abs(C / min(L, 252) - 1) <= 0.1",
"basis": "comparison"
},
"up_week": {
"yes_no": 0.592
}
},
"context": {
"symbol": "XLE",
"as_of": "2026-10-30"
}
}ETF issuer · example 9
XLU: is the defensive bid real?
Utilities rallying while the market stalls is a common question. Check trend, momentum and an exhaustion candle on XLU.
- StateXLU
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"XLU"} The server fills in the latest completed session.
Questions
stacked | 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 |
cci | rule | cci(20) > 100CCI above 100 |
hanging | rule | hanging_man()hanging man candle: Hammer shape, closing above 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. |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
stackedStacked averages: close > 20 EMA > 50 > 200 | 0.0631 | false |
cciCCI above 100 | 0.7575 | true |
hanginghanging man candle: Hammer shape, closing above the close five bars back. | 0.0698 | 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.2993 | false |
rally5A 5% rally within a month | 0.215 | 22% · unlikely |
What it means
For XLU on the session of 2026-10-30: True now: CCI above 100. Not true: Stacked averages: close > 20 EMA > 50 > 200; hanging man candle: Hammer shape, closing above the close five bars back.; shooting star candle: Upper wick at least twice the body, lower wick at most 10% of the range, after a five-bar rise.. Forecasts: A 5% rally within a month 22%.
A stacked trend with CCI above 100 is the real bid; a hanging man or shooting star after the run is the caution to add to the note.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLU"
},
"questions": {
"stacked": {
"type": "yes_no",
"ask": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)"
},
"cci": {
"type": "yes_no",
"ask": "cci(20) > 100"
},
"hanging": {
"type": "yes_no",
"ask": "hanging_man()"
},
"shooting": {
"type": "yes_no",
"ask": "shooting_star()"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
}
}
}Response JSON (XLU, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"stacked": {
"yes_no": 0.0631,
"rule": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)",
"basis": "rule"
},
"cci": {
"yes_no": 0.7575,
"rule": "cci(20) > 100",
"basis": "rule"
},
"hanging": {
"yes_no": 0.0698,
"rule": "hanging_man()",
"basis": "rule"
},
"shooting": {
"yes_no": 0.2993,
"rule": "shooting_star()",
"basis": "rule"
},
"rally5": {
"yes_no": 0.215
}
},
"context": {
"symbol": "XLU",
"as_of": "2026-10-30"
}
}ETF issuer · example 10
QQQ gap days: will market makers keep the spread tight?
Large opening gaps stress ETF spreads. Flag gap days in QQQ so the issuer's capital-markets team can check quotes with lead market makers.
- StateQQQ
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"QQQ"} The server fills in the latest completed session.
Questions
gap_up | rule | gap_up()gap up candle: Today's whole range is above yesterday's high: an unfilled gap up. |
gap_down | rule | gap_down()gap down candle: Today's whole range is below yesterday's low. |
gap_atr | rule | abs(O - C[-1]) > 0.5 * ref(atr(14), -1)Gap bigger than half an ATR |
gap_tom | forecast | Will it gap down tomorrow? A gap down tomorrow |
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 |
|---|---|---|
gap_upgap up candle: Today's whole range is above yesterday's high: an unfilled gap up. | 0.0537 | false |
gap_downgap down candle: Today's whole range is below yesterday's low. | 0.9259 | true |
gap_atrGap bigger than half an ATR | 0.9463 | true |
gap_tomA gap down tomorrow | 0.098 | 10% · unlikely |
big_moveA big move either way in 5 days | 0.355 | 36% · unlikely |
Actions
Rules on the answers decide what to send.
gap_atr >= 0.6→Webhooklmm-quality-queueelse→Slackcapital-markets{
"fund": "QQQ",
"as_of": "2026-10-30",
"check": "spread_quality",
"reason": "open_gap_over_half_atr",
"p_gap": 0.9463,
"p_gap_down_tomorrow": 0.098
}What it means
For QQQ on the session of 2026-10-30: True now: gap down candle: Today's whole range is below yesterday's low.; Gap bigger than half an ATR. Not true: gap up candle: Today's whole range is above yesterday's high: an unfilled gap up.. Forecasts: A gap down tomorrow 10%; A big move either way in 5 days 36%. Fired: gap_check (Webhook → lmm-quality-queue).
A gap larger than half an ATR opens a ticket for the market-quality team; otherwise the channel gets a one-line all-clear.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "QQQ"
},
"questions": {
"gap_up": {
"type": "yes_no",
"ask": "gap_up()"
},
"gap_down": {
"type": "yes_no",
"ask": "gap_down()"
},
"gap_atr": {
"type": "yes_no",
"ask": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)"
},
"gap_tom": {
"type": "yes_no",
"instructions": "Will it gap down tomorrow?"
},
"big_move": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
},
"actions": [
{
"id": "gap_check",
"when": "gap_atr >= 0.6",
"do": "webhook",
"connection": "lmm-quality-queue",
"body": {
"fund": "{{symbol}}",
"as_of": "{{as_of}}",
"check": "spread_quality",
"reason": "open_gap_over_half_atr",
"p_gap": "{{gap_atr}}",
"p_gap_down_tomorrow": "{{gap_tom}}"
}
},
{
"id": "no_gap",
"when": "else",
"do": "slack",
"connection": "capital-markets",
"message": "{{symbol}} ({{as_of}}): no large opening gap (rule {{gap_atr|pct}})."
}
],
"dry_run": true
}Response JSON (QQQ, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"gap_up": {
"yes_no": 0.0537,
"rule": "gap_up()",
"basis": "rule"
},
"gap_down": {
"yes_no": 0.9259,
"rule": "gap_down()",
"basis": "rule"
},
"gap_atr": {
"yes_no": 0.9463,
"rule": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)",
"basis": "rule"
},
"gap_tom": {
"yes_no": 0.098
},
"big_move": {
"yes_no": 0.355
}
},
"context": {
"symbol": "QQQ",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "gap_check",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "lmm-quality-queue",
"preview": {
"body": {
"fund": "QQQ",
"as_of": "2026-10-30",
"check": "spread_quality",
"reason": "open_gap_over_half_atr",
"p_gap": 0.9463,
"p_gap_down_tomorrow": 0.098
}
}
},
{
"id": "no_gap",
"fired": false,
"status": "skipped"
}
]
}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.