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

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 (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.

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

State

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

Questions

soonEnglish → ruleIs earnings in the next 14 days?
within10ruledays_to_earnings <= 10
Reports earnings within 10 days
bmoEnglish → ruleDoes the stock report before the market opens next time?
amcEnglish → ruleDoes the stock report after the close next time?
beat_streakrulebeat_streak >= 4
Beat four quarters in a row

Answers

QuestionAnswerReading
soon
Is earnings in the next 14 days
compiled to days_to_earnings <= 14
0.1033false
within10
Reports earnings within 10 days
0.0563false
bmo
Does the stock report before the market opens next time
compiled to next_report_bmo > 0.5
0.8591true
amc
Does the stock report after the close next time
compiled to next_report_amc > 0.5
0.1409false
beat_streak
Beat four quarters in a row
0.9463true

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.

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

State

{"symbol":"MCD"} 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)
insideruleinside_bar()
inside bar candle: Today's high and low are inside yesterday's (equal counts).
spinningrulespinning_top()
spinning top candle: Small body (10–30% of range) with wicks of at least a quarter of the range on both sides.
squeezerule(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06
Bollinger bands narrower than 6% of price
lowbarsrulelowestbars(L, 20) >= 15
The 20-day low is at least 15 sessions old
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.0686false
inside
inside bar candle: Today's high and low are inside yesterday's (equal counts).
0.0707false
spinning
spinning top candle: Small body (10–30% of range) with wicks of at least a quarter of the range on both sides.
0.2516false
squeeze
Bollinger bands narrower than 6% of price
0.0616false
lowbars
The 20-day low is at least 15 sessions old
0.7708true
big_move5
A big move either way in 5 days
0.38739% · 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.

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

State

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

Questions

raisedEnglish → ruleDid the stock raise its dividend last time?
raise5English → ruleWas the last dividend raised by more than 5%?
yearsEnglish → ruleHas the stock grown its dividend for 10 years in a row?
recent_exEnglish → ruleDid the stock go ex-dividend in the last 30 days?
trendEnglish → ruleIs the stock above its 50-day moving average?
raise_nextforecastWill the company raise its dividend next year?
Raising the dividend next year

Answers

QuestionAnswerReading
raised
Did the stock raise its dividend last time
compiled to raised_last > 0.5
0.1409false
raise5
Was the last dividend raised by more than 5%
compiled to div_change_pct > 5
0.1409false
years
Has the stock grown its dividend for 10 years in a row
compiled to years_of_growth >= 10
0.9463true
recent_ex
Did the stock go ex-dividend in the last 30 days
compiled to days_since_ex_div <= 30
0.7951true
trend
Is the stock above its 50-day moving average
compiled to C > sma(C, 50)
0.0985false
raise_next
Raising the dividend next year
0.47347% · 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.

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

State

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

Questions

extEnglish → ruleIs the stock more than 10% above its 200-day moving average?
stretchedruleC > sma(C, 20) + 2 * atr(14)
Stretched: more than 2 ATR above the 20-day
rsi70rulersi(C, 14) > 70
RSI above 70
ccirulecci(20) > 100
CCI above 100
willrrulewillr(14) > -20
Williams %R above −20
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

QuestionAnswerReading
ext
Is the stock more than 10% above its 200-day moving average
compiled to C > sma(C, 200) * 1.1
0.9463true
stretched
Stretched: more than 2 ATR above the 20-day
0.919true
rsi70
RSI above 70
0.8226true
cci
CCI above 100
0.8531true
willr
Williams %R above −20
0.6655true
drop5
A 5% drawdown within a month
0.58358% · 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"
  }
}

atr cci rsi sma willr

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.

ora-fin-0.1.13 symbols, one request each4 questions1 actionworkflow · Fri at 17:00 ET
  1. ScheduleFri at 17:00 ET
  2. State3 symbols
  3. Questions4 asked
  4. Answersreal, captured
  5. Actions1 rule · dry run

State

{"symbol":"WMT"} then COST, TGT, one request each. The server fills in the latest completed session.

Questions

trendruleC > sma(C, 50)
Above the 50-day average
down_weekEnglish → ruleIs the stock down over the last week?
up_monthEnglish → ruleIs the stock up over the last month?
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

Symboltrendruledown_weekruleup_monthruleup_weekforecastFired
WMT0.93580.17330.94350.535board_line
COST0.93360.25160.92790.519board_line
TGT0.33590.33630.37740.544board_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
WMT 1 of 1 fired · dry run, nothing sent
board_linewould send (dry run)Email → board-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%."
}
COST 1 of 1 fired · dry run, nothing sent
board_linewould send (dry run)Email → board-pack
{
  "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%."
}
TGT 1 of 1 fired · dry run, nothing sent
board_linewould send (dry run)Email → board-pack
{
  "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%."
      }
    }
  ]
}

offset sma

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.

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

State

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

Questions

lh_llEnglish → ruleIs the stock making lower swing highs and lower swing lows?
crowsrulethree_black_crows()
three black crows candle: Three red bars, each closing lower and opening inside the previous body.
morningrulemorning_star()
morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first.
failed_bdruleL < lowest(L, 20) and C > lowest(L, 20)
Undercut the 20-day low and closed back above it
barssincerulebarssince(C > highest(C, 20)) > 30
More than 30 sessions since the last 20-day closing breakout
rally10forecastWill it rally at least 10% at some point in the next month?
A 10% rally within a month

Answers

QuestionAnswerReading
lh_ll
Is 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.1552false
crows
three black crows candle: Three red bars, each closing lower and opening inside the previous body.
0.0537false
morning
morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first.
0.0537false
failed_bd
Undercut the 20-day low and closed back above it
0.0878false
barssince
More than 30 sessions since the last 20-day closing breakout
0.3665false
rally10
A 10% rally within a month
0.87187% · 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.

ora-fin-0.1.1PFE6 questions1 action
  1. StatePFE
  2. Questions6 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

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

Questions

beatEnglish → ruleDid the stock beat EPS estimates last quarter?
rev_beatEnglish → ruleDid revenue beat estimates last quarter?
fellEnglish → ruleDid the stock fall after its last earnings report?
bigEnglish → ruleWas the last earnings reaction bigger than 5%?
above_preEnglish → ruleIs the stock trading above its pre-earnings price?
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
beat
Did the stock beat EPS estimates last quarter
compiled to beat_eps_last > 0.5
0.8591true
rev_beat
Did revenue beat estimates last quarter
compiled to beat_revenue_last > 0.5
0.8591true
fell
Did the stock fall after its last earnings report
compiled to last_earnings_move < 0
0.0537false
big
Was the last earnings reaction bigger than 5%
compiled to abs(last_earnings_move) > 5
0.0537false
above_pre
Is the stock trading above its pre-earnings price
compiled to C > pre_earnings_close
0.9463true
up_week
Higher in a week
0.55556% · close to even

Actions

Rules on the answers decide what to send.

beat >= 0→Webhookir-crm
What each action would send 1 of 1 fired · dry run, nothing sent
crm_logwould send (dry run)Webhook → ir-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.

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

State

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

Questions

hammerrulehammer()
hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back.
piercingrulepiercing_line()
piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open).
haramiruleharami_bull()
harami bull candle: A small green body inside yesterday's red body.
inv_hammerruleinverted_hammer()
inverted hammer candle: Shooting-star shape after a five-bar decline.
key_revruleL < lowest(L, 10) and C > C[-1]
New 10-day low, but closed up on the day
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
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.
0.0581false
piercing
piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open).
0.0814false
harami
harami bull candle: A small green body inside yesterday's red body.
0.2044false
inv_hammer
inverted hammer candle: Shooting-star shape after a five-bar decline.
0.1171false
key_rev
New 10-day low, but closed up on the day
0.0579false
up_week
Higher in a week
0.54855% · 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.

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

State

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

Questions

ex_soonruledays_to_ex_div <= 30
Goes ex-dividend within 30 days
next_upEnglish → ruleIs the next declared dividend larger than the last one?
quarterlyrulediv_count_ttm >= 4
Pays at least quarterly
yieldEnglish → ruleIs the dividend yield above 3%?

Answers

QuestionAnswerReading
ex_soon
Goes ex-dividend within 30 days
0.0537false
next_up
Is the next declared dividend larger than the last one
compiled to next_div_amount > last_div_amount
0.50not known
quarterly
Pays at least quarterly
0.55on the line (true)
yield
Is the dividend yield above 3%
compiled to div_yield_ttm > 3
0.0537false

Actions

Rules on the answers decide what to send.

ex_soon >= 0.6→Webhooknewsletter-zapier
else→Slackir-team
What each action would send 1 of 2 fired · dry run, nothing sent
ex_reminderrule false: skipped
no_exwould send (dry run)Slack → ir-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.

ora-fin-0.1.13 symbols, one request each6 questions
  1. State3 symbols
  2. Questions6 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"CVX"} then XOM, XLE, one request each. The server fills in the latest completed session.

Questions

adxruleadx(14) > 20 and diplus(14) > diminus(14)
Trending up (ADX over 20 and +DI over −DI)
dirulediplus(14) > diminus(14)
Plus directional index above minus
atrruleatr_pct(14) > 3
A typical day moves more than 3%
emaruleC > ema(C, 21)
Above the 21-day exponential average
hvEnglish → ruleIs 20-day historical volatility below 20%?
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symboladxrulediruleatrruleemarulehvrulebeat_spyforecast
CVX0.93740.93740.05370.9410.29960.564
XOM0.9370.94090.05370.94410.21290.554
XLE0.21330.82520.05370.92810.24030.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"
  }
}

adx atr_pct diminus diplus ema log offset sqrt std

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.

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