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.
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.
- StateF
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"F"} The server fills in the latest completed session.
Questions
bear | English → rule | Is the stock in bear-market territory, more than 20% below its 52-week high? |
below200 | English → rule | Is the stock below its 200-day moving average? |
lh_ll | English → rule | Is the stock making lower swing highs and lower swing lows? |
down_vol | rule | C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)Down on heavy volume |
drop10 | forecast | Will it drop at least 10% at some point in the next month? A 10% drawdown within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
bearIs the stock in bear-market territory, more than 20% below its 52-week high compiled to C < 0.8 * max(H, 252) | 0.9309 | true |
below200Is the stock below its 200-day moving average compiled to C < sma(C, 200) | 0.8543 | true |
lh_llIs the stock making lower swing highs and lower swing lows compiled to (swinghigh(5, 1) < swinghigh(5, 2)) and (swinglow(5, 1) < swinglow(5, 2)) | 0.7551 | true |
down_volDown on heavy volume | 0.1432 | false |
drop10A 10% drawdown within a month | 0.532 | 53% · close to even |
Actions
Rules on the answers decide what to send.
bear >= 0.6 and lh_ll >= 0.6→Webhookcredit-watchlistelse→Slackcredit-desk{
"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"
}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"
}
]
}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.
- State5 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"INTC"} then T, VZ, MMM, PFE, one request each. The server fills in the latest completed session.
Questions
cut | English → rule | Did the stock cut its dividend last time? |
pays | rule | pays_dividend > 0.5Pays a dividend |
change | rule | div_change_pct < -10Last payment more than 10% below the one before |
yield_high | rule | div_yield_ttm > 6Trailing yield above 6% |
Answers
| Symbol | cutrule | paysrule | changerule | yield_highrule |
|---|---|---|---|---|
INTC | 0.1409 | 0.1409 | 0.0683 | 0.0537 |
T | 0.1409 | 0.8591 | 0.0683 | 0.0537 |
VZ | 0.1409 | 0.8591 | 0.0683 | 0.7708 |
MMM | 0.1409 | 0.8591 | 0.0683 | 0.0537 |
PFE | 0.1409 | 0.8591 | 0.0683 | 0.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"
}
}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.
- StateBA
- Questions6 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"BA"} The server fills in the latest completed session.
Questions
miss | English → rule | Did the stock miss EPS estimates last quarter? |
any_miss | English → rule | Has the stock missed EPS estimates in any of the last 4 quarters? |
neg | rule | last_eps < 0Last quarter's EPS was negative |
rev_miss | rule | miss_revenue_last > 0.5Revenue missed estimates last quarter |
eps_down | rule | last_eps < eps_year_agoEPS down year over year |
beat_next | forecast | Will the stock beat earnings next quarter? Beating earnings next quarter |
Answers
| Question | Answer | Reading |
|---|---|---|
missDid the stock miss EPS estimates last quarter compiled to miss_eps_last > 0.5 | 0.8591 | true |
any_missHas the stock missed EPS estimates in any of the last 4 quarters compiled to misses_last4 >= 1 | 0.8591 | true |
negLast quarter's EPS was negative | 0.9463 | true |
rev_missRevenue missed estimates last quarter | 0.1409 | false |
eps_downEPS down year over year | 0.0537 | false |
beat_nextBeating earnings next quarter | 0.351 | 35% · unlikely |
Actions
Rules on the answers decide what to send.
neg >= 0.6 or (miss >= 0.6 and eps_down >= 0.6)→Emailcredit-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.
- State2 symbols
- Questions6 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"HYG"} then JNK, one request each. The server fills in the latest completed session.
Questions
breakdown | rule | C < lowest(L, 20)Closed under the 20-day low |
below50 | English → rule | Is the stock more than 5% below its 50-day moving average? |
atr | rule | atr(14) > 1.2 * ref(atr(14), -10)ATR up 20% in two weeks |
shock | rule | zscore(C / C[-1] - 1, 20) < -2A two-sigma down day |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
vol_up | forecast | Will volatility be higher over the next month? Higher volatility next month |
Answers
| Symbol | breakdownrule | below50rule | atrrule | shockrule | drop5forecast | vol_upforecast | Fired |
|---|---|---|---|---|---|---|---|
HYG | 0.0811 | 0.0537 | 0.0777 | 0.1437 | 0.009 | 0.476 | none |
JNK | 0.0813 | 0.0537 | 0.0758 | 0.1454 | 0.011 | 0.524 | none |
true false not known for rules; forecasts are odds. Hover a column for its question.
Actions
Rules on the answers decide what to send. Each symbol runs its own request, so each one can fire.
breakdown >= 0.6 or shock >= 0.6→Webhookteams-creditWhat 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"
}
]
}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.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"LQD"} then HYG, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
lowest | rule | C < lowest(C, 20)Closed under every close of the last 20 sessions |
zs | rule | zscore(C, 20) < -1.5More than 1.5 standard deviations under its 20-day mean |
sma50_falling | English → rule | Is the 50-day moving average falling, lower than 5 sessions ago? |
down_week | forecast | Will the stock be lower in a week? Lower in a week |
Answers
| Symbol | trendrule | lowestrule | zsrule | sma50_fallingrule | down_weekforecast |
|---|---|---|---|---|---|
LQD | 0.6552 | 0.0537 | 0.0642 | 0.9227 | 0.476 |
HYG | 0.1914 | 0.0851 | 0.0746 | 0.9144 | 0.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"
}
}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.
- State3 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"KRE"} then KBE, XLF, one request each. The server fills in the latest completed session.
Questions
drawdown | rule | C < 0.8 * max(H, 252)More than 20% off the 52-week high |
below200 | English → rule | Is the stock below its 200-day moving average? |
crows | rule | three_black_crows()three black crows candle: Three red bars, each closing lower and opening inside the previous body. |
big_down | English → rule | Did the stock fall more than 3% today? |
drop10 | forecast | Will it drop at least 10% at some point in the next month? A 10% drawdown within a month |
Answers
| Symbol | drawdownrule | below200rule | crowsrule | big_downrule | drop10forecast |
|---|---|---|---|---|---|
KRE | 0.0537 | 0.2881 | 0.1345 | 0.0735 | 0.309 |
KBE | 0.0537 | 0.3355 | 0.1069 | 0.0702 | 0.302 |
XLF | 0.0537 | 0.081 | 0.0735 | 0.0551 | 0.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"
}
}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.
- StateCCL
- Questions6 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"CCL"} The server fills in the latest completed session.
Questions
hv | rule | std(log(C / C[-1]), 20) * sqrt(252) > 0.4Annualized 20-day volatility above 40% |
vol5 | English → rule | Is 5-day volatility higher than 20-day volatility? |
atr3 | rule | atr_pct(14) > 3A typical day moves more than 3% |
log_vol | rule | std(log(C / C[-1]), 60) * sqrt(252) > 0.560-day annualized volatility above 50% |
vol_up | forecast | Will volatility be higher over the next month? Higher volatility next month |
hv30 | forecast | Will annualized volatility over the next 21 sessions exceed 30%? Next-month volatility above 30% |
Answers
| Question | Answer | Reading |
|---|---|---|
hvAnnualized 20-day volatility above 40% | 0.1724 | false |
vol5Is 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.2056 | false |
atr3A typical day moves more than 3% | 0.8723 | true |
log_vol60-day annualized volatility above 50% | 0.061 | false |
vol_upHigher volatility next month | 0.366 | 37% · unlikely |
hv30Next-month volatility above 30% | 0.392 | 39% · unlikely |
Actions
Rules on the answers decide what to send.
hv >= 0.6 or vol_up >= 0.6→Webhookcredit-modelsWhat 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"
}
]
}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.
- ScheduleMon–Fri at 16:45 ET
- State5 symbols
- Questions3 asked
- Answersreal, captured
- 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_low | rule | L < lowest(L, 252)New 52-week low today |
big_down | English → rule | Did the stock fall more than 3% today? |
drop10 | forecast | Will it drop at least 10% at some point in the next month? A 10% drawdown within a month |
Answers
| Symbol | new_lowrule | big_downrule | drop10forecast | Fired |
|---|---|---|---|---|
F | 0.1056 | 0.1281 | 0.532 | none |
GM | 0.0538 | 0.0632 | 0.525 | none |
AAL | 0.0605 | 0.1928 | 0.648 | none |
CCL | 0.0537 | 0.1264 | 0.458 | none |
PFE | 0.0537 | 0.0537 | 0.418 | none |
true false not known for rules; forecasts are odds. Hover a column for its question.
Actions
Rules on the answers decide what to send. Each symbol runs its own request, so each one can fire.
new_low >= 0.6 or big_down >= 0.6→Webhookcredit-watchlistWhat 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"
}
]
}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.
- State3 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"VNQ"} then SPG, O, one request each. The server fills in the latest completed session.
Questions
below200 | English → rule | Is the stock below its 200-day moving average? |
drawdown | rule | C < 0.8 * max(H, 252)More than 20% off the 52-week high |
yield | rule | div_yield_ttm > 5Trailing dividend yield above 5% |
cut | English → rule | Did the stock cut its dividend last time? |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | below200rule | drawdownrule | yieldrule | cutrule | drop5forecast |
|---|---|---|---|---|---|
VNQ | 0.3715 | 0.0537 | 0.0537 | 0.8591 | 0.218 |
SPG | 0.0878 | 0.0537 | 0.0537 | 0.1409 | 0.325 |
O | 0.8573 | 0.1005 | 0.9396 | 0.1409 | 0.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"
}
}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.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"OXY"} then USO, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 50-day moving average? |
dc | rule | crossdown(C, sma(C, 50))Crossed below its 50-day today |
adx_down | rule | adx(14) > 20 and diminus(14) > diplus(14)Trending down (ADX over 20, minus DI above plus DI) |
evening | rule | evening_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. |
drop10 | forecast | Will it drop at least 10% at some point in the next month? A 10% drawdown within a month |
Answers
| Symbol | trendrule | dcrule | adx_downrule | eveningrule | drop10forecast |
|---|---|---|---|---|---|
OXY | 0.9173 | 0.05 | 0.1529 | 0.2129 | 0.448 |
USO | 0.9434 | 0.05 | 0.0698 | 0.0546 | 0.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"
}
}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.