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 · Sell side

Compliance officer: 20 ways to use Ora

Surveillance context: unusual moves around events, restricted lists and documented checks. Each example is a complete, runnable request with the real answers it returned (44 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 (51)

offset 10avg 8ref 7abs 5sma 5atr 4days_to_earnings 3highest 3max 3zscore 2days_since_earnings 2days_to_ex_div 2pays_dividend 2atr_pct 2log 2sqrt 2std 2percentrank 1gap_down 1gap_up 1beat_eps_last 1beat_revenue_last 1eps_surprise_pct 1last_earnings_gap 1last_earnings_move 1days_since_ex_div 1div_yield_ttm 1days_since_reverse_split 1days_since_split 1days_to_split 1last_split_ratio 1marubozu 1outside_bar 1macd 1macdsignal 1rsi 1next_report_amc 1next_report_bmo 1median 1roc 1three_white_soldiers 1doji 1div_ttm 1last_div_amount 1next_div_amount 1barssince 1crossdown 1crossup 1lowest 1engulfing_bull 1hammer 1

Examples 11–20 of 20 · page 2 of 2

Compliance officer · example 11

Trading-window calendar: which covered names report soon

Remind employees in a blackout policy which names report within two weeks.

ora-fin-0.1.15 symbols, one request each4 questions1 actionworkflow · Mon at 07:30 ET
  1. ScheduleMon at 07:30 ET
  2. State5 symbols
  3. Questions4 asked
  4. Answersreal, captured
  5. Actions1 rule · dry run

State

{"symbol":"MSFT"} then ORCL, CRM, ADBE, CSCO, one request each. The server fills in the latest completed session.

Questions

soonEnglish → ruleIs earnings in the next 14 days?
recentEnglish → ruleDid the stock report earnings in the last 7 days?
bmoEnglish → ruleDoes the stock report before the market opens next time?
amcEnglish → ruleDoes the stock report after the close next time?

Answers

SymbolsoonrulerecentrulebmoruleamcruleFired
MSFT0.05370.91870.14090.8591none
ORCL0.05370.05370.14090.8591none
CRM0.05370.05370.14090.8591none
ADBE0.05370.05370.14090.8591none
CSCO0.79510.05370.14090.8591window

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→Emailemployees-covered
MSFT 0 of 1 fired · dry run, nothing sent
ORCL 0 of 1 fired · dry run, nothing sent
CRM 0 of 1 fired · dry run, nothing sent
ADBE 0 of 1 fired · dry run, nothing sent
CSCO 1 of 1 fired · dry run, nothing sent
windowwould send (dry run)Email → employees-covered
{
  "subject": "Blackout reminder: CSCO reports within 14 days",
  "text": "CSCO reports within 14 days (before the open 14%, after the close 86%). Personal trading in CSCO is restricted under the policy until two days after the report."
}

What it means

Session of 2026-10-30, 5 symbols: Is earnings in the next 14 days: true for CSCO of 5. Did the stock report earnings in the last 7 days: true for MSFT 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 MSFT, ORCL, CRM, ADBE, CSCO of 5. window fired for CSCO.

The reminder is driven by the earnings calendar facts; it applies the policy, it does not judge anyone.

As a scheduled workflow (Mon at 07:30 ET)

Create it under Workflows in the console: it runs these questions for every symbol on the schedule and fires the actions per symbol. The answers above are what one run returned.

{
  "name": "Trading-window calendar: which covered names report soon",
  "symbols": "MSFT ORCL CRM ADBE CSCO",
  "days": [
    1
  ],
  "at_time": "07:30",
  "model": "ora-fin-0.1.1",
  "questions": {
    "soon": {
      "type": "yes_no",
      "instructions": "Is earnings in the next 14 days?"
    },
    "recent": {
      "type": "yes_no",
      "instructions": "Did the stock report earnings in the last 7 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?"
    }
  },
  "actions": [
    {
      "id": "window",
      "when": "soon >= 0.6",
      "do": "email",
      "connection": "employees-covered",
      "subject": "Blackout reminder: {{symbol}} reports within 14 days",
      "message": "{{symbol}} reports within 14 days (before the open {{bmo|pct}}, after the close {{amc|pct}}). Personal trading in {{symbol}} is restricted under the policy until two days after the report."
    }
  ]
}
Request JSON (MSFT; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT"
  },
  "questions": {
    "soon": {
      "type": "yes_no",
      "instructions": "Is earnings in the next 14 days?"
    },
    "recent": {
      "type": "yes_no",
      "instructions": "Did the stock report earnings in the last 7 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?"
    }
  },
  "actions": [
    {
      "id": "window",
      "when": "soon >= 0.6",
      "do": "email",
      "connection": "employees-covered",
      "subject": "Blackout reminder: {{symbol}} reports within 14 days",
      "message": "{{symbol}} reports within 14 days (before the open {{bmo|pct}}, after the close {{amc|pct}}). Personal trading in {{symbol}} is restricted under the policy until two days after the report."
    }
  ],
  "dry_run": true
}
Response JSON (MSFT, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "soon": {
      "yes_no": 0.0537,
      "rule": "days_to_earnings <= 14",
      "basis": "pattern"
    },
    "recent": {
      "yes_no": 0.9187,
      "rule": "days_since_earnings <= 7",
      "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"
    }
  },
  "context": {
    "symbol": "MSFT",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "window",
      "fired": false,
      "status": "skipped"
    }
  ]
}

days_since_earnings days_to_earnings next_report_amc next_report_bmo

Compliance officer · example 12

Leveraged ETF suitability context: TQQQ and SQQQ volatility

Document the volatility of leveraged products when reviewing whether they suit retail accounts.

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

State

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

Questions

atr3ruleatr_pct(14) > 3
A typical day moves more than 3%
hvEnglish → ruleIs 20-day historical volatility above 40%?
ddruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

Symbolatr3rulehvruleddruledrop10forecast
TQQQ0.94630.94240.91980.766
SQQQ0.9340.93390.94630.699

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: A typical day moves more than 3%: true for TQQQ, SQQQ of 2. Is 20-day historical volatility above 40%: true for TQQQ, SQQQ of 2. More than 20% off the 52-week high: true for TQQQ, SQQQ of 2. Highest odds for “A 10% drawdown within a month”: TQQQ at 77%.

High volatility and drawdowns are part of the suitability file; the forecast is shown as model odds.

Request JSON (TQQQ; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TQQQ"
  },
  "questions": {
    "atr3": {
      "type": "yes_no",
      "ask": "atr_pct(14) > 3"
    },
    "hv": {
      "type": "yes_no",
      "instructions": "Is 20-day historical volatility above 40%?"
    },
    "dd": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  }
}
Response JSON (TQQQ, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "atr3": {
      "yes_no": 0.9463,
      "rule": "atr_pct(14) > 3",
      "basis": "rule"
    },
    "hv": {
      "yes_no": 0.9424,
      "rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) > 0.4",
      "basis": "pattern"
    },
    "dd": {
      "yes_no": 0.9198,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "drop10": {
      "yes_no": 0.766
    }
  },
  "context": {
    "symbol": "TQQQ",
    "as_of": "2026-10-30"
  }
}

atr_pct log max offset sqrt std

Compliance officer · example 13

MSTR: context for a momentum-ignition alert

When a surveillance alert fires, record whether the day was already volatile, gapping and on heavy volume.

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

State

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

Questions

atr3ruleatr_pct(14) > 3
A typical day moves more than 3%
widerule(H - L) > 2 * avg(H - L, 20)
Range more than twice the 20-day average range
volEnglish → ruleWas today's volume twice its 20-day average?
up2English → ruleDid the stock rise more than 2% today?
down3English → ruleDid the stock fall more than 3% today?

Answers

QuestionAnswerReading
atr3
A typical day moves more than 3%
0.9463true
wide
Range more than twice the 20-day average range
0.0943false
vol
Was today's volume twice its 20-day average
compiled to V > 2 * ref(avg(V, 20), -1)
0.3327false
up2
Did the stock rise more than 2% today
compiled to C / C[-1] - 1 > 0.02
0.077false
down3
Did the stock fall more than 3% today
compiled to C / C[-1] - 1 < -0.03
0.8372true

What it means

For MSTR on the session of 2026-10-30: True now: A typical day moves more than 3%; Did the stock fall more than 3% today. Not true: Range more than twice the 20-day average range; Was today's volume twice its 20-day average; Did the stock rise more than 2% today.

A volatile name on a volatile day is ordinary; the context lets the reviewer close alerts that are just the market.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSTR"
  },
  "questions": {
    "atr3": {
      "type": "yes_no",
      "ask": "atr_pct(14) > 3"
    },
    "wide": {
      "type": "yes_no",
      "ask": "(H - L) > 2 * avg(H - L, 20)"
    },
    "vol": {
      "type": "yes_no",
      "instructions": "Was today's volume twice its 20-day average?"
    },
    "up2": {
      "type": "yes_no",
      "instructions": "Did the stock rise more than 2% today?"
    },
    "down3": {
      "type": "yes_no",
      "instructions": "Did the stock fall more than 3% today?"
    }
  }
}
Response JSON (MSTR, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "atr3": {
      "yes_no": 0.9463,
      "rule": "atr_pct(14) > 3",
      "basis": "rule"
    },
    "wide": {
      "yes_no": 0.0943,
      "rule": "(H - L) > 2 * avg(H - L, 20)",
      "basis": "rule"
    },
    "vol": {
      "yes_no": 0.3327,
      "rule": "V > 2 * ref(avg(V, 20), -1)",
      "basis": "pattern"
    },
    "up2": {
      "yes_no": 0.077,
      "rule": "C / C[-1] - 1 > 0.02",
      "basis": "pattern"
    },
    "down3": {
      "yes_no": 0.8372,
      "rule": "C / C[-1] - 1 < -0.03",
      "basis": "pattern"
    }
  },
  "context": {
    "symbol": "MSTR",
    "as_of": "2026-10-30"
  }
}

atr_pct avg offset ref

Compliance officer · example 14

Best-execution review context: liquidity of traded names

For the quarterly best-execution review, record liquidity and volatility of the names traded.

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

State

{"symbol":"IWM"} then XLU, TLT, HYG, one request each. The server fills in the latest completed session.

Questions

liquidruleavg(C * V, 20) > 100000000
Trades more than $100 million a day
dryruleV < 0.6 * avg(V, 20)
Volume under 60% of normal
atr_loEnglish → ruleIs the 14-day ATR less than 2% of the price?
medianruleV > median(V, 20)
Volume above its 20-day median

Answers

Symbolliquidruledryruleatr_lorulemedianrule
IWM0.94630.08360.94630.6338
XLU0.94630.11460.94630.6199
TLT0.94630.14520.94630.6681
HYG0.94630.1040.94630.7335

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

What it means

Session of 2026-10-30, 4 symbols: Trades more than $100 million a day: true for IWM, XLU, TLT, HYG of 4. Volume under 60% of normal: true for none of 4. Is the 14-day ATR less than 2% of the price: true for IWM, XLU, TLT, HYG of 4. Volume above its 20-day median: true for IWM, XLU, TLT, HYG of 4.

Execution quality is judged against how liquid and calm the market was; these facts set that baseline.

Request JSON (IWM; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "IWM"
  },
  "questions": {
    "liquid": {
      "type": "yes_no",
      "ask": "avg(C * V, 20) > 100000000"
    },
    "dry": {
      "type": "yes_no",
      "ask": "V < 0.6 * avg(V, 20)"
    },
    "atr_lo": {
      "type": "yes_no",
      "instructions": "Is the 14-day ATR less than 2% of the price?"
    },
    "median": {
      "type": "yes_no",
      "ask": "V > median(V, 20)"
    }
  }
}
Response JSON (IWM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "liquid": {
      "yes_no": 0.9463,
      "rule": "avg(C * V, 20) > 100000000",
      "basis": "rule"
    },
    "dry": {
      "yes_no": 0.0836,
      "rule": "V < 0.6 * avg(V, 20)",
      "basis": "rule"
    },
    "atr_lo": {
      "yes_no": 0.9463,
      "rule": "atr(14) / C < 0.02",
      "basis": "pattern"
    },
    "median": {
      "yes_no": 0.6338,
      "rule": "V > median(V, 20)",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "IWM",
    "as_of": "2026-10-30"
  }
}

atr avg median

Compliance officer · example 15

SMCI: rapid run-up context for a review

Document a rapid rise (extension, consecutive up days, volume) when reviewing promotional activity in a name.

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

State

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

Questions

extEnglish → ruleIs the stock more than 10% above its 200-day moving average?
up3English → ruleHas the stock closed higher 3 days in a row?
soldiersrulethree_white_soldiers()
three white soldiers candle: Three green bars, each closing higher and opening inside the previous body.
volruleV > 2 * ref(avg(V, 20), -1)
Volume more than twice the previous 20-day average
rocruleroc(C, 5) > 15
Up more than 15% over five sessions

Answers

QuestionAnswerReading
ext
Is the stock more than 10% above its 200-day moving average
compiled to C > sma(C, 200) * 1.1
0.1742false
up3
Has the stock closed higher 3 days in a row
compiled to (C > C[-1]) and (C[-1] > C[-2]) and (C[-2] > C[-3])
0.1678false
soldiers
three white soldiers candle: Three green bars, each closing higher and opening inside the previous body.
0.0834false
vol
Volume more than twice the previous 20-day average
0.1119false
roc
Up more than 15% over five sessions
0.101false

What it means

For SMCI on the session of 2026-10-30: Not true: Is the stock more than 10% above its 200-day moving average; Has the stock closed higher 3 days in a row; three white soldiers candle: Three green bars, each closing higher and opening inside the previous body.; Volume more than twice the previous 20-day average; Up more than 15% over five sessions.

A rapid run-up is described in neutral terms; the reviewer decides whether any communication needs follow-up.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SMCI"
  },
  "questions": {
    "ext": {
      "type": "yes_no",
      "instructions": "Is the stock more than 10% above its 200-day moving average?"
    },
    "up3": {
      "type": "yes_no",
      "instructions": "Has the stock closed higher 3 days in a row?"
    },
    "soldiers": {
      "type": "yes_no",
      "ask": "three_white_soldiers()"
    },
    "vol": {
      "type": "yes_no",
      "ask": "V > 2 * ref(avg(V, 20), -1)"
    },
    "roc": {
      "type": "yes_no",
      "ask": "roc(C, 5) > 15"
    }
  }
}
Response JSON (SMCI, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "ext": {
      "yes_no": 0.1742,
      "rule": "C > sma(C, 200) * 1.1",
      "basis": "comparison"
    },
    "up3": {
      "yes_no": 0.1678,
      "rule": "(C > C[-1]) and (C[-1] > C[-2]) and (C[-2] > C[-3])",
      "basis": "pattern"
    },
    "soldiers": {
      "yes_no": 0.0834,
      "rule": "three_white_soldiers()",
      "basis": "rule"
    },
    "vol": {
      "yes_no": 0.1119,
      "rule": "V > 2 * ref(avg(V, 20), -1)",
      "basis": "rule"
    },
    "roc": {
      "yes_no": 0.101,
      "rule": "roc(C, 5) > 15",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "SMCI",
    "as_of": "2026-10-30"
  }
}

avg offset ref roc sma three_white_soldiers

Compliance officer · example 16

XOM: was volume unusually high on a flat price day?

Volume far above normal with little price change can merit a look; record both facts for the reviewer.

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

State

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

Questions

volruleV > 2 * ref(avg(V, 20), -1)
Volume more than twice the previous 20-day average
flatruleabs(C / C[-1] - 1) < 0.003
Close within 0.3% of the previous close
dojiruledoji()
doji candle: Body at most 10% of the day's range.
insideruleH < H[-1] and L > L[-1]
An inside day

Answers

QuestionAnswerReading
vol
Volume more than twice the previous 20-day average
0.2958false
flat
Close within 0.3% of the previous close
0.0741false
doji
doji candle: Body at most 10% of the day's range.
0.1743false
inside
An inside day
0.0704false

Actions

Rules on the answers decide what to send.

vol >= 0.6 and flat >= 0.6→Webhooksurveillance-cases
What each action would send 0 of 1 fired · dry run, nothing sent
contextrule false: skipped

What it means

For XOM on the session of 2026-10-30: Not true: Volume more than twice the previous 20-day average; Close within 0.3% of the previous close; doji candle: Body at most 10% of the day's range.; An inside day. No action fired: every rule was false.

High volume with a flat close is common around index events too; the record gives the reviewer the starting facts.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "XOM"
  },
  "questions": {
    "vol": {
      "type": "yes_no",
      "ask": "V > 2 * ref(avg(V, 20), -1)"
    },
    "flat": {
      "type": "yes_no",
      "ask": "abs(C / C[-1] - 1) < 0.003"
    },
    "doji": {
      "type": "yes_no",
      "ask": "doji()"
    },
    "inside": {
      "type": "yes_no",
      "ask": "H < H[-1] and L > L[-1]"
    }
  },
  "actions": [
    {
      "id": "context",
      "when": "vol >= 0.6 and flat >= 0.6",
      "do": "webhook",
      "connection": "surveillance-cases",
      "body": {
        "symbol": "{{symbol}}",
        "as_of": "{{as_of}}",
        "type": "volume_without_price_change",
        "volume_spike": "{{vol}}",
        "flat_close": "{{flat}}",
        "note": "Context only; no finding."
      }
    }
  ],
  "dry_run": true
}
Response JSON (XOM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "vol": {
      "yes_no": 0.2958,
      "rule": "V > 2 * ref(avg(V, 20), -1)",
      "basis": "rule"
    },
    "flat": {
      "yes_no": 0.0741,
      "rule": "abs(C / C[-1] - 1) < 0.003",
      "basis": "rule"
    },
    "doji": {
      "yes_no": 0.1743,
      "rule": "doji()",
      "basis": "rule"
    },
    "inside": {
      "yes_no": 0.0704,
      "rule": "H < H[-1] and L > L[-1]",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "XOM",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "context",
      "fired": false,
      "status": "skipped"
    }
  ]
}

abs avg doji offset ref

Compliance officer · example 17

Short positions over the ex-date: which names owe a dividend

Make sure short positions crossing an ex-date are charged the dividend by listing names going ex within days.

ora-fin-0.1.14 symbols, one request each4 questions1 action
  1. State4 symbols
  2. Questions4 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

{"symbol":"JNJ"} then PEP, ABBV, MO, one request each. The server fills in the latest completed session.

Questions

ex7ruledays_to_ex_div <= 7
Ex-dividend date within seven days
paysrulepays_dividend > 0.5
Pays a dividend
next_upEnglish → ruleIs the next declared dividend larger than the last one?
div2English → ruleHas the stock paid more than $2 per share in dividends over the past year?

Answers

Symbolex7rulepaysrulenext_uprulediv2ruleFired
JNJ0.05370.85910.450.9463none
PEP0.05370.85910.500.9463none
ABBV0.05370.85910.500.9463none
MO0.05370.85910.500.9463none

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.

ex7 >= 0.6→Emailcompliance-ops
JNJ 0 of 1 fired · dry run, nothing sent
PEP 0 of 1 fired · dry run, nothing sent
ABBV 0 of 1 fired · dry run, nothing sent
MO 0 of 1 fired · dry run, nothing sent

What it means

Session of 2026-10-30, 4 symbols: Ex-dividend date within seven days: true for none of 4. Pays a dividend: true for JNJ, PEP, ABBV, MO of 4. Is the next declared dividend larger than the last one: true for none of 4. Has the stock paid more than $2 per share in dividends over the past year: true for JNJ, PEP, ABBV, MO of 4. ops fired for none.

Declared ex-dates drive an operations reminder; undeclared ones answer no and send nothing.

Request JSON (JNJ; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "JNJ"
  },
  "questions": {
    "ex7": {
      "type": "yes_no",
      "ask": "days_to_ex_div <= 7"
    },
    "pays": {
      "type": "yes_no",
      "ask": "pays_dividend > 0.5"
    },
    "next_up": {
      "type": "yes_no",
      "instructions": "Is the next declared dividend larger than the last one?"
    },
    "div2": {
      "type": "yes_no",
      "instructions": "Has the stock paid more than $2 per share in dividends over the past year?"
    }
  },
  "actions": [
    {
      "id": "ops",
      "when": "ex7 >= 0.6",
      "do": "email",
      "connection": "compliance-ops",
      "subject": "{{symbol}} goes ex within 7 days",
      "message": "{{symbol}}: ex-dividend within 7 days. Confirm short positions are charged the dividend and stock loan records are current."
    }
  ],
  "dry_run": true
}
Response JSON (JNJ, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "ex7": {
      "yes_no": 0.0537,
      "rule": "days_to_ex_div <= 7",
      "basis": "rule"
    },
    "pays": {
      "yes_no": 0.8591,
      "rule": "pays_dividend > 0.5",
      "basis": "rule"
    },
    "next_up": {
      "yes_no": 0.45,
      "rule": "next_div_amount > last_div_amount",
      "basis": "pattern"
    },
    "div2": {
      "yes_no": 0.9463,
      "rule": "div_ttm > 2",
      "basis": "pattern"
    }
  },
  "context": {
    "symbol": "JNJ",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "ops",
      "fired": false,
      "status": "skipped"
    }
  ]
}

days_to_ex_div div_ttm last_div_amount next_div_amount pays_dividend

Compliance officer · example 18

Supervision check: did a trader's name break key levels?

Daily supervisory record of whether watched names crossed their 50-day or 20-day extremes, for the supervision log.

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

State

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

Questions

x_uprulecrossup(C, sma(C, 50))
Crossed above the 50-day today
x_dnrulecrossdown(C, sma(C, 50))
Crossed below the 50-day today
high20ruleC > highest(C, 20)
20-day closing breakout
low20ruleC < lowest(L, 20)
Closed under the 20-day low
sincerulebarssince(C > highest(C, 20)) > 30
More than 30 sessions since the last 20-day closing high

Answers

QuestionAnswerReading
x_up
Crossed above the 50-day today
0.05false
x_dn
Crossed below the 50-day today
0.05false
high20
20-day closing breakout
0.3146false
low20
Closed under the 20-day low
0.0744false
since
More than 30 sessions since the last 20-day closing high
0.0537false

What it means

For AAPL on the session of 2026-10-30: Not true: Crossed above the 50-day today; Crossed below the 50-day today; 20-day closing breakout; Closed under the 20-day low; More than 30 sessions since the last 20-day closing high.

The log records level events with the rule behind each, so a supervisor can see exactly what was checked.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AAPL"
  },
  "questions": {
    "x_up": {
      "type": "yes_no",
      "ask": "crossup(C, sma(C, 50))"
    },
    "x_dn": {
      "type": "yes_no",
      "ask": "crossdown(C, sma(C, 50))"
    },
    "high20": {
      "type": "yes_no",
      "ask": "C > highest(C, 20)"
    },
    "low20": {
      "type": "yes_no",
      "ask": "C < lowest(L, 20)"
    },
    "since": {
      "type": "yes_no",
      "ask": "barssince(C > highest(C, 20)) > 30"
    }
  }
}
Response JSON (AAPL, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "x_up": {
      "yes_no": 0.05,
      "rule": "crossup(C, sma(C, 50))",
      "basis": "rule"
    },
    "x_dn": {
      "yes_no": 0.05,
      "rule": "crossdown(C, sma(C, 50))",
      "basis": "rule"
    },
    "high20": {
      "yes_no": 0.3146,
      "rule": "C > highest(C, 20)",
      "basis": "rule"
    },
    "low20": {
      "yes_no": 0.0744,
      "rule": "C < lowest(L, 20)",
      "basis": "rule"
    },
    "since": {
      "yes_no": 0.0537,
      "rule": "barssince(C > highest(C, 20)) > 30",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "AAPL",
    "as_of": "2026-10-30"
  }
}

barssince crossdown crossup highest lowest sma

Compliance officer · example 19

Audit trail: store every answer with its rule

Send the full answer set for a decision to the archive, so any later review sees what the model said and why.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 50-day moving average?
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.
engulfruleengulfing_bull()
engulfing bull candle: A green body that engulfs yesterday's red body.
earnruledays_to_earnings <= 10
Reports earnings within 10 days
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
trend
Is the stock above its 50-day moving average
compiled to C > sma(C, 50)
0.7088true
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.5701on the line (true)
engulf
engulfing bull candle: A green body that engulfs yesterday's red body.
0.0643false
earn
Reports earnings within 10 days
0.0537false
up_week
Higher in a week
0.57457% · close to even

Actions

Rules on the answers decide what to send.

trend >= 0→Webhookrecords-archive
What each action would send 1 of 1 fired · dry run, nothing sent
archivewould send (dry run)Webhook → records-archive
{
  "symbol": "MSFT",
  "as_of": "2026-10-30",
  "answers": {
    "trend": {
      "type": "yes_no",
      "yes_no": 0.7088,
      "rule": "C > sma(C, 50)",
      "basis": "comparison",
      "explain": "today's close > sma50"
    },
    "hammer": {
      "type": "yes_no",
      "yes_no": 0.5701,
      "rule": "hammer()",
      "basis": "rule"
    },
    "engulf": {
      "type": "yes_no",
      "yes_no": 0.0643,
      "rule": "engulfing_bull()",
      "basis": "rule"
    },
    "earn": {
      "type": "yes_no",
      "yes_no": 0.0537,
      "rule": "days_to_earnings <= 10",
      "basis": "rule"
    },
    "up_week": {
      "type": "yes_no",
      "yes_no": 0.574
    }
  },
  "retention": "7y"
}

What it means

For MSFT on the session of 2026-10-30: True now: Is the stock above its 50-day moving average. Not true: engulfing bull candle: A green body that engulfs yesterday's red body.; Reports earnings within 10 days. On the line: hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back.. Forecasts: Higher in a week 57%. Fired: archive (Webhook → records-archive).

Rule answers carry their rule and forecasts carry none; archiving both lets reviewers tell facts from predictions.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 50-day moving average?"
    },
    "hammer": {
      "type": "yes_no",
      "ask": "hammer()"
    },
    "engulf": {
      "type": "yes_no",
      "ask": "engulfing_bull()"
    },
    "earn": {
      "type": "yes_no",
      "ask": "days_to_earnings <= 10"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  },
  "actions": [
    {
      "id": "archive",
      "when": "trend >= 0",
      "do": "webhook",
      "connection": "records-archive",
      "body": {
        "symbol": "{{symbol}}",
        "as_of": "{{as_of}}",
        "answers": "{{answers}}",
        "retention": "7y"
      }
    }
  ],
  "dry_run": true
}
Response JSON (MSFT, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.7088,
      "rule": "C > sma(C, 50)",
      "basis": "comparison"
    },
    "hammer": {
      "yes_no": 0.5701,
      "rule": "hammer()",
      "basis": "rule"
    },
    "engulf": {
      "yes_no": 0.0643,
      "rule": "engulfing_bull()",
      "basis": "rule"
    },
    "earn": {
      "yes_no": 0.0537,
      "rule": "days_to_earnings <= 10",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.574
    }
  },
  "context": {
    "symbol": "MSFT",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "archive",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "records-archive",
      "preview": {
        "body": {
          "symbol": "MSFT",
          "as_of": "2026-10-30",
          "answers": {
            "trend": {
              "type": "yes_no",
              "yes_no": 0.7088,
              "rule": "C > sma(C, 50)",
              "basis": "comparison",
              "explain": "today's close > sma50"
            },
            "hammer": {
              "type": "yes_no",
              "yes_no": 0.5701,
              "rule": "hammer()",
              "basis": "rule"
            },
            "engulf": {
              "type": "yes_no",
              "yes_no": 0.0643,
              "rule": "engulfing_bull()",
              "basis": "rule"
            },
            "earn": {
              "type": "yes_no",
              "yes_no": 0.0537,
              "rule": "days_to_earnings <= 10",
              "basis": "rule"
            },
            "up_week": {
              "type": "yes_no",
              "yes_no": 0.574
            }
          },
          "retention": "7y"
        }
      }
    }
  ]
}

days_to_earnings engulfing_bull hammer sma

Compliance officer · example 20

Crypto ETF statements in client emails: verify before sending

Check statements like 'bitcoin ETFs are in an uptrend' against the data for IBIT and ETHA before approval.

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

State

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

Questions

above200English → ruleIs the stock above its 200-day moving average?
above50English → ruleIs the stock above its 50-day moving average?
ddEnglish → ruleIs the stock more than 20% below its 52-week high?
hvrulestd(log(C / C[-1]), 20) * sqrt(252) > 0.4
Annualized 20-day volatility above 40%

Answers

Symbolabove200ruleabove50ruleddrulehvrule
IBIT0.72340.16490.90820.1239
ETHA0.5850.12630.94410.3361

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: Is the stock above its 200-day moving average: true for IBIT of 2. Is the stock above its 50-day moving average: true for none of 2. Is the stock more than 20% below its 52-week high: true for IBIT, ETHA of 2. Annualized 20-day volatility above 40%: true for none of 2.

If the data does not support the statement, the email is revised before it reaches clients.

Request JSON (IBIT; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "IBIT"
  },
  "questions": {
    "above200": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "above50": {
      "type": "yes_no",
      "instructions": "Is the stock above its 50-day moving average?"
    },
    "dd": {
      "type": "yes_no",
      "instructions": "Is the stock more than 20% below its 52-week high?"
    },
    "hv": {
      "type": "yes_no",
      "ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4"
    }
  }
}
Response JSON (IBIT, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "above200": {
      "yes_no": 0.7234,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "above50": {
      "yes_no": 0.1649,
      "rule": "C > sma(C, 50)",
      "basis": "comparison"
    },
    "dd": {
      "yes_no": 0.9082,
      "rule": "C < max(H, 252) * 0.8",
      "basis": "comparison"
    },
    "hv": {
      "yes_no": 0.1239,
      "rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "IBIT",
    "as_of": "2026-10-30"
  }
}

log max offset sma 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 Sell side: Equity research analyst, Sell-side sales trader, Execution trader / desk, Market maker, Prop trading firm.

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