Use cases · Corporates
Investor relations team: 20 ways to use Ora
Watches its own stock and peers: reactions to results, volume, dividends and the narrative. Each example is a complete, runnable request with the real answers it returned (33 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 (72)
offset 8sma 6abs 3ref 3max 3lowest 3beat_eps_last 2beat_revenue_last 2last_earnings_move 2pre_earnings_close 2ema 2roc 2days_to_ex_div 2div_yield_ttm 2raised_last 2years_of_growth 2atr 2highest 2min 2days_since_earnings 1last_earnings_gap 1wma 1avg 1median 1percentrank 1cut_last 1doji 1engulfing_bear 1engulfing_bull 1marubozu 1shooting_star 1highestbars 1cum 1obv 1sign 1sum 1linreg 1gap_down 1beat_streak 1days_to_earnings 1next_report_amc 1next_report_bmo 1bblower 1bbmid 1bbupper 1inside_bar 1lowestbars 1spinning_top 1days_since_ex_div 1div_change_pct 1cci 1rsi 1willr 1barssince 1morning_star 1swinghigh 1swinglow 1three_black_crows 1hammer 1harami_bull 1inverted_hammer 1piercing_line 1div_count_ttm 1last_div_amount 1next_div_amount 1adx 1atr_pct 1diminus 1diplus 1log 1sqrt 1std 1
Examples 11–20 of 20 · page 2 of 2
Investor relations team · example 11
IR at DIS: confirm our earnings date and timing
Cross-check that the market's calendar shows the next report and its timing, before the date announcement goes out.
- StateDIS
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"DIS"} The server fills in the latest completed session.
Questions
soon | English → rule | Is earnings in the next 14 days? |
within10 | rule | days_to_earnings <= 10Reports earnings within 10 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? |
beat_streak | rule | beat_streak >= 4Beat four quarters in a row |
Answers
| Question | Answer | Reading |
|---|---|---|
soonIs earnings in the next 14 days compiled to days_to_earnings <= 14 | 0.1033 | false |
within10Reports earnings within 10 days | 0.0563 | false |
bmoDoes the stock report before the market opens next time compiled to next_report_bmo > 0.5 | 0.8591 | true |
amcDoes the stock report after the close next time compiled to next_report_amc > 0.5 | 0.1409 | false |
beat_streakBeat four quarters in a row | 0.9463 | true |
What it means
For DIS on the session of 2026-10-30: True now: Does the stock report before the market opens next time; Beat four quarters in a row. Not true: Is earnings in the next 14 days; Reports earnings within 10 days; Does the stock report after the close next time.
If the calendar does not show the expected date or session, the IR team corrects it with the data vendors before investors plan around it.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "DIS"
},
"questions": {
"soon": {
"type": "yes_no",
"instructions": "Is earnings in the next 14 days?"
},
"within10": {
"type": "yes_no",
"ask": "days_to_earnings <= 10"
},
"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?"
},
"beat_streak": {
"type": "yes_no",
"ask": "beat_streak >= 4"
}
}
}Response JSON (DIS, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"soon": {
"yes_no": 0.1033,
"rule": "days_to_earnings <= 14",
"basis": "pattern"
},
"within10": {
"yes_no": 0.0563,
"rule": "days_to_earnings <= 10",
"basis": "rule"
},
"bmo": {
"yes_no": 0.8591,
"rule": "next_report_bmo > 0.5",
"basis": "pattern"
},
"amc": {
"yes_no": 0.1409,
"rule": "next_report_amc > 0.5",
"basis": "pattern"
},
"beat_streak": {
"yes_no": 0.9463,
"rule": "beat_streak >= 4",
"basis": "rule"
}
},
"context": {
"symbol": "DIS",
"as_of": "2026-10-30"
}
}beat_streak days_to_earnings next_report_amc next_report_bmo
Investor relations team · example 12
IR at MCD: is the stock quiet ahead of investor day?
Check whether MCD is coiled in a tight range, so the team knows how much attention a new message may get.
- StateMCD
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"MCD"} The server fills in the latest completed session.
Questions
tight | rule | (max(H, 10) - min(L, 10)) / C < 0.05A tight 10-day base (under 5% of price) |
inside | rule | inside_bar()inside bar candle: Today's high and low are inside yesterday's (equal counts). |
spinning | rule | spinning_top()spinning top candle: Small body (10–30% of range) with wicks of at least a quarter of the range on both sides. |
squeeze | rule | (bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06Bollinger bands narrower than 6% of price |
lowbars | rule | lowestbars(L, 20) >= 15The 20-day low is at least 15 sessions old |
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
| Question | Answer | Reading |
|---|---|---|
tightA tight 10-day base (under 5% of price) | 0.0686 | false |
insideinside bar candle: Today's high and low are inside yesterday's (equal counts). | 0.0707 | false |
spinningspinning top candle: Small body (10–30% of range) with wicks of at least a quarter of the range on both sides. | 0.2516 | false |
squeezeBollinger bands narrower than 6% of price | 0.0616 | false |
lowbarsThe 20-day low is at least 15 sessions old | 0.7708 | true |
big_move5A big move either way in 5 days | 0.387 | 39% · unlikely |
What it means
For MCD on the session of 2026-10-30: True now: The 20-day low is at least 15 sessions old. Not true: A tight 10-day base (under 5% of price); inside bar candle: Today's high and low are inside yesterday's (equal counts).; spinning top candle: Small body (10–30% of range) with wicks of at least a quarter of the range on both sides.; Bollinger bands narrower than 6% of price. Forecasts: A big move either way in 5 days 39%.
A quiet, compressed tape means an investor day can move the stock; the forecast says how likely a big move is, not the direction.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "MCD"
},
"questions": {
"tight": {
"type": "yes_no",
"ask": "(max(H, 10) - min(L, 10)) / C < 0.05"
},
"inside": {
"type": "yes_no",
"ask": "inside_bar()"
},
"spinning": {
"type": "yes_no",
"ask": "spinning_top()"
},
"squeeze": {
"type": "yes_no",
"ask": "(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06"
},
"lowbars": {
"type": "yes_no",
"ask": "lowestbars(L, 20) >= 15"
},
"big_move5": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
}
}Response JSON (MCD, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"tight": {
"yes_no": 0.0686,
"rule": "(max(H, 10) - min(L, 10)) / C < 0.05",
"basis": "rule"
},
"inside": {
"yes_no": 0.0707,
"rule": "inside_bar()",
"basis": "rule"
},
"spinning": {
"yes_no": 0.2516,
"rule": "spinning_top()",
"basis": "rule"
},
"squeeze": {
"yes_no": 0.0616,
"rule": "(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06",
"basis": "rule"
},
"lowbars": {
"yes_no": 0.7708,
"rule": "lowestbars(L, 20) >= 15",
"basis": "rule"
},
"big_move5": {
"yes_no": 0.387
}
},
"context": {
"symbol": "MCD",
"as_of": "2026-10-30"
}
}bblower bbmid bbupper inside_bar lowestbars max min spinning_top
Investor relations team · example 13
IR at CSCO: how was the last dividend raise received?
Review the last payment change and the price trend since, to plan the next capital-return announcement.
- StateCSCO
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"CSCO"} The server fills in the latest completed session.
Questions
raised | English → rule | Did the stock raise its dividend last time? |
raise5 | English → rule | Was the last dividend raised by more than 5%? |
years | English → rule | Has the stock grown its dividend for 10 years in a row? |
recent_ex | English → rule | Did the stock go ex-dividend in the last 30 days? |
trend | English → rule | Is the stock above its 50-day moving average? |
raise_next | forecast | Will the company raise its dividend next year? Raising the dividend next year |
Answers
| Question | Answer | Reading |
|---|---|---|
raisedDid the stock raise its dividend last time compiled to raised_last > 0.5 | 0.1409 | false |
raise5Was the last dividend raised by more than 5% compiled to div_change_pct > 5 | 0.1409 | false |
yearsHas the stock grown its dividend for 10 years in a row compiled to years_of_growth >= 10 | 0.9463 | true |
recent_exDid the stock go ex-dividend in the last 30 days compiled to days_since_ex_div <= 30 | 0.7951 | true |
trendIs the stock above its 50-day moving average compiled to C > sma(C, 50) | 0.0985 | false |
raise_nextRaising the dividend next year | 0.473 | 47% · close to even |
What it means
For CSCO on the session of 2026-10-30: True now: Has the stock grown its dividend for 10 years in a row; Did the stock go ex-dividend in the last 30 days. Not true: Did the stock raise its dividend last time; Was the last dividend raised by more than 5%; Is the stock above its 50-day moving average. Forecasts: Raising the dividend next year 47%.
Dividend facts tell the team what investors already know; the forecast for a raise is a market-style read, which IR compares with the board's own plan.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "CSCO"
},
"questions": {
"raised": {
"type": "yes_no",
"instructions": "Did the stock raise its dividend last time?"
},
"raise5": {
"type": "yes_no",
"instructions": "Was the last dividend raised by more than 5%?"
},
"years": {
"type": "yes_no",
"instructions": "Has the stock grown its dividend for 10 years in a row?"
},
"recent_ex": {
"type": "yes_no",
"instructions": "Did the stock go ex-dividend in the last 30 days?"
},
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 50-day moving average?"
},
"raise_next": {
"type": "yes_no",
"instructions": "Will the company raise its dividend next year?"
}
}
}Response JSON (CSCO, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"raised": {
"yes_no": 0.1409,
"rule": "raised_last > 0.5",
"basis": "pattern"
},
"raise5": {
"yes_no": 0.1409,
"rule": "div_change_pct > 5",
"basis": "pattern"
},
"years": {
"yes_no": 0.9463,
"rule": "years_of_growth >= 10",
"basis": "pattern"
},
"recent_ex": {
"yes_no": 0.7951,
"rule": "days_since_ex_div <= 30",
"basis": "pattern"
},
"trend": {
"yes_no": 0.0985,
"rule": "C > sma(C, 50)",
"basis": "comparison"
},
"raise_next": {
"yes_no": 0.473
}
},
"context": {
"symbol": "CSCO",
"as_of": "2026-10-30"
}
}days_since_ex_div div_change_pct raised_last sma years_of_growth
Investor relations team · example 14
IR at LLY: is the stock stretched going into conferences?
When the stock has run hard, IR checks how extended it is before the conference season so messages stay measured.
- StateLLY
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"LLY"} The server fills in the latest completed session.
Questions
ext | English → rule | Is the stock more than 10% above its 200-day moving average? |
stretched | rule | C > sma(C, 20) + 2 * atr(14)Stretched: more than 2 ATR above the 20-day |
rsi70 | rule | rsi(C, 14) > 70RSI above 70 |
cci | rule | cci(20) > 100CCI above 100 |
willr | rule | willr(14) > -20Williams %R above −20 |
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.9463 | true |
stretchedStretched: more than 2 ATR above the 20-day | 0.919 | true |
rsi70RSI above 70 | 0.8226 | true |
cciCCI above 100 | 0.8531 | true |
willrWilliams %R above −20 | 0.6655 | true |
drop5A 5% drawdown within a month | 0.583 | 58% · close to even |
What it means
For LLY on the session of 2026-10-30: True now: Is the stock more than 10% above its 200-day moving average; Stretched: more than 2 ATR above the 20-day; RSI above 70; CCI above 100; Williams %R above −20. Forecasts: A 5% drawdown within a month 58%.
Several stretch rules true at once is a reason to avoid sounding promotional; the drawdown odds are context, not guidance.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "LLY"
},
"questions": {
"ext": {
"type": "yes_no",
"instructions": "Is the stock more than 10% above its 200-day moving average?"
},
"stretched": {
"type": "yes_no",
"ask": "C > sma(C, 20) + 2 * atr(14)"
},
"rsi70": {
"type": "yes_no",
"ask": "rsi(C, 14) > 70"
},
"cci": {
"type": "yes_no",
"ask": "cci(20) > 100"
},
"willr": {
"type": "yes_no",
"ask": "willr(14) > -20"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
}
}Response JSON (LLY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"ext": {
"yes_no": 0.9463,
"rule": "C > sma(C, 200) * 1.1",
"basis": "comparison"
},
"stretched": {
"yes_no": 0.919,
"rule": "C > sma(C, 20) + 2 * atr(14)",
"basis": "rule"
},
"rsi70": {
"yes_no": 0.8226,
"rule": "rsi(C, 14) > 70",
"basis": "rule"
},
"cci": {
"yes_no": 0.8531,
"rule": "cci(20) > 100",
"basis": "rule"
},
"willr": {
"yes_no": 0.6655,
"rule": "willr(14) > -20",
"basis": "rule"
},
"drop5": {
"yes_no": 0.583
}
},
"context": {
"symbol": "LLY",
"as_of": "2026-10-30"
}
}Investor relations team · example 15
A Friday share-price note for the board pack
Every Friday, IR emails the board pack owner a line per name: the company and two peers, trend and weekly move.
- ScheduleFri at 17:00 ET
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"WMT"} then COST, TGT, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
down_week | English → rule | Is the stock down over the last week? |
up_month | English → rule | Is the stock up over the last month? |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Symbol | trendrule | down_weekrule | up_monthrule | up_weekforecast | Fired |
|---|---|---|---|---|---|
WMT | 0.9358 | 0.1733 | 0.9435 | 0.535 | board_line |
COST | 0.9336 | 0.2516 | 0.9279 | 0.519 | board_line |
TGT | 0.3359 | 0.3363 | 0.3774 | 0.544 | board_line |
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→Emailboard-pack{
"subject": "Weekly share price note: WMT",
"text": "WMT week to 2026-10-30: down on the week 17%, up on the month 94%, above the 50-day 94%. Higher next week (forecast) 54%."
}{
"subject": "Weekly share price note: COST",
"text": "COST week to 2026-10-30: down on the week 25%, up on the month 93%, above the 50-day 93%. Higher next week (forecast) 52%."
}{
"subject": "Weekly share price note: TGT",
"text": "TGT week to 2026-10-30: down on the week 34%, up on the month 38%, above the 50-day 34%. Higher next week (forecast) 54%."
}What it means
Session of 2026-10-30, 3 symbols: Above the 50-day average: true for WMT, COST of 3. Is the stock down over the last week: true for none of 3. Is the stock up over the last month: true for WMT, COST of 3. Highest odds for “Higher in a week”: TGT at 54%. board_line fired for WMT, COST, TGT.
Each name gets one line with the rules and the forecast labelled as such, so the board sees facts and odds separately.
As a scheduled workflow (Fri at 17: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 Friday share-price note for the board pack",
"symbols": "WMT COST TGT",
"days": [
5
],
"at_time": "17:00",
"model": "ora-fin-0.1.1",
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"down_week": {
"type": "yes_no",
"instructions": "Is the stock down over the last week?"
},
"up_month": {
"type": "yes_no",
"instructions": "Is the stock up over the last month?"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "board_line",
"when": "trend >= 0",
"do": "email",
"connection": "board-pack",
"subject": "Weekly share price note: {{symbol}}",
"message": "{{symbol}} week to {{as_of}}: down on the week {{down_week|pct}}, up on the month {{up_month|pct}}, above the 50-day {{trend|pct}}. Higher next week (forecast) {{up_week|pct}}."
}
]
}Request JSON (WMT; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "WMT"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"down_week": {
"type": "yes_no",
"instructions": "Is the stock down over the last week?"
},
"up_month": {
"type": "yes_no",
"instructions": "Is the stock up over the last month?"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "board_line",
"when": "trend >= 0",
"do": "email",
"connection": "board-pack",
"subject": "Weekly share price note: {{symbol}}",
"message": "{{symbol}} week to {{as_of}}: down on the week {{down_week|pct}}, up on the month {{up_month|pct}}, above the 50-day {{trend|pct}}. Higher next week (forecast) {{up_week|pct}}."
}
],
"dry_run": true
}Response JSON (WMT, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.9358,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"down_week": {
"yes_no": 0.1733,
"rule": "C < C[-5]",
"basis": "pattern"
},
"up_month": {
"yes_no": 0.9435,
"rule": "C > C[-21]",
"basis": "pattern"
},
"up_week": {
"yes_no": 0.535
}
},
"context": {
"symbol": "WMT",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "board_line",
"fired": true,
"status": "dry_run",
"do": "email",
"connection": "board-pack",
"preview": {
"subject": "Weekly share price note: WMT",
"text": "WMT week to 2026-10-30: down on the week 17%, up on the month 94%, above the 50-day 94%. Higher next week (forecast) 54%."
}
}
]
}Investor relations team · example 16
IR at INTC: are sellers still in control?
After a long decline, check whether the downtrend structure is still intact or showing the first signs of a base.
- StateINTC
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"INTC"} The server fills in the latest completed session.
Questions
lh_ll | English → rule | Is the stock making lower swing highs and lower swing lows? |
crows | rule | three_black_crows()three black crows candle: Three red bars, each closing lower and opening inside the previous body. |
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. |
failed_bd | rule | L < lowest(L, 20) and C > lowest(L, 20)Undercut the 20-day low and closed back above it |
barssince | rule | barssince(C > highest(C, 20)) > 30More than 30 sessions since the last 20-day closing breakout |
rally10 | forecast | Will it rally at least 10% at some point in the next month? A 10% rally within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
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 |
crowsthree black crows candle: Three red bars, each closing lower and opening inside the previous body. | 0.0537 | false |
morningmorning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first. | 0.0537 | false |
failed_bdUndercut the 20-day low and closed back above it | 0.0878 | false |
barssinceMore than 30 sessions since the last 20-day closing breakout | 0.3665 | false |
rally10A 10% rally within a month | 0.871 | 87% · likely |
What it means
For INTC on the session of 2026-10-30: Not true: Is the stock making lower swing highs and lower swing lows; three black crows candle: Three red bars, each closing lower and opening inside the previous body.; 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.; Undercut the 20-day low and closed back above it; More than 30 sessions since the last 20-day closing breakout. Forecasts: A 10% rally within a month 87%.
Lower highs and lower lows with no recent breakout describe a stock still under pressure; a morning star or failed breakdown is the first sign worth reporting.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "INTC"
},
"questions": {
"lh_ll": {
"type": "yes_no",
"instructions": "Is the stock making lower swing highs and lower swing lows?"
},
"crows": {
"type": "yes_no",
"ask": "three_black_crows()"
},
"morning": {
"type": "yes_no",
"ask": "morning_star()"
},
"failed_bd": {
"type": "yes_no",
"ask": "L < lowest(L, 20) and C > lowest(L, 20)"
},
"barssince": {
"type": "yes_no",
"ask": "barssince(C > highest(C, 20)) > 30"
},
"rally10": {
"type": "yes_no",
"instructions": "Will it rally at least 10% at some point in the next month?"
}
}
}Response JSON (INTC, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"lh_ll": {
"yes_no": 0.1552,
"rule": "(swinghigh(5, 1) < swinghigh(5, 2)) and (swinglow(5, 1) < swinglow(5, 2))",
"basis": "pattern"
},
"crows": {
"yes_no": 0.0537,
"rule": "three_black_crows()",
"basis": "rule"
},
"morning": {
"yes_no": 0.0537,
"rule": "morning_star()",
"basis": "rule"
},
"failed_bd": {
"yes_no": 0.0878,
"rule": "L < lowest(L, 20) and C > lowest(L, 20)",
"basis": "rule"
},
"barssince": {
"yes_no": 0.3665,
"rule": "barssince(C > highest(C, 20)) > 30",
"basis": "rule"
},
"rally10": {
"yes_no": 0.871
}
},
"context": {
"symbol": "INTC",
"as_of": "2026-10-30"
}
}barssince highest lowest morning_star swinghigh swinglow three_black_crows
Investor relations team · example 17
IR at PFE: log the earnings reaction to our CRM
After each report, push the reaction facts to the IR CRM by webhook so call notes start from the same numbers.
- StatePFE
- Questions6 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"PFE"} The server fills in the latest completed session.
Questions
beat | English → rule | Did the stock beat EPS estimates last quarter? |
rev_beat | English → rule | Did revenue beat estimates last quarter? |
fell | English → rule | Did the stock fall after its last earnings report? |
big | English → rule | Was the last earnings reaction bigger than 5%? |
above_pre | English → rule | Is the stock trading above its pre-earnings price? |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
beatDid the stock beat EPS estimates last quarter compiled to beat_eps_last > 0.5 | 0.8591 | true |
rev_beatDid revenue beat estimates last quarter compiled to beat_revenue_last > 0.5 | 0.8591 | true |
fellDid the stock fall after its last earnings report compiled to last_earnings_move < 0 | 0.0537 | false |
bigWas the last earnings reaction bigger than 5% compiled to abs(last_earnings_move) > 5 | 0.0537 | false |
above_preIs the stock trading above its pre-earnings price compiled to C > pre_earnings_close | 0.9463 | true |
up_weekHigher in a week | 0.555 | 56% · close to even |
Actions
Rules on the answers decide what to send.
beat >= 0→Webhookir-crm{
"ticker": "PFE",
"as_of": "2026-10-30",
"type": "earnings_reaction",
"p_beat_eps": 0.8591,
"p_beat_revenue": 0.8591,
"p_fell_after": 0.0537,
"p_big_reaction": 0.0537,
"p_above_pre": 0.9463
}What it means
For PFE on the session of 2026-10-30: True now: Did the stock beat EPS estimates last quarter; Did revenue beat estimates last quarter; Is the stock trading above its pre-earnings price. Not true: Did the stock fall after its last earnings report; Was the last earnings reaction bigger than 5%. Forecasts: Higher in a week 56%. Fired: crm_log (Webhook → ir-crm).
The webhook always fires, so the CRM keeps a record for every quarter; analysts' questions can then be answered from the logged facts.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "PFE"
},
"questions": {
"beat": {
"type": "yes_no",
"instructions": "Did the stock beat EPS estimates last quarter?"
},
"rev_beat": {
"type": "yes_no",
"instructions": "Did revenue beat estimates last quarter?"
},
"fell": {
"type": "yes_no",
"instructions": "Did the stock fall after its last earnings report?"
},
"big": {
"type": "yes_no",
"instructions": "Was the last earnings reaction bigger than 5%?"
},
"above_pre": {
"type": "yes_no",
"instructions": "Is the stock trading above its pre-earnings price?"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "crm_log",
"when": "beat >= 0",
"do": "webhook",
"connection": "ir-crm",
"body": {
"ticker": "{{symbol}}",
"as_of": "{{as_of}}",
"type": "earnings_reaction",
"p_beat_eps": "{{beat}}",
"p_beat_revenue": "{{rev_beat}}",
"p_fell_after": "{{fell}}",
"p_big_reaction": "{{big}}",
"p_above_pre": "{{above_pre}}"
}
}
],
"dry_run": true
}Response JSON (PFE, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"beat": {
"yes_no": 0.8591,
"rule": "beat_eps_last > 0.5",
"basis": "pattern"
},
"rev_beat": {
"yes_no": 0.8591,
"rule": "beat_revenue_last > 0.5",
"basis": "pattern"
},
"fell": {
"yes_no": 0.0537,
"rule": "last_earnings_move < 0",
"basis": "pattern"
},
"big": {
"yes_no": 0.0537,
"rule": "abs(last_earnings_move) > 5",
"basis": "pattern"
},
"above_pre": {
"yes_no": 0.9463,
"rule": "C > pre_earnings_close",
"basis": "pattern"
},
"up_week": {
"yes_no": 0.555
}
},
"context": {
"symbol": "PFE",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "crm_log",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "ir-crm",
"preview": {
"body": {
"ticker": "PFE",
"as_of": "2026-10-30",
"type": "earnings_reaction",
"p_beat_eps": 0.8591,
"p_beat_revenue": 0.8591,
"p_fell_after": 0.0537,
"p_big_reaction": 0.0537,
"p_above_pre": 0.9463
}
}
}
]
}abs beat_eps_last beat_revenue_last last_earnings_move pre_earnings_close
Investor relations team · example 18
IR at AMGN: did a reversal candle form after the selloff?
After a sharp drop, check for hammers, piercing lines and harami patterns to describe the tape to management.
- StateAMGN
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"AMGN"} The server fills in the latest completed session.
Questions
hammer | rule | hammer()hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back. |
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. |
inv_hammer | rule | inverted_hammer()inverted hammer candle: Shooting-star shape after a five-bar decline. |
key_rev | rule | L < lowest(L, 10) and C > C[-1]New 10-day low, but closed up on the day |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
hammerhammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back. | 0.0581 | 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.0814 | false |
haramiharami bull candle: A small green body inside yesterday's red body. | 0.2044 | false |
inv_hammerinverted hammer candle: Shooting-star shape after a five-bar decline. | 0.1171 | false |
key_revNew 10-day low, but closed up on the day | 0.0579 | false |
up_weekHigher in a week | 0.548 | 55% · close to even |
What it means
For AMGN on the session of 2026-10-30: Not true: hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back.; 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.; inverted hammer candle: Shooting-star shape after a five-bar decline.; New 10-day low, but closed up on the day. Forecasts: Higher in a week 55%.
A reversal candle is one session of evidence; IR reports it as what the market did, not as a turn.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AMGN"
},
"questions": {
"hammer": {
"type": "yes_no",
"ask": "hammer()"
},
"piercing": {
"type": "yes_no",
"ask": "piercing_line()"
},
"harami": {
"type": "yes_no",
"ask": "harami_bull()"
},
"inv_hammer": {
"type": "yes_no",
"ask": "inverted_hammer()"
},
"key_rev": {
"type": "yes_no",
"ask": "L < lowest(L, 10) and C > C[-1]"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (AMGN, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"hammer": {
"yes_no": 0.0581,
"rule": "hammer()",
"basis": "rule"
},
"piercing": {
"yes_no": 0.0814,
"rule": "piercing_line()",
"basis": "rule"
},
"harami": {
"yes_no": 0.2044,
"rule": "harami_bull()",
"basis": "rule"
},
"inv_hammer": {
"yes_no": 0.1171,
"rule": "inverted_hammer()",
"basis": "rule"
},
"key_rev": {
"yes_no": 0.0579,
"rule": "L < lowest(L, 10) and C > C[-1]",
"basis": "rule"
},
"up_week": {
"yes_no": 0.548
}
},
"context": {
"symbol": "AMGN",
"as_of": "2026-10-30"
}
}hammer harami_bull inverted_hammer lowest offset piercing_line
Investor relations team · example 19
IR at CL: remind retail holders before the ex-date
When the next ex-dividend date is near, post the reminder for the shareholder newsletter.
- StateCL
- Questions4 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"CL"} The server fills in the latest completed session.
Questions
ex_soon | rule | days_to_ex_div <= 30Goes ex-dividend within 30 days |
next_up | English → rule | Is the next declared dividend larger than the last one? |
quarterly | rule | div_count_ttm >= 4Pays at least quarterly |
yield | English → rule | Is the dividend yield above 3%? |
Answers
| Question | Answer | Reading |
|---|---|---|
ex_soonGoes ex-dividend within 30 days | 0.0537 | false |
next_upIs the next declared dividend larger than the last one compiled to next_div_amount > last_div_amount | 0.50 | not known |
quarterlyPays at least quarterly | 0.55 | on the line (true) |
yieldIs the dividend yield above 3% compiled to div_yield_ttm > 3 | 0.0537 | false |
Actions
Rules on the answers decide what to send.
ex_soon >= 0.6→Webhooknewsletter-zapierelse→Slackir-team{
"text": "CL (2026-10-30): no declared ex-date within 30 days (5%)."
}What it means
For CL on the session of 2026-10-30: Not true: Goes ex-dividend within 30 days; Is the dividend yield above 3%. On the line: Pays at least quarterly. Not known (no data on record): Is the next declared dividend larger than the last one. Fired: no_ex (Slack → ir-team).
Only a declared ex-date fires the newsletter; until it is declared the reminder waits.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "CL"
},
"questions": {
"ex_soon": {
"type": "yes_no",
"ask": "days_to_ex_div <= 30"
},
"next_up": {
"type": "yes_no",
"instructions": "Is the next declared dividend larger than the last one?"
},
"quarterly": {
"type": "yes_no",
"ask": "div_count_ttm >= 4"
},
"yield": {
"type": "yes_no",
"instructions": "Is the dividend yield above 3%?"
}
},
"actions": [
{
"id": "ex_reminder",
"when": "ex_soon >= 0.6",
"do": "webhook",
"connection": "newsletter-zapier",
"body": {
"template": "ex_dividend_reminder",
"ticker": "{{symbol}}",
"as_of": "{{as_of}}",
"p_ex_within_30d": "{{ex_soon}}",
"p_next_larger": "{{next_up}}"
}
},
{
"id": "no_ex",
"when": "else",
"do": "slack",
"connection": "ir-team",
"message": "{{symbol}} ({{as_of}}): no declared ex-date within 30 days ({{ex_soon|pct}})."
}
],
"dry_run": true
}Response JSON (CL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"ex_soon": {
"yes_no": 0.0537,
"rule": "days_to_ex_div <= 30",
"basis": "rule"
},
"next_up": {
"yes_no": 0.5,
"rule": "next_div_amount > last_div_amount",
"basis": "pattern"
},
"quarterly": {
"yes_no": 0.55,
"rule": "div_count_ttm >= 4",
"basis": "rule"
},
"yield": {
"yes_no": 0.0537,
"rule": "div_yield_ttm > 3",
"basis": "pattern"
}
},
"context": {
"symbol": "CL",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "ex_reminder",
"fired": false,
"status": "skipped"
},
{
"id": "no_ex",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "ir-team",
"preview": {
"text": "CL (2026-10-30): no declared ex-date within 30 days (5%)."
}
}
]
}days_to_ex_div div_count_ttm div_yield_ttm last_div_amount next_div_amount
Investor relations team · example 20
IR at CVX: where do we sit against XOM and the sector?
Compare CVX with XOM and the energy ETF on trend strength and volatility before the strategy update.
- State3 symbols
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"CVX"} then XOM, XLE, one request each. The server fills in the latest completed session.
Questions
adx | rule | adx(14) > 20 and diplus(14) > diminus(14)Trending up (ADX over 20 and +DI over −DI) |
di | rule | diplus(14) > diminus(14)Plus directional index above minus |
atr | rule | atr_pct(14) > 3A typical day moves more than 3% |
ema | rule | C > ema(C, 21)Above the 21-day exponential average |
hv | English → rule | Is 20-day historical volatility below 20%? |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | adxrule | dirule | atrrule | emarule | hvrule | beat_spyforecast |
|---|---|---|---|---|---|---|
CVX | 0.9374 | 0.9374 | 0.0537 | 0.941 | 0.2996 | 0.564 |
XOM | 0.937 | 0.9409 | 0.0537 | 0.9441 | 0.2129 | 0.554 |
XLE | 0.2133 | 0.8252 | 0.0537 | 0.9281 | 0.2403 | 0.55 |
true false not known for rules; forecasts are odds. Hover a column for its question.
What it means
Session of 2026-10-30, 3 symbols: Trending up (ADX over 20 and +DI over −DI): true for CVX, XOM of 3. Plus directional index above minus: true for CVX, XOM, XLE of 3. A typical day moves more than 3%: true for none of 3. Above the 21-day exponential average: true for CVX, XOM, XLE of 3. Highest odds for “Beating SPY over a month”: CVX at 56%.
If the sector ETF trends and the company does not, the gap is company-specific; if all three move together, the story is the oil price.
Request JSON (CVX; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "CVX"
},
"questions": {
"adx": {
"type": "yes_no",
"ask": "adx(14) > 20 and diplus(14) > diminus(14)"
},
"di": {
"type": "yes_no",
"ask": "diplus(14) > diminus(14)"
},
"atr": {
"type": "yes_no",
"ask": "atr_pct(14) > 3"
},
"ema": {
"type": "yes_no",
"ask": "C > ema(C, 21)"
},
"hv": {
"type": "yes_no",
"instructions": "Is 20-day historical volatility below 20%?"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
}
}Response JSON (CVX, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"adx": {
"yes_no": 0.9374,
"rule": "adx(14) > 20 and diplus(14) > diminus(14)",
"basis": "rule"
},
"di": {
"yes_no": 0.9374,
"rule": "diplus(14) > diminus(14)",
"basis": "rule"
},
"atr": {
"yes_no": 0.0537,
"rule": "atr_pct(14) > 3",
"basis": "rule"
},
"ema": {
"yes_no": 0.941,
"rule": "C > ema(C, 21)",
"basis": "rule"
},
"hv": {
"yes_no": 0.2996,
"rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2",
"basis": "pattern"
},
"beat_spy": {
"yes_no": 0.564
}
},
"context": {
"symbol": "CVX",
"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 Corporates: Corporate treasury, CFO office, Bank credit analyst, Financial journalist / media.