Use cases · Sell side
Equity research analyst: 21 ways to use Ora
Covers a sector: earnings previews and reviews, estimate beats, dividends and the tape. Each example is a complete, runnable request with the real answers it returned (42 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 (69)
sma 13days_to_earnings 5beat_eps_last 4last_earnings_gap 4last_eps 4abs 3last_earnings_move 3eps_surprise_pct 3raised_last 3max 3beat_streak 2pre_earnings_close 2ema 2div_yield_ttm 2years_of_growth 2days_since_earnings 2eps_year_ago 2offset 2adx 2diminus 2diplus 2days_to_split 2beats_last4 1beat_revenue_last 1eps_growth_yoy 1roc 1cut_last 1macd 1macdsignal 1revenue_growth_yoy 1revenue_surprise_pct 1linreg 1log 1ref 1sqrt 1std 1days_since_split 1last_split_ratio 1reverse_split_last 1splits_5y 1atr 1cci 1willr 1next_report_amc 1next_report_bmo 1miss_eps_last 1misses_last4 1swinghigh 1swinglow 1hlc3 1median 1obv 1percentrank 1sum 1harami_bull 1morning_star 1piercing_line 1tweezer_bottom 1rsi 1wma 1barssince 1highest 1highestbars 1last_div_amount 1last_eps_est 1last_revenue 1next_split_ratio 1prev_div_amount 1revenue_year_ago 1
Examples 11–20 of 21 · page 2 of 3
Equity research analyst · example 11
JNJ and ABBV: dividend growth and earnings record
For a healthcare income piece, compare the payout record and the last quarter for two dividend payers.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"JNJ"} then ABBV, one request each. The server fills in the latest completed session.
Questions
grow10 | rule | years_of_growth >= 10Ten years of dividend growth |
grow25 | English → rule | Has the stock grown its dividend for 25 years in a row? |
raised | English → rule | Did the stock raise its dividend last time? |
beat | English → rule | Did the stock beat EPS estimates last quarter? |
eps_pos | English → rule | Was EPS positive last quarter? |
Answers
| Symbol | grow10rule | grow25rule | raisedrule | beatrule | eps_posrule |
|---|---|---|---|---|---|
JNJ | 0.9463 | 0.9463 | 0.1409 | 0.8591 | 0.9463 |
ABBV | 0.8591 | 0.0537 | 0.1409 | 0.8591 | 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, 2 symbols: Ten years of dividend growth: true for JNJ, ABBV of 2. Has the stock grown its dividend for 25 years in a row: true for JNJ of 2. Did the stock raise its dividend last time: true for none of 2. Did the stock beat EPS estimates last quarter: true for JNJ, ABBV of 2.
Facts per name sit side by side in the piece; a missing streak or a miss is stated as is.
Request JSON (JNJ; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "JNJ"
},
"questions": {
"grow10": {
"type": "yes_no",
"ask": "years_of_growth >= 10"
},
"grow25": {
"type": "yes_no",
"instructions": "Has the stock grown its dividend for 25 years in a row?"
},
"raised": {
"type": "yes_no",
"instructions": "Did the stock raise its dividend last time?"
},
"beat": {
"type": "yes_no",
"instructions": "Did the stock beat EPS estimates last quarter?"
},
"eps_pos": {
"type": "yes_no",
"instructions": "Was EPS positive last quarter?"
}
}
}Response JSON (JNJ, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"grow10": {
"yes_no": 0.9463,
"rule": "years_of_growth >= 10",
"basis": "rule"
},
"grow25": {
"yes_no": 0.9463,
"rule": "years_of_growth >= 25",
"basis": "pattern"
},
"raised": {
"yes_no": 0.1409,
"rule": "raised_last > 0.5",
"basis": "pattern"
},
"beat": {
"yes_no": 0.8591,
"rule": "beat_eps_last > 0.5",
"basis": "pattern"
},
"eps_pos": {
"yes_no": 0.9463,
"rule": "last_eps > 0",
"basis": "pattern"
}
},
"context": {
"symbol": "JNJ",
"as_of": "2026-10-30"
}
}Equity research analyst · example 12
COST: is the stock extended enough to revisit the target?
Check stretch measures before a price-target review: distance from averages, CCI and Williams %R.
- StateCOST
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"COST"} The server fills in the latest completed session.
Questions
ext | English → rule | Is the stock more than 10% above its 200-day moving average? |
cci | rule | cci(20) > 100CCI above 100 |
willr | rule | willr(14) > -20Williams %R above −20 |
stretch | rule | C > sma(C, 20) + 2 * atr(14)Stretched: more than 2 ATR above the 20-day |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
extIs the stock more than 10% above its 200-day moving average compiled to C > sma(C, 200) * 1.1 | 0.0813 | false |
cciCCI above 100 | 0.5137 | on the line (true) |
willrWilliams %R above −20 | 0.6319 | true |
stretchStretched: more than 2 ATR above the 20-day | 0.5662 | on the line (true) |
drop5A 5% drawdown within a month | 0.319 | 32% · unlikely |
What it means
For COST on the session of 2026-10-30: True now: Williams %R above −20. Not true: Is the stock more than 10% above its 200-day moving average. On the line: CCI above 100; Stretched: more than 2 ATR above the 20-day. Forecasts: A 5% drawdown within a month 32%.
Several stretch rules true supports a valuation discussion; the drawdown odds are context, not a call.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "COST"
},
"questions": {
"ext": {
"type": "yes_no",
"instructions": "Is the stock more than 10% above its 200-day moving average?"
},
"cci": {
"type": "yes_no",
"ask": "cci(20) > 100"
},
"willr": {
"type": "yes_no",
"ask": "willr(14) > -20"
},
"stretch": {
"type": "yes_no",
"ask": "C > sma(C, 20) + 2 * atr(14)"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
}
}Response JSON (COST, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"ext": {
"yes_no": 0.0813,
"rule": "C > sma(C, 200) * 1.1",
"basis": "comparison"
},
"cci": {
"yes_no": 0.5137,
"rule": "cci(20) > 100",
"basis": "rule"
},
"willr": {
"yes_no": 0.6319,
"rule": "willr(14) > -20",
"basis": "rule"
},
"stretch": {
"yes_no": 0.5662,
"rule": "C > sma(C, 20) + 2 * atr(14)",
"basis": "rule"
},
"drop5": {
"yes_no": 0.319
}
},
"context": {
"symbol": "COST",
"as_of": "2026-10-30"
}
}Equity research analyst · example 13
Who reports next: AAPL, MSFT, AMZN, NVDA, TSLA
A Sunday-evening workflow that tells the team which mega caps report within two weeks and whether before the open or after the close.
- ScheduleMon at 07:00 ET
- State5 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"AAPL"} then MSFT, AMZN, NVDA, TSLA, one request each. The server fills in the latest completed session.
Questions
soon | English → rule | Is earnings in the next 14 days? |
bmo | English → rule | Does the stock report before the market opens next time? |
amc | English → rule | Does the stock report after the close next time? |
streak | rule | beat_streak >= 4Beat four quarters in a row |
Answers
| Symbol | soonrule | bmorule | amcrule | streakrule | Fired |
|---|---|---|---|---|---|
AAPL | 0.9463 | 0.1409 | 0.8591 | 0.9463 | calendar |
MSFT | 0.0537 | 0.1409 | 0.8591 | 0.9463 | none |
AMZN | 0.0537 | 0.1409 | 0.8591 | 0.0537 | none |
NVDA | 0.1033 | 0.1409 | 0.8591 | 0.9463 | none |
TSLA | 0.0537 | 0.1409 | 0.8591 | 0.0537 | 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.
soon >= 0.6→Slackresearch-desk{
"text": "AAPL reports within 14 days. Before the open 14%, after the close 86%. Four-quarter beat streak 95%."
}What it means
Session of 2026-10-30, 5 symbols: Is earnings in the next 14 days: true for AAPL of 5. Does the stock report before the market opens next time: true for none of 5. Does the stock report after the close next time: true for AAPL, MSFT, AMZN, NVDA, TSLA of 5. Beat four quarters in a row: true for AAPL, MSFT, NVDA of 5. calendar fired for AAPL.
Only names with a report inside two weeks post; the timing flags tell the team who covers the morning or the evening.
As a scheduled workflow (Mon at 07: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": "Who reports next: AAPL, MSFT, AMZN, NVDA, TSLA",
"symbols": "AAPL MSFT AMZN NVDA TSLA",
"days": [
1
],
"at_time": "07:00",
"model": "ora-fin-0.1.1",
"questions": {
"soon": {
"type": "yes_no",
"instructions": "Is earnings in the next 14 days?"
},
"bmo": {
"type": "yes_no",
"instructions": "Does the stock report before the market opens next time?"
},
"amc": {
"type": "yes_no",
"instructions": "Does the stock report after the close next time?"
},
"streak": {
"type": "yes_no",
"ask": "beat_streak >= 4"
}
},
"actions": [
{
"id": "calendar",
"when": "soon >= 0.6",
"do": "slack",
"connection": "research-desk",
"message": "{{symbol}} reports within 14 days. Before the open {{bmo|pct}}, after the close {{amc|pct}}. Four-quarter beat streak {{streak|pct}}."
}
]
}Request JSON (AAPL; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AAPL"
},
"questions": {
"soon": {
"type": "yes_no",
"instructions": "Is earnings in the next 14 days?"
},
"bmo": {
"type": "yes_no",
"instructions": "Does the stock report before the market opens next time?"
},
"amc": {
"type": "yes_no",
"instructions": "Does the stock report after the close next time?"
},
"streak": {
"type": "yes_no",
"ask": "beat_streak >= 4"
}
},
"actions": [
{
"id": "calendar",
"when": "soon >= 0.6",
"do": "slack",
"connection": "research-desk",
"message": "{{symbol}} reports within 14 days. Before the open {{bmo|pct}}, after the close {{amc|pct}}. Four-quarter beat streak {{streak|pct}}."
}
],
"dry_run": true
}Response JSON (AAPL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"soon": {
"yes_no": 0.9463,
"rule": "days_to_earnings <= 14",
"basis": "pattern"
},
"bmo": {
"yes_no": 0.1409,
"rule": "next_report_bmo > 0.5",
"basis": "pattern"
},
"amc": {
"yes_no": 0.8591,
"rule": "next_report_amc > 0.5",
"basis": "pattern"
},
"streak": {
"yes_no": 0.9463,
"rule": "beat_streak >= 4",
"basis": "rule"
}
},
"context": {
"symbol": "AAPL",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "calendar",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "research-desk",
"preview": {
"text": "AAPL reports within 14 days. Before the open 14%, after the close 86%. Four-quarter beat streak 95%."
}
}
]
}beat_streak days_to_earnings next_report_amc next_report_bmo
Equity research analyst · example 14
INTC: recent misses and the trend under them
Document the earnings record for a name with mixed results: any miss in four quarters, growth and price trend.
- StateINTC
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"INTC"} The server fills in the latest completed session.
Questions
any_miss | English → rule | Has the stock missed EPS estimates in any of the last 4 quarters? |
miss_last | English → rule | Did the stock miss EPS estimates last quarter? |
eps_down | rule | last_eps < eps_year_agoEPS down year over year |
below_200 | English → rule | Is the stock below its 200-day moving average? |
lh_ll | English → rule | Is the stock making lower swing highs and lower swing lows? |
Answers
| Question | Answer | Reading |
|---|---|---|
any_missHas the stock missed EPS estimates in any of the last 4 quarters compiled to misses_last4 >= 1 | 0.1409 | false |
miss_lastDid the stock miss EPS estimates last quarter compiled to miss_eps_last > 0.5 | 0.1409 | false |
eps_downEPS down year over year | 0.0537 | false |
below_200Is the stock below its 200-day moving average compiled to C < sma(C, 200) | 0.9139 | true |
lh_llIs the stock making lower swing highs and lower swing lows compiled to (swinghigh(5, 1) < swinghigh(5, 2)) and (swinglow(5, 1) < swinglow(5, 2)) | 0.1552 | false |
What it means
For INTC on the session of 2026-10-30: True now: Is the stock below its 200-day moving average. Not true: Has the stock missed EPS estimates in any of the last 4 quarters; Did the stock miss EPS estimates last quarter; EPS down year over year; Is the stock making lower swing highs and lower swing lows.
Facts on misses and growth come first; the price structure rules describe how the market has taken them.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "INTC"
},
"questions": {
"any_miss": {
"type": "yes_no",
"instructions": "Has the stock missed EPS estimates in any of the last 4 quarters?"
},
"miss_last": {
"type": "yes_no",
"instructions": "Did the stock miss EPS estimates last quarter?"
},
"eps_down": {
"type": "yes_no",
"ask": "last_eps < eps_year_ago"
},
"below_200": {
"type": "yes_no",
"instructions": "Is the stock below its 200-day moving average?"
},
"lh_ll": {
"type": "yes_no",
"instructions": "Is the stock making lower swing highs and lower swing lows?"
}
}
}Response JSON (INTC, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"any_miss": {
"yes_no": 0.1409,
"rule": "misses_last4 >= 1",
"basis": "pattern"
},
"miss_last": {
"yes_no": 0.1409,
"rule": "miss_eps_last > 0.5",
"basis": "pattern"
},
"eps_down": {
"yes_no": 0.0537,
"rule": "last_eps < eps_year_ago",
"basis": "rule"
},
"below_200": {
"yes_no": 0.9139,
"rule": "C < sma(C, 200)",
"basis": "comparison"
},
"lh_ll": {
"yes_no": 0.1552,
"rule": "(swinghigh(5, 1) < swinghigh(5, 2)) and (swinglow(5, 1) < swinglow(5, 2))",
"basis": "pattern"
}
},
"context": {
"symbol": "INTC",
"as_of": "2026-10-30"
}
}eps_year_ago last_eps miss_eps_last misses_last4 sma swinghigh swinglow
Equity research analyst · example 15
IBM: is the move after results backed by volume?
Check on-balance volume, volume rank and the rolling VWAP to judge whether institutions are behind the move.
- StateIBM
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"IBM"} The server fills in the latest completed session.
Questions
obv | rule | obv() > sma(obv(), 20)On-balance volume above its 20-day average |
rank | rule | percentrank(V, 50) > 90Volume in the top tenth of 50 sessions |
vwap | rule | C > sum(hlc3() * V, 20) / sum(V, 20)Above its 20-day volume-weighted price |
med_vol | rule | V > 2 * median(V, 20)Volume over twice its 20-day median |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
obvOn-balance volume above its 20-day average | 0.8841 | true |
rankVolume in the top tenth of 50 sessions | 0.1791 | false |
vwapAbove its 20-day volume-weighted price | 0.9238 | true |
med_volVolume over twice its 20-day median | 0.1084 | false |
up_weekHigher in a week | 0.559 | 56% · close to even |
What it means
For IBM on the session of 2026-10-30: True now: On-balance volume above its 20-day average; Above its 20-day volume-weighted price. Not true: Volume in the top tenth of 50 sessions; Volume over twice its 20-day median. Forecasts: Higher in a week 56%.
Volume rules true lend weight to a move in the note; quiet volume means the price change is thinner than it looks.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "IBM"
},
"questions": {
"obv": {
"type": "yes_no",
"ask": "obv() > sma(obv(), 20)"
},
"rank": {
"type": "yes_no",
"ask": "percentrank(V, 50) > 90"
},
"vwap": {
"type": "yes_no",
"ask": "C > sum(hlc3() * V, 20) / sum(V, 20)"
},
"med_vol": {
"type": "yes_no",
"ask": "V > 2 * median(V, 20)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (IBM, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"obv": {
"yes_no": 0.8841,
"rule": "obv() > sma(obv(), 20)",
"basis": "rule"
},
"rank": {
"yes_no": 0.1791,
"rule": "percentrank(V, 50) > 90",
"basis": "rule"
},
"vwap": {
"yes_no": 0.9238,
"rule": "C > sum(hlc3() * V, 20) / sum(V, 20)",
"basis": "rule"
},
"med_vol": {
"yes_no": 0.1084,
"rule": "V > 2 * median(V, 20)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.559
}
},
"context": {
"symbol": "IBM",
"as_of": "2026-10-30"
}
}Equity research analyst · example 16
Energy coverage: XOM, CVX, COP, OXY morning facts
A pre-open workflow posting trend, dividend and earnings facts for the oil majors to the team channel.
- ScheduleMon–Fri at 08:15 ET
- State4 symbols
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"XOM"} then CVX, COP, OXY, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
yield3 | English → rule | Is the dividend yield above 3%? |
raised | rule | raised_last > 0.5Raised its last dividend |
earn_soon | rule | days_to_earnings <= 10Reports earnings within 10 days |
big_move5 | 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 | trendrule | yield3rule | raisedrule | earn_soonrule | big_move5forecast | Fired |
|---|---|---|---|---|---|---|
XOM | 0.9463 | 0.0537 | 0.1409 | 0.0537 | 0.394 | none |
CVX | 0.9463 | 0.4906 | 0.1409 | 0.0537 | 0.423 | none |
COP | 0.9446 | 0.0537 | 0.1409 | 0.8967 | 0.362 | morning |
OXY | 0.9173 | 0.0555 | 0.8591 | 0.55 | 0.381 | 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.
earn_soon >= 0.6 or trend < 0.4→Slackenergy-team{
"text": "COP (2026-10-30): above the 50-day 94%, reports within 10 days 90%, yield over 3% 5%. Big move in 5 days 36%."
}What it means
Session of 2026-10-30, 4 symbols: Above the 50-day average: true for XOM, CVX, COP, OXY of 4. Is the dividend yield above 3%: true for none of 4. Raised its last dividend: true for OXY of 4. Reports earnings within 10 days: true for COP of 4. Highest odds for “A big move either way in 5 days”: CVX at 42%. morning fired for COP.
Names post only when an event is near or the trend has broken, so the channel stays readable.
As a scheduled workflow (Mon–Fri at 08: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": "Energy coverage: XOM, CVX, COP, OXY morning facts",
"symbols": "XOM CVX COP OXY",
"days": [
1,
2,
3,
4,
5
],
"at_time": "08:15",
"model": "ora-fin-0.1.1",
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"yield3": {
"type": "yes_no",
"instructions": "Is the dividend yield above 3%?"
},
"raised": {
"type": "yes_no",
"ask": "raised_last > 0.5"
},
"earn_soon": {
"type": "yes_no",
"ask": "days_to_earnings <= 10"
},
"big_move5": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
},
"actions": [
{
"id": "morning",
"when": "earn_soon >= 0.6 or trend < 0.4",
"do": "slack",
"connection": "energy-team",
"message": "{{symbol}} ({{as_of}}): above the 50-day {{trend|pct}}, reports within 10 days {{earn_soon|pct}}, yield over 3% {{yield3|pct}}. Big move in 5 days {{big_move5|pct}}."
}
]
}Request JSON (XOM; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XOM"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"yield3": {
"type": "yes_no",
"instructions": "Is the dividend yield above 3%?"
},
"raised": {
"type": "yes_no",
"ask": "raised_last > 0.5"
},
"earn_soon": {
"type": "yes_no",
"ask": "days_to_earnings <= 10"
},
"big_move5": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
},
"actions": [
{
"id": "morning",
"when": "earn_soon >= 0.6 or trend < 0.4",
"do": "slack",
"connection": "energy-team",
"message": "{{symbol}} ({{as_of}}): above the 50-day {{trend|pct}}, reports within 10 days {{earn_soon|pct}}, yield over 3% {{yield3|pct}}. Big move in 5 days {{big_move5|pct}}."
}
],
"dry_run": true
}Response JSON (XOM, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.9463,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"yield3": {
"yes_no": 0.0537,
"rule": "div_yield_ttm > 3",
"basis": "pattern"
},
"raised": {
"yes_no": 0.1409,
"rule": "raised_last > 0.5",
"basis": "rule"
},
"earn_soon": {
"yes_no": 0.0537,
"rule": "days_to_earnings <= 10",
"basis": "rule"
},
"big_move5": {
"yes_no": 0.394
}
},
"context": {
"symbol": "XOM",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "morning",
"fired": false,
"status": "skipped"
}
]
}Equity research analyst · example 17
PFE: reversal candles after the decline
For a coverage name in a downtrend, record whether recent candles show a reversal pattern before the rating discussion.
- StatePFE
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"PFE"} The server fills in the latest completed session.
Questions
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. |
piercing | rule | piercing_line()piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open). |
harami | rule | harami_bull()harami bull candle: A small green body inside yesterday's red body. |
tweezer | rule | tweezer_bottom()tweezer bottom candle: Red then green, with lows within 0.1% of each other. |
below200 | English → rule | Is the stock below its 200-day moving average? |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
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.0742 | false |
piercingpiercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open). | 0.0562 | false |
haramiharami bull candle: A small green body inside yesterday's red body. | 0.1147 | false |
tweezertweezer bottom candle: Red then green, with lows within 0.1% of each other. | 0.0591 | false |
below200Is the stock below its 200-day moving average compiled to C < sma(C, 200) | 0.0537 | false |
up_weekHigher in a week | 0.555 | 56% · close to even |
What it means
For PFE on the session of 2026-10-30: Not true: 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.; piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open).; harami bull candle: A small green body inside yesterday's red body.; tweezer bottom candle: Red then green, with lows within 0.1% of each other.; Is the stock below its 200-day moving average. Forecasts: Higher in a week 56%.
A pattern is a description of the last bars, not a thesis; it is mentioned only if one is true.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "PFE"
},
"questions": {
"morning": {
"type": "yes_no",
"ask": "morning_star()"
},
"piercing": {
"type": "yes_no",
"ask": "piercing_line()"
},
"harami": {
"type": "yes_no",
"ask": "harami_bull()"
},
"tweezer": {
"type": "yes_no",
"ask": "tweezer_bottom()"
},
"below200": {
"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": {
"morning": {
"yes_no": 0.0742,
"rule": "morning_star()",
"basis": "rule"
},
"piercing": {
"yes_no": 0.0562,
"rule": "piercing_line()",
"basis": "rule"
},
"harami": {
"yes_no": 0.1147,
"rule": "harami_bull()",
"basis": "rule"
},
"tweezer": {
"yes_no": 0.0591,
"rule": "tweezer_bottom()",
"basis": "rule"
},
"below200": {
"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"
}
}Equity research analyst · example 18
Send AAPL chart facts to the research publishing system
Push verified chart facts to the publishing tool so the report template fills its technical box automatically.
- StateAAPL
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"AAPL"} The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
golden | rule | sma(C, 50) > sma(C, 200)50-day above the 200-day |
rsi50 | rule | rsi(C, 14) > 50RSI above 50 |
near_high | rule | C >= 0.98 * max(H, 252)Within 2% of the 52-week high |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
trendIs the stock above its 200-day moving average compiled to C > sma(C, 200) | 0.9463 | true |
golden50-day above the 200-day | 0.9463 | true |
rsi50RSI above 50 | 0.8179 | true |
near_highWithin 2% of the 52-week high | 0.4962 | on the line (false) |
up_weekHigher in a week | 0.59 | 59% · close to even |
Actions
Rules on the answers decide what to send.
trend >= 0→Webhookresearch-cms{
"ticker": "AAPL",
"as_of": "2026-10-30",
"box": "technicals",
"above_200d": 0.9463,
"golden_alignment": 0.9463,
"rsi_above_50": 0.8179,
"near_52w_high": 0.4962,
"model_up_week": 0.59
}What it means
For AAPL on the session of 2026-10-30: True now: Is the stock above its 200-day moving average; 50-day above the 200-day; RSI above 50. On the line: Within 2% of the 52-week high. Forecasts: Higher in a week 59%. Fired: publish (Webhook → research-cms).
The webhook always fires; the CMS writes yes or no from each probability and labels the forecast as model odds.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AAPL"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"golden": {
"type": "yes_no",
"ask": "sma(C, 50) > sma(C, 200)"
},
"rsi50": {
"type": "yes_no",
"ask": "rsi(C, 14) > 50"
},
"near_high": {
"type": "yes_no",
"ask": "C >= 0.98 * max(H, 252)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "publish",
"when": "trend >= 0",
"do": "webhook",
"connection": "research-cms",
"body": {
"ticker": "{{symbol}}",
"as_of": "{{as_of}}",
"box": "technicals",
"above_200d": "{{trend}}",
"golden_alignment": "{{golden}}",
"rsi_above_50": "{{rsi50}}",
"near_52w_high": "{{near_high}}",
"model_up_week": "{{up_week}}"
}
}
],
"dry_run": true
}Response JSON (AAPL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.9463,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"golden": {
"yes_no": 0.9463,
"rule": "sma(C, 50) > sma(C, 200)",
"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"
},
"up_week": {
"yes_no": 0.59
}
},
"context": {
"symbol": "AAPL",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "publish",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "research-cms",
"preview": {
"body": {
"ticker": "AAPL",
"as_of": "2026-10-30",
"box": "technicals",
"above_200d": 0.9463,
"golden_alignment": 0.9463,
"rsi_above_50": 0.8179,
"near_52w_high": 0.4962,
"model_up_week": 0.59
}
}
}
]
}Equity research analyst · example 19
ORCL: momentum quality with ADX and directional lines
Describe whether the trend is strong and directional before writing that momentum supports the thesis.
- StateORCL
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"ORCL"} The server fills in the latest completed session.
Questions
adx25 | rule | adx(14) > 25Trending (ADX above 25) |
di | rule | diplus(14) > diminus(14)+DI above -DI |
wma | rule | wma(C, 10) > wma(C, 30)10-day weighted average above the 30-day |
ema21 | rule | C > ema(C, 21) |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
adx25Trending (ADX above 25) | 0.0616 | false |
di+DI above -DI | 0.8014 | true |
wma10-day weighted average above the 30-day | 0.33 | false |
ema21C > ema(C, 21) | 0.2272 | false |
rally5A 5% rally within a month | 0.687 | 69% · likely |
What it means
For ORCL on the session of 2026-10-30: True now: +DI above -DI. Not true: Trending (ADX above 25); 10-day weighted average above the 30-day; C > ema(C, 21). Forecasts: A 5% rally within a month 69%.
A strong ADX with +DI on top describes a real trend; the note says trend-supported only when both are true.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "ORCL"
},
"questions": {
"adx25": {
"type": "yes_no",
"ask": "adx(14) > 25"
},
"di": {
"type": "yes_no",
"ask": "diplus(14) > diminus(14)"
},
"wma": {
"type": "yes_no",
"ask": "wma(C, 10) > wma(C, 30)"
},
"ema21": {
"type": "yes_no",
"ask": "C > ema(C, 21)"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
}
}
}Response JSON (ORCL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"adx25": {
"yes_no": 0.0616,
"rule": "adx(14) > 25",
"basis": "rule"
},
"di": {
"yes_no": 0.8014,
"rule": "diplus(14) > diminus(14)",
"basis": "rule"
},
"wma": {
"yes_no": 0.33,
"rule": "wma(C, 10) > wma(C, 30)",
"basis": "rule"
},
"ema21": {
"yes_no": 0.2272,
"rule": "C > ema(C, 21)",
"basis": "rule"
},
"rally5": {
"yes_no": 0.687
}
},
"context": {
"symbol": "ORCL",
"as_of": "2026-10-30"
}
}Equity research analyst · example 20
BA: drawdown and recovery context for the downgrade debate
Measure how far the stock sits from its highs and how long since its last breakout before the rating committee.
- StateBA
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"BA"} The server fills in the latest completed session.
Questions
drawdown | rule | C < 0.8 * max(H, 252)More than 20% off the 52-week high |
since_bo | rule | barssince(C > highest(C, 20)) > 30No 20-day breakout for 30 sessions |
bars_high | rule | highestbars(H, 60) >= 40The 60-day high is at least 40 sessions old |
near200 | rule | abs(C / sma(C, 200) - 1) < 0.03Within 3% of the 200-day |
drop10 | forecast | Will it drop at least 10% at some point in the next month? A 10% drawdown within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
drawdownMore than 20% off the 52-week high | 0.9296 | true |
since_boNo 20-day breakout for 30 sessions | 0.9237 | true |
bars_highThe 60-day high is at least 40 sessions old | 0.8581 | true |
near200Within 3% of the 200-day | 0.0537 | false |
drop10A 10% drawdown within a month | 0.426 | 43% · close to even |
What it means
For BA on the session of 2026-10-30: True now: More than 20% off the 52-week high; No 20-day breakout for 30 sessions; The 60-day high is at least 40 sessions old. Not true: Within 3% of the 200-day. Forecasts: A 10% drawdown within a month 43%.
These facts frame the debate; the committee decides, the answers just make the starting point exact.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "BA"
},
"questions": {
"drawdown": {
"type": "yes_no",
"ask": "C < 0.8 * max(H, 252)"
},
"since_bo": {
"type": "yes_no",
"ask": "barssince(C > highest(C, 20)) > 30"
},
"bars_high": {
"type": "yes_no",
"ask": "highestbars(H, 60) >= 40"
},
"near200": {
"type": "yes_no",
"ask": "abs(C / sma(C, 200) - 1) < 0.03"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
}
}
}Response JSON (BA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"drawdown": {
"yes_no": 0.9296,
"rule": "C < 0.8 * max(H, 252)",
"basis": "rule"
},
"since_bo": {
"yes_no": 0.9237,
"rule": "barssince(C > highest(C, 20)) > 30",
"basis": "rule"
},
"bars_high": {
"yes_no": 0.8581,
"rule": "highestbars(H, 60) >= 40",
"basis": "rule"
},
"near200": {
"yes_no": 0.0537,
"rule": "abs(C / sma(C, 200) - 1) < 0.03",
"basis": "rule"
},
"drop10": {
"yes_no": 0.426
}
},
"context": {
"symbol": "BA",
"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 Sell side: Sell-side sales trader, Execution trader / desk, Market maker, Prop trading firm, Compliance officer.