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 · Individuals

Retail investor: 20 ways to use Ora

Checks a handful of stocks before buying, adding or trimming, and wants alerts instead of screen time. Each example is a complete, runnable request with the real answers it returned (26 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 (49)

sma 13rsi 5max 5lowest 4offset 4beat_eps_last 3div_yield_ttm 3atr 3ref 3abs 2years_of_growth 2avg 2highest 2min 2ema 2bbupper 2swinglow 2std 2beat_revenue_last 1days_to_earnings 1last_earnings_move 1next_report_amc 1cut_last 1pays_dividend 1obv 1zscore 1macd 1macdsignal 1days_since_split 1days_to_split 1last_split_ratio 1reverse_split_last 1splits_5y 1engulfing_bull 1hammer 1raised_last 1bblower 1bbmid 1roc 1days_since_ex_div 1days_to_ex_div 1div_count_ttm 1days_since_earnings 1eps_surprise_pct 1last_earnings_gap 1pre_earnings_close 1atr_pct 1log 1sqrt 1

Examples 11–20 of 20 · page 2 of 2

Retail investor · example 11

Has NVDA split recently, and is another split announced?

Understand the split history behind the share price before reading old price charts or news.

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

State

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

Questions

split_3yruledays_since_split <= 1095
Split in the last three years
ratioEnglish → ruleWas the last split at least 2-for-1?
reverserulereverse_split_last > 0.5
Last split was a reverse split
announcedruledays_to_split <= 365
A split is announced
multirulesplits_5y >= 2
Two or more splits in five years

Answers

QuestionAnswerReading
split_3y
Split in the last three years
0.9463true
ratio
Was the last split at least 2-for-1
compiled to last_split_ratio >= 2
0.9463true
reverse
Last split was a reverse split
0.1409false
announced
A split is announced
0.0537false
multi
Two or more splits in five years
0.1409false

What it means

For NVDA on the session of 2026-10-30: True now: Split in the last three years; Was the last split at least 2-for-1. Not true: Last split was a reverse split; A split is announced; Two or more splits in five years.

Split facts come from the corporate-action record; an announced split is answered only once it is in the table.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "questions": {
    "split_3y": {
      "type": "yes_no",
      "ask": "days_since_split <= 1095"
    },
    "ratio": {
      "type": "yes_no",
      "instructions": "Was the last split at least 2-for-1?"
    },
    "reverse": {
      "type": "yes_no",
      "ask": "reverse_split_last > 0.5"
    },
    "announced": {
      "type": "yes_no",
      "ask": "days_to_split <= 365"
    },
    "multi": {
      "type": "yes_no",
      "ask": "splits_5y >= 2"
    }
  }
}
Response JSON (NVDA, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "split_3y": {
      "yes_no": 0.9463,
      "rule": "days_since_split <= 1095",
      "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"
    },
    "announced": {
      "yes_no": 0.0537,
      "rule": "days_to_split <= 365",
      "basis": "rule"
    },
    "multi": {
      "yes_no": 0.1409,
      "rule": "splits_5y >= 2",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "NVDA",
    "as_of": "2026-10-30"
  }
}

days_since_split days_to_split last_split_ratio reverse_split_last splits_5y

Retail investor · example 12

Did a reversal candle print at support in PFE?

Look for a hammer or bullish engulfing near the recent low before averaging down.

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

State

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

Questions

hammer_lowrulehammer() and L <= 1.01 * lowest(L, 20)
Hammer at a 20-day low
engulfruleengulfing_bull()
engulfing bull candle: A green body that engulfs yesterday's red body.
near_supEnglish → ruleIs the stock within 2% above its last swing low (support)?
below_200dEnglish → ruleIs the stock below its 200-day moving average?
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
hammer_low
Hammer at a 20-day low
0.0591false
engulf
engulfing bull candle: A green body that engulfs yesterday's red body.
0.0562false
near_sup
Is the stock within 2% above its last swing low (support)
compiled to (C >= swinglow(5, 1)) and (C <= swinglow(5, 1) * 1.02)
0.0904false
below_200d
Is the stock below its 200-day moving average
compiled to C < sma(C, 200)
0.0537false
up_week
Higher in a week
0.55556% · close to even

What it means

For PFE on the session of 2026-10-30: Not true: Hammer at a 20-day low; engulfing bull candle: A green body that engulfs yesterday's red body.; Is the stock within 2% above its last swing low (support); Is the stock below its 200-day moving average. Forecasts: Higher in a week 56%.

A candle at support is a reason to look, not to buy blindly; the trend rule says whether the stock is still in a downtrend.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "PFE"
  },
  "questions": {
    "hammer_low": {
      "type": "yes_no",
      "ask": "hammer() and L <= 1.01 * lowest(L, 20)"
    },
    "engulf": {
      "type": "yes_no",
      "ask": "engulfing_bull()"
    },
    "near_sup": {
      "type": "yes_no",
      "instructions": "Is the stock within 2% above its last swing low (support)?"
    },
    "below_200d": {
      "type": "yes_no",
      "instructions": "Is the stock below its 200-day moving average?"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (PFE, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "hammer_low": {
      "yes_no": 0.0591,
      "rule": "hammer() and L <= 1.01 * lowest(L, 20)",
      "basis": "rule"
    },
    "engulf": {
      "yes_no": 0.0562,
      "rule": "engulfing_bull()",
      "basis": "rule"
    },
    "near_sup": {
      "yes_no": 0.0904,
      "rule": "(C >= swinglow(5, 1)) and (C <= swinglow(5, 1) * 1.02)",
      "basis": "pattern"
    },
    "below_200d": {
      "yes_no": 0.0537,
      "rule": "C < sma(C, 200)",
      "basis": "comparison"
    },
    "up_week": {
      "yes_no": 0.555
    }
  },
  "context": {
    "symbol": "PFE",
    "as_of": "2026-10-30"
  }
}

engulfing_bull hammer lowest sma swinglow

Retail investor · example 13

A quick checkup on JPM

Trend, momentum, earnings and dividend in one request for a bank stock in the portfolio.

ora-fin-0.1.1JPM6 questions
  1. StateJPM
  2. Questions6 asked
  3. Answersreal, captured
  4. Actionsnone

State

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

Questions

trendruleC > sma(C, 50)
Above the 50-day average
rsi50rulersi(C, 14) > 50
RSI above 50
beatEnglish → ruleDid the stock beat EPS estimates last quarter?
raisedruleraised_last > 0.5
Raised its last dividend
yieldEnglish → ruleIs the dividend yield above 2%?
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
trend
Above the 50-day average
0.3034false
rsi50
RSI above 50
0.4703on the line (false)
beat
Did the stock beat EPS estimates last quarter
compiled to beat_eps_last > 0.5
0.1409false
raised
Raised its last dividend
0.8591true
yield
Is the dividend yield above 2%
compiled to div_yield_ttm > 2
0.0537false
up_week
Higher in a week
0.55856% · close to even

What it means

For JPM on the session of 2026-10-30: True now: Raised its last dividend. Not true: Above the 50-day average; Did the stock beat EPS estimates last quarter; Is the dividend yield above 2%. On the line: RSI above 50. Forecasts: Higher in a week 56%.

One request mixes technical rules, earnings facts, dividend facts and a forecast; each answer carries its own rule, or none for the forecast.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "JPM"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "rsi50": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 50"
    },
    "beat": {
      "type": "yes_no",
      "instructions": "Did the stock beat EPS estimates last quarter?"
    },
    "raised": {
      "type": "yes_no",
      "ask": "raised_last > 0.5"
    },
    "yield": {
      "type": "yes_no",
      "instructions": "Is the dividend yield above 2%?"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (JPM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.3034,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "rsi50": {
      "yes_no": 0.4703,
      "rule": "rsi(C, 14) > 50",
      "basis": "rule"
    },
    "beat": {
      "yes_no": 0.1409,
      "rule": "beat_eps_last > 0.5",
      "basis": "pattern"
    },
    "raised": {
      "yes_no": 0.8591,
      "rule": "raised_last > 0.5",
      "basis": "rule"
    },
    "yield": {
      "yes_no": 0.0537,
      "rule": "div_yield_ttm > 2",
      "basis": "pattern"
    },
    "up_week": {
      "yes_no": 0.558
    }
  },
  "context": {
    "symbol": "JPM",
    "as_of": "2026-10-30"
  }
}

beat_eps_last div_yield_ttm raised_last rsi sma

Retail investor · example 14

Is my stop on WMT about to be hit?

Check whether the stock closed below a chandelier stop or broke its 20-day low, and how likely a further drop is.

ora-fin-0.1.1WMT4 questions1 action
  1. StateWMT
  2. Questions4 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

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

Questions

chandelierruleC < highest(H, 22) - 3 * atr(22)
Chandelier exit: 3 ATR under the 22-day high
low_breakruleC < lowest(L, 20)
Closed under the 20-day low
swing_stopEnglish → ruleIs a stop below the last swing low less than 1.5 ATR away?
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

QuestionAnswerReading
chandelier
Chandelier exit: 3 ATR under the 22-day high
0.0681false
low_break
Closed under the 20-day low
0.0537false
swing_stop
Is a stop below the last swing low less than 1.5 ATR away
compiled to (C > swinglow(5, 1)) and (C - swinglow(5, 1) < 1.5 * atr(14))
0.0575false
drop5
A 5% drawdown within a month
0.43243% · close to even

Actions

Rules on the answers decide what to send.

chandelier >= 0.6 or low_break >= 0.6→Emailme
What each action would send 0 of 1 fired · dry run, nothing sent
stop_hitrule false: skipped

What it means

For WMT on the session of 2026-10-30: Not true: Chandelier exit: 3 ATR under the 22-day high; Closed under the 20-day low; Is a stop below the last swing low less than 1.5 ATR away. Forecasts: A 5% drawdown within a month 43%. No action fired: every rule was false.

The stop rules are exact checks on the close; the drawdown forecast is the odds of more downside, which helps decide whether to wait for the next session.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "WMT"
  },
  "questions": {
    "chandelier": {
      "type": "yes_no",
      "ask": "C < highest(H, 22) - 3 * atr(22)"
    },
    "low_break": {
      "type": "yes_no",
      "ask": "C < lowest(L, 20)"
    },
    "swing_stop": {
      "type": "yes_no",
      "instructions": "Is a stop below the last swing low less than 1.5 ATR away?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "stop_hit",
      "when": "chandelier >= 0.6 or low_break >= 0.6",
      "do": "email",
      "connection": "me",
      "subject": "{{symbol}}: stop level broken",
      "message": "{{symbol}} ({{as_of}}) closed through a stop level (chandelier {{chandelier|pct}}, 20-day low {{low_break|pct}}). Review the position."
    }
  ],
  "dry_run": true
}
Response JSON (WMT, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "chandelier": {
      "yes_no": 0.0681,
      "rule": "C < highest(H, 22) - 3 * atr(22)",
      "basis": "rule"
    },
    "low_break": {
      "yes_no": 0.0537,
      "rule": "C < lowest(L, 20)",
      "basis": "rule"
    },
    "swing_stop": {
      "yes_no": 0.0575,
      "rule": "(C > swinglow(5, 1)) and (C - swinglow(5, 1) < 1.5 * atr(14))",
      "basis": "pattern"
    },
    "drop5": {
      "yes_no": 0.432
    }
  },
  "context": {
    "symbol": "WMT",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "stop_hit",
      "fired": false,
      "status": "skipped"
    }
  ]
}

atr highest lowest swinglow

Retail investor · example 15

Is HD coiling in a tight range?

Spot a quiet base (tight range, low volatility) that often comes before a bigger move.

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

State

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

Questions

tightrule(max(H, 10) - min(L, 10)) / C < 0.05
A tight 10-day base (under 5% of price)
squeezerule(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06
Bollinger bands narrower than 6% of price
nr7rule(H - L) < lowest(H - L, 6)
Narrowest range of the last seven sessions (NR7)
compressionrulestd(C, 10) < 0.5 * std(C, 50)
Swings less than half their 50-day size
big_move5forecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days

Answers

QuestionAnswerReading
tight
A tight 10-day base (under 5% of price)
0.0626false
squeeze
Bollinger bands narrower than 6% of price
0.0537false
nr7
Narrowest range of the last seven sessions (NR7)
0.1182false
compression
Swings less than half their 50-day size
0.7725true
big_move5
A big move either way in 5 days
0.27227% · unlikely

What it means

For HD on the session of 2026-10-30: True now: Swings less than half their 50-day size. Not true: A tight 10-day base (under 5% of price); Bollinger bands narrower than 6% of price; Narrowest range of the last seven sessions (NR7). Forecasts: A big move either way in 5 days 27%.

Several compression rules true at once describe a coiled stock; the forecast says whether a big move is likely soon, not which way.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "HD"
  },
  "questions": {
    "tight": {
      "type": "yes_no",
      "ask": "(max(H, 10) - min(L, 10)) / C < 0.05"
    },
    "squeeze": {
      "type": "yes_no",
      "ask": "(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06"
    },
    "nr7": {
      "type": "yes_no",
      "ask": "(H - L) < lowest(H - L, 6)"
    },
    "compression": {
      "type": "yes_no",
      "ask": "std(C, 10) < 0.5 * std(C, 50)"
    },
    "big_move5": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  }
}
Response JSON (HD, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "tight": {
      "yes_no": 0.0626,
      "rule": "(max(H, 10) - min(L, 10)) / C < 0.05",
      "basis": "rule"
    },
    "squeeze": {
      "yes_no": 0.0537,
      "rule": "(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06",
      "basis": "rule"
    },
    "nr7": {
      "yes_no": 0.1182,
      "rule": "(H - L) < lowest(H - L, 6)",
      "basis": "rule"
    },
    "compression": {
      "yes_no": 0.7725,
      "rule": "std(C, 10) < 0.5 * std(C, 50)",
      "basis": "rule"
    },
    "big_move5": {
      "yes_no": 0.272
    }
  },
  "context": {
    "symbol": "HD",
    "as_of": "2026-10-30"
  }
}

bblower bbmid bbupper lowest max min std

Retail investor · example 16

AAPL or MSFT: which one is stronger right now?

Ask the same questions of two stocks and compare them side by side before choosing where to add.

ora-fin-0.1.12 symbols, one request each5 questions
  1. State2 symbols
  2. Questions5 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"AAPL"} then MSFT, one request each. 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
momentumruleroc(C, 20) > 5
Up more than 5% in 20 sessions
rsi50rulersi(C, 14) > 50
RSI above 50
near_highruleC >= 0.98 * max(H, 252)
Within 2% of the 52-week high
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symboltrendrulemomentumrulersi50rulenear_highrulebeat_spyforecast
AAPL0.70790.31470.81790.49620.531
MSFT0.31920.27970.41010.13270.514

true false not known for rules; forecasts are odds. Hover a column for its question.

What it means

Session of 2026-10-30, 2 symbols: Stacked averages: close > 20 EMA > 50 > 200: true for AAPL of 2. Up more than 5% in 20 sessions: true for none of 2. RSI above 50: true for AAPL of 2. Within 2% of the 52-week high: true for none of 2. Highest odds for “Beating SPY over a month”: AAPL at 53%.

One request per symbol with identical questions makes a fair comparison; prefer the one with more trend rules true and better odds against SPY.

Request JSON (AAPL; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AAPL"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)"
    },
    "momentum": {
      "type": "yes_no",
      "ask": "roc(C, 20) > 5"
    },
    "rsi50": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 50"
    },
    "near_high": {
      "type": "yes_no",
      "ask": "C >= 0.98 * max(H, 252)"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  }
}
Response JSON (AAPL, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.7079,
      "rule": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)",
      "basis": "rule"
    },
    "momentum": {
      "yes_no": 0.3147,
      "rule": "roc(C, 20) > 5",
      "basis": "rule"
    },
    "rsi50": {
      "yes_no": 0.8179,
      "rule": "rsi(C, 14) > 50",
      "basis": "rule"
    },
    "near_high": {
      "yes_no": 0.4962,
      "rule": "C >= 0.98 * max(H, 252)",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.531
    }
  },
  "context": {
    "symbol": "AAPL",
    "as_of": "2026-10-30"
  }
}

ema max roc rsi sma

Retail investor · example 17

When does PG go ex-dividend?

Buy before the ex-date to receive the next payment, and check the yield and the record of raises.

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

State

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

Questions

ex_soonruledays_to_ex_div <= 30
Goes ex-dividend within 30 days
recent_exEnglish → ruleDid the stock go ex-dividend in the last 30 days?
yield3English → ruleIs the dividend yield above 3%?
grow25English → ruleHas the stock grown its dividend for 25 years in a row?
quarterlyrulediv_count_ttm >= 4
Pays at least quarterly

Answers

QuestionAnswerReading
ex_soon
Goes ex-dividend within 30 days
0.0537false
recent_ex
Did the stock go ex-dividend in the last 30 days
compiled to days_since_ex_div <= 30
0.9463true
yield3
Is the dividend yield above 3%
compiled to div_yield_ttm > 3
0.2091false
grow25
Has the stock grown its dividend for 25 years in a row
compiled to years_of_growth >= 25
0.9463true
quarterly
Pays at least quarterly
0.55on the line (true)

What it means

For PG on the session of 2026-10-30: True now: Did the stock go ex-dividend in the last 30 days; Has the stock grown its dividend for 25 years in a row. Not true: Goes ex-dividend within 30 days; Is the dividend yield above 3%. On the line: Pays at least quarterly.

days_to_ex_div only sees declared dates; if none is declared yet, the ex-soon question answers no.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "PG"
  },
  "questions": {
    "ex_soon": {
      "type": "yes_no",
      "ask": "days_to_ex_div <= 30"
    },
    "recent_ex": {
      "type": "yes_no",
      "instructions": "Did the stock go ex-dividend in the last 30 days?"
    },
    "yield3": {
      "type": "yes_no",
      "instructions": "Is the dividend yield above 3%?"
    },
    "grow25": {
      "type": "yes_no",
      "instructions": "Has the stock grown its dividend for 25 years in a row?"
    },
    "quarterly": {
      "type": "yes_no",
      "ask": "div_count_ttm >= 4"
    }
  }
}
Response JSON (PG, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "ex_soon": {
      "yes_no": 0.0537,
      "rule": "days_to_ex_div <= 30",
      "basis": "rule"
    },
    "recent_ex": {
      "yes_no": 0.9463,
      "rule": "days_since_ex_div <= 30",
      "basis": "pattern"
    },
    "yield3": {
      "yes_no": 0.2091,
      "rule": "div_yield_ttm > 3",
      "basis": "pattern"
    },
    "grow25": {
      "yes_no": 0.9463,
      "rule": "years_of_growth >= 25",
      "basis": "pattern"
    },
    "quarterly": {
      "yes_no": 0.55,
      "rule": "div_count_ttm >= 4",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "PG",
    "as_of": "2026-10-30"
  }
}

days_since_ex_div days_to_ex_div div_count_ttm div_yield_ttm years_of_growth

Retail investor · example 18

Is NFLX drifting higher after its earnings beat?

After a report, check whether the stock beat, gapped up, and is holding above its pre-earnings price.

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

State

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

Questions

driftrulebeat_eps_last > 0.5 and last_earnings_gap > 0 and C > pre_earnings_close
Post-earnings drift: beat, gapped up, still above the pre-earnings close
recentruledays_since_earnings <= 5
Reported in the last 5 days
above_preruleC > pre_earnings_close
Holding above the pre-earnings close
surpriseruleeps_surprise_pct > 5
EPS beat by more than 5%
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
drift
Post-earnings drift: beat, gapped up, still above the pre-earnings close
0.0537false
recent
Reported in the last 5 days
0.0813false
above_pre
Holding above the pre-earnings close
0.1227false
surprise
EPS beat by more than 5%
0.6333true
up_week
Higher in a week
0.50651% · close to even

What it means

For NFLX on the session of 2026-10-30: True now: EPS beat by more than 5%. Not true: Post-earnings drift: beat, gapped up, still above the pre-earnings close; Reported in the last 5 days; Holding above the pre-earnings close. Forecasts: Higher in a week 51%.

The drift rule needs a beat, a gap up and a hold above the pre-report close all at once; if any part is false the setup is not there.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NFLX"
  },
  "questions": {
    "drift": {
      "type": "yes_no",
      "ask": "beat_eps_last > 0.5 and last_earnings_gap > 0 and C > pre_earnings_close"
    },
    "recent": {
      "type": "yes_no",
      "ask": "days_since_earnings <= 5"
    },
    "above_pre": {
      "type": "yes_no",
      "ask": "C > pre_earnings_close"
    },
    "surprise": {
      "type": "yes_no",
      "ask": "eps_surprise_pct > 5"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (NFLX, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "drift": {
      "yes_no": 0.0537,
      "rule": "beat_eps_last > 0.5 and last_earnings_gap > 0 and C > pre_earnings_close",
      "basis": "rule"
    },
    "recent": {
      "yes_no": 0.0813,
      "rule": "days_since_earnings <= 5",
      "basis": "rule"
    },
    "above_pre": {
      "yes_no": 0.1227,
      "rule": "C > pre_earnings_close",
      "basis": "rule"
    },
    "surprise": {
      "yes_no": 0.6333,
      "rule": "eps_surprise_pct > 5",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.506
    }
  },
  "context": {
    "symbol": "NFLX",
    "as_of": "2026-10-30"
  }
}

beat_eps_last days_since_earnings eps_surprise_pct last_earnings_gap pre_earnings_close

Retail investor · example 19

Is TQQQ too volatile to hold this week?

Leveraged ETFs decay in choppy markets: check volatility and trend before holding through the week.

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

State

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

Questions

atr3ruleatr_pct(14) > 3
A typical day moves more than 3%
hv40rulestd(log(C / C[-1]), 20) * sqrt(252) > 0.4
Annualized 20-day volatility above 40%
trendEnglish → ruleIs the stock above its 50-day moving average?
vol_riseforecastWill volatility rise over the next 5 days?
Volatility rising over 5 days
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

QuestionAnswerReading
atr3
A typical day moves more than 3%
0.9463true
hv40
Annualized 20-day volatility above 40%
0.9413true
trend
Is the stock above its 50-day moving average
compiled to C > sma(C, 50)
0.0621false
vol_rise
Volatility rising over 5 days
0.42743% · close to even
drop10
A 10% drawdown within a month
0.76677% · likely

Actions

Rules on the answers decide what to send.

atr3 >= 0.6 and drop10 >= 0.4→Emailme
What each action would send 1 of 1 fired · dry run, nothing sent
risk_notewould send (dry run)Email → me
{
  "subject": "TQQQ: high-volatility week",
  "text": "TQQQ (2026-10-30): ATR over 3% of price and 77% odds of a 10% drop within a month. Size down or step aside."
}

What it means

For TQQQ on the session of 2026-10-30: True now: A typical day moves more than 3%; Annualized 20-day volatility above 40%. Not true: Is the stock above its 50-day moving average. Forecasts: Volatility rising over 5 days 43%; A 10% drawdown within a month 77%. Fired: risk_note (Email → me).

For a leveraged fund the volatility rules matter as much as direction; the email only fires when volatility and drawdown odds are both high.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TQQQ"
  },
  "questions": {
    "atr3": {
      "type": "yes_no",
      "ask": "atr_pct(14) > 3"
    },
    "hv40": {
      "type": "yes_no",
      "ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4"
    },
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 50-day moving average?"
    },
    "vol_rise": {
      "type": "yes_no",
      "instructions": "Will volatility rise over the next 5 days?"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "risk_note",
      "when": "atr3 >= 0.6 and drop10 >= 0.4",
      "do": "email",
      "connection": "me",
      "subject": "{{symbol}}: high-volatility week",
      "message": "{{symbol}} ({{as_of}}): ATR over 3% of price and {{drop10|pct}} odds of a 10% drop within a month. Size down or step aside."
    }
  ],
  "dry_run": true
}
Response JSON (TQQQ, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "atr3": {
      "yes_no": 0.9463,
      "rule": "atr_pct(14) > 3",
      "basis": "rule"
    },
    "hv40": {
      "yes_no": 0.9413,
      "rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.0621,
      "rule": "C > sma(C, 50)",
      "basis": "comparison"
    },
    "vol_rise": {
      "yes_no": 0.427
    },
    "drop10": {
      "yes_no": 0.766
    }
  },
  "context": {
    "symbol": "TQQQ",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "risk_note",
      "fired": true,
      "status": "dry_run",
      "do": "email",
      "connection": "me",
      "preview": {
        "subject": "TQQQ: high-volatility week",
        "text": "TQQQ (2026-10-30): ATR over 3% of price and 77% odds of a 10% drop within a month. Size down or step aside."
      }
    }
  ]
}

atr_pct log offset sma sqrt std

Retail investor · example 20

A Monday rebalance nudge for a two-fund portfolio

Every Monday morning, check stocks (VTI) and bonds (BND) and email if either is in a large drawdown.

ora-fin-0.1.12 symbols, one request each4 questions1 actionworkflow · Mon at 09:00 ET
  1. ScheduleMon at 09:00 ET
  2. State2 symbols
  3. Questions4 asked
  4. Answersreal, captured
  5. Actions1 rule · dry run

State

{"symbol":"VTI"} then BND, one request each. The server fills in the latest completed session.

Questions

drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
trendEnglish → ruleIs the stock above its 200-day moving average?
down_monthEnglish → ruleIs the stock down more than 5% over the last month?
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symboldrawdownruletrendruledown_monthruledrop5forecastFired
VTI0.05370.94150.06620.187none
BND0.05370.20130.05370.007none

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.

drawdown >= 0.6 or down_month >= 0.6→Emailme
VTI 0 of 1 fired · dry run, nothing sent
BND 0 of 1 fired · dry run, nothing sent

What it means

Session of 2026-10-30, 2 symbols: More than 20% off the 52-week high: true for none of 2. Is the stock above its 200-day moving average: true for VTI of 2. Is the stock down more than 5% over the last month: true for none of 2. Highest odds for “A 5% drawdown within a month”: VTI at 19%. rebalance fired for none.

A quiet Monday means both funds are within their normal range; an email means one has moved enough to check the mix.

As a scheduled workflow (Mon at 09: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": "A Monday rebalance nudge for a two-fund portfolio",
  "symbols": "VTI BND",
  "days": [
    1
  ],
  "at_time": "09:00",
  "model": "ora-fin-0.1.1",
  "questions": {
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above 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?"
    }
  },
  "actions": [
    {
      "id": "rebalance",
      "when": "drawdown >= 0.6 or down_month >= 0.6",
      "do": "email",
      "connection": "me",
      "subject": "Rebalance check: {{symbol}}",
      "message": "{{symbol}} ({{as_of}}) is in a drawdown (20% off the high {{drawdown|pct}}, down 5% this month {{down_month|pct}}). Check your target mix."
    }
  ]
}
Request JSON (VTI; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VTI"
  },
  "questions": {
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above 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?"
    }
  },
  "actions": [
    {
      "id": "rebalance",
      "when": "drawdown >= 0.6 or down_month >= 0.6",
      "do": "email",
      "connection": "me",
      "subject": "Rebalance check: {{symbol}}",
      "message": "{{symbol}} ({{as_of}}) is in a drawdown (20% off the high {{drawdown|pct}}, down 5% this month {{down_month|pct}}). Check your target mix."
    }
  ],
  "dry_run": true
}
Response JSON (VTI, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "drawdown": {
      "yes_no": 0.0537,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.9415,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "down_month": {
      "yes_no": 0.0662,
      "rule": "C / C[-21] - 1 < -0.05",
      "basis": "pattern"
    },
    "drop5": {
      "yes_no": 0.187
    }
  },
  "context": {
    "symbol": "VTI",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "rebalance",
      "fired": false,
      "status": "skipped"
    }
  ]
}

max offset 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 Individuals: Active day trader, Swing trader, Options trader, Dividend investor, Long-term passive investor, Crypto trader, FX trader, Commodities trader, Social trading community, Students and universities.

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