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 · Institutions

Insurance investment office: 20 ways to use Ora

Liability-aware portfolios: rates, credit, income and drawdown limits. Each example is a complete, runnable request with the real answers it returned (32 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 (44)

sma 11offset 8ref 7rsi 4atr 4highest 3log 3abs 3avg 2ema 2max 2div_yield_ttm 2sqrt 2std 2last_earnings_move 2min 2sum 2linreg 1macd 1macdsignal 1lowest 1cut_last 1pays_dividend 1years_of_growth 1evening_star 1harami_bear 1cci 1miss_eps_last 1misses_last4 1gravestone_doji 1shooting_star 1between 1engulfing_bull 1morning_star 1piercing_line 1days_to_earnings 1roc 1atr_pct 1three_white_soldiers 1doji 1hammer 1hanging_man 1outside_bar 1sign 1

Examples 1–10 of 20 · page 1 of 2

Insurance investment office · example 1

TLT: is the duration trend turning for the ALM desk?

Asset-liability matching depends on rates. Read the trend in long Treasuries before the monthly ALM meeting.

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

trendruleC > sma(C, 50)
Above the 50-day average
longEnglish → ruleIs the stock above its 200-day moving average?
macdEnglish → ruleIs the MACD line above its signal line?
linregrulelinreg(C, 50) > ref(linreg(C, 50), -10)
50-day regression line higher than two weeks ago
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
trend
Above the 50-day average
0.8482true
long
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.1127false
macd
Is the MACD line above its signal line
compiled to macd(C) > macdsignal(C)
0.9084true
linreg
50-day regression line higher than two weeks ago
0.8753true
up_week
Higher in a week
0.56156% · close to even

What it means

For TLT on the session of 2026-10-30: True now: Above the 50-day average; Is the MACD line above its signal line; 50-day regression line higher than two weeks ago. Not true: Is the stock above its 200-day moving average. Forecasts: Higher in a week 56%.

Rising bond prices mean falling yields, which lifts the value of long liabilities too; the desk uses the trend read to frame the duration-gap discussion.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TLT"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "long": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "macd": {
      "type": "yes_no",
      "instructions": "Is the MACD line above its signal line?"
    },
    "linreg": {
      "type": "yes_no",
      "ask": "linreg(C, 50) > ref(linreg(C, 50), -10)"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (TLT, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.8482,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "long": {
      "yes_no": 0.1127,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "macd": {
      "yes_no": 0.9084,
      "rule": "macd(C) > macdsignal(C)",
      "basis": "comparison"
    },
    "linreg": {
      "yes_no": 0.8753,
      "rule": "linreg(C, 50) > ref(linreg(C, 50), -10)",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.561
    }
  },
  "context": {
    "symbol": "TLT",
    "as_of": "2026-10-30"
  }
}

linreg macd macdsignal ref sma

Insurance investment office · example 2

HYG vs LQD: is credit risk appetite fading?

High yield weakening while investment grade holds is an early credit warning. Compare the two bond funds on the same rules.

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

State

{"symbol":"HYG"} then LQD, 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
down_volruleC < C[-1] and V > 1.5 * ref(avg(V, 20), -1)
Down on heavy volume
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symboltrendrulebreakdownruledown_volruledrop5forecastFired
HYG0.19140.08110.19320.009none
LQD0.65520.05370.15470.022none

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→Emailcredit-committee
HYG 0 of 1 fired · dry run, nothing sent
LQD 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 LQD of 2. Closed under the 20-day low: true for none of 2. Down on heavy volume: true for none of 2. Highest odds for “A 5% drawdown within a month”: LQD at 2%. credit_warning fired for none.

A breakdown in HYG without one in LQD is the classic spread-widening signal; the committee reviews before any reallocation.

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)"
    },
    "down_vol": {
      "type": "yes_no",
      "ask": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "credit_warning",
      "when": "breakdown >= 0.6",
      "do": "email",
      "connection": "credit-committee",
      "subject": "{{symbol}} broke its 20-day low ({{as_of}})",
      "message": "{{symbol}} closed under its 20-day low (rule {{breakdown|pct}}), down on volume {{down_vol|pct}}. Review credit-risk budget usage."
    }
  ],
  "dry_run": true
}
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"
    },
    "down_vol": {
      "yes_no": 0.1932,
      "rule": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.009
    }
  },
  "context": {
    "symbol": "HYG",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "credit_warning",
      "fired": false,
      "status": "skipped"
    }
  ]
}

avg lowest offset ref sma

Insurance investment office · example 3

TIP: is the inflation hedge working?

Check the inflation-linked bond fund's trend and momentum for the quarterly inflation-risk report.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
sma50_uprulesma(C, 50) > ref(sma(C, 50), -10)
The 50-day average is rising
rsi50rulersi(C, 14) > 50
RSI above 50
emaruleC > ema(C, 50)
Above its 50-day exponential average
vol_upforecastWill volatility be higher over the next month?
Higher volatility next month

Answers

QuestionAnswerReading
trend
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.3682false
sma50_up
The 50-day average is rising
0.1203false
rsi50
RSI above 50
0.9112true
ema
Above its 50-day exponential average
0.866true
vol_up
Higher volatility next month
0.5252% · close to even

Actions

Rules on the answers decide what to send.

trend >= 0→Emailinvestment-committee
What each action would send 1 of 1 fired · dry run, nothing sent
hedge_reportwould send (dry run)Email → investment-committee
{
  "subject": "TIP inflation hedge read (2026-10-30)",
  "text": "TIP: above the 200-day 37%, 50-day rising 12%, above the 50-day EMA 87%. Higher volatility next month: 52%."
}

What it means

For TIP on the session of 2026-10-30: True now: RSI above 50; Above its 50-day exponential average. Not true: Is the stock above its 200-day moving average; The 50-day average is rising. Forecasts: Higher volatility next month 52%. Fired: hedge_report (Email → investment-committee).

Trend rules true mean the hedge has been adding value lately; the report states the facts and leaves the hedge ratio to the committee.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TIP"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "sma50_up": {
      "type": "yes_no",
      "ask": "sma(C, 50) > ref(sma(C, 50), -10)"
    },
    "rsi50": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 50"
    },
    "ema": {
      "type": "yes_no",
      "ask": "C > ema(C, 50)"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will volatility be higher over the next month?"
    }
  },
  "actions": [
    {
      "id": "hedge_report",
      "when": "trend >= 0",
      "do": "email",
      "connection": "investment-committee",
      "subject": "{{symbol}} inflation hedge read ({{as_of}})",
      "message": "{{symbol}}: above the 200-day {{trend|pct}}, 50-day rising {{sma50_up|pct}}, above the 50-day EMA {{ema|pct}}. Higher volatility next month: {{vol_up|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (TIP, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.3682,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "sma50_up": {
      "yes_no": 0.1203,
      "rule": "sma(C, 50) > ref(sma(C, 50), -10)",
      "basis": "rule"
    },
    "rsi50": {
      "yes_no": 0.9112,
      "rule": "rsi(C, 14) > 50",
      "basis": "rule"
    },
    "ema": {
      "yes_no": 0.866,
      "rule": "C > ema(C, 50)",
      "basis": "rule"
    },
    "vol_up": {
      "yes_no": 0.52
    }
  },
  "context": {
    "symbol": "TIP",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "hedge_report",
      "fired": true,
      "status": "dry_run",
      "do": "email",
      "connection": "investment-committee",
      "preview": {
        "subject": "TIP inflation hedge read (2026-10-30)",
        "text": "TIP: above the 200-day 37%, 50-day rising 12%, above the 50-day EMA 87%. Higher volatility next month: 52%."
      }
    }
  ]
}

ema ref rsi sma

Insurance investment office · example 4

Equity sleeve drawdown limit: VTI

Regulatory capital charges rise with equity risk. Alert the CIO if the US equity fund is in a 20% drawdown or falling fast.

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

State

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

Questions

drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
down5English → ruleIs the stock down more than 5% over the last month?
chandelierruleC < highest(H, 22) - 3 * atr(22)
Chandelier exit: 3 ATR under the 22-day high
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

QuestionAnswerReading
drawdown
More than 20% off the 52-week high
0.0537false
down5
Is the stock down more than 5% over the last month
compiled to C / C[-21] - 1 < -0.05
0.0662false
chandelier
Chandelier exit: 3 ATR under the 22-day high
0.6764true
drop10
A 10% drawdown within a month
0.18919% · unlikely

Actions

Rules on the answers decide what to send.

drawdown >= 0.6→Emailcio
down5 >= 0.6 or chandelier >= 0.6→Slackinvestment-office
What each action would send 1 of 2 fired · dry run, nothing sent
limit_breachrule false: skipped
warningwould send (dry run)Slack → investment-office
{
  "text": "VTI (2026-10-30): down over 5% this month (7%) or below its chandelier stop (68%). Watch the limit."
}

What it means

For VTI on the session of 2026-10-30: True now: Chandelier exit: 3 ATR under the 22-day high. Not true: More than 20% off the 52-week high; Is the stock down more than 5% over the last month. Forecasts: A 10% drawdown within a month 19%. Fired: warning (Slack → investment-office).

The limit email needs the drawdown fact; the earlier warning goes to the team channel so nobody is surprised at month end.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VTI"
  },
  "questions": {
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "down5": {
      "type": "yes_no",
      "instructions": "Is the stock down more than 5% over the last month?"
    },
    "chandelier": {
      "type": "yes_no",
      "ask": "C < highest(H, 22) - 3 * atr(22)"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "limit_breach",
      "when": "drawdown >= 0.6",
      "do": "email",
      "connection": "cio",
      "subject": "{{symbol}}: equity drawdown limit ({{as_of}})",
      "message": "{{symbol}} is more than 20% below its 52-week high. 10% further drawdown odds: {{drop10|pct}}. Capital-charge review needed."
    },
    {
      "id": "warning",
      "when": "down5 >= 0.6 or chandelier >= 0.6",
      "do": "slack",
      "connection": "investment-office",
      "message": "{{symbol}} ({{as_of}}): down over 5% this month ({{down5|pct}}) or below its chandelier stop ({{chandelier|pct}}). Watch the limit."
    }
  ],
  "dry_run": true
}
Response JSON (VTI, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "drawdown": {
      "yes_no": 0.0537,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "down5": {
      "yes_no": 0.0662,
      "rule": "C / C[-21] - 1 < -0.05",
      "basis": "pattern"
    },
    "chandelier": {
      "yes_no": 0.6764,
      "rule": "C < highest(H, 22) - 3 * atr(22)",
      "basis": "rule"
    },
    "drop10": {
      "yes_no": 0.189
    }
  },
  "context": {
    "symbol": "VTI",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "limit_breach",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "warning",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "investment-office",
      "preview": {
        "text": "VTI (2026-10-30): down over 5% this month (7%) or below its chandelier stop (68%). Watch the limit."
      }
    }
  ]
}

atr highest max offset

Insurance investment office · example 5

Dividend payer for the general account: is JNJ still paying and growing?

The general account holds dividend payers for steady income. Confirm this one still pays, grows and has not cut.

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

State

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

Questions

paysrulepays_dividend > 0.5
Pays a dividend
growerruleyears_of_growth >= 10
Ten years of dividend growth
cutEnglish → ruleDid the stock cut its dividend last time?
yield3English → ruleIs the dividend yield above 3%?
raise_nextforecastWill the company raise its dividend next year?
Raising the dividend next year

Answers

QuestionAnswerReading
pays
Pays a dividend
0.8591true
grower
Ten years of dividend growth
0.9463true
cut
Did the stock cut its dividend last time
compiled to cut_last > 0.5
0.1409false
yield3
Is the dividend yield above 3%
compiled to div_yield_ttm > 3
0.0648false
raise_next
Raising the dividend next year
0.49550% · close to even

What it means

For JNJ on the session of 2026-10-30: True now: Pays a dividend; Ten years of dividend growth. Not true: Did the stock cut its dividend last time; Is the dividend yield above 3%. Forecasts: Raising the dividend next year 50%.

Payout facts come from the dividend record; a cut would trigger a review of the income budget, the forecast is context only.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "JNJ"
  },
  "questions": {
    "pays": {
      "type": "yes_no",
      "ask": "pays_dividend > 0.5"
    },
    "grower": {
      "type": "yes_no",
      "ask": "years_of_growth >= 10"
    },
    "cut": {
      "type": "yes_no",
      "instructions": "Did the stock cut its dividend last time?"
    },
    "yield3": {
      "type": "yes_no",
      "instructions": "Is the dividend yield above 3%?"
    },
    "raise_next": {
      "type": "yes_no",
      "instructions": "Will the company raise its dividend next year?"
    }
  }
}
Response JSON (JNJ, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "pays": {
      "yes_no": 0.8591,
      "rule": "pays_dividend > 0.5",
      "basis": "rule"
    },
    "grower": {
      "yes_no": 0.9463,
      "rule": "years_of_growth >= 10",
      "basis": "rule"
    },
    "cut": {
      "yes_no": 0.1409,
      "rule": "cut_last > 0.5",
      "basis": "pattern"
    },
    "yield3": {
      "yes_no": 0.0648,
      "rule": "div_yield_ttm > 3",
      "basis": "pattern"
    },
    "raise_next": {
      "yes_no": 0.495
    }
  },
  "context": {
    "symbol": "JNJ",
    "as_of": "2026-10-30"
  }
}

cut_last div_yield_ttm pays_dividend years_of_growth

Insurance investment office · example 6

VNQ: real-estate sleeve health

Insurers hold real estate for long-dated income. Check REIT trend, income and a possible top pattern.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
yield3rulediv_yield_ttm > 3
Yield above 3%
eveningruleevening_star()
evening star candle: A green bar, a small bar that stays above its close, then a red bar closing below the middle of the first.
harami_bearruleharami_bear()
harami bear candle: A small red body inside yesterday's green body.
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

QuestionAnswerReading
trend
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.6285true
yield3
Yield above 3%
0.8893true
evening
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.
0.0581false
harami_bear
harami bear candle: A small red body inside yesterday's green body.
0.0856false
drop5
A 5% drawdown within a month
0.21822% · unlikely

What it means

For VNQ on the session of 2026-10-30: True now: Is the stock above its 200-day moving average; Yield above 3%. Not true: 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.; harami bear candle: A small red body inside yesterday's green body.. Forecasts: A 5% drawdown within a month 22%.

A bearish three-bar or harami pattern after a rise is a caution for the quarterly review, not a sale on its own.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VNQ"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "yield3": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 3"
    },
    "evening": {
      "type": "yes_no",
      "ask": "evening_star()"
    },
    "harami_bear": {
      "type": "yes_no",
      "ask": "harami_bear()"
    },
    "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": {
    "trend": {
      "yes_no": 0.6285,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "yield3": {
      "yes_no": 0.8893,
      "rule": "div_yield_ttm > 3",
      "basis": "rule"
    },
    "evening": {
      "yes_no": 0.0581,
      "rule": "evening_star()",
      "basis": "rule"
    },
    "harami_bear": {
      "yes_no": 0.0856,
      "rule": "harami_bear()",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.218
    }
  },
  "context": {
    "symbol": "VNQ",
    "as_of": "2026-10-30"
  }
}

div_yield_ttm evening_star harami_bear sma

Insurance investment office · example 7

Volatility regime check on SPY before rebalancing

Rebalance into equities in calm regimes, wait in turbulent ones. Read SPY's realized volatility and expansion before the trade.

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

State

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

Questions

hv_lowEnglish → ruleIs 20-day historical volatility below 20%?
vol5English → ruleIs 5-day volatility higher than 20-day volatility?
atr_expruleatr(14) > 1.2 * ref(atr(14), -10)
ATR up 20% in two weeks
vol_riseforecastWill volatility rise over the next 5 days?
Volatility rising over 5 days
hv30forecastWill annualized volatility over the next 21 sessions exceed 30%?
Next-month volatility above 30%

Answers

QuestionAnswerReading
hv_low
Is 20-day historical volatility below 20%
compiled to std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2
0.9463true
vol5
Is 5-day volatility higher than 20-day volatility
compiled to std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19)
0.8872true
atr_exp
ATR up 20% in two weeks
0.2117false
vol_rise
Volatility rising over 5 days
0.55856% · close to even
hv30
Next-month volatility above 30%
0.56456% · close to even

Actions

Rules on the answers decide what to send.

hv_low >= 0.6 and vol_rise < 0.6→Webhookrebalancing-system
else→Slackinvestment-office
What each action would send 1 of 2 fired · dry run, nothing sent
gowould send (dry run)Webhook → rebalancing-system
{
  "ticket": "rebalance_equity",
  "underlying": "SPY",
  "as_of": "2026-10-30",
  "regime": "calm",
  "p_hv_low": 0.9463,
  "p_vol_rise": 0.558
}
waitrule false: skipped

What it means

For SPY on the session of 2026-10-30: True now: Is 20-day historical volatility below 20%; Is 5-day volatility higher than 20-day volatility. Not true: ATR up 20% in two weeks. Forecasts: Volatility rising over 5 days 56%; Next-month volatility above 30% 56%. Fired: go (Webhook → rebalancing-system).

The ticket only opens in a calm regime with no rising-volatility forecast; otherwise the team waits and the channel says why.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "hv_low": {
      "type": "yes_no",
      "instructions": "Is 20-day historical volatility below 20%?"
    },
    "vol5": {
      "type": "yes_no",
      "instructions": "Is 5-day volatility higher than 20-day volatility?"
    },
    "atr_exp": {
      "type": "yes_no",
      "ask": "atr(14) > 1.2 * ref(atr(14), -10)"
    },
    "vol_rise": {
      "type": "yes_no",
      "instructions": "Will volatility rise over the next 5 days?"
    },
    "hv30": {
      "type": "yes_no",
      "instructions": "Will annualized volatility over the next 21 sessions exceed 30%?"
    }
  },
  "actions": [
    {
      "id": "go",
      "when": "hv_low >= 0.6 and vol_rise < 0.6",
      "do": "webhook",
      "connection": "rebalancing-system",
      "body": {
        "ticket": "rebalance_equity",
        "underlying": "{{symbol}}",
        "as_of": "{{as_of}}",
        "regime": "calm",
        "p_hv_low": "{{hv_low}}",
        "p_vol_rise": "{{vol_rise}}"
      }
    },
    {
      "id": "wait",
      "when": "else",
      "do": "slack",
      "connection": "investment-office",
      "message": "{{symbol}} ({{as_of}}): volatility not calm (20-day under 20% {{hv_low|pct}}, rising over 5 days {{vol_rise|pct}}). Hold the rebalance."
    }
  ],
  "dry_run": true
}
Response JSON (SPY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "hv_low": {
      "yes_no": 0.9463,
      "rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2",
      "basis": "pattern"
    },
    "vol5": {
      "yes_no": 0.8872,
      "rule": "std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19)",
      "basis": "pattern"
    },
    "atr_exp": {
      "yes_no": 0.2117,
      "rule": "atr(14) > 1.2 * ref(atr(14), -10)",
      "basis": "rule"
    },
    "vol_rise": {
      "yes_no": 0.558
    },
    "hv30": {
      "yes_no": 0.564
    }
  },
  "context": {
    "symbol": "SPY",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "go",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "rebalancing-system",
      "preview": {
        "body": {
          "ticket": "rebalance_equity",
          "underlying": "SPY",
          "as_of": "2026-10-30",
          "regime": "calm",
          "p_hv_low": 0.9463,
          "p_vol_rise": 0.558
        }
      }
    },
    {
      "id": "wait",
      "fired": false,
      "status": "skipped"
    }
  ]
}

atr log offset ref sqrt std

Insurance investment office · example 8

EMB: emerging-market debt risk read

Emerging-market bonds are a yield pickup with currency risk. Check trend, breakout and momentum on the EM debt fund.

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

State

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

Questions

trendruleC > sma(C, 50)
Above the 50-day average
rsi50rulersi(C, 14) > 50
RSI above 50
breakoutruleC > highest(C, 20)
20-day closing breakout
ccirulecci(20) < -100
CCI below -100 (weak relative to its mean)
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
trend
Above the 50-day average
0.2584false
rsi50
RSI above 50
0.6777true
breakout
20-day closing breakout
0.3984false
cci
CCI below -100 (weak relative to its mean)
0.0649false
up_week
Higher in a week
0.5151% · close to even

What it means

For EMB on the session of 2026-10-30: True now: RSI above 50. Not true: Above the 50-day average; 20-day closing breakout; CCI below -100 (weak relative to its mean). Forecasts: Higher in a week 51%.

EMB below its 50-day with weak CCI is the picture that pressures the allocation; the desk reviews it with the dollar trend from the FX team.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "EMB"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "rsi50": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 50"
    },
    "breakout": {
      "type": "yes_no",
      "ask": "C > highest(C, 20)"
    },
    "cci": {
      "type": "yes_no",
      "ask": "cci(20) < -100"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (EMB, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.2584,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "rsi50": {
      "yes_no": 0.6777,
      "rule": "rsi(C, 14) > 50",
      "basis": "rule"
    },
    "breakout": {
      "yes_no": 0.3984,
      "rule": "C > highest(C, 20)",
      "basis": "rule"
    },
    "cci": {
      "yes_no": 0.0649,
      "rule": "cci(20) < -100",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.51
    }
  },
  "context": {
    "symbol": "EMB",
    "as_of": "2026-10-30"
  }
}

cci highest rsi sma

Insurance investment office · example 9

Weekly ALM digest: bonds, credit and equities

Every Friday after the close, the investment office gets one trend row per core fund for the ALM pack.

ora-fin-0.1.14 symbols, one request each3 questions1 actionworkflow · Fri at 17:00 ET
  1. ScheduleFri at 17:00 ET
  2. State4 symbols
  3. Questions3 asked
  4. Answersreal, captured
  5. Actions1 rule · dry run

State

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

Questions

trendruleC > sma(C, 50)
Above the 50-day average
longEnglish → ruleIs the stock above its 200-day moving average?
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symboltrendrulelongruledrop5forecastFired
TLT0.84820.11270.164pack_row
LQD0.65520.08410.022pack_row
HYG0.19140.19090.009pack_row
VTI0.12420.94150.187pack_row

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→Webhookalm-pack
TLT 1 of 1 fired · dry run, nothing sent
pack_rowwould send (dry run)Webhook → alm-pack
{
  "fund": "TLT",
  "as_of": "2026-10-30",
  "above_50d": 0.8482,
  "above_200d": 0.1127,
  "p_drop5": 0.164
}
LQD 1 of 1 fired · dry run, nothing sent
pack_rowwould send (dry run)Webhook → alm-pack
{
  "fund": "LQD",
  "as_of": "2026-10-30",
  "above_50d": 0.6552,
  "above_200d": 0.0841,
  "p_drop5": 0.022
}
HYG 1 of 1 fired · dry run, nothing sent
pack_rowwould send (dry run)Webhook → alm-pack
{
  "fund": "HYG",
  "as_of": "2026-10-30",
  "above_50d": 0.1914,
  "above_200d": 0.1909,
  "p_drop5": 0.009
}
VTI 1 of 1 fired · dry run, nothing sent
pack_rowwould send (dry run)Webhook → alm-pack
{
  "fund": "VTI",
  "as_of": "2026-10-30",
  "above_50d": 0.1242,
  "above_200d": 0.9415,
  "p_drop5": 0.187
}

What it means

Session of 2026-10-30, 4 symbols: Above the 50-day average: true for TLT, LQD of 4. Is the stock above its 200-day moving average: true for VTI of 4. Highest odds for “A 5% drawdown within a month”: VTI at 19%. pack_row fired for TLT, LQD, HYG, VTI.

Every fund posts a row; the pack shows the facts and the drawdown odds side by side for the committee.

As a scheduled workflow (Fri at 17:00 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": "Weekly ALM digest: bonds, credit and equities",
  "symbols": "TLT LQD HYG VTI",
  "days": [
    5
  ],
  "at_time": "17:00",
  "model": "ora-fin-0.1.1",
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "long": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "pack_row",
      "when": "trend >= 0",
      "do": "webhook",
      "connection": "alm-pack",
      "body": {
        "fund": "{{symbol}}",
        "as_of": "{{as_of}}",
        "above_50d": "{{trend}}",
        "above_200d": "{{long}}",
        "p_drop5": "{{drop5}}"
      }
    }
  ]
}
Request JSON (TLT; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TLT"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "long": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "pack_row",
      "when": "trend >= 0",
      "do": "webhook",
      "connection": "alm-pack",
      "body": {
        "fund": "{{symbol}}",
        "as_of": "{{as_of}}",
        "above_50d": "{{trend}}",
        "above_200d": "{{long}}",
        "p_drop5": "{{drop5}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (TLT, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.8482,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "long": {
      "yes_no": 0.1127,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "drop5": {
      "yes_no": 0.164
    }
  },
  "context": {
    "symbol": "TLT",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "pack_row",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "alm-pack",
      "preview": {
        "body": {
          "fund": "TLT",
          "as_of": "2026-10-30",
          "above_50d": 0.8482,
          "above_200d": 0.1127,
          "p_drop5": 0.164
        }
      }
    }
  ]
}

sma

Insurance investment office · example 10

Bank bond issuer BAC: earnings misses as a credit flag

The portfolio owns bank bonds. Equity-side earnings misses and drawdowns are early warnings for the credit analysts.

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

State

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

Questions

missEnglish → ruleDid the stock miss EPS estimates last quarter?
any_missEnglish → ruleHas the stock missed EPS estimates in any of the last 4 quarters?
drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
earn_fellEnglish → ruleDid the stock fall after its last earnings report?
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

QuestionAnswerReading
miss
Did the stock miss EPS estimates last quarter
compiled to miss_eps_last > 0.5
0.8591true
any_miss
Has the stock missed EPS estimates in any of the last 4 quarters
compiled to misses_last4 >= 1
0.55on the line (true)
drawdown
More than 20% off the 52-week high
0.7068true
earn_fell
Did the stock fall after its last earnings report
compiled to last_earnings_move < 0
0.9463true
drop10
A 10% drawdown within a month
0.44645% · close to even

What it means

For BAC on the session of 2026-10-30: True now: Did the stock miss EPS estimates last quarter; More than 20% off the 52-week high; Did the stock fall after its last earnings report. On the line: Has the stock missed EPS estimates in any of the last 4 quarters. Forecasts: A 10% drawdown within a month 45%.

A miss with a falling stock is a reason for the credit analyst to re-check the issuer; it is not a rating action.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "BAC"
  },
  "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?"
    },
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "earn_fell": {
      "type": "yes_no",
      "instructions": "Did the stock fall after its last earnings report?"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  }
}
Response JSON (BAC, 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.55,
      "rule": "misses_last4 >= 1",
      "basis": "pattern"
    },
    "drawdown": {
      "yes_no": 0.7068,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "earn_fell": {
      "yes_no": 0.9463,
      "rule": "last_earnings_move < 0",
      "basis": "pattern"
    },
    "drop10": {
      "yes_no": 0.446
    }
  },
  "context": {
    "symbol": "BAC",
    "as_of": "2026-10-30"
  }
}

last_earnings_move max miss_eps_last misses_last4

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 Institutions: ETF issuer, Index provider, Pension fund, Endowment, Sovereign wealth fund.

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