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

Bank credit analyst: 20 ways to use Ora

Equity signals as early credit warnings: drawdowns, dividend cuts, misses and volatility. Each example is a complete, runnable request with the real answers it returned (45 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 (47)

sma 12offset 9max 6ref 4cut_last 3div_yield_ttm 3lowest 3log 3sqrt 3std 3swinghigh 2swinglow 2eps_year_ago 2last_eps 2miss_eps_last 2misses_last4 2zscore 2evening_star 2min 2abs 2avg 1div_change_pct 1pays_dividend 1miss_revenue_last 1atr 1three_black_crows 1atr_pct 1adx 1crossdown 1diminus 1diplus 1beat_revenue_last 1days_since_earnings 1last_earnings_move 1crossup 1dragonfly_doji 1days_to_earnings 1next_report_bmo 1least 1percentrank 1shooting_star 1raised_last 1years_of_growth 1linreg 1greatest 1rsi 1tweezer_top 1

Examples 1–10 of 20 · page 1 of 2

Bank credit analyst · example 1

Credit analyst: early-warning check on F (Ford) from its stock

A lender's analyst reads the borrower's equity as an early warning: deep drawdowns, a downtrend and selling on volume.

ora-fin-0.1.1F5 questions2 actions
  1. StateF
  2. Questions5 asked
  3. Answersreal, captured
  4. Actions2 rules · dry run

State

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

Questions

bearEnglish → ruleIs the stock in bear-market territory, more than 20% below its 52-week high?
below200English → ruleIs the stock below its 200-day moving average?
lh_llEnglish → ruleIs the stock making lower swing highs and lower swing lows?
down_volruleC < C[-1] and V > 1.5 * ref(avg(V, 20), -1)
Down on heavy volume
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

QuestionAnswerReading
bear
Is the stock in bear-market territory, more than 20% below its 52-week high
compiled to C < 0.8 * max(H, 252)
0.9309true
below200
Is the stock below its 200-day moving average
compiled to C < sma(C, 200)
0.8543true
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.7551true
down_vol
Down on heavy volume
0.1432false
drop10
A 10% drawdown within a month
0.53253% · close to even

Actions

Rules on the answers decide what to send.

bear >= 0.6 and lh_ll >= 0.6→Webhookcredit-watchlist
else→Slackcredit-desk
What each action would send 1 of 2 fired · dry run, nothing sent
watchlistwould send (dry run)Webhook → credit-watchlist
{
  "obligor": "F",
  "as_of": "2026-10-30",
  "signal": "equity_downtrend",
  "p_bear_market": 0.9309,
  "p_lower_highs_lows": 0.7551,
  "p_drop10": 0.532,
  "suggested_review": "early"
}
monitorrule false: skipped

What it means

For F on the session of 2026-10-30: True now: Is the stock in bear-market territory, more than 20% below its 52-week high; Is the stock below its 200-day moving average; Is the stock making lower swing highs and lower swing lows. Not true: Down on heavy volume. Forecasts: A 10% drawdown within a month 53%. Fired: watchlist (Webhook → credit-watchlist).

Equity weakness often leads ratings changes; a flag moves the obligor's next review earlier, it does not change the rating by itself.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "F"
  },
  "questions": {
    "bear": {
      "type": "yes_no",
      "instructions": "Is the stock in bear-market territory, more than 20% below its 52-week high?"
    },
    "below200": {
      "type": "yes_no",
      "instructions": "Is the stock below its 200-day moving average?"
    },
    "lh_ll": {
      "type": "yes_no",
      "instructions": "Is the stock making lower swing highs and lower swing lows?"
    },
    "down_vol": {
      "type": "yes_no",
      "ask": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "watchlist",
      "when": "bear >= 0.6 and lh_ll >= 0.6",
      "do": "webhook",
      "connection": "credit-watchlist",
      "body": {
        "obligor": "{{symbol}}",
        "as_of": "{{as_of}}",
        "signal": "equity_downtrend",
        "p_bear_market": "{{bear}}",
        "p_lower_highs_lows": "{{lh_ll}}",
        "p_drop10": "{{drop10}}",
        "suggested_review": "early"
      }
    },
    {
      "id": "monitor",
      "when": "else",
      "do": "slack",
      "connection": "credit-desk",
      "message": "{{symbol}} ({{as_of}}): no combined equity warning (bear {{bear|pct}}, lower highs/lows {{lh_ll|pct}})."
    }
  ],
  "dry_run": true
}
Response JSON (F, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "bear": {
      "yes_no": 0.9309,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "pattern"
    },
    "below200": {
      "yes_no": 0.8543,
      "rule": "C < sma(C, 200)",
      "basis": "comparison"
    },
    "lh_ll": {
      "yes_no": 0.7551,
      "rule": "(swinghigh(5, 1) < swinghigh(5, 2)) and (swinglow(5, 1) < swinglow(5, 2))",
      "basis": "pattern"
    },
    "down_vol": {
      "yes_no": 0.1432,
      "rule": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)",
      "basis": "rule"
    },
    "drop10": {
      "yes_no": 0.532
    }
  },
  "context": {
    "symbol": "F",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "watchlist",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "credit-watchlist",
      "preview": {
        "body": {
          "obligor": "F",
          "as_of": "2026-10-30",
          "signal": "equity_downtrend",
          "p_bear_market": 0.9309,
          "p_lower_highs_lows": 0.7551,
          "p_drop10": 0.532,
          "suggested_review": "early"
        }
      }
    },
    {
      "id": "monitor",
      "fired": false,
      "status": "skipped"
    }
  ]
}

avg max offset ref sma swinghigh swinglow

Bank credit analyst · example 2

Credit analyst: dividend cuts across borrowers

A dividend cut is a classic sign of cash stress; check the latest payment change for several borrowers at once.

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

State

{"symbol":"INTC"} then T, VZ, MMM, PFE, one request each. The server fills in the latest completed session.

Questions

cutEnglish → ruleDid the stock cut its dividend last time?
paysrulepays_dividend > 0.5
Pays a dividend
changerulediv_change_pct < -10
Last payment more than 10% below the one before
yield_highrulediv_yield_ttm > 6
Trailing yield above 6%

Answers

Symbolcutrulepaysrulechangeruleyield_highrule
INTC0.14090.14090.06830.0537
T0.14090.85910.06830.0537
VZ0.14090.85910.06830.7708
MMM0.14090.85910.06830.0537
PFE0.14090.85910.06830.0537

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

What it means

Session of 2026-10-30, 5 symbols: Did the stock cut its dividend last time: true for none of 5. Pays a dividend: true for T, VZ, MMM, PFE of 5. Last payment more than 10% below the one before: true for none of 5. Trailing yield above 6%: true for VZ of 5.

A cut or a very high trailing yield (the market doubting the payout) puts the name on the cash-flow review list.

Request JSON (INTC; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "INTC"
  },
  "questions": {
    "cut": {
      "type": "yes_no",
      "instructions": "Did the stock cut its dividend last time?"
    },
    "pays": {
      "type": "yes_no",
      "ask": "pays_dividend > 0.5"
    },
    "change": {
      "type": "yes_no",
      "ask": "div_change_pct < -10"
    },
    "yield_high": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 6"
    }
  }
}
Response JSON (INTC, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "cut": {
      "yes_no": 0.1409,
      "rule": "cut_last > 0.5",
      "basis": "pattern"
    },
    "pays": {
      "yes_no": 0.1409,
      "rule": "pays_dividend > 0.5",
      "basis": "rule"
    },
    "change": {
      "yes_no": 0.0683,
      "rule": "div_change_pct < -10",
      "basis": "rule"
    },
    "yield_high": {
      "yes_no": 0.0537,
      "rule": "div_yield_ttm > 6",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "INTC",
    "as_of": "2026-10-30"
  }
}

cut_last div_change_pct div_yield_ttm pays_dividend

Bank credit analyst · example 3

Credit analyst: is BA missing estimates repeatedly?

Repeated earnings misses and negative EPS weaken coverage ratios; check the record before the annual review.

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

State

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

Questions

missEnglish → ruleDid the stock miss EPS estimates last quarter?
any_missEnglish → ruleHas the stock missed EPS estimates in any of the last 4 quarters?
negrulelast_eps < 0
Last quarter's EPS was negative
rev_missrulemiss_revenue_last > 0.5
Revenue missed estimates last quarter
eps_downrulelast_eps < eps_year_ago
EPS down year over year
beat_nextforecastWill the stock beat earnings next quarter?
Beating earnings next quarter

Answers

QuestionAnswerReading
miss
Did the stock miss EPS estimates last quarter
compiled to miss_eps_last > 0.5
0.8591true
any_miss
Has the stock missed EPS estimates in any of the last 4 quarters
compiled to misses_last4 >= 1
0.8591true
neg
Last quarter's EPS was negative
0.9463true
rev_miss
Revenue missed estimates last quarter
0.1409false
eps_down
EPS down year over year
0.0537false
beat_next
Beating earnings next quarter
0.35135% · unlikely

Actions

Rules on the answers decide what to send.

neg >= 0.6 or (miss >= 0.6 and eps_down >= 0.6)→Emailcredit-committee
What each action would send 1 of 1 fired · dry run, nothing sent
reviewwould send (dry run)Email → credit-committee
{
  "subject": "BA: earnings weakness (2026-10-30)",
  "text": "BA: negative EPS 95%, missed last quarter 86%, EPS down year over year 5%. Recheck covenant headroom."
}

What it means

For BA on the session of 2026-10-30: True now: Did the stock miss EPS estimates last quarter; Has the stock missed EPS estimates in any of the last 4 quarters; Last quarter's EPS was negative. Not true: Revenue missed estimates last quarter; EPS down year over year. Forecasts: Beating earnings next quarter 35%. Fired: review (Email → credit-committee).

Earnings facts are what lenders already see in filings; the alert simply makes sure nobody waits for the next quarterly package.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "BA"
  },
  "questions": {
    "miss": {
      "type": "yes_no",
      "instructions": "Did the stock miss EPS estimates last quarter?"
    },
    "any_miss": {
      "type": "yes_no",
      "instructions": "Has the stock missed EPS estimates in any of the last 4 quarters?"
    },
    "neg": {
      "type": "yes_no",
      "ask": "last_eps < 0"
    },
    "rev_miss": {
      "type": "yes_no",
      "ask": "miss_revenue_last > 0.5"
    },
    "eps_down": {
      "type": "yes_no",
      "ask": "last_eps < eps_year_ago"
    },
    "beat_next": {
      "type": "yes_no",
      "instructions": "Will the stock beat earnings next quarter?"
    }
  },
  "actions": [
    {
      "id": "review",
      "when": "neg >= 0.6 or (miss >= 0.6 and eps_down >= 0.6)",
      "do": "email",
      "connection": "credit-committee",
      "subject": "{{symbol}}: earnings weakness ({{as_of}})",
      "message": "{{symbol}}: negative EPS {{neg|pct}}, missed last quarter {{miss|pct}}, EPS down year over year {{eps_down|pct}}. Recheck covenant headroom."
    }
  ],
  "dry_run": true
}
Response JSON (BA, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "miss": {
      "yes_no": 0.8591,
      "rule": "miss_eps_last > 0.5",
      "basis": "pattern"
    },
    "any_miss": {
      "yes_no": 0.8591,
      "rule": "misses_last4 >= 1",
      "basis": "pattern"
    },
    "neg": {
      "yes_no": 0.9463,
      "rule": "last_eps < 0",
      "basis": "rule"
    },
    "rev_miss": {
      "yes_no": 0.1409,
      "rule": "miss_revenue_last > 0.5",
      "basis": "rule"
    },
    "eps_down": {
      "yes_no": 0.0537,
      "rule": "last_eps < eps_year_ago",
      "basis": "rule"
    },
    "beat_next": {
      "yes_no": 0.351
    }
  },
  "context": {
    "symbol": "BA",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "review",
      "fired": true,
      "status": "dry_run",
      "do": "email",
      "connection": "credit-committee",
      "preview": {
        "subject": "BA: earnings weakness (2026-10-30)",
        "text": "BA: negative EPS 95%, missed last quarter 86%, EPS down year over year 5%. Recheck covenant headroom."
      }
    }
  ]
}

eps_year_ago last_eps miss_eps_last miss_revenue_last misses_last4

Bank credit analyst · example 4

Credit analyst: is the high-yield market (HYG, JNK) under stress?

Read the junk-bond ETFs for breakdowns, volatility and big down days as a gauge of credit appetite.

ora-fin-0.1.12 symbols, one request each6 questions1 action
  1. State2 symbols
  2. Questions6 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

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

Questions

breakdownruleC < lowest(L, 20)
Closed under the 20-day low
below50English → ruleIs the stock more than 5% below its 50-day moving average?
atrruleatr(14) > 1.2 * ref(atr(14), -10)
ATR up 20% in two weeks
shockrulezscore(C / C[-1] - 1, 20) < -2
A two-sigma down day
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month
vol_upforecastWill volatility be higher over the next month?
Higher volatility next month

Answers

Symbolbreakdownrulebelow50ruleatrruleshockruledrop5forecastvol_upforecastFired
HYG0.08110.05370.07770.14370.0090.476none
JNK0.08130.05370.07580.14540.0110.524none

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.

breakdown >= 0.6 or shock >= 0.6→Webhookteams-credit
HYG 0 of 1 fired · dry run, nothing sent
JNK 0 of 1 fired · dry run, nothing sent

What it means

Session of 2026-10-30, 2 symbols: Closed under the 20-day low: true for none of 2. Is the stock more than 5% below its 50-day moving average: true for none of 2. ATR up 20% in two weeks: true for none of 2. A two-sigma down day: true for none of 2. Highest odds for “A 5% drawdown within a month”: JNK at 1%. hy_stress fired for none.

Junk-bond ETFs breaking down usually precede wider spreads on new loans; pricing desks get the heads-up.

Request JSON (HYG; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "HYG"
  },
  "questions": {
    "breakdown": {
      "type": "yes_no",
      "ask": "C < lowest(L, 20)"
    },
    "below50": {
      "type": "yes_no",
      "instructions": "Is the stock more than 5% below its 50-day moving average?"
    },
    "atr": {
      "type": "yes_no",
      "ask": "atr(14) > 1.2 * ref(atr(14), -10)"
    },
    "shock": {
      "type": "yes_no",
      "ask": "zscore(C / C[-1] - 1, 20) < -2"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will volatility be higher over the next month?"
    }
  },
  "actions": [
    {
      "id": "hy_stress",
      "when": "breakdown >= 0.6 or shock >= 0.6",
      "do": "webhook",
      "connection": "teams-credit",
      "body": {
        "text": "{{symbol}} ({{as_of}}): high-yield stress. 20-day breakdown {{breakdown|pct}}, return shock {{shock|pct}}, 5% drawdown odds {{drop5|pct}}."
      }
    }
  ],
  "dry_run": true
}
Response JSON (HYG, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "breakdown": {
      "yes_no": 0.0811,
      "rule": "C < lowest(L, 20)",
      "basis": "rule"
    },
    "below50": {
      "yes_no": 0.0537,
      "rule": "C < sma(C, 50) * 0.95",
      "basis": "comparison"
    },
    "atr": {
      "yes_no": 0.0777,
      "rule": "atr(14) > 1.2 * ref(atr(14), -10)",
      "basis": "rule"
    },
    "shock": {
      "yes_no": 0.1437,
      "rule": "zscore(C / C[-1] - 1, 20) < -2",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.009
    },
    "vol_up": {
      "yes_no": 0.476
    }
  },
  "context": {
    "symbol": "HYG",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "hy_stress",
      "fired": false,
      "status": "skipped"
    }
  ]
}

atr lowest offset ref sma zscore

Bank credit analyst · example 5

Credit analyst: investment grade (LQD) vs high yield (HYG)

Compare the two credit ETFs to see whether stress is confined to lower-rated borrowers.

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

State

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

Questions

trendruleC > sma(C, 50)
Above the 50-day average
lowestruleC < lowest(C, 20)
Closed under every close of the last 20 sessions
zsrulezscore(C, 20) < -1.5
More than 1.5 standard deviations under its 20-day mean
sma50_fallingEnglish → ruleIs the 50-day moving average falling, lower than 5 sessions ago?
down_weekforecastWill the stock be lower in a week?
Lower in a week

Answers

Symboltrendrulelowestrulezsrulesma50_fallingruledown_weekforecast
LQD0.65520.05370.06420.92270.476
HYG0.19140.08510.07460.91440.425

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: Above the 50-day average: true for LQD of 2. Closed under every close of the last 20 sessions: true for none of 2. More than 1.5 standard deviations under its 20-day mean: true for none of 2. Is the 50-day moving average falling, lower than 5 sessions ago: true for LQD, HYG of 2. Highest odds for “Lower in a week”: LQD at 48%.

If HYG weakens while LQD holds, stress is concentrated in lower ratings; the analyst prioritises reviews of sub-investment-grade obligors.

Request JSON (LQD; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "LQD"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "lowest": {
      "type": "yes_no",
      "ask": "C < lowest(C, 20)"
    },
    "zs": {
      "type": "yes_no",
      "ask": "zscore(C, 20) < -1.5"
    },
    "sma50_falling": {
      "type": "yes_no",
      "instructions": "Is the 50-day moving average falling, lower than 5 sessions ago?"
    },
    "down_week": {
      "type": "yes_no",
      "instructions": "Will the stock be lower in a week?"
    }
  }
}
Response JSON (LQD, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.6552,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "lowest": {
      "yes_no": 0.0537,
      "rule": "C < lowest(C, 20)",
      "basis": "rule"
    },
    "zs": {
      "yes_no": 0.0642,
      "rule": "zscore(C, 20) < -1.5",
      "basis": "rule"
    },
    "sma50_falling": {
      "yes_no": 0.9227,
      "rule": "sma(C, 50) < ref(sma(C, 50), -5)",
      "basis": "pattern"
    },
    "down_week": {
      "yes_no": 0.476
    }
  },
  "context": {
    "symbol": "LQD",
    "as_of": "2026-10-30"
  }
}

lowest ref sma zscore

Bank credit analyst · example 6

Credit analyst: regional banks (KRE) vs big banks (XLF)

Interbank and counterparty analysts compare regional and large-bank ETFs for signs of sector stress.

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

State

{"symbol":"KRE"} then KBE, XLF, one request each. The server fills in the latest completed session.

Questions

drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
below200English → ruleIs the stock below its 200-day moving average?
crowsrulethree_black_crows()
three black crows candle: Three red bars, each closing lower and opening inside the previous body.
big_downEnglish → ruleDid the stock fall more than 3% today?
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

Symboldrawdownrulebelow200rulecrowsrulebig_downruledrop10forecast
KRE0.05370.28810.13450.07350.309
KBE0.05370.33550.10690.07020.302
XLF0.05370.0810.07350.05510.199

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: More than 20% off the 52-week high: true for none of 3. Is the stock below its 200-day moving average: true for none of 3. three black crows candle: Three red bars, each closing lower and opening inside the previous body.: true for none of 3. Did the stock fall more than 3% today: true for none of 3. Highest odds for “A 10% drawdown within a month”: KRE at 31%.

Regional-bank weakness that the large-bank ETF does not share points to funding or real-estate stress at smaller lenders.

Request JSON (KRE; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "KRE"
  },
  "questions": {
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "below200": {
      "type": "yes_no",
      "instructions": "Is the stock below its 200-day moving average?"
    },
    "crows": {
      "type": "yes_no",
      "ask": "three_black_crows()"
    },
    "big_down": {
      "type": "yes_no",
      "instructions": "Did the stock fall more than 3% today?"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  }
}
Response JSON (KRE, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "drawdown": {
      "yes_no": 0.0537,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "below200": {
      "yes_no": 0.2881,
      "rule": "C < sma(C, 200)",
      "basis": "comparison"
    },
    "crows": {
      "yes_no": 0.1345,
      "rule": "three_black_crows()",
      "basis": "rule"
    },
    "big_down": {
      "yes_no": 0.0735,
      "rule": "C / C[-1] - 1 < -0.03",
      "basis": "pattern"
    },
    "drop10": {
      "yes_no": 0.309
    }
  },
  "context": {
    "symbol": "KRE",
    "as_of": "2026-10-30"
  }
}

max offset sma three_black_crows

Bank credit analyst · example 7

Credit analyst: is CCL's equity volatility rising?

Equity volatility feeds structural credit models; a jump raises the implied default risk of the borrower.

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

State

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

Questions

hvrulestd(log(C / C[-1]), 20) * sqrt(252) > 0.4
Annualized 20-day volatility above 40%
vol5English → ruleIs 5-day volatility higher than 20-day volatility?
atr3ruleatr_pct(14) > 3
A typical day moves more than 3%
log_volrulestd(log(C / C[-1]), 60) * sqrt(252) > 0.5
60-day annualized volatility above 50%
vol_upforecastWill volatility be higher over the next month?
Higher volatility next month
hv30forecastWill annualized volatility over the next 21 sessions exceed 30%?
Next-month volatility above 30%

Answers

QuestionAnswerReading
hv
Annualized 20-day volatility above 40%
0.1724false
vol5
Is 5-day volatility higher than 20-day volatility
compiled to std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19)
0.2056false
atr3
A typical day moves more than 3%
0.8723true
log_vol
60-day annualized volatility above 50%
0.061false
vol_up
Higher volatility next month
0.36637% · unlikely
hv30
Next-month volatility above 30%
0.39239% · unlikely

Actions

Rules on the answers decide what to send.

hv >= 0.6 or vol_up >= 0.6→Webhookcredit-models
What each action would send 0 of 1 fired · dry run, nothing sent
model_inputrule false: skipped

What it means

For CCL on the session of 2026-10-30: True now: A typical day moves more than 3%. Not true: Annualized 20-day volatility above 40%; Is 5-day volatility higher than 20-day volatility; 60-day annualized volatility above 50%. Forecasts: Higher volatility next month 37%; Next-month volatility above 30% 39%. No action fired: every rule was false.

Rising equity volatility pushes structural default probabilities up; the analyst refreshes the internal model input.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "CCL"
  },
  "questions": {
    "hv": {
      "type": "yes_no",
      "ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4"
    },
    "vol5": {
      "type": "yes_no",
      "instructions": "Is 5-day volatility higher than 20-day volatility?"
    },
    "atr3": {
      "type": "yes_no",
      "ask": "atr_pct(14) > 3"
    },
    "log_vol": {
      "type": "yes_no",
      "ask": "std(log(C / C[-1]), 60) * sqrt(252) > 0.5"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will volatility be higher over the next month?"
    },
    "hv30": {
      "type": "yes_no",
      "instructions": "Will annualized volatility over the next 21 sessions exceed 30%?"
    }
  },
  "actions": [
    {
      "id": "model_input",
      "when": "hv >= 0.6 or vol_up >= 0.6",
      "do": "webhook",
      "connection": "credit-models",
      "body": {
        "obligor": "{{symbol}}",
        "as_of": "{{as_of}}",
        "input": "equity_vol_regime",
        "p_hv_above_40": "{{hv}}",
        "p_hv60_above_50": "{{log_vol}}",
        "p_vol_higher_next_month": "{{vol_up}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (CCL, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "hv": {
      "yes_no": 0.1724,
      "rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4",
      "basis": "rule"
    },
    "vol5": {
      "yes_no": 0.2056,
      "rule": "std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19)",
      "basis": "pattern"
    },
    "atr3": {
      "yes_no": 0.8723,
      "rule": "atr_pct(14) > 3",
      "basis": "rule"
    },
    "log_vol": {
      "yes_no": 0.061,
      "rule": "std(log(C / C[-1]), 60) * sqrt(252) > 0.5",
      "basis": "rule"
    },
    "vol_up": {
      "yes_no": 0.366
    },
    "hv30": {
      "yes_no": 0.392
    }
  },
  "context": {
    "symbol": "CCL",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "model_input",
      "fired": false,
      "status": "skipped"
    }
  ]
}

atr_pct log offset sqrt std

Bank credit analyst · example 8

A daily obligor equity scan for the credit desk

Every weekday after the close, scan listed borrowers for a new 52-week low or a large drop.

ora-fin-0.1.15 symbols, one request each3 questions1 actionworkflow · Mon–Fri at 16:45 ET
  1. ScheduleMon–Fri at 16:45 ET
  2. State5 symbols
  3. Questions3 asked
  4. Answersreal, captured
  5. Actions1 rule · dry run

State

{"symbol":"F"} then GM, AAL, CCL, PFE, one request each. The server fills in the latest completed session.

Questions

new_lowruleL < lowest(L, 252)
New 52-week low today
big_downEnglish → ruleDid the stock fall more than 3% today?
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

Symbolnew_lowrulebig_downruledrop10forecastFired
F0.10560.12810.532none
GM0.05380.06320.525none
AAL0.06050.19280.648none
CCL0.05370.12640.458none
PFE0.05370.05370.418none

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.

new_low >= 0.6 or big_down >= 0.6→Webhookcredit-watchlist
F 0 of 1 fired · dry run, nothing sent
GM 0 of 1 fired · dry run, nothing sent
AAL 0 of 1 fired · dry run, nothing sent
CCL 0 of 1 fired · dry run, nothing sent
PFE 0 of 1 fired · dry run, nothing sent

What it means

Session of 2026-10-30, 5 symbols: New 52-week low today: true for none of 5. Did the stock fall more than 3% today: true for none of 5. Highest odds for “A 10% drawdown within a month”: AAL at 65%. obligor_flag fired for none.

Only names with a fresh low or a big down day reach the watchlist system, so the queue stays short.

As a scheduled workflow (Mon–Fri at 16:45 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 daily obligor equity scan for the credit desk",
  "symbols": "F GM AAL CCL PFE",
  "days": [
    1,
    2,
    3,
    4,
    5
  ],
  "at_time": "16:45",
  "model": "ora-fin-0.1.1",
  "questions": {
    "new_low": {
      "type": "yes_no",
      "ask": "L < lowest(L, 252)"
    },
    "big_down": {
      "type": "yes_no",
      "instructions": "Did the stock fall more than 3% today?"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "obligor_flag",
      "when": "new_low >= 0.6 or big_down >= 0.6",
      "do": "webhook",
      "connection": "credit-watchlist",
      "body": {
        "obligor": "{{symbol}}",
        "as_of": "{{as_of}}",
        "signal": "equity_new_low_or_drop",
        "p_new_52w_low": "{{new_low}}",
        "p_down_3pct": "{{big_down}}",
        "p_drop10": "{{drop10}}"
      }
    }
  ]
}
Request JSON (F; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "F"
  },
  "questions": {
    "new_low": {
      "type": "yes_no",
      "ask": "L < lowest(L, 252)"
    },
    "big_down": {
      "type": "yes_no",
      "instructions": "Did the stock fall more than 3% today?"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "obligor_flag",
      "when": "new_low >= 0.6 or big_down >= 0.6",
      "do": "webhook",
      "connection": "credit-watchlist",
      "body": {
        "obligor": "{{symbol}}",
        "as_of": "{{as_of}}",
        "signal": "equity_new_low_or_drop",
        "p_new_52w_low": "{{new_low}}",
        "p_down_3pct": "{{big_down}}",
        "p_drop10": "{{drop10}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (F, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "new_low": {
      "yes_no": 0.1056,
      "rule": "L < lowest(L, 252)",
      "basis": "rule"
    },
    "big_down": {
      "yes_no": 0.1281,
      "rule": "C / C[-1] - 1 < -0.03",
      "basis": "pattern"
    },
    "drop10": {
      "yes_no": 0.532
    }
  },
  "context": {
    "symbol": "F",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "obligor_flag",
      "fired": false,
      "status": "skipped"
    }
  ]
}

lowest offset

Bank credit analyst · example 9

Credit analyst: commercial real estate stress through VNQ and REITs

A CRE lender watches the REIT ETF and large REITs for breakdowns that often precede valuation write-downs.

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

State

{"symbol":"VNQ"} then SPG, O, one request each. The server fills in the latest completed session.

Questions

below200English → ruleIs the stock below its 200-day moving average?
drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
yieldrulediv_yield_ttm > 5
Trailing dividend yield above 5%
cutEnglish → ruleDid the stock cut its dividend last time?
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symbolbelow200ruledrawdownruleyieldrulecutruledrop5forecast
VNQ0.37150.05370.05370.85910.218
SPG0.08780.05370.05370.14090.325
O0.85730.10050.93960.14090.313

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: Is the stock below its 200-day moving average: true for O of 3. More than 20% off the 52-week high: true for none of 3. Trailing dividend yield above 5%: true for O of 3. Did the stock cut its dividend last time: true for VNQ of 3. Highest odds for “A 5% drawdown within a month”: SPG at 33%.

REIT prices move before appraisals do; a breakdown prompts a fresh look at loan-to-value assumptions.

Request JSON (VNQ; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VNQ"
  },
  "questions": {
    "below200": {
      "type": "yes_no",
      "instructions": "Is the stock below its 200-day moving average?"
    },
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "yield": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 5"
    },
    "cut": {
      "type": "yes_no",
      "instructions": "Did the stock cut its dividend last time?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}
Response JSON (VNQ, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "below200": {
      "yes_no": 0.3715,
      "rule": "C < sma(C, 200)",
      "basis": "comparison"
    },
    "drawdown": {
      "yes_no": 0.0537,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "yield": {
      "yes_no": 0.0537,
      "rule": "div_yield_ttm > 5",
      "basis": "rule"
    },
    "cut": {
      "yes_no": 0.8591,
      "rule": "cut_last > 0.5",
      "basis": "pattern"
    },
    "drop5": {
      "yes_no": 0.218
    }
  },
  "context": {
    "symbol": "VNQ",
    "as_of": "2026-10-30"
  }
}

cut_last div_yield_ttm max sma

Bank credit analyst · example 10

Credit analyst: is OXY's equity confirming oil weakness?

For an energy borrower, check the stock and the oil price proxy together.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 50-day moving average?
dcrulecrossdown(C, sma(C, 50))
Crossed below its 50-day today
adx_downruleadx(14) > 20 and diminus(14) > diplus(14)
Trending down (ADX over 20, minus DI above plus DI)
eveningruleevening_star()
evening star candle: A green bar, a small bar that stays above its close, then a red bar closing below the middle of the first.
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

Symboltrendruledcruleadx_downruleeveningruledrop10forecast
OXY0.91730.050.15290.21290.448
USO0.94340.050.06980.05460.615

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 50-day moving average: true for OXY, USO of 2. Crossed below its 50-day today: true for none of 2. Trending down (ADX over 20, minus DI above plus DI): true for none of 2. evening star candle: A green bar, a small bar that stays above its close, then a red bar closing below the middle of the first.: true for none of 2. Highest odds for “A 10% drawdown within a month”: USO at 62%.

When the borrower and oil trend down together, borrowing-base redeterminations deserve an early look.

Request JSON (OXY; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "OXY"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 50-day moving average?"
    },
    "dc": {
      "type": "yes_no",
      "ask": "crossdown(C, sma(C, 50))"
    },
    "adx_down": {
      "type": "yes_no",
      "ask": "adx(14) > 20 and diminus(14) > diplus(14)"
    },
    "evening": {
      "type": "yes_no",
      "ask": "evening_star()"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  }
}
Response JSON (OXY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.9173,
      "rule": "C > sma(C, 50)",
      "basis": "comparison"
    },
    "dc": {
      "yes_no": 0.05,
      "rule": "crossdown(C, sma(C, 50))",
      "basis": "rule"
    },
    "adx_down": {
      "yes_no": 0.1529,
      "rule": "adx(14) > 20 and diminus(14) > diplus(14)",
      "basis": "rule"
    },
    "evening": {
      "yes_no": 0.2129,
      "rule": "evening_star()",
      "basis": "rule"
    },
    "drop10": {
      "yes_no": 0.448
    }
  },
  "context": {
    "symbol": "OXY",
    "as_of": "2026-10-30"
  }
}

adx crossdown diminus diplus evening_star sma

Information, not investment advice. Rules answer from the latest completed daily session; forecasts are probabilities. Actions ran as dry runs: nothing was sent. More in Corporates: Investor relations team, Corporate treasury, CFO office, Financial journalist / media.

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