Ora
All use cases All industries

Individuals

Retail investorActive day traderSwing traderOptions traderDividend investorLong-term passive investorCrypto traderFX traderCommodities traderSocial trading communityStudents and universities

Buy side

Financial advisor / RIAWealth managerFamily officeHedge fund PMQuant researcherPortfolio manager (long-only)Risk managerPrivate equityVC / growth investorFund-of-funds allocator

Sell side

Equity research analystSell-side sales traderExecution trader / deskMarket makerProp trading firmCompliance officer

Corporates

Investor relations teamCorporate treasuryCFO officeBank credit analystFinancial journalist / media

Builders

Quant developerFintech app builderRobo-advisorBroker appAlgo / bot developerData vendor / platformTrading educator / newsletter

Institutions

ETF issuerIndex providerInsurance investment officePension fundEndowmentSovereign wealth fund

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.

Answers were captured on 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.

ora-fin-0.1.14 symbols, one request each4 questions
  1. State4 symbols
  2. Questions4 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"SCHD"} then VIG, VYM, NOBL, one request each. The server fills in the latest completed session.

Questions

yield3English → ruleIs the dividend yield above 3%?
trendrulediv_yield_ttm > 2 and C > sma(C, 200)
Yield above 2% and above the 200-day
sma200_uprulesma(C, 200) > ref(sma(C, 200), -20)
The 200-day average is rising
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symbolyield3ruletrendrulesma200_upruledrop5forecast
SCHD0.42870.94630.94630.207
VIG0.05370.05370.94630.114
VYM0.09010.92740.94630.111
NOBL0.06740.47710.9430.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"
  }
}

div_yield_ttm ref sma

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.

ora-fin-0.1.14 symbols, one request each4 questions2 actionsworkflow · Mon at 08:30 ET
  1. ScheduleMon at 08:30 ET
  2. State4 symbols
  3. Questions4 asked
  4. Answersreal, captured
  5. Actions2 rules · dry run

State

{"symbol":"XLY"} then XLI, XLB, XLC, one request each. The server fills in the latest completed session.

Questions

cross_uprulecrossup(C, sma(C, 50))
Crossed above the 50-day today
cross_dnrulecrossdown(C, sma(C, 50))
Crossed below the 50-day today
rsi50rulersi(C, 14) > 50
RSI above 50
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

Symbolcross_uprulecross_dnrulersi50ruleup_weekforecastFired
XLY0.050.050.83760.479none
XLI0.050.050.25920.511none
XLB0.050.050.92920.536none
XLC0.050.050.05370.582none

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-sales
cross_dn >= 0.6→Slacketf-sales
XLY 0 of 2 fired · dry run, nothing sent
XLI 0 of 2 fired · dry run, nothing sent
XLB 0 of 2 fired · dry run, nothing sent
XLC 0 of 2 fired · dry run, nothing sent

What 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"
    }
  ]
}

crossdown crossup rsi sma

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.

ora-fin-0.1.1ARKK5 questions1 action
  1. StateARKK
  2. Questions5 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

{"symbol":"ARKK"} The server fills in the latest completed session.

Questions

drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
hv40rulestd(log(C / C[-1]), 20) * sqrt(252) > 0.4
Annualized 20-day volatility above 40%
willrrulewillr(14) < -80
Williams %R below -80 (closing near the bottom of its range)
crowsrulethree_black_crows()
three black crows candle: Three red bars, each closing lower and opening inside the previous body.
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

QuestionAnswerReading
drawdown
More than 20% off the 52-week high
0.0988false
hv40
Annualized 20-day volatility above 40%
0.7844true
willr
Williams %R below -80 (closing near the bottom of its range)
0.5931on the line (true)
crows
three black crows candle: Three red bars, each closing lower and opening inside the previous body.
0.0537false
drop10
A 10% drawdown within a month
0.6161% · likely

Actions

Rules on the answers decide what to send.

drawdown >= 0.6 and drop10 >= 0.4→Emailproduct-risk
What each action would send 0 of 1 fired · dry run, nothing sent
committeerule false: skipped

What 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"
    }
  ]
}

log max offset sqrt std three_black_crows willr

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.

ora-fin-0.1.1SMH5 questions
  1. StateSMH
  2. Questions5 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"SMH"} The server fills in the latest completed session.

Questions

extruleC > sma(C, 200) * 1.10
More than 10% above the 200-day
stretchedruleC > sma(C, 20) + 2 * atr(14)
Stretched: more than 2 ATR above the 20-day
zsrulezscore(C, 50) > 2
Close more than two standard deviations above its 50-day mean
barsincerulebarssince(C > highest(C, 20)) <= 5
A 20-day closing high within the last five sessions
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

QuestionAnswerReading
ext
More than 10% above the 200-day
0.0985false
stretched
Stretched: more than 2 ATR above the 20-day
0.0547false
zs
Close more than two standard deviations above its 50-day mean
0.0537false
barsince
A 20-day closing high within the last five sessions
0.0915false
drop10
A 10% drawdown within a month
0.64164% · 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"
  }
}

atr barssince highest sma zscore

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.

ora-fin-0.1.1TLT5 questions
  1. StateTLT
  2. Questions5 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"TLT"} The server fills in the latest completed session.

Questions

trendruleC > sma(C, 50)
Above the 50-day average
macdrulemacd(C) > macdsignal(C)
MACD above its signal line
emaruleC > ema(C, 21)
Above its 21-day exponential average
obvruleobv() > sma(obv(), 20)
On-balance volume above its 20-day average
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
trend
Above the 50-day average
0.8482true
macd
MACD above its signal line
0.9084true
ema
Above its 21-day exponential average
0.8834true
obv
On-balance volume above its 20-day average
0.8722true
up_week
Higher in a week
0.56156% · 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"
  }
}

ema macd macdsignal obv sma

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.

ora-fin-0.1.1GLD5 questions
  1. StateGLD
  2. Questions5 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"GLD"} The server fills in the latest completed session.

Questions

trendruleC > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)
Stacked averages: close > 20 EMA > 50 > 200
rsi70rulersi(C, 14) > 70
RSI above 70
dojiruledoji()
doji candle: Body at most 10% of the day's range.
spinrulespinning_top()
spinning top candle: Small body (10–30% of range) with wicks of at least a quarter of the range on both sides.
vol_riseforecastWill volatility rise over the next 5 days?
Volatility rising over 5 days

Answers

QuestionAnswerReading
trend
Stacked averages: close > 20 EMA > 50 > 200
0.0537false
rsi70
RSI above 70
0.0537false
doji
doji candle: Body at most 10% of the day's range.
0.0579false
spin
spinning top candle: Small body (10–30% of range) with wicks of at least a quarter of the range on both sides.
0.0625false
vol_rise
Volatility rising over 5 days
0.56857% · 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"
  }
}

doji ema rsi sma spinning_top

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.

ora-fin-0.1.1NVDA4 questions2 actions
  1. StateNVDA
  2. Questions4 asked
  3. Answersreal, captured
  4. Actions2 rules · dry run

State

{"symbol":"NVDA"} The server fills in the latest completed session.

Questions

split_3yruledays_since_split <= 1095
Split in the last three years
announcedruledays_to_split <= 365
A split is announced
reverserulereverse_split_last > 0.5
Last split was a reverse split
ratiorulelast_split_ratio >= 4
Last split at least 4-for-1

Answers

QuestionAnswerReading
split_3y
Split in the last three years
0.9463true
announced
A split is announced
0.0537false
reverse
Last split was a reverse split
0.1409false
ratio
Last split at least 4-for-1
0.9463true

Actions

Rules on the answers decide what to send.

announced >= 0.6→Webhookfund-ops
else→Slackfund-ops
What each action would send 1 of 2 fired · dry run, nothing sent
split_ticketrule false: skipped
no_splitwould send (dry run)Slack → fund-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.

ora-fin-0.1.1EEM5 questions
  1. StateEEM
  2. Questions5 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"EEM"} The server fills in the latest completed session.

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
morningrulemorning_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_bearruleengulfing_bear()
engulfing bear candle: A red body that engulfs yesterday's green body.
adxruleadx(14) > 25
Trending (ADX above 25)
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

QuestionAnswerReading
trend
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.1449false
morning
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.
0.0674false
engulf_bear
engulfing bear candle: A red body that engulfs yesterday's green body.
0.0701false
adx
Trending (ADX above 25)
0.8639true
beat_spy
Beating SPY over a month
0.50150% · 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"
  }
}

adx engulfing_bear morning_star sma

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.

ora-fin-0.1.1VNQ5 questions
  1. StateVNQ
  2. Questions5 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"VNQ"} The server fills in the latest completed session.

Questions

yield3English → ruleIs the dividend yield above 3%?
raisedruleraised_last > 0.5
Raised its last dividend
trendruleC > sma(C, 50)
Above the 50-day average
darkruledark_cloud()
dark cloud candle: After a green day, opens above its close and closes below the middle of its body (but above its open).
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

QuestionAnswerReading
yield3
Is the dividend yield above 3%
compiled to div_yield_ttm > 3
0.8893true
raised
Raised its last dividend
0.1409false
trend
Above the 50-day average
0.7433true
dark
dark cloud candle: After a green day, opens above its close and closes below the middle of its body (but above its open).
0.1885false
drop5
A 5% drawdown within a month
0.21822% · 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"
  }
}

dark_cloud div_yield_ttm raised_last sma

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.

ora-fin-0.1.14 symbols, one request each4 questions1 actionworkflow · Mon–Fri at 16:45 ET
  1. ScheduleMon–Fri at 16:45 ET
  2. State4 symbols
  3. Questions4 asked
  4. Answersreal, captured
  5. Actions1 rule · dry run

State

{"symbol":"SPY"} then QQQ, IWM, DIA, one request each. The server fills in the latest completed session.

Questions

trendruleC > sma(C, 50)
Above the 50-day average
squeezerule(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06
Bollinger bands narrower than 6% of price
atrruleatr(14) > 1.2 * ref(atr(14), -10)
ATR up more than 20% over two weeks
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symboltrendrulesqueezeruleatrruledrop5forecastFired
SPY0.11280.8990.21170.203dashboard_row
QQQ0.06530.07890.56080.443dashboard_row
IWM0.21760.83860.06870.234dashboard_row
DIA0.28490.90920.07490.157dashboard_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
SPY 1 of 1 fired · dry run, nothing sent
dashboard_rowwould send (dry run)Webhook → product-dashboard
{
  "fund": "SPY",
  "as_of": "2026-10-30",
  "above_50d": 0.1128,
  "squeeze": 0.899,
  "atr_expanding": 0.2117,
  "p_drop5": 0.203
}
QQQ 1 of 1 fired · dry run, nothing sent
dashboard_rowwould send (dry run)Webhook → product-dashboard
{
  "fund": "QQQ",
  "as_of": "2026-10-30",
  "above_50d": 0.0653,
  "squeeze": 0.0789,
  "atr_expanding": 0.5608,
  "p_drop5": 0.443
}
IWM 1 of 1 fired · dry run, nothing sent
dashboard_rowwould send (dry run)Webhook → product-dashboard
{
  "fund": "IWM",
  "as_of": "2026-10-30",
  "above_50d": 0.2176,
  "squeeze": 0.8386,
  "atr_expanding": 0.0687,
  "p_drop5": 0.234
}
DIA 1 of 1 fired · dry run, nothing sent
dashboard_rowwould send (dry run)Webhook → product-dashboard
{
  "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
        }
      }
    }
  ]
}

atr bblower bbmid bbupper ref sma

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.

Create an account Open the Playground Everything here also lives in the console, next to your keys and usage.