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

Pension fund: 20 ways to use Ora

Policy portfolio, rebalancing ranges and risk-off signals for a long-horizon board. 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 (42)

sma 14offset 8ref 7max 4roc 3avg 3lowest 3atr 3log 2sqrt 2std 2macd 1macdhist 1macdsignal 1wma 1obv 1three_black_crows 1zscore 1engulfing_bull 1harami_bull 1rsi 1div_count_ttm 1div_yield_ttm 1raised_last 1dark_cloud 1engulfing_bear 1evening_star 1tweezer_top 1min 1cut_last 1marubozu 1pays_dividend 1highest 1percentrank 1beat_eps_last 1days_to_earnings 1lowestbars 1spinning_top 1ema 1linreg 1mean 1rec 1

Examples 1–10 of 20 · page 1 of 2

Pension fund · example 1

Policy portfolio trend board: VTI, VEA, VWO, BND

Before the quarterly board meeting, show the trend state of each policy-portfolio building block in plain words.

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

State

{"symbol":"VTI"} then VEA, VWO, BND, one request each. The server fills in the latest completed session.

Questions

above_200dEnglish → ruleIs the stock above its 200-day moving average?
sma200_uprulesma(C, 200) > ref(sma(C, 200), -20)
The 200-day average is rising
three_monthruleC > C[-63]
Higher than three months ago
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symbolabove_200drulesma200_uprulethree_monthruledrop5forecast
VTI0.94150.94630.35240.187
VEA0.58770.94630.16660.223
VWO0.08870.94630.0550.255
BND0.20130.06740.29860.007

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

What it means

Session of 2026-10-30, 4 symbols: Is the stock above its 200-day moving average: true for VTI of 4. The 200-day average is rising: true for VTI, VEA, VWO of 4. Higher than three months ago: true for none of 4. Highest odds for “A 5% drawdown within a month”: VWO at 26%.

The board sees which asset classes are in long-term uptrends; the policy weights stay where the investment policy statement puts them.

Request JSON (VTI; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VTI"
  },
  "questions": {
    "above_200d": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "sma200_up": {
      "type": "yes_no",
      "ask": "sma(C, 200) > ref(sma(C, 200), -20)"
    },
    "three_month": {
      "type": "yes_no",
      "ask": "C > C[-63]"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}
Response JSON (VTI, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "above_200d": {
      "yes_no": 0.9415,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "sma200_up": {
      "yes_no": 0.9463,
      "rule": "sma(C, 200) > ref(sma(C, 200), -20)",
      "basis": "rule"
    },
    "three_month": {
      "yes_no": 0.3524,
      "rule": "C > C[-63]",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.187
    }
  },
  "context": {
    "symbol": "VTI",
    "as_of": "2026-10-30"
  }
}

offset ref sma

Pension fund · example 2

Rebalancing band trigger: has VTI moved more than the band?

The fund rebalances when equities move outside a band. Check the three-month move and open a rebalancing ticket when it is breached.

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

State

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

Questions

up_bandruleroc(C, 63) > 8
Up more than 8% over three months
down_bandruleroc(C, 63) < -8
Down more than 8% over three months
trendruleC > sma(C, 50)
Above the 50-day average
vol_riseforecastWill volatility rise over the next 5 days?
Volatility rising over 5 days

Answers

QuestionAnswerReading
up_band
Up more than 8% over three months
0.0537false
down_band
Down more than 8% over three months
0.0537false
trend
Above the 50-day average
0.1242false
vol_rise
Volatility rising over 5 days
0.51852% · close to even

Actions

Rules on the answers decide what to send.

up_band >= 0.6→Webhookrebalancing-system
down_band >= 0.6→Webhookrebalancing-system
else→Slackpension-investments
What each action would send 1 of 3 fired · dry run, nothing sent
trimrule false: skipped
addrule false: skipped
insidewould send (dry run)Slack → pension-investments
{
  "text": "VTI (2026-10-30) is inside its rebalancing band (up 5%, down 5%)."
}

What it means

For VTI on the session of 2026-10-30: Not true: Up more than 8% over three months; Down more than 8% over three months; Above the 50-day average. Forecasts: Volatility rising over 5 days 52%. Fired: inside (Slack → pension-investments).

The band is a mechanical rule from the policy; a ticket opens only when the move clears it, and staff execute with the custodian.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VTI"
  },
  "questions": {
    "up_band": {
      "type": "yes_no",
      "ask": "roc(C, 63) > 8"
    },
    "down_band": {
      "type": "yes_no",
      "ask": "roc(C, 63) < -8"
    },
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "vol_rise": {
      "type": "yes_no",
      "instructions": "Will volatility rise over the next 5 days?"
    }
  },
  "actions": [
    {
      "id": "trim",
      "when": "up_band >= 0.6",
      "do": "webhook",
      "connection": "rebalancing-system",
      "body": {
        "ticket": "rebalance",
        "asset": "{{symbol}}",
        "direction": "trim_to_target",
        "as_of": "{{as_of}}",
        "p_band": "{{up_band}}"
      }
    },
    {
      "id": "add",
      "when": "down_band >= 0.6",
      "do": "webhook",
      "connection": "rebalancing-system",
      "body": {
        "ticket": "rebalance",
        "asset": "{{symbol}}",
        "direction": "add_to_target",
        "as_of": "{{as_of}}",
        "p_band": "{{down_band}}"
      }
    },
    {
      "id": "inside",
      "when": "else",
      "do": "slack",
      "connection": "pension-investments",
      "message": "{{symbol}} ({{as_of}}) is inside its rebalancing band (up {{up_band|pct}}, down {{down_band|pct}})."
    }
  ],
  "dry_run": true
}
Response JSON (VTI, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "up_band": {
      "yes_no": 0.0537,
      "rule": "roc(C, 63) > 8",
      "basis": "rule"
    },
    "down_band": {
      "yes_no": 0.0537,
      "rule": "roc(C, 63) < -8",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.1242,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "vol_rise": {
      "yes_no": 0.518
    }
  },
  "context": {
    "symbol": "VTI",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "trim",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "add",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "inside",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "pension-investments",
      "preview": {
        "text": "VTI (2026-10-30) is inside its rebalancing band (up 5%, down 5%)."
      }
    }
  ]
}

roc sma

Pension fund · example 3

Risk-off read for the board: SPY trend, volatility and breadth

A long-horizon board wants one plain question answered: is the market in a risk-off regime right now?

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

below_200dEnglish → ruleIs the stock below its 200-day moving average?
deathEnglish → ruleDid a death cross happen today?
hvrulestd(log(C / C[-1]), 20) * sqrt(252) > 0.4
Annualized 20-day volatility above 40%
drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

QuestionAnswerReading
below_200d
Is the stock below its 200-day moving average
compiled to C < sma(C, 200)
0.0549false
death
Did a death cross happen today
compiled to (sma(C, 50) < sma(C, 200)) and (ref(sma(C, 50), -1) >= ref(sma(C, 200), -1))
0.0537false
hv
Annualized 20-day volatility above 40%
0.0537false
drawdown
More than 20% off the 52-week high
0.0537false
drop10
A 10% drawdown within a month
0.20521% · unlikely

Actions

Rules on the answers decide what to send.

below_200d >= 0.6 and drawdown >= 0.6→Emailinvestment-committee
else→Emailinvestment-committee
What each action would send 1 of 2 fired · dry run, nothing sent
risk_offrule false: skipped
normalwould send (dry run)Email → investment-committee
{
  "subject": "Regime check: not risk-off (2026-10-30)",
  "text": "SPY: below the 200-day 5%, 20% drawdown 5%. No action."
}

What it means

For SPY on the session of 2026-10-30: Not true: Is the stock below its 200-day moving average; Did a death cross happen today; Annualized 20-day volatility above 40%; More than 20% off the 52-week high. Forecasts: A 10% drawdown within a month 21%. Fired: normal (Email → investment-committee).

The committee gets a short email either way, and the regime label comes from exact rules, so it is reproducible.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "below_200d": {
      "type": "yes_no",
      "instructions": "Is the stock below its 200-day moving average?"
    },
    "death": {
      "type": "yes_no",
      "instructions": "Did a death cross happen today?"
    },
    "hv": {
      "type": "yes_no",
      "ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4"
    },
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "risk_off",
      "when": "below_200d >= 0.6 and drawdown >= 0.6",
      "do": "email",
      "connection": "investment-committee",
      "subject": "Risk-off regime: {{symbol}} ({{as_of}})",
      "message": "{{symbol}} is below its 200-day and more than 20% off its high. Further 10% drawdown odds: {{drop10|pct}}. No policy change without committee approval."
    },
    {
      "id": "normal",
      "when": "else",
      "do": "email",
      "connection": "investment-committee",
      "subject": "Regime check: not risk-off ({{as_of}})",
      "message": "{{symbol}}: below the 200-day {{below_200d|pct}}, 20% drawdown {{drawdown|pct}}. No action."
    }
  ],
  "dry_run": true
}
Response JSON (SPY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "below_200d": {
      "yes_no": 0.0549,
      "rule": "C < sma(C, 200)",
      "basis": "comparison"
    },
    "death": {
      "yes_no": 0.0537,
      "rule": "(sma(C, 50) < sma(C, 200)) and (ref(sma(C, 50), -1) >= ref(sma(C, 200), -1))",
      "basis": "pattern"
    },
    "hv": {
      "yes_no": 0.0537,
      "rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4",
      "basis": "rule"
    },
    "drawdown": {
      "yes_no": 0.0537,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "drop10": {
      "yes_no": 0.205
    }
  },
  "context": {
    "symbol": "SPY",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "risk_off",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "normal",
      "fired": true,
      "status": "dry_run",
      "do": "email",
      "connection": "investment-committee",
      "preview": {
        "subject": "Regime check: not risk-off (2026-10-30)",
        "text": "SPY: below the 200-day 5%, 20% drawdown 5%. No action."
      }
    }
  ]
}

log max offset ref sma sqrt std

Pension fund · example 4

Liability hedge: TLT trend and momentum

Long Treasuries hedge the liabilities. Check whether long-bond prices are trending, which affects the funded-status swing.

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
macdrulemacd(C) > macdsignal(C)
MACD above its signal line
histrulemacdhist(C) > ref(macdhist(C), -1)
MACD histogram rising
wmarulewma(C, 20) > wma(C, 50)
20-day weighted average above the 50-day
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
trend
Above the 50-day average
0.8482true
macd
MACD above its signal line
0.9084true
hist
MACD histogram rising
0.2733false
wma
20-day weighted average above the 50-day
0.8569true
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; MACD above its signal line; 20-day weighted average above the 50-day. Not true: MACD histogram rising. Forecasts: Higher in a week 56%.

Rising long-bond prices lift both the hedge and the liability value; the funded-status report shows the facts next to each other.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TLT"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "macd": {
      "type": "yes_no",
      "ask": "macd(C) > macdsignal(C)"
    },
    "hist": {
      "type": "yes_no",
      "ask": "macdhist(C) > ref(macdhist(C), -1)"
    },
    "wma": {
      "type": "yes_no",
      "ask": "wma(C, 20) > wma(C, 50)"
    },
    "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"
    },
    "macd": {
      "yes_no": 0.9084,
      "rule": "macd(C) > macdsignal(C)",
      "basis": "rule"
    },
    "hist": {
      "yes_no": 0.2733,
      "rule": "macdhist(C) > ref(macdhist(C), -1)",
      "basis": "rule"
    },
    "wma": {
      "yes_no": 0.8569,
      "rule": "wma(C, 20) > wma(C, 50)",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.561
    }
  },
  "context": {
    "symbol": "TLT",
    "as_of": "2026-10-30"
  }
}

macd macdhist macdsignal ref sma wma

Pension fund · example 5

Weekly funded-status inputs: equities and long bonds

Every Friday after the close, post the trend answers for the growth and hedge assets to the funded-status dashboard.

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

State

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

Questions

trendruleC > sma(C, 50)
Above the 50-day average
up_monthEnglish → ruleIs the stock up over the last month?
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symboltrendruleup_monthruledrop5forecastFired
VTI0.12420.25170.187row
TLT0.84820.92980.164row
LQD0.65520.90780.022row

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→Webhookfunded-status-dashboard
VTI 1 of 1 fired · dry run, nothing sent
rowwould send (dry run)Webhook → funded-status-dashboard
{
  "asset": "VTI",
  "as_of": "2026-10-30",
  "above_50d": 0.1242,
  "up_month": 0.2517,
  "p_drop5": 0.187
}
TLT 1 of 1 fired · dry run, nothing sent
rowwould send (dry run)Webhook → funded-status-dashboard
{
  "asset": "TLT",
  "as_of": "2026-10-30",
  "above_50d": 0.8482,
  "up_month": 0.9298,
  "p_drop5": 0.164
}
LQD 1 of 1 fired · dry run, nothing sent
rowwould send (dry run)Webhook → funded-status-dashboard
{
  "asset": "LQD",
  "as_of": "2026-10-30",
  "above_50d": 0.6552,
  "up_month": 0.9078,
  "p_drop5": 0.022
}

What it means

Session of 2026-10-30, 3 symbols: Above the 50-day average: true for TLT, LQD of 3. Is the stock up over the last month: true for TLT, LQD of 3. Highest odds for “A 5% drawdown within a month”: VTI at 19%. row fired for VTI, TLT, LQD.

One row per asset each week; actuarial staff combine them with the liability side, the rows themselves are not a funded-status number.

As a scheduled workflow (Fri at 17: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": "Weekly funded-status inputs: equities and long bonds",
  "symbols": "VTI TLT LQD",
  "days": [
    5
  ],
  "at_time": "17:30",
  "model": "ora-fin-0.1.1",
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "up_month": {
      "type": "yes_no",
      "instructions": "Is the stock up over the last month?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "row",
      "when": "trend >= 0",
      "do": "webhook",
      "connection": "funded-status-dashboard",
      "body": {
        "asset": "{{symbol}}",
        "as_of": "{{as_of}}",
        "above_50d": "{{trend}}",
        "up_month": "{{up_month}}",
        "p_drop5": "{{drop5}}"
      }
    }
  ]
}
Request JSON (VTI; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VTI"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "up_month": {
      "type": "yes_no",
      "instructions": "Is the stock up over the last month?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "row",
      "when": "trend >= 0",
      "do": "webhook",
      "connection": "funded-status-dashboard",
      "body": {
        "asset": "{{symbol}}",
        "as_of": "{{as_of}}",
        "above_50d": "{{trend}}",
        "up_month": "{{up_month}}",
        "p_drop5": "{{drop5}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (VTI, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.1242,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "up_month": {
      "yes_no": 0.2517,
      "rule": "C > C[-21]",
      "basis": "pattern"
    },
    "drop5": {
      "yes_no": 0.187
    }
  },
  "context": {
    "symbol": "VTI",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "row",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "funded-status-dashboard",
      "preview": {
        "body": {
          "asset": "VTI",
          "as_of": "2026-10-30",
          "above_50d": 0.1242,
          "up_month": 0.2517,
          "p_drop5": 0.187
        }
      }
    }
  ]
}

offset sma

Pension fund · example 6

Public proxy for private real estate: XLRE

Private real estate is marked with a lag. Watch its listed proxy to anticipate the next valuation round.

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

State

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

Questions

drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
trendEnglish → ruleIs the stock above its 200-day moving average?
down_monthEnglish → ruleIs the stock down more than 5% over the last month?
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
trend
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.5384on the line (true)
down_month
Is the stock down more than 5% over the last month
compiled to C / C[-21] - 1 < -0.05
0.0537false
drop10
A 10% drawdown within a month
0.20220% · unlikely

What it means

For XLRE on the session of 2026-10-30: Not true: More than 20% off the 52-week high; Is the stock down more than 5% over the last month. On the line: Is the stock above its 200-day moving average. Forecasts: A 10% drawdown within a month 20%.

A listed proxy falling hard today often shows up in private marks a quarter later; staff warn the board early.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "XLRE"
  },
  "questions": {
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "down_month": {
      "type": "yes_no",
      "instructions": "Is the stock down more than 5% over the last month?"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  }
}
Response JSON (XLRE, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "drawdown": {
      "yes_no": 0.0537,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.5384,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "down_month": {
      "yes_no": 0.0537,
      "rule": "C / C[-21] - 1 < -0.05",
      "basis": "pattern"
    },
    "drop10": {
      "yes_no": 0.202
    }
  },
  "context": {
    "symbol": "XLRE",
    "as_of": "2026-10-30"
  }
}

max offset sma

Pension fund · example 7

Inflation sleeve: TIP, DBC and GLD together

The real-assets sleeve should help when inflation surprises. Check the three funds on the same trend and momentum rules.

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

State

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

Questions

trendruleC > sma(C, 50)
Above the 50-day average
rocruleroc(C, 20) > 5
Up more than 5% in 20 sessions
obvruleobv() > sma(obv(), 20)
On-balance volume above its 20-day average
rally5forecastWill it rally at least 5% at some point in the next month?
A 5% rally within a month

Answers

Symboltrendrulerocruleobvrulerally5forecastFired
TIP0.86490.07720.89190.008sleeve_row
DBC0.88880.25840.22790.392sleeve_row
GLD0.08070.08390.13580.503sleeve_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→Webhookrisk-dashboard
TIP 1 of 1 fired · dry run, nothing sent
sleeve_rowwould send (dry run)Webhook → risk-dashboard
{
  "sleeve": "inflation",
  "fund": "TIP",
  "as_of": "2026-10-30",
  "above_50d": 0.8649,
  "roc20_5": 0.0772,
  "p_rally5": 0.008
}
DBC 1 of 1 fired · dry run, nothing sent
sleeve_rowwould send (dry run)Webhook → risk-dashboard
{
  "sleeve": "inflation",
  "fund": "DBC",
  "as_of": "2026-10-30",
  "above_50d": 0.8888,
  "roc20_5": 0.2584,
  "p_rally5": 0.392
}
GLD 1 of 1 fired · dry run, nothing sent
sleeve_rowwould send (dry run)Webhook → risk-dashboard
{
  "sleeve": "inflation",
  "fund": "GLD",
  "as_of": "2026-10-30",
  "above_50d": 0.0807,
  "roc20_5": 0.0839,
  "p_rally5": 0.503
}

What it means

Session of 2026-10-30, 3 symbols: Above the 50-day average: true for TIP, DBC of 3. Up more than 5% in 20 sessions: true for none of 3. On-balance volume above its 20-day average: true for TIP of 3. Highest odds for “A 5% rally within a month”: GLD at 50%. sleeve_row fired for TIP, DBC, GLD.

If all three trend, the sleeve is doing its job; mixed answers are normal and are noted in the quarterly report.

Request JSON (TIP; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TIP"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "roc": {
      "type": "yes_no",
      "ask": "roc(C, 20) > 5"
    },
    "obv": {
      "type": "yes_no",
      "ask": "obv() > sma(obv(), 20)"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "sleeve_row",
      "when": "trend >= 0",
      "do": "webhook",
      "connection": "risk-dashboard",
      "body": {
        "sleeve": "inflation",
        "fund": "{{symbol}}",
        "as_of": "{{as_of}}",
        "above_50d": "{{trend}}",
        "roc20_5": "{{roc}}",
        "p_rally5": "{{rally5}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (TIP, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.8649,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "roc": {
      "yes_no": 0.0772,
      "rule": "roc(C, 20) > 5",
      "basis": "rule"
    },
    "obv": {
      "yes_no": 0.8919,
      "rule": "obv() > sma(obv(), 20)",
      "basis": "rule"
    },
    "rally5": {
      "yes_no": 0.008
    }
  },
  "context": {
    "symbol": "TIP",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "sleeve_row",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "risk-dashboard",
      "preview": {
        "body": {
          "sleeve": "inflation",
          "fund": "TIP",
          "as_of": "2026-10-30",
          "above_50d": 0.8649,
          "roc20_5": 0.0772,
          "p_rally5": 0.008
        }
      }
    }
  ]
}

obv roc sma

Pension fund · example 8

Credit sleeve health: HYG drawdown checks

The credit sleeve supplies income; check high yield for breakdowns and heavy selling before the monthly credit review.

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

State

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

Questions

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
zsrulezscore(C, 20) < -2
Two deviations under the 20-day mean
crowsrulethree_black_crows()
three black crows candle: Three red bars, each closing lower and opening inside the previous body.
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

QuestionAnswerReading
breakdown
Closed under the 20-day low
0.0811false
down_vol
Down on heavy volume
0.1932false
zs
Two deviations under the 20-day mean
0.0641false
crows
three black crows candle: Three red bars, each closing lower and opening inside the previous body.
0.1432false
drop5
A 5% drawdown within a month
0.0091% · unlikely

Actions

Rules on the answers decide what to send.

breakdown >= 0.6 or zs >= 0.6→Slackcredit-review
What each action would send 0 of 1 fired · dry run, nothing sent
credit_reviewrule false: skipped

What it means

For HYG on the session of 2026-10-30: Not true: Closed under the 20-day low; Down on heavy volume; Two deviations under the 20-day mean; three black crows candle: Three red bars, each closing lower and opening inside the previous body.. Forecasts: A 5% drawdown within a month 1%. No action fired: every rule was false.

A breakdown or an extreme z-score adds the fund to the credit review agenda; nothing is sold automatically.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "HYG"
  },
  "questions": {
    "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)"
    },
    "zs": {
      "type": "yes_no",
      "ask": "zscore(C, 20) < -2"
    },
    "crows": {
      "type": "yes_no",
      "ask": "three_black_crows()"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "credit_review",
      "when": "breakdown >= 0.6 or zs >= 0.6",
      "do": "slack",
      "connection": "credit-review",
      "message": "{{symbol}} ({{as_of}}): 20-day breakdown {{breakdown|pct}}, z-score under -2 {{zs|pct}}. Add to the monthly credit review."
    }
  ],
  "dry_run": true
}
Response JSON (HYG, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "breakdown": {
      "yes_no": 0.0811,
      "rule": "C < lowest(L, 20)",
      "basis": "rule"
    },
    "down_vol": {
      "yes_no": 0.1932,
      "rule": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)",
      "basis": "rule"
    },
    "zs": {
      "yes_no": 0.0641,
      "rule": "zscore(C, 20) < -2",
      "basis": "rule"
    },
    "crows": {
      "yes_no": 0.1432,
      "rule": "three_black_crows()",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.009
    }
  },
  "context": {
    "symbol": "HYG",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "credit_review",
      "fired": false,
      "status": "skipped"
    }
  ]
}

avg lowest offset ref three_black_crows zscore

Pension fund · example 9

Emerging markets allocation: EEM momentum and reversals

Check emerging-market equities for trend and reversal candles ahead of a possible tactical tilt discussion.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
engulfruleengulfing_bull()
engulfing bull candle: A green body that engulfs yesterday's red body.
haramiruleharami_bull()
harami bull candle: A small green body inside yesterday's red body.
rsirulersi(C, 14) > 50
RSI above 50
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

QuestionAnswerReading
trend
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.1449false
engulf
engulfing bull candle: A green body that engulfs yesterday's red body.
0.0823false
harami
harami bull candle: A small green body inside yesterday's red body.
0.0701false
rsi
RSI above 50
0.072false
beat_spy
Beating SPY over a month
0.50150% · close to even

What it means

For EEM on the session of 2026-10-30: Not true: Is the stock above its 200-day moving average; engulfing bull candle: A green body that engulfs yesterday's red body.; harami bull candle: A small green body inside yesterday's red body.; RSI above 50. Forecasts: Beating SPY over a month 50%.

Any tilt needs the committee; the answers describe the current state of the market, not a recommendation.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "EEM"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "engulf": {
      "type": "yes_no",
      "ask": "engulfing_bull()"
    },
    "harami": {
      "type": "yes_no",
      "ask": "harami_bull()"
    },
    "rsi": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 50"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  }
}
Response JSON (EEM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.1449,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "engulf": {
      "yes_no": 0.0823,
      "rule": "engulfing_bull()",
      "basis": "rule"
    },
    "harami": {
      "yes_no": 0.0701,
      "rule": "harami_bull()",
      "basis": "rule"
    },
    "rsi": {
      "yes_no": 0.072,
      "rule": "rsi(C, 14) > 50",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.501
    }
  },
  "context": {
    "symbol": "EEM",
    "as_of": "2026-10-30"
  }
}

engulfing_bull harami_bull rsi sma

Pension fund · example 10

Benchmark context for growth managers: IWF

The fund uses growth and value managers. See whether the growth style is in favor so manager performance is judged in context.

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

State

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

Questions

trendruleC > sma(C, 50)
Above the 50-day average
leaderruleroc(C, 63) > 10 and C >= 0.95 * max(H, 63)
Up more than 10% in a quarter, near the high
momentumruleroc(C, 20) > 5 and V > avg(V, 50) and C > sma(C, 50)
Momentum with participation
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

QuestionAnswerReading
trend
Above the 50-day average
0.0608false
leader
Up more than 10% in a quarter, near the high
0.0537false
momentum
Momentum with participation
0.0537false
beat_spy
Beating SPY over a month
0.49750% · close to even

What it means

For IWF on the session of 2026-10-30: Not true: Above the 50-day average; Up more than 10% in a quarter, near the high; Momentum with participation. Forecasts: Beating SPY over a month 50%.

A growth manager trailing when the growth benchmark is weak is expected; the context goes into the manager review notes.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "IWF"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "leader": {
      "type": "yes_no",
      "ask": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)"
    },
    "momentum": {
      "type": "yes_no",
      "ask": "roc(C, 20) > 5 and V > avg(V, 50) and C > sma(C, 50)"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  }
}
Response JSON (IWF, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.0608,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "leader": {
      "yes_no": 0.0537,
      "rule": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)",
      "basis": "rule"
    },
    "momentum": {
      "yes_no": 0.0537,
      "rule": "roc(C, 20) > 5 and V > avg(V, 50) and C > sma(C, 50)",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.497
    }
  },
  "context": {
    "symbol": "IWF",
    "as_of": "2026-10-30"
  }
}

avg max roc 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 Institutions: ETF issuer, Index provider, Insurance investment office, Endowment, Sovereign wealth fund.

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