Use cases · Corporates
Corporate treasury: 20 ways to use Ora
Cash, hedges and buybacks: rates and dollar ETFs, own-stock levels and counterparty checks. Each example is a complete, runnable request with the real answers it returned (42 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 (51)
sma 13offset 8ref 5atr 4max 4lowest 4log 3sqrt 3std 3rsi 3avg 3swinglow 2ema 2zscore 2adx 2days_to_earnings 2highest 2macd 1swinghigh 1roc 1between 1crossup 1stochd 1stochk 1bblower 1mean 1rma 1abs 1atr_pct 1highestbars 1bbupper 1diminus 1diplus 1marubozu 1three_white_soldiers 1days_since_earnings 1next_report_bmo 1days_to_ex_div 1div_ttm 1last_div_amount 1next_div_amount 1raised_last 1tr 1percentrank 1willr 1cut_last 1miss_eps_last 1three_black_crows 1hl2 1obv 1ohlc4 1
Examples 1–10 of 20 · page 1 of 2
Corporate treasury · example 1
Treasury: is long duration (TLT) in a downtrend before we term out debt?
Before issuing long-dated debt, the treasury team reads the long-bond ETF: trend, momentum and the odds of further weakness.
- StateTLT
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"TLT"} The server fills in the latest completed session.
Questions
below_200d | English → rule | Is the stock below its 200-day moving average? |
sma200_up | rule | sma(C, 200) > ref(sma(C, 200), -20)The 200-day average is rising |
macd | English → rule | Is MACD above zero? |
lh_ll | English → rule | Is the stock making lower swing highs and lower swing lows? |
down_week | forecast | Will the stock be lower in a week? Lower in a week |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
below_200dIs the stock below its 200-day moving average compiled to C < sma(C, 200) | 0.8873 | true |
sma200_upThe 200-day average is rising | 0.0537 | false |
macdIs MACD above zero compiled to macd(C) > 0 | 0.8818 | 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.662 | true |
down_weekLower in a week | 0.504 | 50% · close to even |
drop5A 5% drawdown within a month | 0.164 | 16% · unlikely |
What it means
For TLT on the session of 2026-10-30: True now: Is the stock below its 200-day moving average; Is MACD above zero; Is the stock making lower swing highs and lower swing lows. Not true: The 200-day average is rising. Forecasts: Lower in a week 50%; A 5% drawdown within a month 16%.
Long bonds in a downtrend mean rising long rates; the team weighs that against the issuance calendar rather than trying to time the bottom.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TLT"
},
"questions": {
"below_200d": {
"type": "yes_no",
"instructions": "Is the stock below its 200-day moving average?"
},
"sma200_up": {
"type": "yes_no",
"ask": "sma(C, 200) > ref(sma(C, 200), -20)"
},
"macd": {
"type": "yes_no",
"instructions": "Is MACD above zero?"
},
"lh_ll": {
"type": "yes_no",
"instructions": "Is the stock making lower swing highs and lower swing lows?"
},
"down_week": {
"type": "yes_no",
"instructions": "Will the stock be lower in a week?"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
}
}Response JSON (TLT, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"below_200d": {
"yes_no": 0.8873,
"rule": "C < sma(C, 200)",
"basis": "comparison"
},
"sma200_up": {
"yes_no": 0.0537,
"rule": "sma(C, 200) > ref(sma(C, 200), -20)",
"basis": "rule"
},
"macd": {
"yes_no": 0.8818,
"rule": "macd(C) > 0",
"basis": "pattern"
},
"lh_ll": {
"yes_no": 0.662,
"rule": "(swinghigh(5, 1) < swinghigh(5, 2)) and (swinglow(5, 1) < swinglow(5, 2))",
"basis": "pattern"
},
"down_week": {
"yes_no": 0.504
},
"drop5": {
"yes_no": 0.164
}
},
"context": {
"symbol": "TLT",
"as_of": "2026-10-30"
}
}Corporate treasury · example 2
Treasury: SHY, IEF and TLT trend side by side
Read the yield curve through three Treasury ETFs at once to see which part of the curve is moving.
- State3 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"SHY"} then IEF, TLT, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
ema_up | rule | ema(C, 10) > ema(C, 30)10-day exponential average above the 30-day |
roc | rule | roc(C, 20) > 020-day rate of change positive |
vol_low | English → rule | Is 20-day historical volatility below 20%? |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Symbol | trendrule | ema_uprule | rocrule | vol_lowrule | up_weekforecast |
|---|---|---|---|---|---|
SHY | 0.8971 | 0.869 | 0.931 | 0.9463 | 0.594 |
IEF | 0.8514 | 0.8245 | 0.929 | 0.9463 | 0.483 |
TLT | 0.8482 | 0.8762 | 0.934 | 0.9463 | 0.561 |
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: Above the 50-day average: true for SHY, IEF, TLT of 3. 10-day exponential average above the 30-day: true for SHY, IEF, TLT of 3. 20-day rate of change positive: true for SHY, IEF, TLT of 3. Is 20-day historical volatility below 20%: true for SHY, IEF, TLT of 3. Highest odds for “Higher in a week”: SHY at 59%.
When the short end trends up and the long end does not, the curve is steepening; treasury uses that to choose the tenor of new borrowing.
Request JSON (SHY; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SHY"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"ema_up": {
"type": "yes_no",
"ask": "ema(C, 10) > ema(C, 30)"
},
"roc": {
"type": "yes_no",
"ask": "roc(C, 20) > 0"
},
"vol_low": {
"type": "yes_no",
"instructions": "Is 20-day historical volatility below 20%?"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (SHY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.8971,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"ema_up": {
"yes_no": 0.869,
"rule": "ema(C, 10) > ema(C, 30)",
"basis": "rule"
},
"roc": {
"yes_no": 0.931,
"rule": "roc(C, 20) > 0",
"basis": "rule"
},
"vol_low": {
"yes_no": 0.9463,
"rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2",
"basis": "pattern"
},
"up_week": {
"yes_no": 0.594
}
},
"context": {
"symbol": "SHY",
"as_of": "2026-10-30"
}
}Corporate treasury · example 3
Treasury: is our cash parking (SGOV, BIL) behaving like cash?
Check that the T-bill ETFs used for excess cash have tiny volatility and no unusual drawdown.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"SGOV"} then BIL, one request each. The server fills in the latest completed session.
Questions
atr_low | English → rule | Is the 14-day ATR less than 2% of the price? |
hv_low | English → rule | Is 20-day historical volatility below 20%? |
drawdown | rule | C < 0.99 * max(H, 63)More than 1% below its three-month high |
zshock | rule | zscore(C / C[-1] - 1, 20) < -2A two-sigma down day |
stable | rule | between(C / sma(C, 20), 0.995, 1.005)Within half a percent of its 20-day average |
Answers
| Symbol | atr_lowrule | hv_lowrule | drawdownrule | zshockrule | stablerule | Fired |
|---|---|---|---|---|---|---|
SGOV | 0.9463 | 0.9463 | 0.0537 | 0.0543 | 0.95 | none |
BIL | 0.9463 | 0.9463 | 0.0537 | 0.0537 | 0.95 | 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.
drawdown >= 0.6 or zshock >= 0.6→Emailtreasury-opsWhat it means
Session of 2026-10-30, 2 symbols: Is the 14-day ATR less than 2% of the price: true for SGOV, BIL of 2. Is 20-day historical volatility below 20%: true for SGOV, BIL of 2. More than 1% below its three-month high: true for none of 2. A two-sigma down day: true for none of 2. cash_alert fired for none.
These should almost always be false; an alert means the cash vehicle is not behaving like cash and treasury reviews the allocation.
Request JSON (SGOV; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SGOV"
},
"questions": {
"atr_low": {
"type": "yes_no",
"instructions": "Is the 14-day ATR less than 2% of the price?"
},
"hv_low": {
"type": "yes_no",
"instructions": "Is 20-day historical volatility below 20%?"
},
"drawdown": {
"type": "yes_no",
"ask": "C < 0.99 * max(H, 63)"
},
"zshock": {
"type": "yes_no",
"ask": "zscore(C / C[-1] - 1, 20) < -2"
},
"stable": {
"type": "yes_no",
"ask": "between(C / sma(C, 20), 0.995, 1.005)"
}
},
"actions": [
{
"id": "cash_alert",
"when": "drawdown >= 0.6 or zshock >= 0.6",
"do": "email",
"connection": "treasury-ops",
"subject": "{{symbol}}: cash vehicle moved unusually",
"message": "{{symbol}} ({{as_of}}): 1% off its three-month high {{drawdown|pct}}, return shock {{zshock|pct}}. Review the money-market allocation."
}
],
"dry_run": true
}Response JSON (SGOV, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"atr_low": {
"yes_no": 0.9463,
"rule": "atr(14) / C < 0.02",
"basis": "pattern"
},
"hv_low": {
"yes_no": 0.9463,
"rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2",
"basis": "pattern"
},
"drawdown": {
"yes_no": 0.0537,
"rule": "C < 0.99 * max(H, 63)",
"basis": "rule"
},
"zshock": {
"yes_no": 0.0543,
"rule": "zscore(C / C[-1] - 1, 20) < -2",
"basis": "rule"
},
"stable": {
"yes_no": 0.95,
"rule": "between(C / sma(C, 20), 0.995, 1.005)",
"basis": "rule"
}
},
"context": {
"symbol": "SGOV",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "cash_alert",
"fired": false,
"status": "skipped"
}
]
}Corporate treasury · example 4
Treasury: is the dollar (UUP) strengthening before we hedge euro receivables?
A dollar-strength read through the dollar index ETF helps decide whether to layer in hedges now or wait.
- StateUUP
- Questions6 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"UUP"} The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 50-day moving average? |
cross | rule | crossup(C, sma(C, 50))Crossed above its 50-day today |
adx | rule | adx(14) > 25Trending (ADX above 25) |
stoch | rule | stochk(14) > stochd(14)Stochastic %K above %D |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
trendIs the stock above its 50-day moving average compiled to C > sma(C, 50) | 0.8725 | true |
crossCrossed above its 50-day today | 0.05 | false |
adxTrending (ADX above 25) | 0.7393 | true |
stochStochastic %K above %D | 0.1848 | false |
up_weekHigher in a week | 0.561 | 56% · close to even |
rally5A 5% rally within a month | 0.014 | 1% · unlikely |
Actions
Rules on the answers decide what to send.
trend >= 0.6 and up_week >= 0.55→Webhooktmselse→Slacktreasury{
"event": "fx_hedge_review",
"instrument": "UUP",
"as_of": "2026-10-30",
"dollar_uptrend": 0.8725,
"p_up_week": 0.561,
"action": "layer_next_tranche"
}What it means
For UUP on the session of 2026-10-30: True now: Is the stock above its 50-day moving average; Trending (ADX above 25). Not true: Crossed above its 50-day today; Stochastic %K above %D. Forecasts: Higher in a week 56%; A 5% rally within a month 1%. Fired: hedge_now (Webhook → tms).
Treasury follows its hedge policy either way; the signal only changes the timing of the next tranche within the policy window.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "UUP"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 50-day moving average?"
},
"cross": {
"type": "yes_no",
"ask": "crossup(C, sma(C, 50))"
},
"adx": {
"type": "yes_no",
"ask": "adx(14) > 25"
},
"stoch": {
"type": "yes_no",
"ask": "stochk(14) > stochd(14)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "hedge_now",
"when": "trend >= 0.6 and up_week >= 0.55",
"do": "webhook",
"connection": "tms",
"body": {
"event": "fx_hedge_review",
"instrument": "{{symbol}}",
"as_of": "{{as_of}}",
"dollar_uptrend": "{{trend}}",
"p_up_week": "{{up_week}}",
"action": "layer_next_tranche"
}
},
{
"id": "wait",
"when": "else",
"do": "slack",
"connection": "treasury",
"message": "{{symbol}} ({{as_of}}): no confirmed dollar uptrend (above 50-day {{trend|pct}}, higher in a week {{up_week|pct}}). Keep the hedge schedule."
}
],
"dry_run": true
}Response JSON (UUP, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.8725,
"rule": "C > sma(C, 50)",
"basis": "comparison"
},
"cross": {
"yes_no": 0.05,
"rule": "crossup(C, sma(C, 50))",
"basis": "rule"
},
"adx": {
"yes_no": 0.7393,
"rule": "adx(14) > 25",
"basis": "rule"
},
"stoch": {
"yes_no": 0.1848,
"rule": "stochk(14) > stochd(14)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.561
},
"rally5": {
"yes_no": 0.014
}
},
"context": {
"symbol": "UUP",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "hedge_now",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "tms",
"preview": {
"body": {
"event": "fx_hedge_review",
"instrument": "UUP",
"as_of": "2026-10-30",
"dollar_uptrend": 0.8725,
"p_up_week": 0.561,
"action": "layer_next_tranche"
}
}
},
{
"id": "wait",
"fired": false,
"status": "skipped"
}
]
}Corporate treasury · example 5
Treasury at AAPL: is this a good week for the buyback program?
Treasury teams with discretion in a repurchase plan prefer buying on weakness: pullbacks, oversold readings and support.
- StateAAPL
- Questions6 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"AAPL"} The server fills in the latest completed session.
Questions
pullback | English → rule | Has the stock pulled back at least 5% from its 20-day high? |
rsi40 | English → rule | Is RSI below 40? |
near_sup | English → rule | Is the stock within 2% above its last swing low (support)? |
below_band | rule | C < bblower(C, 20, 2)Closed under the lower Bollinger band |
earn_soon | rule | days_to_earnings <= 10Reports earnings within 10 days |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
pullbackHas the stock pulled back at least 5% from its 20-day high compiled to C <= max(H, 20) * 0.95 | 0.1693 | false |
rsi40Is RSI below 40 compiled to rsi(C, 14) < 40 | 0.0634 | false |
near_supIs the stock within 2% above its last swing low (support) compiled to (C >= swinglow(5, 1)) and (C <= swinglow(5, 1) * 1.02) | 0.5691 | on the line (true) |
below_bandClosed under the lower Bollinger band | 0.0874 | false |
earn_soonReports earnings within 10 days | 0.9392 | true |
drop5A 5% drawdown within a month | 0.365 | 37% · unlikely |
Actions
Rules on the answers decide what to send.
(pullback >= 0.6 or rsi40 >= 0.6) and earn_soon < 0.4→Webhookbuyback-brokerelse→Emailtreasury-ops{
"subject": "AAPL buyback: standard pace",
"text": "AAPL (2026-10-30): no pullback signal (17%) or earnings within 10 days (94%). Standard daily pace."
}What it means
For AAPL on the session of 2026-10-30: True now: Reports earnings within 10 days. Not true: Has the stock pulled back at least 5% from its 20-day high; Is RSI below 40; Closed under the lower Bollinger band. On the line: Is the stock within 2% above its last swing low (support). Forecasts: A 5% drawdown within a month 37%. Fired: standard (Email → treasury-ops).
Inside a pre-set plan, the signal moves purchases within an agreed grid; the earnings check keeps the desk out of blackout-adjacent windows.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AAPL"
},
"questions": {
"pullback": {
"type": "yes_no",
"instructions": "Has the stock pulled back at least 5% from its 20-day high?"
},
"rsi40": {
"type": "yes_no",
"instructions": "Is RSI below 40?"
},
"near_sup": {
"type": "yes_no",
"instructions": "Is the stock within 2% above its last swing low (support)?"
},
"below_band": {
"type": "yes_no",
"ask": "C < bblower(C, 20, 2)"
},
"earn_soon": {
"type": "yes_no",
"ask": "days_to_earnings <= 10"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "accelerate",
"when": "(pullback >= 0.6 or rsi40 >= 0.6) and earn_soon < 0.4",
"do": "webhook",
"connection": "buyback-broker",
"body": {
"program": "10b5-1",
"ticker": "{{symbol}}",
"as_of": "{{as_of}}",
"instruction": "use_upper_grid",
"p_pullback": "{{pullback}}",
"p_rsi_under_40": "{{rsi40}}"
}
},
{
"id": "standard",
"when": "else",
"do": "email",
"connection": "treasury-ops",
"subject": "{{symbol}} buyback: standard pace",
"message": "{{symbol}} ({{as_of}}): no pullback signal ({{pullback|pct}}) or earnings within 10 days ({{earn_soon|pct}}). Standard daily pace."
}
],
"dry_run": true
}Response JSON (AAPL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"pullback": {
"yes_no": 0.1693,
"rule": "C <= max(H, 20) * 0.95",
"basis": "pattern"
},
"rsi40": {
"yes_no": 0.0634,
"rule": "rsi(C, 14) < 40",
"basis": "comparison"
},
"near_sup": {
"yes_no": 0.5691,
"rule": "(C >= swinglow(5, 1)) and (C <= swinglow(5, 1) * 1.02)",
"basis": "pattern"
},
"below_band": {
"yes_no": 0.0874,
"rule": "C < bblower(C, 20, 2)",
"basis": "rule"
},
"earn_soon": {
"yes_no": 0.9392,
"rule": "days_to_earnings <= 10",
"basis": "rule"
},
"drop5": {
"yes_no": 0.365
}
},
"context": {
"symbol": "AAPL",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "accelerate",
"fired": false,
"status": "skipped"
},
{
"id": "standard",
"fired": true,
"status": "dry_run",
"do": "email",
"connection": "treasury-ops",
"preview": {
"subject": "AAPL buyback: standard pace",
"text": "AAPL (2026-10-30): no pullback signal (17%) or earnings within 10 days (94%). Standard daily pace."
}
}
]
}Corporate treasury · example 6
Treasury: are credit markets (HYG, LQD) open for a new bond?
Before going to market with a bond deal, check that high-yield and investment-grade ETFs are calm and trending.
- State2 symbols
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"HYG"} then LQD, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
breakdown | rule | C < lowest(L, 20)Closed under the 20-day low |
atr | rule | atr(14) > 1.2 * ref(atr(14), -10)ATR up 20% in two weeks |
vol_spike | rule | V > 2 * ref(avg(V, 20), -1)Volume more than twice the previous 20-day average |
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 | trendrule | breakdownrule | atrrule | vol_spikerule | drop5forecast | vol_upforecast |
|---|---|---|---|---|---|---|
HYG | 0.1914 | 0.0811 | 0.0777 | 0.0911 | 0.009 | 0.476 |
LQD | 0.6552 | 0.0537 | 0.0607 | 0.0597 | 0.022 | 0.511 |
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 the 20-day low: true for none of 2. ATR up 20% in two weeks: true for none of 2. Volume more than twice the previous 20-day average: true for none of 2. Highest odds for “A 5% drawdown within a month”: LQD at 2%.
Calm, trending credit ETFs describe an open market; a breakdown with expanding ranges is when bankers suggest waiting for a better window.
Request JSON (HYG; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "HYG"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"breakdown": {
"type": "yes_no",
"ask": "C < lowest(L, 20)"
},
"atr": {
"type": "yes_no",
"ask": "atr(14) > 1.2 * ref(atr(14), -10)"
},
"vol_spike": {
"type": "yes_no",
"ask": "V > 2 * ref(avg(V, 20), -1)"
},
"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?"
}
}
}Response JSON (HYG, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.1914,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"breakdown": {
"yes_no": 0.0811,
"rule": "C < lowest(L, 20)",
"basis": "rule"
},
"atr": {
"yes_no": 0.0777,
"rule": "atr(14) > 1.2 * ref(atr(14), -10)",
"basis": "rule"
},
"vol_spike": {
"yes_no": 0.0911,
"rule": "V > 2 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"drop5": {
"yes_no": 0.009
},
"vol_up": {
"yes_no": 0.476
}
},
"context": {
"symbol": "HYG",
"as_of": "2026-10-30"
}
}Corporate treasury · example 7
Treasury: is TIP outperforming nominal bonds?
Compare inflation-linked bonds with nominal Treasuries to read inflation expectations before pricing supplier contracts.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"TIP"} then IEF, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
mom | English → rule | Is the stock up over the last month? |
mean_up | rule | C > mean(C, 100)Above its 100-day average |
rma_up | rule | C > rma(C, 14)Above its 14-day smoothed average |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | trendrule | momrule | mean_uprule | rma_uprule | beat_spyforecast |
|---|---|---|---|---|---|
TIP | 0.3682 | 0.9132 | 0.6331 | 0.8978 | 0.284 |
IEF | 0.1576 | 0.9203 | 0.4095 | 0.9089 | 0.281 |
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 none of 2. Is the stock up over the last month: true for TIP, IEF of 2. Above its 100-day average: true for TIP of 2. Above its 14-day smoothed average: true for TIP, IEF of 2. Highest odds for “Beating SPY over a month”: TIP at 28%.
If TIP trends while IEF does not, the market is pricing more inflation; procurement hears about it before negotiating escalators.
Request JSON (TIP; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TIP"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"mom": {
"type": "yes_no",
"instructions": "Is the stock up over the last month?"
},
"mean_up": {
"type": "yes_no",
"ask": "C > mean(C, 100)"
},
"rma_up": {
"type": "yes_no",
"ask": "C > rma(C, 14)"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
}
}Response JSON (TIP, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.3682,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"mom": {
"yes_no": 0.9132,
"rule": "C > C[-21]",
"basis": "pattern"
},
"mean_up": {
"yes_no": 0.6331,
"rule": "C > mean(C, 100)",
"basis": "rule"
},
"rma_up": {
"yes_no": 0.8978,
"rule": "C > rma(C, 14)",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.284
}
},
"context": {
"symbol": "TIP",
"as_of": "2026-10-30"
}
}Corporate treasury · example 8
A pre-open treasury dashboard: rates, credit and the dollar
Every weekday before the open, one line per instrument for the treasury channel.
- ScheduleMon–Fri at 08:30 ET
- State5 symbols
- Questions3 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"SHY"} then TLT, LQD, HYG, UUP, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
big | rule | abs(C - C[-1]) > 1.5 * atr(14)Today's move was bigger than 1.5 ATR |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Symbol | trendrule | bigrule | up_weekforecast | Fired |
|---|---|---|---|---|
SHY | 0.8971 | 0.1331 | 0.594 | none |
TLT | 0.8482 | 0.0601 | 0.561 | none |
LQD | 0.6552 | 0.0545 | 0.547 | none |
HYG | 0.1914 | 0.0613 | 0.499 | none |
UUP | 0.8725 | 0.0581 | 0.561 | 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.
big >= 0.6→SlacktreasuryWhat it means
Session of 2026-10-30, 5 symbols: Above the 50-day average: true for SHY, TLT, LQD, UUP of 5. Today's move was bigger than 1.5 ATR: true for none of 5. Highest odds for “Higher in a week”: SHY at 59%. line fired for none.
Only outsized moves post, so the channel highlights the instruments that matter that morning.
As a scheduled workflow (Mon–Fri at 08: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": "A pre-open treasury dashboard: rates, credit and the dollar",
"symbols": "SHY TLT LQD HYG UUP",
"days": [
1,
2,
3,
4,
5
],
"at_time": "08:30",
"model": "ora-fin-0.1.1",
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"big": {
"type": "yes_no",
"ask": "abs(C - C[-1]) > 1.5 * atr(14)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "line",
"when": "big >= 0.6",
"do": "slack",
"connection": "treasury",
"message": "{{symbol}} ({{as_of}}): moved over 1.5 ATR yesterday. Above 50-day {{trend|pct}}, higher in a week {{up_week|pct}}."
}
]
}Request JSON (SHY; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SHY"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"big": {
"type": "yes_no",
"ask": "abs(C - C[-1]) > 1.5 * atr(14)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "line",
"when": "big >= 0.6",
"do": "slack",
"connection": "treasury",
"message": "{{symbol}} ({{as_of}}): moved over 1.5 ATR yesterday. Above 50-day {{trend|pct}}, higher in a week {{up_week|pct}}."
}
],
"dry_run": true
}Response JSON (SHY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.8971,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"big": {
"yes_no": 0.1331,
"rule": "abs(C - C[-1]) > 1.5 * atr(14)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.594
}
},
"context": {
"symbol": "SHY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "line",
"fired": false,
"status": "skipped"
}
]
}Corporate treasury · example 9
Treasury at MSFT: equity-comp hedge check
When hedging stock-based compensation exposure, read the stock's volatility regime and trend.
- StateMSFT
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"MSFT"} The server fills in the latest completed session.
Questions
hv40 | 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? |
atr | rule | atr_pct(14) > 2ATR above 2% of price |
trend | rule | sma(C, 50) > sma(C, 200)50-day above the 200-day |
vol_up | forecast | Will volatility be higher over the next month? Higher volatility next month |
big5 | forecast | Will there be a big move in either direction in the next 5 days? A big move either way in 5 days |
Answers
| Question | Answer | Reading |
|---|---|---|
hv40Annualized 20-day volatility above 40% | 0.1008 | 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.3915 | false |
atrATR above 2% of price | 0.8399 | true |
trend50-day above the 200-day | 0.9369 | true |
vol_upHigher volatility next month | 0.673 | 67% · likely |
big5A big move either way in 5 days | 0.397 | 40% · unlikely |
What it means
For MSFT on the session of 2026-10-30: True now: ATR above 2% of price; 50-day above the 200-day. Not true: Annualized 20-day volatility above 40%; Is 5-day volatility higher than 20-day volatility. Forecasts: Higher volatility next month 67%; A big move either way in 5 days 40%.
Rising volatility raises hedge costs; treasury uses the regime read to choose between collars and plain forwards.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "MSFT"
},
"questions": {
"hv40": {
"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?"
},
"atr": {
"type": "yes_no",
"ask": "atr_pct(14) > 2"
},
"trend": {
"type": "yes_no",
"ask": "sma(C, 50) > sma(C, 200)"
},
"vol_up": {
"type": "yes_no",
"instructions": "Will volatility be higher over the next month?"
},
"big5": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
}
}Response JSON (MSFT, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"hv40": {
"yes_no": 0.1008,
"rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4",
"basis": "rule"
},
"vol5": {
"yes_no": 0.3915,
"rule": "std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19)",
"basis": "pattern"
},
"atr": {
"yes_no": 0.8399,
"rule": "atr_pct(14) > 2",
"basis": "rule"
},
"trend": {
"yes_no": 0.9369,
"rule": "sma(C, 50) > sma(C, 200)",
"basis": "rule"
},
"vol_up": {
"yes_no": 0.673
},
"big5": {
"yes_no": 0.397
}
},
"context": {
"symbol": "MSFT",
"as_of": "2026-10-30"
}
}Corporate treasury · example 10
Treasury: counterparty bank stocks under stress?
Watch the listed banks the company deposits with or trades derivatives with: drawdowns, breakdowns and big down days.
- State5 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"JPM"} then BAC, C, WFC, GS, 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 |
breakdown | rule | C < lowest(L, 20)Closed under the 20-day low |
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
| Symbol | drawdownrule | breakdownrule | down_volrule | drop10forecast | Fired |
|---|---|---|---|---|---|
JPM | 0.0537 | 0.1005 | 0.1978 | 0.30 | none |
BAC | 0.7068 | 0.2511 | 0.1184 | 0.446 | stress |
C | 0.1573 | 0.1857 | 0.5062 | 0.461 | none |
WFC | 0.0651 | 0.0564 | 0.0638 | 0.431 | none |
GS | 0.706 | 0.0885 | 0.0751 | 0.515 | stress |
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.
drawdown >= 0.6 or (breakdown >= 0.6 and down_vol >= 0.6)→Emailtreasury-risk{
"subject": "Counterparty watch: BAC",
"text": "BAC (2026-10-30): 20% drawdown 71%, 20-day breakdown 25% on volume 12%. 10% drop odds 45%. Review exposure limits."
}{
"subject": "Counterparty watch: GS",
"text": "GS (2026-10-30): 20% drawdown 71%, 20-day breakdown 9% on volume 8%. 10% drop odds 52%. Review exposure limits."
}What it means
Session of 2026-10-30, 5 symbols: More than 20% off the 52-week high: true for BAC, GS of 5. Closed under the 20-day low: true for none of 5. Down on heavy volume: true for none of 5. Highest odds for “A 10% drawdown within a month”: GS at 52%. stress fired for BAC, GS.
Equity stress is an early, imperfect signal for bank counterparties; an alert prompts a review of deposit and derivative limits, not an automatic move.
Request JSON (JPM; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "JPM"
},
"questions": {
"drawdown": {
"type": "yes_no",
"ask": "C < 0.8 * max(H, 252)"
},
"breakdown": {
"type": "yes_no",
"ask": "C < lowest(L, 20)"
},
"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": "stress",
"when": "drawdown >= 0.6 or (breakdown >= 0.6 and down_vol >= 0.6)",
"do": "email",
"connection": "treasury-risk",
"subject": "Counterparty watch: {{symbol}}",
"message": "{{symbol}} ({{as_of}}): 20% drawdown {{drawdown|pct}}, 20-day breakdown {{breakdown|pct}} on volume {{down_vol|pct}}. 10% drop odds {{drop10|pct}}. Review exposure limits."
}
],
"dry_run": true
}Response JSON (JPM, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"drawdown": {
"yes_no": 0.0537,
"rule": "C < 0.8 * max(H, 252)",
"basis": "rule"
},
"breakdown": {
"yes_no": 0.1005,
"rule": "C < lowest(L, 20)",
"basis": "rule"
},
"down_vol": {
"yes_no": 0.1978,
"rule": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"drop10": {
"yes_no": 0.3
}
},
"context": {
"symbol": "JPM",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "stress",
"fired": false,
"status": "skipped"
}
]
}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, CFO office, Bank credit analyst, Financial journalist / media.