Use cases · Builders
Data vendor / platform: 20 ways to use Ora
Derived signals and event flags as a product, delivered by webhook to clients. Each example is a complete, runnable request with the real answers it returned (49 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 (64)
ref 10sma 8offset 6rsi 5ema 3avg 3abs 2pays_dividend 2adx 2atr_pct 2bblower 2bbmid 2days_since_split 2log 2sqrt 2std 2obv 2atr 2beat_eps_last 1beat_revenue_last 1beat_streak 1eps_growth_yoy 1eps_surprise_pct 1last_earnings_move 1cut_last 1days_to_ex_div 1div_yield_ttm 1raised_last 1years_of_growth 1doji 1engulfing_bear 1engulfing_bull 1evening_star 1hammer 1marubozu 1morning_star 1shooting_star 1bbupper 1macdhist 1days_to_split 1last_split_ratio 1reverse_split_last 1median 1percentrank 1swinghigh 1swinglow 1macd 1macdsignal 1stochd 1stochk 1diminus 1diplus 1linreg 1highest 1zscore 1days_to_earnings 1greatest 1hl2 1hlc3 1least 1ohlc4 1tr 1rec 1rma 1
Examples 1–10 of 20 · page 1 of 2
Data vendor / platform · example 1
An earnings event-flags feed for clients: NVDA, AAPL, MSFT, AMZN
Deliver a daily row per symbol with exact earnings flags (beat, streak, surprise, reaction) to a client's ingestion endpoint.
- ScheduleMon–Fri at 18:00 ET
- State4 symbols
- Questions6 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"NVDA"} then AAPL, MSFT, AMZN, one request each. The server fills in the latest completed session.
Questions
beat | English → rule | Did the stock beat EPS estimates last quarter? |
beat_rev | English → rule | Did revenue beat estimates last quarter? |
streak | rule | beat_streak >= 4Beat four quarters in a row |
surprise | rule | eps_surprise_pct > 5EPS beat by more than 5% |
reaction | rule | abs(last_earnings_move) > 5Last earnings move bigger than 5% |
growth | rule | eps_growth_yoy > 10EPS up more than 10% on the year |
Answers
| Symbol | beatrule | beat_revrule | streakrule | surpriserule | reactionrule | growthrule | Fired |
|---|---|---|---|---|---|---|---|
NVDA | 0.8591 | 0.8591 | 0.9463 | 0.9463 | 0.9463 | 0.9463 | row |
AAPL | 0.8591 | 0.8591 | 0.9463 | 0.9463 | 0.9463 | 0.9463 | row |
MSFT | 0.8591 | 0.8591 | 0.9463 | 0.0537 | 0.0537 | 0.8327 | row |
AMZN | 0.1409 | 0.1409 | 0.0537 | 0.0537 | 0.0537 | 0.0537 | 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.
beat >= 0→Webhookclient-feed{
"dataset": "earnings_flags_v1",
"symbol": "NVDA",
"as_of": "2026-10-30",
"beat_eps": 0.8591,
"beat_revenue": 0.8591,
"beat_streak_4": 0.9463,
"surprise_over_5": 0.9463,
"reaction_over_5": 0.9463,
"eps_growth_over_10": 0.9463
}{
"dataset": "earnings_flags_v1",
"symbol": "AAPL",
"as_of": "2026-10-30",
"beat_eps": 0.8591,
"beat_revenue": 0.8591,
"beat_streak_4": 0.9463,
"surprise_over_5": 0.9463,
"reaction_over_5": 0.9463,
"eps_growth_over_10": 0.9463
}{
"dataset": "earnings_flags_v1",
"symbol": "MSFT",
"as_of": "2026-10-30",
"beat_eps": 0.8591,
"beat_revenue": 0.8591,
"beat_streak_4": 0.9463,
"surprise_over_5": 0.0537,
"reaction_over_5": 0.0537,
"eps_growth_over_10": 0.8327
}{
"dataset": "earnings_flags_v1",
"symbol": "AMZN",
"as_of": "2026-10-30",
"beat_eps": 0.1409,
"beat_revenue": 0.1409,
"beat_streak_4": 0.0537,
"surprise_over_5": 0.0537,
"reaction_over_5": 0.0537,
"eps_growth_over_10": 0.0537
}What it means
Session of 2026-10-30, 4 symbols: Did the stock beat EPS estimates last quarter: true for NVDA, AAPL, MSFT of 4. Did revenue beat estimates last quarter: true for NVDA, AAPL, MSFT of 4. Beat four quarters in a row: true for NVDA, AAPL, MSFT of 4. EPS beat by more than 5%: true for NVDA, AAPL of 4. row fired for NVDA, AAPL, MSFT, AMZN.
Each field is an exact fact; a value near one half means not known (for example no estimate on record), which the client should store as null.
As a scheduled workflow (Mon–Fri at 18: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": "An earnings event-flags feed for clients: NVDA, AAPL, MSFT, AMZN",
"symbols": "NVDA AAPL MSFT AMZN",
"days": [
1,
2,
3,
4,
5
],
"at_time": "18:00",
"model": "ora-fin-0.1.1",
"questions": {
"beat": {
"type": "yes_no",
"instructions": "Did the stock beat EPS estimates last quarter?"
},
"beat_rev": {
"type": "yes_no",
"instructions": "Did revenue beat estimates last quarter?"
},
"streak": {
"type": "yes_no",
"ask": "beat_streak >= 4"
},
"surprise": {
"type": "yes_no",
"ask": "eps_surprise_pct > 5"
},
"reaction": {
"type": "yes_no",
"ask": "abs(last_earnings_move) > 5"
},
"growth": {
"type": "yes_no",
"ask": "eps_growth_yoy > 10"
}
},
"actions": [
{
"id": "row",
"when": "beat >= 0",
"do": "webhook",
"connection": "client-feed",
"body": {
"dataset": "earnings_flags_v1",
"symbol": "{{symbol}}",
"as_of": "{{as_of}}",
"beat_eps": "{{beat}}",
"beat_revenue": "{{beat_rev}}",
"beat_streak_4": "{{streak}}",
"surprise_over_5": "{{surprise}}",
"reaction_over_5": "{{reaction}}",
"eps_growth_over_10": "{{growth}}"
}
}
]
}Request JSON (NVDA; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "NVDA"
},
"questions": {
"beat": {
"type": "yes_no",
"instructions": "Did the stock beat EPS estimates last quarter?"
},
"beat_rev": {
"type": "yes_no",
"instructions": "Did revenue beat estimates last quarter?"
},
"streak": {
"type": "yes_no",
"ask": "beat_streak >= 4"
},
"surprise": {
"type": "yes_no",
"ask": "eps_surprise_pct > 5"
},
"reaction": {
"type": "yes_no",
"ask": "abs(last_earnings_move) > 5"
},
"growth": {
"type": "yes_no",
"ask": "eps_growth_yoy > 10"
}
},
"actions": [
{
"id": "row",
"when": "beat >= 0",
"do": "webhook",
"connection": "client-feed",
"body": {
"dataset": "earnings_flags_v1",
"symbol": "{{symbol}}",
"as_of": "{{as_of}}",
"beat_eps": "{{beat}}",
"beat_revenue": "{{beat_rev}}",
"beat_streak_4": "{{streak}}",
"surprise_over_5": "{{surprise}}",
"reaction_over_5": "{{reaction}}",
"eps_growth_over_10": "{{growth}}"
}
}
],
"dry_run": true
}Response JSON (NVDA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"beat": {
"yes_no": 0.8591,
"rule": "beat_eps_last > 0.5",
"basis": "pattern"
},
"beat_rev": {
"yes_no": 0.8591,
"rule": "beat_revenue_last > 0.5",
"basis": "pattern"
},
"streak": {
"yes_no": 0.9463,
"rule": "beat_streak >= 4",
"basis": "rule"
},
"surprise": {
"yes_no": 0.9463,
"rule": "eps_surprise_pct > 5",
"basis": "rule"
},
"reaction": {
"yes_no": 0.9463,
"rule": "abs(last_earnings_move) > 5",
"basis": "rule"
},
"growth": {
"yes_no": 0.9463,
"rule": "eps_growth_yoy > 10",
"basis": "rule"
}
},
"context": {
"symbol": "NVDA",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "row",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "client-feed",
"preview": {
"body": {
"dataset": "earnings_flags_v1",
"symbol": "NVDA",
"as_of": "2026-10-30",
"beat_eps": 0.8591,
"beat_revenue": 0.8591,
"beat_streak_4": 0.9463,
"surprise_over_5": 0.9463,
"reaction_over_5": 0.9463,
"eps_growth_over_10": 0.9463
}
}
}
]
}abs beat_eps_last beat_revenue_last beat_streak eps_growth_yoy eps_surprise_pct last_earnings_move
Data vendor / platform · example 2
Dividend flags dataset: payers, raisers, cutters and ex-dates
Package dividend facts for income-focused clients as a daily dataset.
- State4 symbols
- Questions6 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"KO"} then JNJ, PG, O, one request each. The server fills in the latest completed session.
Questions
pays | rule | pays_dividend > 0.5Pays a dividend |
raised | rule | raised_last > 0.5Raised its last dividend |
cut | English → rule | Did the stock cut its dividend last time? |
ex | rule | days_to_ex_div <= 30Goes ex-dividend within 30 days |
grower | rule | years_of_growth >= 10Ten years of dividend growth |
yield3 | rule | div_yield_ttm > 3Yield above 3% |
Answers
| Symbol | paysrule | raisedrule | cutrule | exrule | growerrule | yield3rule | Fired |
|---|---|---|---|---|---|---|---|
KO | 0.8591 | 0.1409 | 0.1409 | 0.2049 | 0.9463 | 0.0537 | row |
JNJ | 0.8591 | 0.1409 | 0.1409 | 0.9187 | 0.9463 | 0.0648 | row |
PG | 0.8591 | 0.1409 | 0.1409 | 0.0537 | 0.9463 | 0.2091 | row |
O | 0.8591 | 0.1409 | 0.1409 | 0.0537 | 0.0537 | 0.9463 | 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.
pays >= 0→Webhookclient-feed{
"dataset": "dividend_flags_v1",
"symbol": "KO",
"as_of": "2026-10-30",
"pays": 0.8591,
"raised_last": 0.1409,
"cut_last": 0.1409,
"ex_within_30d": 0.2049,
"growth_10y": 0.9463,
"yield_over_3": 0.0537
}{
"dataset": "dividend_flags_v1",
"symbol": "JNJ",
"as_of": "2026-10-30",
"pays": 0.8591,
"raised_last": 0.1409,
"cut_last": 0.1409,
"ex_within_30d": 0.9187,
"growth_10y": 0.9463,
"yield_over_3": 0.0648
}{
"dataset": "dividend_flags_v1",
"symbol": "PG",
"as_of": "2026-10-30",
"pays": 0.8591,
"raised_last": 0.1409,
"cut_last": 0.1409,
"ex_within_30d": 0.0537,
"growth_10y": 0.9463,
"yield_over_3": 0.2091
}{
"dataset": "dividend_flags_v1",
"symbol": "O",
"as_of": "2026-10-30",
"pays": 0.8591,
"raised_last": 0.1409,
"cut_last": 0.1409,
"ex_within_30d": 0.0537,
"growth_10y": 0.0537,
"yield_over_3": 0.9463
}What it means
Session of 2026-10-30, 4 symbols: Pays a dividend: true for KO, JNJ, PG, O of 4. Raised its last dividend: true for none of 4. Did the stock cut its dividend last time: true for none of 4. Goes ex-dividend within 30 days: true for JNJ of 4. row fired for KO, JNJ, PG, O.
One row per symbol per session, all from the dividend record; clients join it to their own holdings.
Request JSON (KO; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "KO"
},
"questions": {
"pays": {
"type": "yes_no",
"ask": "pays_dividend > 0.5"
},
"raised": {
"type": "yes_no",
"ask": "raised_last > 0.5"
},
"cut": {
"type": "yes_no",
"instructions": "Did the stock cut its dividend last time?"
},
"ex": {
"type": "yes_no",
"ask": "days_to_ex_div <= 30"
},
"grower": {
"type": "yes_no",
"ask": "years_of_growth >= 10"
},
"yield3": {
"type": "yes_no",
"ask": "div_yield_ttm > 3"
}
},
"actions": [
{
"id": "row",
"when": "pays >= 0",
"do": "webhook",
"connection": "client-feed",
"body": {
"dataset": "dividend_flags_v1",
"symbol": "{{symbol}}",
"as_of": "{{as_of}}",
"pays": "{{pays}}",
"raised_last": "{{raised}}",
"cut_last": "{{cut}}",
"ex_within_30d": "{{ex}}",
"growth_10y": "{{grower}}",
"yield_over_3": "{{yield3}}"
}
}
],
"dry_run": true
}Response JSON (KO, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"pays": {
"yes_no": 0.8591,
"rule": "pays_dividend > 0.5",
"basis": "rule"
},
"raised": {
"yes_no": 0.1409,
"rule": "raised_last > 0.5",
"basis": "rule"
},
"cut": {
"yes_no": 0.1409,
"rule": "cut_last > 0.5",
"basis": "pattern"
},
"ex": {
"yes_no": 0.2049,
"rule": "days_to_ex_div <= 30",
"basis": "rule"
},
"grower": {
"yes_no": 0.9463,
"rule": "years_of_growth >= 10",
"basis": "rule"
},
"yield3": {
"yes_no": 0.0537,
"rule": "div_yield_ttm > 3",
"basis": "rule"
}
},
"context": {
"symbol": "KO",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "row",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "client-feed",
"preview": {
"body": {
"dataset": "dividend_flags_v1",
"symbol": "KO",
"as_of": "2026-10-30",
"pays": 0.8591,
"raised_last": 0.1409,
"cut_last": 0.1409,
"ex_within_30d": 0.2049,
"growth_10y": 0.9463,
"yield_over_3": 0.0537
}
}
}
]
}cut_last days_to_ex_div div_yield_ttm pays_dividend raised_last years_of_growth
Data vendor / platform · example 3
Candlestick pattern signals as a product on SPY constituents (AAPL)
Sell a pattern-detection feed: every named pattern, evaluated exactly on the latest bar, for each symbol.
- StateAAPL
- Questions8 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"AAPL"} The server fills in the latest completed session.
Questions
engulf_bull | rule | engulfing_bull()engulfing bull candle: A green body that engulfs yesterday's red body. |
engulf_bear | rule | engulfing_bear()engulfing bear candle: A red body that engulfs yesterday's green body. |
hammer | rule | hammer()hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back. |
star | 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. |
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. |
evening | rule | evening_star()evening star candle: A green bar, a small bar that stays above its close, then a red bar closing below the middle of the first. |
doji | rule | doji()doji candle: Body at most 10% of the day's range. |
marubozu | rule | marubozu()marubozu candle: Body at least 90% of the range: almost no wicks. |
Answers
| Question | Answer | Reading |
|---|---|---|
engulf_bullengulfing bull candle: A green body that engulfs yesterday's red body. | 0.2066 | false |
engulf_bearengulfing bear candle: A red body that engulfs yesterday's green body. | 0.1532 | false |
hammerhammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back. | 0.1795 | false |
starshooting star candle: Upper wick at least twice the body, lower wick at most 10% of the range, after a five-bar rise. | 0.0537 | 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.0805 | false |
eveningevening star candle: A green bar, a small bar that stays above its close, then a red bar closing below the middle of the first. | 0.1612 | false |
dojidoji candle: Body at most 10% of the day's range. | 0.3343 | false |
marubozumarubozu candle: Body at least 90% of the range: almost no wicks. | 0.0537 | false |
What it means
For AAPL on the session of 2026-10-30: Not true: engulfing bull candle: A green body that engulfs yesterday's red body.; engulfing bear candle: A red body that engulfs yesterday's green body.; hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back.; shooting star candle: Upper wick at least twice the body, lower wick at most 10% of the range, after a five-bar rise.; 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.; evening star candle: A green bar, a small bar that stays above its close, then a red bar closing below the middle of the first.; doji candle: Body at most 10% of the day's range.; marubozu candle: Body at least 90% of the range: almost no wicks..
Pattern answers are exact, so the feed can document each definition once; clients get the same answer the rule engine gives anyone.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AAPL"
},
"questions": {
"engulf_bull": {
"type": "yes_no",
"ask": "engulfing_bull()"
},
"engulf_bear": {
"type": "yes_no",
"ask": "engulfing_bear()"
},
"hammer": {
"type": "yes_no",
"ask": "hammer()"
},
"star": {
"type": "yes_no",
"ask": "shooting_star()"
},
"morning": {
"type": "yes_no",
"ask": "morning_star()"
},
"evening": {
"type": "yes_no",
"ask": "evening_star()"
},
"doji": {
"type": "yes_no",
"ask": "doji()"
},
"marubozu": {
"type": "yes_no",
"ask": "marubozu()"
}
}
}Response JSON (AAPL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"engulf_bull": {
"yes_no": 0.2066,
"rule": "engulfing_bull()",
"basis": "rule"
},
"engulf_bear": {
"yes_no": 0.1532,
"rule": "engulfing_bear()",
"basis": "rule"
},
"hammer": {
"yes_no": 0.1795,
"rule": "hammer()",
"basis": "rule"
},
"star": {
"yes_no": 0.0537,
"rule": "shooting_star()",
"basis": "rule"
},
"morning": {
"yes_no": 0.0805,
"rule": "morning_star()",
"basis": "rule"
},
"evening": {
"yes_no": 0.1612,
"rule": "evening_star()",
"basis": "rule"
},
"doji": {
"yes_no": 0.3343,
"rule": "doji()",
"basis": "rule"
},
"marubozu": {
"yes_no": 0.0537,
"rule": "marubozu()",
"basis": "rule"
}
},
"context": {
"symbol": "AAPL",
"as_of": "2026-10-30"
}
}doji engulfing_bear engulfing_bull evening_star hammer marubozu morning_star shooting_star
Data vendor / platform · example 4
A technical snapshot API response for MSFT
Answer a client API call with a compact set of trend, momentum and volatility states for one symbol.
- StateMSFT
- Questions6 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"MSFT"} 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 |
adx | rule | adx(14) > 25Trending (ADX above 25) |
rsi | rule | rsi(C, 14) > 50RSI above 50 |
macd | rule | macdhist(C) > ref(macdhist(C), -1)MACD histogram rising |
atr | rule | atr_pct(14) > 3A typical day moves more than 3% |
bb | rule | (bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06Bollinger bands narrower than 6% of price |
Answers
| Question | Answer | Reading |
|---|---|---|
trendStacked averages: close > 20 EMA > 50 > 200 | 0.3192 | false |
adxTrending (ADX above 25) | 0.3124 | false |
rsiRSI above 50 | 0.4101 | on the line (false) |
macdMACD histogram rising | 0.2073 | false |
atrA typical day moves more than 3% | 0.0563 | false |
bbBollinger bands narrower than 6% of price | 0.5745 | on the line (true) |
Actions
Rules on the answers decide what to send.
trend >= 0→Webhooksnapshot-cache{
"symbol": "MSFT",
"as_of": "2026-10-30",
"stacked": 0.3192,
"adx_over_25": 0.3124,
"rsi_over_50": 0.4101,
"macd_hist_rising": 0.2073,
"atr_over_3pct": 0.0563,
"bb_squeeze": 0.5745
}What it means
For MSFT on the session of 2026-10-30: Not true: Stacked averages: close > 20 EMA > 50 > 200; Trending (ADX above 25); MACD histogram rising; A typical day moves more than 3%. On the line: RSI above 50; Bollinger bands narrower than 6% of price. Fired: cache (Webhook → snapshot-cache).
The snapshot is deterministic for a given session; caching it per as_of date is safe.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "MSFT"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)"
},
"adx": {
"type": "yes_no",
"ask": "adx(14) > 25"
},
"rsi": {
"type": "yes_no",
"ask": "rsi(C, 14) > 50"
},
"macd": {
"type": "yes_no",
"ask": "macdhist(C) > ref(macdhist(C), -1)"
},
"atr": {
"type": "yes_no",
"ask": "atr_pct(14) > 3"
},
"bb": {
"type": "yes_no",
"ask": "(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06"
}
},
"actions": [
{
"id": "cache",
"when": "trend >= 0",
"do": "webhook",
"connection": "snapshot-cache",
"body": {
"symbol": "{{symbol}}",
"as_of": "{{as_of}}",
"stacked": "{{trend}}",
"adx_over_25": "{{adx}}",
"rsi_over_50": "{{rsi}}",
"macd_hist_rising": "{{macd}}",
"atr_over_3pct": "{{atr}}",
"bb_squeeze": "{{bb}}"
}
}
],
"dry_run": true
}Response JSON (MSFT, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.3192,
"rule": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)",
"basis": "rule"
},
"adx": {
"yes_no": 0.3124,
"rule": "adx(14) > 25",
"basis": "rule"
},
"rsi": {
"yes_no": 0.4101,
"rule": "rsi(C, 14) > 50",
"basis": "rule"
},
"macd": {
"yes_no": 0.2073,
"rule": "macdhist(C) > ref(macdhist(C), -1)",
"basis": "rule"
},
"atr": {
"yes_no": 0.0563,
"rule": "atr_pct(14) > 3",
"basis": "rule"
},
"bb": {
"yes_no": 0.5745,
"rule": "(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06",
"basis": "rule"
}
},
"context": {
"symbol": "MSFT",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "cache",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "snapshot-cache",
"preview": {
"body": {
"symbol": "MSFT",
"as_of": "2026-10-30",
"stacked": 0.3192,
"adx_over_25": 0.3124,
"rsi_over_50": 0.4101,
"macd_hist_rising": 0.2073,
"atr_over_3pct": 0.0563,
"bb_squeeze": 0.5745
}
}
}
]
}Data vendor / platform · example 5
Forecast overlay dataset: odds of moves for index ETFs
Offer clients a separate, clearly labeled forecast dataset next to the exact-signal feed.
- ScheduleMon–Fri at 18:15 ET
- State4 symbols
- Questions5 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
up_week | forecast | Will the stock be higher in a week? Higher in a week |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
vol_up | forecast | Will volatility be higher over the next month? Higher volatility next month |
big | forecast | Will there be a big move in either direction in the next 5 days? A big move either way in 5 days |
Answers
| Symbol | up_weekforecast | drop5forecast | rally5forecast | vol_upforecast | bigforecast | Fired |
|---|---|---|---|---|---|---|
SPY | 0.598 | 0.203 | 0.229 | 0.69 | 0.425 | row |
QQQ | 0.561 | 0.443 | 0.501 | 0.523 | 0.355 | row |
IWM | 0.526 | 0.234 | 0.285 | 0.508 | 0.342 | row |
DIA | 0.567 | 0.157 | 0.186 | 0.684 | 0.412 | 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.
up_week >= 0→Webhookclient-feed{
"dataset": "forecast_overlay_v1",
"symbol": "SPY",
"as_of": "2026-10-30",
"p_up_week": 0.598,
"p_drop5_month": 0.203,
"p_rally5_month": 0.229,
"p_vol_up_month": 0.69,
"p_big_move_5d": 0.425
}{
"dataset": "forecast_overlay_v1",
"symbol": "QQQ",
"as_of": "2026-10-30",
"p_up_week": 0.561,
"p_drop5_month": 0.443,
"p_rally5_month": 0.501,
"p_vol_up_month": 0.523,
"p_big_move_5d": 0.355
}{
"dataset": "forecast_overlay_v1",
"symbol": "IWM",
"as_of": "2026-10-30",
"p_up_week": 0.526,
"p_drop5_month": 0.234,
"p_rally5_month": 0.285,
"p_vol_up_month": 0.508,
"p_big_move_5d": 0.342
}{
"dataset": "forecast_overlay_v1",
"symbol": "DIA",
"as_of": "2026-10-30",
"p_up_week": 0.567,
"p_drop5_month": 0.157,
"p_rally5_month": 0.186,
"p_vol_up_month": 0.684,
"p_big_move_5d": 0.412
}What it means
Session of 2026-10-30, 4 symbols: Highest odds for “Higher in a week”: SPY at 60%. row fired for SPY, QQQ, IWM, DIA.
Forecast fields are probabilities and are shipped in their own dataset so no client mistakes them for exact signals.
As a scheduled workflow (Mon–Fri at 18:15 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": "Forecast overlay dataset: odds of moves for index ETFs",
"symbols": "SPY QQQ IWM DIA",
"days": [
1,
2,
3,
4,
5
],
"at_time": "18:15",
"model": "ora-fin-0.1.1",
"questions": {
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
},
"vol_up": {
"type": "yes_no",
"instructions": "Will volatility be higher over the next month?"
},
"big": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
},
"actions": [
{
"id": "row",
"when": "up_week >= 0",
"do": "webhook",
"connection": "client-feed",
"body": {
"dataset": "forecast_overlay_v1",
"symbol": "{{symbol}}",
"as_of": "{{as_of}}",
"p_up_week": "{{up_week}}",
"p_drop5_month": "{{drop5}}",
"p_rally5_month": "{{rally5}}",
"p_vol_up_month": "{{vol_up}}",
"p_big_move_5d": "{{big}}"
}
}
]
}Request JSON (SPY; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
},
"vol_up": {
"type": "yes_no",
"instructions": "Will volatility be higher over the next month?"
},
"big": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
},
"actions": [
{
"id": "row",
"when": "up_week >= 0",
"do": "webhook",
"connection": "client-feed",
"body": {
"dataset": "forecast_overlay_v1",
"symbol": "{{symbol}}",
"as_of": "{{as_of}}",
"p_up_week": "{{up_week}}",
"p_drop5_month": "{{drop5}}",
"p_rally5_month": "{{rally5}}",
"p_vol_up_month": "{{vol_up}}",
"p_big_move_5d": "{{big}}"
}
}
],
"dry_run": true
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"up_week": {
"yes_no": 0.598
},
"drop5": {
"yes_no": 0.203
},
"rally5": {
"yes_no": 0.229
},
"vol_up": {
"yes_no": 0.69
},
"big": {
"yes_no": 0.425
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "row",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "client-feed",
"preview": {
"body": {
"dataset": "forecast_overlay_v1",
"symbol": "SPY",
"as_of": "2026-10-30",
"p_up_week": 0.598,
"p_drop5_month": 0.203,
"p_rally5_month": 0.229,
"p_vol_up_month": 0.69,
"p_big_move_5d": 0.425
}
}
}
]
}Data vendor / platform · example 6
Corporate-action alerts for split adjustments
Tell downstream clients when a symbol split recently or has one announced, so they re-adjust history.
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"NVDA"} then WMT, AAPL, one request each. The server fills in the latest completed session.
Questions
recent | rule | days_since_split <= 30split in the last 30 days |
announced | rule | days_to_split <= 365A split is announced |
ratio | English → rule | Was the last split at least 2-for-1? |
reverse | rule | reverse_split_last > 0.5Last split was a reverse split |
Answers
| Symbol | recentrule | announcedrule | ratiorule | reverserule | Fired |
|---|---|---|---|---|---|
NVDA | 0.0537 | 0.0537 | 0.9463 | 0.1409 | none |
WMT | 0.0537 | 0.0537 | 0.9317 | 0.1409 | none |
AAPL | 0.0537 | 0.0537 | 0.9463 | 0.1409 | 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.
recent >= 0.6 or announced >= 0.6→Emailclient-opsWhat it means
Session of 2026-10-30, 3 symbols: split in the last 30 days: true for none of 3. A split is announced: true for none of 3. Was the last split at least 2-for-1: true for NVDA, WMT, AAPL of 3. Last split was a reverse split: true for none of 3. adjust fired for none.
The notice only goes out when a split is recent or announced, and it says which; quiet symbols need no action.
Request JSON (NVDA; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "NVDA"
},
"questions": {
"recent": {
"type": "yes_no",
"ask": "days_since_split <= 30"
},
"announced": {
"type": "yes_no",
"ask": "days_to_split <= 365"
},
"ratio": {
"type": "yes_no",
"instructions": "Was the last split at least 2-for-1?"
},
"reverse": {
"type": "yes_no",
"ask": "reverse_split_last > 0.5"
}
},
"actions": [
{
"id": "adjust",
"when": "recent >= 0.6 or announced >= 0.6",
"do": "email",
"connection": "client-ops",
"subject": "Split adjustment notice: {{symbol}}",
"message": "{{symbol}} ({{as_of}}): split in the last 30 days {{recent|pct}}, split announced {{announced|pct}}. Re-adjust stored history."
}
],
"dry_run": true
}Response JSON (NVDA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"recent": {
"yes_no": 0.0537,
"rule": "days_since_split <= 30",
"basis": "rule"
},
"announced": {
"yes_no": 0.0537,
"rule": "days_to_split <= 365",
"basis": "rule"
},
"ratio": {
"yes_no": 0.9463,
"rule": "last_split_ratio >= 2",
"basis": "pattern"
},
"reverse": {
"yes_no": 0.1409,
"rule": "reverse_split_last > 0.5",
"basis": "rule"
}
},
"context": {
"symbol": "NVDA",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "adjust",
"fired": false,
"status": "skipped"
}
]
}days_since_split days_to_split last_split_ratio reverse_split_last
Data vendor / platform · example 7
Market regime labels: trend and volatility for SPY
Publish a daily regime label (trend up or down, volatility calm or high) that clients use to condition their models.
- StateSPY
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"SPY"} 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 |
vol_high | English → rule | Is 20-day historical volatility above 25%? |
vol5 | English → rule | Is 5-day volatility higher than 20-day volatility? |
vol_next | forecast | Will volatility be higher over the next month? Higher volatility next month |
Answers
| Question | Answer | Reading |
|---|---|---|
trendIs the stock above its 200-day moving average compiled to C > sma(C, 200) | 0.9451 | true |
sma_upThe 200-day average is rising | 0.9463 | true |
vol_highIs 20-day historical volatility above 25% compiled to std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) > 0.25 | 0.0537 | false |
vol5Is 5-day volatility higher than 20-day volatility compiled to std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19) | 0.8872 | true |
vol_nextHigher volatility next month | 0.69 | 69% · likely |
Actions
Rules on the answers decide what to send.
trend >= 0→Webhookclient-feed{
"dataset": "regime_labels_v1",
"symbol": "SPY",
"as_of": "2026-10-30",
"trend_up": 0.9451,
"sma200_rising": 0.9463,
"vol_high": 0.0537,
"vol_expanding": 0.8872,
"p_vol_up_month": 0.69
}What it means
For SPY on the session of 2026-10-30: True now: Is the stock above its 200-day moving average; The 200-day average is rising; Is 5-day volatility higher than 20-day volatility. Not true: Is 20-day historical volatility above 25%. Forecasts: Higher volatility next month 69%. Fired: label (Webhook → client-feed).
Clients map the probabilities to labels with their own cutoffs; the vendor ships the raw values so nothing is lost.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"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)"
},
"vol_high": {
"type": "yes_no",
"instructions": "Is 20-day historical volatility above 25%?"
},
"vol5": {
"type": "yes_no",
"instructions": "Is 5-day volatility higher than 20-day volatility?"
},
"vol_next": {
"type": "yes_no",
"instructions": "Will volatility be higher over the next month?"
}
},
"actions": [
{
"id": "label",
"when": "trend >= 0",
"do": "webhook",
"connection": "client-feed",
"body": {
"dataset": "regime_labels_v1",
"symbol": "{{symbol}}",
"as_of": "{{as_of}}",
"trend_up": "{{trend}}",
"sma200_rising": "{{sma_up}}",
"vol_high": "{{vol_high}}",
"vol_expanding": "{{vol5}}",
"p_vol_up_month": "{{vol_next}}"
}
}
],
"dry_run": true
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.9451,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"sma_up": {
"yes_no": 0.9463,
"rule": "sma(C, 200) > ref(sma(C, 200), -20)",
"basis": "rule"
},
"vol_high": {
"yes_no": 0.0537,
"rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) > 0.25",
"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"
},
"vol_next": {
"yes_no": 0.69
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "label",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "client-feed",
"preview": {
"body": {
"dataset": "regime_labels_v1",
"symbol": "SPY",
"as_of": "2026-10-30",
"trend_up": 0.9451,
"sma200_rising": 0.9463,
"vol_high": 0.0537,
"vol_expanding": 0.8872,
"p_vol_up_month": 0.69
}
}
}
]
}Data vendor / platform · example 8
Sector breadth proxy across four sector ETFs
Build a breadth number for clients: how many sectors are above their 50-day average today.
- State4 symbols
- Questions3 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"XLK"} then XLF, XLE, XLV, one request each. The server fills in the latest completed session.
Questions
above50 | rule | C > sma(C, 50)Above the 50-day average |
above200 | English → rule | Is the stock above its 200-day moving average? |
momentum | rule | C > C[-63]Higher than three months ago |
Answers
| Symbol | above50rule | above200rule | momentumrule |
|---|---|---|---|
XLK | 0.0776 | 0.92 | 0.6105 |
XLF | 0.6692 | 0.919 | 0.3514 |
XLE | 0.9432 | 0.9463 | 0.9463 |
XLV | 0.9447 | 0.9463 | 0.9463 |
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. Higher than three months ago: true for XLK, XLE, XLV of 4.
Counting true answers across sectors gives breadth; the vendor publishes the count and the per-sector answers behind it.
Request JSON (XLK; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLK"
},
"questions": {
"above50": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"above200": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"momentum": {
"type": "yes_no",
"ask": "C > C[-63]"
}
}
}Response JSON (XLK, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"above50": {
"yes_no": 0.0776,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"above200": {
"yes_no": 0.92,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"momentum": {
"yes_no": 0.6105,
"rule": "C > C[-63]",
"basis": "rule"
}
},
"context": {
"symbol": "XLK",
"as_of": "2026-10-30"
}
}Data vendor / platform · example 9
Unusual volume feed for large caps
Ship a list of symbols with unusual volume today, with the direction of the day.
- State3 symbols
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"AAPL"} then TSLA, AMD, one request each. 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 |
rank | rule | percentrank(V, 50) > 90Volume in the top tenth of 50 sessions |
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 |
median | rule | V > 2 * median(V, 20)volume over twice its 20-day median |
Answers
| Symbol | spikerule | rankrule | up_volrule | down_volrule | medianrule | Fired |
|---|---|---|---|---|---|---|
AAPL | 0.2473 | 0.6232 | 0.127 | 0.7841 | 0.2151 | none |
TSLA | 0.0589 | 0.219 | 0.1309 | 0.1309 | 0.0586 | none |
AMD | 0.5394 | 0.6546 | 0.0537 | 0.882 | 0.6441 | unusual |
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.
spike >= 0.6 or median >= 0.6→Webhookclient-feed{
"dataset": "unusual_volume_v1",
"symbol": "AMD",
"as_of": "2026-10-30",
"spike_vs_mean": 0.5394,
"spike_vs_median": 0.6441,
"up_on_volume": 0.0537,
"down_on_volume": 0.882
}What it means
Session of 2026-10-30, 3 symbols: Volume more than twice the previous 20-day average: true for none of 3. Volume in the top tenth of 50 sessions: true for AAPL, AMD of 3. Up on heavy volume: true for none of 3. Down on heavy volume: true for AAPL, AMD of 3. unusual fired for AMD.
Only symbols with a true spike rule are delivered; using both mean and median avoids one outlier day hiding the next.
Request JSON (AAPL; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AAPL"
},
"questions": {
"spike": {
"type": "yes_no",
"ask": "V > 2 * ref(avg(V, 20), -1)"
},
"rank": {
"type": "yes_no",
"ask": "percentrank(V, 50) > 90"
},
"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)"
},
"median": {
"type": "yes_no",
"ask": "V > 2 * median(V, 20)"
}
},
"actions": [
{
"id": "unusual",
"when": "spike >= 0.6 or median >= 0.6",
"do": "webhook",
"connection": "client-feed",
"body": {
"dataset": "unusual_volume_v1",
"symbol": "{{symbol}}",
"as_of": "{{as_of}}",
"spike_vs_mean": "{{spike}}",
"spike_vs_median": "{{median}}",
"up_on_volume": "{{up_vol}}",
"down_on_volume": "{{down_vol}}"
}
}
],
"dry_run": true
}Response JSON (AAPL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"spike": {
"yes_no": 0.2473,
"rule": "V > 2 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"rank": {
"yes_no": 0.6232,
"rule": "percentrank(V, 50) > 90",
"basis": "rule"
},
"up_vol": {
"yes_no": 0.127,
"rule": "C > C[-1] and V > 1.5 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"down_vol": {
"yes_no": 0.7841,
"rule": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"median": {
"yes_no": 0.2151,
"rule": "V > 2 * median(V, 20)",
"basis": "rule"
}
},
"context": {
"symbol": "AAPL",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "unusual",
"fired": false,
"status": "skipped"
}
]
}Data vendor / platform · example 10
Support and resistance proximity flags for TSLA
Deliver whether price sits near its last swing high or low, computed from confirmed pivots only.
- StateTSLA
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"TSLA"} The server fills in the latest completed session.
Questions
near_res | rule | C <= swinghigh(5) and C >= 0.97 * swinghigh(5)Within 3% under the last swing high |
near_sup | rule | C >= swinglow(5) and C <= 1.03 * swinglow(5)Within 3% above the last swing low |
break_res | rule | C > swinghigh(5) and C[-1] <= ref(swinghigh(5), -1)Closed above the last swing high today |
hh_hl | rule | (swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))Higher swing highs and higher swing lows |
lower_sh | rule | swinghigh(3, 1) < swinghigh(3, 2)latest swing high lower than the one before |
Answers
| Question | Answer | Reading |
|---|---|---|
near_resWithin 3% under the last swing high | 0.3262 | false |
near_supWithin 3% above the last swing low | 0.0751 | false |
break_resClosed above the last swing high today | 0.2918 | false |
hh_hlHigher swing highs and higher swing lows | 0.5414 | on the line (true) |
lower_shlatest swing high lower than the one before | 0.4586 | on the line (false) |
What it means
For TSLA on the session of 2026-10-30: Not true: Within 3% under the last swing high; Within 3% above the last swing low; Closed above the last swing high today. On the line: Higher swing highs and higher swing lows; latest swing high lower than the one before.
Pivots are confirmed bars later, so the feed never contains a level that only hindsight could see.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TSLA"
},
"questions": {
"near_res": {
"type": "yes_no",
"ask": "C <= swinghigh(5) and C >= 0.97 * swinghigh(5)"
},
"near_sup": {
"type": "yes_no",
"ask": "C >= swinglow(5) and C <= 1.03 * swinglow(5)"
},
"break_res": {
"type": "yes_no",
"ask": "C > swinghigh(5) and C[-1] <= ref(swinghigh(5), -1)"
},
"hh_hl": {
"type": "yes_no",
"ask": "(swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))"
},
"lower_sh": {
"type": "yes_no",
"ask": "swinghigh(3, 1) < swinghigh(3, 2)"
}
}
}Response JSON (TSLA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"near_res": {
"yes_no": 0.3262,
"rule": "C <= swinghigh(5) and C >= 0.97 * swinghigh(5)",
"basis": "rule"
},
"near_sup": {
"yes_no": 0.0751,
"rule": "C >= swinglow(5) and C <= 1.03 * swinglow(5)",
"basis": "rule"
},
"break_res": {
"yes_no": 0.2918,
"rule": "C > swinghigh(5) and C[-1] <= ref(swinghigh(5), -1)",
"basis": "rule"
},
"hh_hl": {
"yes_no": 0.5414,
"rule": "(swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))",
"basis": "rule"
},
"lower_sh": {
"yes_no": 0.4586,
"rule": "swinghigh(3, 1) < swinghigh(3, 2)",
"basis": "rule"
}
},
"context": {
"symbol": "TSLA",
"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 Builders: Quant developer, Fintech app builder, Robo-advisor, Broker app, Algo / bot developer, Trading educator / newsletter.