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

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.

Answers were captured on ora-fin-0.1.1. Another model changes the request JSON and the Playground link; run it there to see its answers.
Rule functions and facts used by this player (51)

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 11–20 of 20 · page 2 of 2

Corporate treasury · example 11

Treasury: will falling rates hurt our pension funding (TLT rally)?

Corporate pension liabilities rise when long rates fall; check whether long bonds are breaking out.

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

State

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

Questions

breakoutruleC > highest(C, 20)
20-day closing breakout
donchianruleC > highest(C, 55)
55-day closing breakout
high_barsrulehighestbars(C, 55) <= 3
The 55-day closing high is at most 3 sessions old
rsirulersi(C, 14) > 50
RSI above 50
rally5forecastWill it rally at least 5% at some point in the next month?
A 5% rally within a month

Answers

QuestionAnswerReading
breakout
20-day closing breakout
0.5462on the line (true)
donchian
55-day closing breakout
0.1178false
high_bars
The 55-day closing high is at most 3 sessions old
0.0537false
rsi
RSI above 50
0.8762true
rally5
A 5% rally within a month
0.16517% · unlikely

What it means

For TLT on the session of 2026-10-30: True now: RSI above 50. Not true: 55-day closing breakout; The 55-day closing high is at most 3 sessions old. On the line: 20-day closing breakout. Forecasts: A 5% rally within a month 17%.

A long-bond breakout means falling long rates; the pension committee hears about it before the next funding review.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TLT"
  },
  "questions": {
    "breakout": {
      "type": "yes_no",
      "ask": "C > highest(C, 20)"
    },
    "donchian": {
      "type": "yes_no",
      "ask": "C > highest(C, 55)"
    },
    "high_bars": {
      "type": "yes_no",
      "ask": "highestbars(C, 55) <= 3"
    },
    "rsi": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 50"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  }
}
Response JSON (TLT, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "breakout": {
      "yes_no": 0.5462,
      "rule": "C > highest(C, 20)",
      "basis": "rule"
    },
    "donchian": {
      "yes_no": 0.1178,
      "rule": "C > highest(C, 55)",
      "basis": "rule"
    },
    "high_bars": {
      "yes_no": 0.0537,
      "rule": "highestbars(C, 55) <= 3",
      "basis": "rule"
    },
    "rsi": {
      "yes_no": 0.8762,
      "rule": "rsi(C, 14) > 50",
      "basis": "rule"
    },
    "rally5": {
      "yes_no": 0.165
    }
  },
  "context": {
    "symbol": "TLT",
    "as_of": "2026-10-30"
  }
}

highest highestbars rsi

Corporate treasury · example 12

Treasury at DAL: is jet fuel (USO) breaking higher?

An airline treasury watches crude through USO to time fuel hedges.

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

State

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

Questions

breakoutruleC > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)
20-day breakout on 1.5× volume
above_bandruleC > bbupper(C, 20, 2)
Closed above the upper Bollinger band
whiterulethree_white_soldiers()
three white soldiers candle: Three green bars, each closing higher and opening inside the previous body.
marubozurulemarubozu()
marubozu candle: Body at least 90% of the range: almost no wicks.
trendruleadx(14) > 20 and diplus(14) > diminus(14)
Trending up (ADX over 20 and +DI over −DI)
rally10forecastWill it rally at least 10% at some point in the next month?
A 10% rally within a month

Answers

QuestionAnswerReading
breakout
20-day breakout on 1.5× volume
0.1578false
above_band
Closed above the upper Bollinger band
0.1634false
white
three white soldiers candle: Three green bars, each closing higher and opening inside the previous body.
0.1947false
marubozu
marubozu candle: Body at least 90% of the range: almost no wicks.
0.0717false
trend
Trending up (ADX over 20 and +DI over −DI)
0.922true
rally10
A 10% rally within a month
0.65866% · likely

Actions

Rules on the answers decide what to send.

breakout >= 0.6 or rally10 >= 0.5→Webhooktms
What each action would send 1 of 1 fired · dry run, nothing sent
hedge_reviewwould send (dry run)Webhook → tms
{
  "event": "fuel_hedge_review",
  "proxy": "USO",
  "as_of": "2026-10-30",
  "p_breakout": 0.1578,
  "p_rally10": 0.658
}

What it means

For USO on the session of 2026-10-30: True now: Trending up (ADX over 20 and +DI over −DI). Not true: 20-day breakout on 1.5× volume; Closed above the upper Bollinger band; three white soldiers candle: Three green bars, each closing higher and opening inside the previous body.; marubozu candle: Body at least 90% of the range: almost no wicks.. Forecasts: A 10% rally within a month 66%. Fired: hedge_review (Webhook → tms).

A breakout or high rally odds trigger a review in the treasury system; the hedge ratio itself stays inside policy.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "USO"
  },
  "questions": {
    "breakout": {
      "type": "yes_no",
      "ask": "C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)"
    },
    "above_band": {
      "type": "yes_no",
      "ask": "C > bbupper(C, 20, 2)"
    },
    "white": {
      "type": "yes_no",
      "ask": "three_white_soldiers()"
    },
    "marubozu": {
      "type": "yes_no",
      "ask": "marubozu()"
    },
    "trend": {
      "type": "yes_no",
      "ask": "adx(14) > 20 and diplus(14) > diminus(14)"
    },
    "rally10": {
      "type": "yes_no",
      "instructions": "Will it rally at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "hedge_review",
      "when": "breakout >= 0.6 or rally10 >= 0.5",
      "do": "webhook",
      "connection": "tms",
      "body": {
        "event": "fuel_hedge_review",
        "proxy": "{{symbol}}",
        "as_of": "{{as_of}}",
        "p_breakout": "{{breakout}}",
        "p_rally10": "{{rally10}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (USO, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "breakout": {
      "yes_no": 0.1578,
      "rule": "C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)",
      "basis": "rule"
    },
    "above_band": {
      "yes_no": 0.1634,
      "rule": "C > bbupper(C, 20, 2)",
      "basis": "rule"
    },
    "white": {
      "yes_no": 0.1947,
      "rule": "three_white_soldiers()",
      "basis": "rule"
    },
    "marubozu": {
      "yes_no": 0.0717,
      "rule": "marubozu()",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.922,
      "rule": "adx(14) > 20 and diplus(14) > diminus(14)",
      "basis": "rule"
    },
    "rally10": {
      "yes_no": 0.658
    }
  },
  "context": {
    "symbol": "USO",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "hedge_review",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "tms",
      "preview": {
        "body": {
          "event": "fuel_hedge_review",
          "proxy": "USO",
          "as_of": "2026-10-30",
          "p_breakout": 0.1578,
          "p_rally10": 0.658
        }
      }
    }
  ]
}

adx avg bbupper diminus diplus highest marubozu ref three_white_soldiers

Corporate treasury · example 13

Treasury at WMT: are we near the earnings blackout?

Check the report date so repurchase and insider-plan windows line up with the calendar.

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

State

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

Questions

soonEnglish → ruleIs earnings in the next 14 days?
farEnglish → ruleIs the next earnings report more than 10 days away?
recentEnglish → ruleDid the stock report earnings in the last 7 days?
bmoEnglish → ruleDoes the stock report before the market opens next time?

Answers

QuestionAnswerReading
soon
Is earnings in the next 14 days
compiled to days_to_earnings <= 14
0.0683false
far
Is the next earnings report more than 10 days away
compiled to days_to_earnings > 10
0.9463true
recent
Did the stock report earnings in the last 7 days
compiled to days_since_earnings <= 7
0.0537false
bmo
Does the stock report before the market opens next time
compiled to next_report_bmo > 0.5
0.8591true

Actions

Rules on the answers decide what to send.

soon >= 0.6→Emailtreasury-ops
else→Slacktreasury
What each action would send 1 of 2 fired · dry run, nothing sent
blackoutrule false: skipped
openwould send (dry run)Slack → treasury
{
  "text": "WMT (2026-10-30): next report more than 14 days out. Window open per policy."
}

What it means

For WMT on the session of 2026-10-30: True now: Is the next earnings report more than 10 days away; Does the stock report before the market opens next time. Not true: Is earnings in the next 14 days; Did the stock report earnings in the last 7 days. Fired: open (Slack → treasury).

These are calendar facts; legal still decides the window, but the reminder arrives on time.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "WMT"
  },
  "questions": {
    "soon": {
      "type": "yes_no",
      "instructions": "Is earnings in the next 14 days?"
    },
    "far": {
      "type": "yes_no",
      "instructions": "Is the next earnings report more than 10 days away?"
    },
    "recent": {
      "type": "yes_no",
      "instructions": "Did the stock report earnings in the last 7 days?"
    },
    "bmo": {
      "type": "yes_no",
      "instructions": "Does the stock report before the market opens next time?"
    }
  },
  "actions": [
    {
      "id": "blackout",
      "when": "soon >= 0.6",
      "do": "email",
      "connection": "treasury-ops",
      "subject": "{{symbol}}: earnings within 14 days",
      "message": "{{symbol}} ({{as_of}}): next report within 14 days ({{soon|pct}}). Confirm discretionary buyback windows with legal."
    },
    {
      "id": "open",
      "when": "else",
      "do": "slack",
      "connection": "treasury",
      "message": "{{symbol}} ({{as_of}}): next report more than 14 days out. Window open per policy."
    }
  ],
  "dry_run": true
}
Response JSON (WMT, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "soon": {
      "yes_no": 0.0683,
      "rule": "days_to_earnings <= 14",
      "basis": "pattern"
    },
    "far": {
      "yes_no": 0.9463,
      "rule": "days_to_earnings > 10",
      "basis": "pattern"
    },
    "recent": {
      "yes_no": 0.0537,
      "rule": "days_since_earnings <= 7",
      "basis": "pattern"
    },
    "bmo": {
      "yes_no": 0.8591,
      "rule": "next_report_bmo > 0.5",
      "basis": "pattern"
    }
  },
  "context": {
    "symbol": "WMT",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "blackout",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "open",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "treasury",
      "preview": {
        "text": "WMT (2026-10-30): next report more than 14 days out. Window open per policy."
      }
    }
  ]
}

days_since_earnings days_to_earnings next_report_bmo

Corporate treasury · example 14

Treasury at PG: confirm the dividend cash call

Check the declared ex-date and whether the next payment is larger, to line up cash for the payment date.

ora-fin-0.1.1PG4 questions
  1. StatePG
  2. Questions4 asked
  3. Answersreal, captured
  4. Actionsnone

State

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

Questions

ex_soonruledays_to_ex_div <= 30
Goes ex-dividend within 30 days
next_upEnglish → ruleIs the next declared dividend larger than the last one?
div_ttmEnglish → ruleHas the stock paid more than $2 per share in dividends over the past year?
raisedruleraised_last > 0.5
Raised its last dividend

Answers

QuestionAnswerReading
ex_soon
Goes ex-dividend within 30 days
0.0537false
next_up
Is the next declared dividend larger than the last one
compiled to next_div_amount > last_div_amount
0.50not known
div_ttm
Has the stock paid more than $2 per share in dividends over the past year
compiled to div_ttm > 2
0.9463true
raised
Raised its last dividend
0.1409false

What it means

For PG on the session of 2026-10-30: True now: Has the stock paid more than $2 per share in dividends over the past year. Not true: Goes ex-dividend within 30 days; Raised its last dividend. Not known (no data on record): Is the next declared dividend larger than the last one.

A declared ex-date tells treasury a payment is coming within weeks; the amount comes from the board declaration, which the next_div_amount fact reflects.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "PG"
  },
  "questions": {
    "ex_soon": {
      "type": "yes_no",
      "ask": "days_to_ex_div <= 30"
    },
    "next_up": {
      "type": "yes_no",
      "instructions": "Is the next declared dividend larger than the last one?"
    },
    "div_ttm": {
      "type": "yes_no",
      "instructions": "Has the stock paid more than $2 per share in dividends over the past year?"
    },
    "raised": {
      "type": "yes_no",
      "ask": "raised_last > 0.5"
    }
  }
}
Response JSON (PG, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "ex_soon": {
      "yes_no": 0.0537,
      "rule": "days_to_ex_div <= 30",
      "basis": "rule"
    },
    "next_up": {
      "yes_no": 0.5,
      "rule": "next_div_amount > last_div_amount",
      "basis": "pattern"
    },
    "div_ttm": {
      "yes_no": 0.9463,
      "rule": "div_ttm > 2",
      "basis": "pattern"
    },
    "raised": {
      "yes_no": 0.1409,
      "rule": "raised_last > 0.5",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "PG",
    "as_of": "2026-10-30"
  }
}

days_to_ex_div div_ttm last_div_amount next_div_amount raised_last

Corporate treasury · example 15

Treasury: is gold (GLD, IAU) trending as a reserve hedge?

A treasury with a small gold sleeve checks the trend and stretch of the two gold ETFs it can use.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
extEnglish → ruleIs the stock more than 10% above its 200-day moving average?
zscorerulezscore(C, 50) > 2
More than two standard deviations above its 50-day mean
rsi70rulersi(C, 14) > 70
RSI above 70
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symboltrendruleextrulezscorerulersi70ruledrop5forecast
GLD0.05370.05370.05380.05370.435
IAU0.05370.05370.05380.05370.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: Is the stock above its 200-day moving average: true for none of 2. Is the stock more than 10% above its 200-day moving average: true for none of 2. More than two standard deviations above its 50-day mean: true for none of 2. RSI above 70: true for none of 2. Highest odds for “A 5% drawdown within a month”: GLD at 44%.

A stretched trend is a reason to add slowly rather than all at once; both ETFs should read the same, which also checks the data.

Request JSON (GLD; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "GLD"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "ext": {
      "type": "yes_no",
      "instructions": "Is the stock more than 10% above its 200-day moving average?"
    },
    "zscore": {
      "type": "yes_no",
      "ask": "zscore(C, 50) > 2"
    },
    "rsi70": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 70"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}
Response JSON (GLD, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.0537,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "ext": {
      "yes_no": 0.0537,
      "rule": "C > sma(C, 200) * 1.1",
      "basis": "comparison"
    },
    "zscore": {
      "yes_no": 0.0538,
      "rule": "zscore(C, 50) > 2",
      "basis": "rule"
    },
    "rsi70": {
      "yes_no": 0.0537,
      "rule": "rsi(C, 14) > 70",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.435
    }
  },
  "context": {
    "symbol": "GLD",
    "as_of": "2026-10-30"
  }
}

rsi sma zscore

Corporate treasury · example 16

Treasury: emerging-market exposure through EEM and EWZ

A company with Brazilian and EM revenue watches local equity funds as a proxy for currency and macro stress.

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

State

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

Questions

trendruleC > sma(C, 50)
Above the 50-day average
breakdownruleC < lowest(L, 20)
Closed under the 20-day low
gap_downruleO < C[-1] * 0.99
Opened more than 1% below yesterday's close
trruletr() > 2 * atr(14)
True range more than twice the 14-day ATR
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

Symboltrendrulebreakdownrulegap_downruletrruledrop10forecastFired
EEM0.06110.56780.8750.32690.422none
EWZ0.06710.27550.63010.08510.508none

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 tr >= 0.6→Webhookteams-treasury
EEM 0 of 1 fired · dry run, nothing sent
EWZ 0 of 1 fired · dry run, nothing sent

What it means

Session of 2026-10-30, 2 symbols: Above the 50-day average: true for none of 2. Closed under the 20-day low: true for none of 2. Opened more than 1% below yesterday's close: true for EEM, EWZ of 2. True range more than twice the 14-day ATR: true for none of 2. Highest odds for “A 10% drawdown within a month”: EWZ at 51%. em_stress fired for none.

A wide-range breakdown in a country fund is an early sign of currency stress; treasury checks hedge coverage for that revenue.

Request JSON (EEM; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "EEM"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "breakdown": {
      "type": "yes_no",
      "ask": "C < lowest(L, 20)"
    },
    "gap_down": {
      "type": "yes_no",
      "ask": "O < C[-1] * 0.99"
    },
    "tr": {
      "type": "yes_no",
      "ask": "tr() > 2 * atr(14)"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "em_stress",
      "when": "breakdown >= 0.6 or tr >= 0.6",
      "do": "webhook",
      "connection": "teams-treasury",
      "body": {
        "text": "{{symbol}} ({{as_of}}): EM stress check. Breakdown {{breakdown|pct}}, wide range {{tr|pct}}, 10% drop odds {{drop10|pct}}."
      }
    }
  ],
  "dry_run": true
}
Response JSON (EEM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.0611,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "breakdown": {
      "yes_no": 0.5678,
      "rule": "C < lowest(L, 20)",
      "basis": "rule"
    },
    "gap_down": {
      "yes_no": 0.875,
      "rule": "O < C[-1] * 0.99",
      "basis": "rule"
    },
    "tr": {
      "yes_no": 0.3269,
      "rule": "tr() > 2 * atr(14)",
      "basis": "rule"
    },
    "drop10": {
      "yes_no": 0.422
    }
  },
  "context": {
    "symbol": "EEM",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "em_stress",
      "fired": false,
      "status": "skipped"
    }
  ]
}

atr lowest offset sma tr

Corporate treasury · example 17

A Monday rates memo for the CFO

Every Monday, treasury emails a short read on the Treasury curve ETFs and inflation-linked bonds.

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

State

{"symbol":"SHY"} then IEF, TLT, TIP, one request each. The server fills in the latest completed session.

Questions

trendEnglish → ruleIs the stock above its 50-day moving average?
down_monthEnglish → ruleIs the stock down more than 5% over the last month?
sma50_fallingEnglish → ruleIs the 50-day moving average falling, lower than 5 sessions ago?
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

Symboltrendruledown_monthrulesma50_fallingruleup_weekforecastFired
SHY0.89710.05370.82350.594memo_line
IEF0.85140.05370.8940.483memo_line
TLT0.84820.05370.70640.561memo_line
TIP0.86490.05370.83560.567memo_line

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

Actions

Rules on the answers decide what to send. Each symbol runs its own request, so each one can fire.

trend >= 0→Emailcfo
SHY 1 of 1 fired · dry run, nothing sent
memo_linewould send (dry run)Email → cfo
{
  "subject": "Rates memo: SHY (2026-10-30)",
  "text": "SHY: above the 50-day 90%, 50-day falling 82%, down 5% on the month 5%. Higher in a week (forecast) 59%."
}
IEF 1 of 1 fired · dry run, nothing sent
memo_linewould send (dry run)Email → cfo
{
  "subject": "Rates memo: IEF (2026-10-30)",
  "text": "IEF: above the 50-day 85%, 50-day falling 89%, down 5% on the month 5%. Higher in a week (forecast) 48%."
}
TLT 1 of 1 fired · dry run, nothing sent
memo_linewould send (dry run)Email → cfo
{
  "subject": "Rates memo: TLT (2026-10-30)",
  "text": "TLT: above the 50-day 85%, 50-day falling 71%, down 5% on the month 5%. Higher in a week (forecast) 56%."
}
TIP 1 of 1 fired · dry run, nothing sent
memo_linewould send (dry run)Email → cfo
{
  "subject": "Rates memo: TIP (2026-10-30)",
  "text": "TIP: above the 50-day 86%, 50-day falling 84%, down 5% on the month 5%. Higher in a week (forecast) 57%."
}

What it means

Session of 2026-10-30, 4 symbols: Is the stock above its 50-day moving average: true for SHY, IEF, TLT, TIP of 4. Is the stock down more than 5% over the last month: true for none of 4. Is the 50-day moving average falling, lower than 5 sessions ago: true for SHY, IEF, TLT, TIP of 4. Highest odds for “Higher in a week”: SHY at 59%. memo_line fired for SHY, IEF, TLT, TIP.

Every instrument gets a line every week, so the CFO sees the curve even when nothing dramatic happened.

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

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

{
  "name": "A Monday rates memo for the CFO",
  "symbols": "SHY IEF TLT TIP",
  "days": [
    1
  ],
  "at_time": "07:30",
  "model": "ora-fin-0.1.1",
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 50-day moving average?"
    },
    "down_month": {
      "type": "yes_no",
      "instructions": "Is the stock down more than 5% over the last month?"
    },
    "sma50_falling": {
      "type": "yes_no",
      "instructions": "Is the 50-day moving average falling, lower than 5 sessions ago?"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  },
  "actions": [
    {
      "id": "memo_line",
      "when": "trend >= 0",
      "do": "email",
      "connection": "cfo",
      "subject": "Rates memo: {{symbol}} ({{as_of}})",
      "message": "{{symbol}}: above the 50-day {{trend|pct}}, 50-day falling {{sma50_falling|pct}}, down 5% on the month {{down_month|pct}}. Higher in a week (forecast) {{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",
      "instructions": "Is the stock above its 50-day moving average?"
    },
    "down_month": {
      "type": "yes_no",
      "instructions": "Is the stock down more than 5% over the last month?"
    },
    "sma50_falling": {
      "type": "yes_no",
      "instructions": "Is the 50-day moving average falling, lower than 5 sessions ago?"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  },
  "actions": [
    {
      "id": "memo_line",
      "when": "trend >= 0",
      "do": "email",
      "connection": "cfo",
      "subject": "Rates memo: {{symbol}} ({{as_of}})",
      "message": "{{symbol}}: above the 50-day {{trend|pct}}, 50-day falling {{sma50_falling|pct}}, down 5% on the month {{down_month|pct}}. Higher in a week (forecast) {{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": "comparison"
    },
    "down_month": {
      "yes_no": 0.0537,
      "rule": "C / C[-21] - 1 < -0.05",
      "basis": "pattern"
    },
    "sma50_falling": {
      "yes_no": 0.8235,
      "rule": "sma(C, 50) < ref(sma(C, 50), -5)",
      "basis": "pattern"
    },
    "up_week": {
      "yes_no": 0.594
    }
  },
  "context": {
    "symbol": "SHY",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "memo_line",
      "fired": true,
      "status": "dry_run",
      "do": "email",
      "connection": "cfo",
      "preview": {
        "subject": "Rates memo: SHY (2026-10-30)",
        "text": "SHY: above the 50-day 90%, 50-day falling 82%, down 5% on the month 5%. Higher in a week (forecast) 59%."
      }
    }
  ]
}

offset ref sma

Corporate treasury · example 18

Treasury: short-duration credit (LQD vs SHY) spread check

Compare investment-grade credit with short Treasuries to sense whether funding spreads are widening.

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 SHY, one request each. The server fills in the latest completed session.

Questions

trendruleC > sma(C, 50)
Above the 50-day average
lowestruleC < lowest(C, 10)
Closed under every close of the last ten sessions
willrrulewillr(14) < -80
Williams %R below -80
percentrulepercentrank(C, 50) < 10
Close in the bottom tenth of its 50-day range
down_weekforecastWill the stock be lower in a week?
Lower in a week

Answers

Symboltrendrulelowestrulewillrrulepercentruledown_weekforecast
LQD0.65520.06360.06350.06050.476
SHY0.89710.05370.06240.06260.481

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, SHY of 2. Closed under every close of the last ten sessions: true for none of 2. Williams %R below -80: true for none of 2. Close in the bottom tenth of its 50-day range: true for none of 2. Highest odds for “Lower in a week”: SHY at 48%.

If LQD is weak while SHY is steady, credit spreads are widening; the team may draw on cheaper facilities first.

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, 10)"
    },
    "willr": {
      "type": "yes_no",
      "ask": "willr(14) < -80"
    },
    "percent": {
      "type": "yes_no",
      "ask": "percentrank(C, 50) < 10"
    },
    "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.0636,
      "rule": "C < lowest(C, 10)",
      "basis": "rule"
    },
    "willr": {
      "yes_no": 0.0635,
      "rule": "willr(14) < -80",
      "basis": "rule"
    },
    "percent": {
      "yes_no": 0.0605,
      "rule": "percentrank(C, 50) < 10",
      "basis": "rule"
    },
    "down_week": {
      "yes_no": 0.476
    }
  },
  "context": {
    "symbol": "LQD",
    "as_of": "2026-10-30"
  }
}

lowest percentrank sma willr

Corporate treasury · example 19

Treasury: key supplier stocks in distress? (INTC, F, GM)

Watch the equity of large suppliers or customers for signs of stress that could affect payment terms.

ora-fin-0.1.13 symbols, one request each5 questions2 actions
  1. State3 symbols
  2. Questions5 asked
  3. Answersreal, captured
  4. Actions2 rules · dry run

State

{"symbol":"INTC"} then F, GM, one request each. 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?
cutEnglish → ruleDid the stock cut its dividend last time?
missEnglish → ruleDid the stock miss EPS estimates last quarter?
crowsrulethree_black_crows()
three black crows candle: Three red bars, each closing lower and opening inside the previous body.
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

Symbolbearrulecutrulemissrulecrowsruledrop10forecastFired
INTC0.94630.14090.14090.05370.836ok
F0.93090.14090.14090.05990.532ok
GM0.05370.14090.14090.0780.525ok

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.

bear >= 0.6 and (cut >= 0.6 or miss >= 0.6)→Webhookcredit-watchlist
else→Slacktreasury
INTC 1 of 2 fired · dry run, nothing sent
supplier_watchrule false: skipped
okwould send (dry run)Slack → treasury
{
  "text": "INTC (2026-10-30): no combined stress flag (bear 95%, cut 14%, miss 14%)."
}
F 1 of 2 fired · dry run, nothing sent
supplier_watchrule false: skipped
okwould send (dry run)Slack → treasury
{
  "text": "F (2026-10-30): no combined stress flag (bear 93%, cut 14%, miss 14%)."
}
GM 1 of 2 fired · dry run, nothing sent
supplier_watchrule false: skipped
okwould send (dry run)Slack → treasury
{
  "text": "GM (2026-10-30): no combined stress flag (bear 5%, cut 14%, miss 14%)."
}

What it means

Session of 2026-10-30, 3 symbols: Is the stock in bear-market territory, more than 20% below its 52-week high: true for INTC, F of 3. Did the stock cut its dividend last time: true for none of 3. Did the stock miss EPS estimates last quarter: 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. Highest odds for “A 10% drawdown within a month”: INTC at 84%. supplier_watch fired for none. ok fired for INTC, F, GM.

A bear market plus a cut or a miss is the combination that sends the name to the credit watchlist; any single fact alone is noted only.

Request JSON (INTC; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "INTC"
  },
  "questions": {
    "bear": {
      "type": "yes_no",
      "instructions": "Is the stock in bear-market territory, more than 20% below its 52-week high?"
    },
    "cut": {
      "type": "yes_no",
      "instructions": "Did the stock cut its dividend last time?"
    },
    "miss": {
      "type": "yes_no",
      "instructions": "Did the stock miss EPS estimates last quarter?"
    },
    "crows": {
      "type": "yes_no",
      "ask": "three_black_crows()"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "supplier_watch",
      "when": "bear >= 0.6 and (cut >= 0.6 or miss >= 0.6)",
      "do": "webhook",
      "connection": "credit-watchlist",
      "body": {
        "counterparty": "{{symbol}}",
        "as_of": "{{as_of}}",
        "flag": "equity_stress",
        "p_bear_market": "{{bear}}",
        "p_dividend_cut": "{{cut}}",
        "p_eps_miss": "{{miss}}"
      }
    },
    {
      "id": "ok",
      "when": "else",
      "do": "slack",
      "connection": "treasury",
      "message": "{{symbol}} ({{as_of}}): no combined stress flag (bear {{bear|pct}}, cut {{cut|pct}}, miss {{miss|pct}})."
    }
  ],
  "dry_run": true
}
Response JSON (INTC, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "bear": {
      "yes_no": 0.9463,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "pattern"
    },
    "cut": {
      "yes_no": 0.1409,
      "rule": "cut_last > 0.5",
      "basis": "pattern"
    },
    "miss": {
      "yes_no": 0.1409,
      "rule": "miss_eps_last > 0.5",
      "basis": "pattern"
    },
    "crows": {
      "yes_no": 0.0537,
      "rule": "three_black_crows()",
      "basis": "rule"
    },
    "drop10": {
      "yes_no": 0.836
    }
  },
  "context": {
    "symbol": "INTC",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "supplier_watch",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "ok",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "treasury",
      "preview": {
        "text": "INTC (2026-10-30): no combined stress flag (bear 95%, cut 14%, miss 14%)."
      }
    }
  ]
}

cut_last max miss_eps_last three_black_crows

Corporate treasury · example 20

Treasury: risk appetite through JNK and HYG

Two high-yield ETFs read together tell treasury whether markets are welcoming 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":"JNK"} then HYG, one request each. The server fills in the latest completed session.

Questions

trendruleC > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)
Stacked averages: close > 20 EMA > 50 > 200
obvruleobv() > sma(obv(), 20)
On-balance volume above its 20-day average
hl2ruleC > hl2()
Closed in the upper half of the day's range
ohlcruleohlc4() > sma(C, 10)
The day's average price above the 10-day average close
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symboltrendruleobvrulehl2ruleohlcruledrop5forecast
JNK0.09660.62850.6510.77570.011
HYG0.09960.16750.58260.79290.009

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: Stacked averages: close > 20 EMA > 50 > 200: true for none of 2. On-balance volume above its 20-day average: true for JNK of 2. Closed in the upper half of the day's range: true for JNK of 2. The day's average price above the 10-day average close: true for JNK, HYG of 2. Highest odds for “A 5% drawdown within a month”: JNK at 1%.

Stacked averages and rising volume in junk bonds describe strong risk appetite; that is when refinancing lower-rated subsidiaries is easiest.

Request JSON (JNK; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "JNK"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)"
    },
    "obv": {
      "type": "yes_no",
      "ask": "obv() > sma(obv(), 20)"
    },
    "hl2": {
      "type": "yes_no",
      "ask": "C > hl2()"
    },
    "ohlc": {
      "type": "yes_no",
      "ask": "ohlc4() > sma(C, 10)"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}
Response JSON (JNK, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.0966,
      "rule": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)",
      "basis": "rule"
    },
    "obv": {
      "yes_no": 0.6285,
      "rule": "obv() > sma(obv(), 20)",
      "basis": "rule"
    },
    "hl2": {
      "yes_no": 0.651,
      "rule": "C > hl2()",
      "basis": "rule"
    },
    "ohlc": {
      "yes_no": 0.7757,
      "rule": "ohlc4() > sma(C, 10)",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.011
    }
  },
  "context": {
    "symbol": "JNK",
    "as_of": "2026-10-30"
  }
}

ema hl2 obv ohlc4 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, CFO office, Bank credit analyst, Financial journalist / media.

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