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 · Buy side

Fund-of-funds allocator: 20 ways to use Ora

Allocates across managers and ETFs: regime reads, factor sleeves and rebalancing bands. Each example is a complete, runnable request with the real answers it returned (53 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 (37)

sma 18roc 7max 5offset 5ema 3ref 3atr 3adx 2rsi 2lowest 2diminus 1diplus 1crossdown 1log 1sqrt 1std 1div_yield_ttm 1raised_last 1swinghigh 1swinglow 1avg 1crossup 1macd 1zscore 1dark_cloud 1doji 1engulfing_bear 1engulfing_bull 1harami_bear 1abs 1gap_up 1greatest 1least 1outside_bar 1highestbars 1sum 1rma 1

Examples 1–10 of 20 · page 1 of 2

Fund-of-funds allocator · example 1

Factor sleeve regime: momentum, quality, value, low volatility

Compare the four factor ETFs the allocator uses as sleeves on trend and momentum before the monthly rebalance.

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

State

{"symbol":"MTUM"} then QUAL, VLUE, USMV, one request each. The server fills in the latest completed session.

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
momruleC > C[-63]
Higher than three months ago
near_highruleC >= 0.98 * max(H, 252)
Within 2% of the 52-week high
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symboltrendrulemomrulenear_highrulebeat_spyforecast
MTUM0.26910.11440.05370.486
QUAL0.94630.68140.26050.495
VLUE0.92910.61930.05810.512
USMV0.94630.94390.82610.427

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 QUAL, VLUE, USMV of 4. Higher than three months ago: true for QUAL, VLUE, USMV of 4. Within 2% of the 52-week high: true for USMV of 4. Highest odds for “Beating SPY over a month”: VLUE at 51%.

Sleeves with trend and momentum keep or gain weight within their bands; the laggard is checked against its long-run role before cutting.

Request JSON (MTUM; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MTUM"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "mom": {
      "type": "yes_no",
      "ask": "C > C[-63]"
    },
    "near_high": {
      "type": "yes_no",
      "ask": "C >= 0.98 * max(H, 252)"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  }
}
Response JSON (MTUM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.2691,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "mom": {
      "yes_no": 0.1144,
      "rule": "C > C[-63]",
      "basis": "rule"
    },
    "near_high": {
      "yes_no": 0.0537,
      "rule": "C >= 0.98 * max(H, 252)",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.486
    }
  },
  "context": {
    "symbol": "MTUM",
    "as_of": "2026-10-30"
  }
}

max offset sma

Fund-of-funds allocator · example 2

Growth or value tilt: IWF versus IWD

Decide which style manager gets the next allocation by comparing the two style benchmarks.

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

State

{"symbol":"IWF"} then IWD, 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
rocruleroc(C, 63) > 5
Up more than 5% over three months
adxruleadx(14) > 20 and diplus(14) > diminus(14)
Trending up (ADX over 20 and +DI over −DI)
rsirulersi(C, 14) > 50
RSI above 50
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symboltrendrulerocruleadxrulersirulebeat_spyforecast
IWF0.06130.05830.05680.07370.497
IWD0.78380.13840.88230.85280.471

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 IWD of 2. Up more than 5% over three months: true for none of 2. Trending up (ADX over 20 and +DI over −DI): true for IWD of 2. RSI above 50: true for IWD of 2. Highest odds for “Beating SPY over a month”: IWF at 50%.

The stronger style benchmark guides where new money goes; the allocator still respects each manager's band.

Request JSON (IWF; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "IWF"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)"
    },
    "roc": {
      "type": "yes_no",
      "ask": "roc(C, 63) > 5"
    },
    "adx": {
      "type": "yes_no",
      "ask": "adx(14) > 20 and diplus(14) > diminus(14)"
    },
    "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 (IWF, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.0613,
      "rule": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)",
      "basis": "rule"
    },
    "roc": {
      "yes_no": 0.0583,
      "rule": "roc(C, 63) > 5",
      "basis": "rule"
    },
    "adx": {
      "yes_no": 0.0568,
      "rule": "adx(14) > 20 and diplus(14) > diminus(14)",
      "basis": "rule"
    },
    "rsi": {
      "yes_no": 0.0737,
      "rule": "rsi(C, 14) > 50",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.497
    }
  },
  "context": {
    "symbol": "IWF",
    "as_of": "2026-10-30"
  }
}

adx diminus diplus ema roc rsi sma

Fund-of-funds allocator · example 3

Regional allocation: US, Europe, Japan, emerging markets

Read trend across the regions the allocator funds through regional managers.

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

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
sma_uprulesma(C, 200) > ref(sma(C, 200), -20)
The 200-day average is rising
momruleroc(C, 20) > 5
Up more than 5% in 20 sessions
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symboltrendrulesma_uprulemomruledrop5forecast
VTI0.94150.94630.05370.187
VGK0.61180.89420.13180.126
EWJ0.7780.94630.05370.34
VWO0.08870.94630.05370.255

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, VGK, EWJ of 4. The 200-day average is rising: true for VTI, VGK, EWJ, VWO of 4. Up more than 5% in 20 sessions: true for none of 4. Highest odds for “A 5% drawdown within a month”: EWJ at 34%.

Regions with rising 200-day averages hold their weights; a region below a falling average is the first candidate to trim.

Request JSON (VTI; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VTI"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "sma_up": {
      "type": "yes_no",
      "ask": "sma(C, 200) > ref(sma(C, 200), -20)"
    },
    "mom": {
      "type": "yes_no",
      "ask": "roc(C, 20) > 5"
    },
    "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": {
    "trend": {
      "yes_no": 0.9415,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "sma_up": {
      "yes_no": 0.9463,
      "rule": "sma(C, 200) > ref(sma(C, 200), -20)",
      "basis": "rule"
    },
    "mom": {
      "yes_no": 0.0537,
      "rule": "roc(C, 20) > 5",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.187
    }
  },
  "context": {
    "symbol": "VTI",
    "as_of": "2026-10-30"
  }
}

ref roc sma

Fund-of-funds allocator · example 4

Rebalance band breach: equities versus bonds

When equities run far above trend or bonds fall far below, the allocator rebalances back to policy; check both sides.

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":"VTI"} then AGG, one request each. The server fills in the latest completed session.

Questions

extruleC > sma(C, 200) * 1.10
More than 10% above the 200-day
belowEnglish → ruleIs the stock more than 5% below its 50-day moving average?
ddruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symbolextrulebelowruleddruledrop5forecastFired
VTI0.05370.05460.05370.187none
AGG0.05370.05370.05370.009none

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.

ext >= 0.6 or below >= 0.6 or dd >= 0.6→Webhookallocation-system
VTI 0 of 1 fired · dry run, nothing sent
AGG 0 of 1 fired · dry run, nothing sent

What it means

Session of 2026-10-30, 2 symbols: More than 10% above the 200-day: true for none of 2. Is the stock more than 5% below its 50-day moving average: true for none of 2. More than 20% off the 52-week high: true for none of 2. Highest odds for “A 5% drawdown within a month”: VTI at 19%. rebalance fired for none.

The allocation system queues a rebalance check only when a sleeve is far from trend; the trade size comes from the policy weights.

Request JSON (VTI; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VTI"
  },
  "questions": {
    "ext": {
      "type": "yes_no",
      "ask": "C > sma(C, 200) * 1.10"
    },
    "below": {
      "type": "yes_no",
      "instructions": "Is the stock more than 5% below its 50-day moving average?"
    },
    "dd": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "rebalance",
      "when": "ext >= 0.6 or below >= 0.6 or dd >= 0.6",
      "do": "webhook",
      "connection": "allocation-system",
      "body": {
        "event": "rebalance_check",
        "symbol": "{{symbol}}",
        "p_extended": "{{ext}}",
        "p_below_50d": "{{below}}",
        "p_drawdown": "{{dd}}",
        "as_of": "{{as_of}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (VTI, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "ext": {
      "yes_no": 0.0537,
      "rule": "C > sma(C, 200) * 1.10",
      "basis": "rule"
    },
    "below": {
      "yes_no": 0.0546,
      "rule": "C < sma(C, 50) * 0.95",
      "basis": "comparison"
    },
    "dd": {
      "yes_no": 0.0537,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.187
    }
  },
  "context": {
    "symbol": "VTI",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "rebalance",
      "fired": false,
      "status": "skipped"
    }
  ]
}

max sma

Fund-of-funds allocator · example 5

Weekly benchmark health for every manager mandate

Each Friday, check the benchmark of every external manager and email the team where a benchmark breaks down.

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":"SPY"} then IWM, EFA, HYG, one request each. The server fills in the latest completed session.

Questions

breakdownruleC < lowest(L, 20)
Closed under the 20-day low
belowEnglish → ruleIs the stock below 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

Symbolbreakdownrulebelowruledrop5forecastFired
SPY0.62710.05490.203flag
IWM0.07410.44360.234none
EFA0.20370.32910.163none
HYG0.08110.80910.009flag

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 below >= 0.6→Emailallocation-team
SPY 1 of 1 fired · dry run, nothing sent
flagwould send (dry run)Email → allocation-team
{
  "subject": "Benchmark alert: SPY (2026-10-30)",
  "text": "SPY broke its 20-day low (63%) or is below its 200-day (5%). 5% drawdown odds: 20%. Expect weak relative numbers from managers benchmarked here."
}
IWM 0 of 1 fired · dry run, nothing sent
EFA 0 of 1 fired · dry run, nothing sent
HYG 1 of 1 fired · dry run, nothing sent
flagwould send (dry run)Email → allocation-team
{
  "subject": "Benchmark alert: HYG (2026-10-30)",
  "text": "HYG broke its 20-day low (8%) or is below its 200-day (81%). 5% drawdown odds: 1%. Expect weak relative numbers from managers benchmarked here."
}

What it means

Session of 2026-10-30, 4 symbols: Closed under the 20-day low: true for SPY of 4. Is the stock below its 200-day moving average: true for HYG of 4. Highest odds for “A 5% drawdown within a month”: IWM at 23%. flag fired for SPY, HYG.

A benchmark breaking down explains manager returns before the monthly reports arrive.

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 benchmark health for every manager mandate",
  "symbols": "SPY IWM EFA HYG",
  "days": [
    5
  ],
  "at_time": "17:00",
  "model": "ora-fin-0.1.1",
  "questions": {
    "breakdown": {
      "type": "yes_no",
      "ask": "C < lowest(L, 20)"
    },
    "below": {
      "type": "yes_no",
      "instructions": "Is the stock below 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": "flag",
      "when": "breakdown >= 0.6 or below >= 0.6",
      "do": "email",
      "connection": "allocation-team",
      "subject": "Benchmark alert: {{symbol}} ({{as_of}})",
      "message": "{{symbol}} broke its 20-day low ({{breakdown|pct}}) or is below its 200-day ({{below|pct}}). 5% drawdown odds: {{drop5|pct}}. Expect weak relative numbers from managers benchmarked here."
    }
  ]
}
Request JSON (SPY; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "breakdown": {
      "type": "yes_no",
      "ask": "C < lowest(L, 20)"
    },
    "below": {
      "type": "yes_no",
      "instructions": "Is the stock below 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": "flag",
      "when": "breakdown >= 0.6 or below >= 0.6",
      "do": "email",
      "connection": "allocation-team",
      "subject": "Benchmark alert: {{symbol}} ({{as_of}})",
      "message": "{{symbol}} broke its 20-day low ({{breakdown|pct}}) or is below its 200-day ({{below|pct}}). 5% drawdown odds: {{drop5|pct}}. Expect weak relative numbers from managers benchmarked here."
    }
  ],
  "dry_run": true
}
Response JSON (SPY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "breakdown": {
      "yes_no": 0.6271,
      "rule": "C < lowest(L, 20)",
      "basis": "rule"
    },
    "below": {
      "yes_no": 0.0549,
      "rule": "C < sma(C, 200)",
      "basis": "comparison"
    },
    "drop5": {
      "yes_no": 0.203
    }
  },
  "context": {
    "symbol": "SPY",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "flag",
      "fired": true,
      "status": "dry_run",
      "do": "email",
      "connection": "allocation-team",
      "preview": {
        "subject": "Benchmark alert: SPY (2026-10-30)",
        "text": "SPY broke its 20-day low (63%) or is below its 200-day (5%). 5% drawdown odds: 20%. Expect weak relative numbers from managers benchmarked here."
      }
    }
  ]
}

lowest sma

Fund-of-funds allocator · example 6

Real assets sleeve: gold, broad commodities, REITs

Check the inflation-hedge sleeve: which real asset is trending and which is stretched.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
stretchedruleC > sma(C, 20) + 2 * atr(14)
Stretched: more than 2 ATR above the 20-day
momruleroc(C, 63) > 10 and C >= 0.95 * max(H, 63)
Up more than 10% in a quarter, near the high
rally5forecastWill it rally at least 5% at some point in the next month?
A 5% rally within a month

Answers

Symboltrendrulestretchedrulemomrulerally5forecast
GLD0.05370.0630.05370.503
DBC0.94630.13810.80890.392
VNQ0.62850.45420.05370.247

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

What it means

Session of 2026-10-30, 3 symbols: Is the stock above its 200-day moving average: true for DBC, VNQ of 3. Stretched: more than 2 ATR above the 20-day: true for none of 3. Up more than 10% in a quarter, near the high: true for DBC of 3. Highest odds for “A 5% rally within a month”: GLD at 50%.

A stretched real asset is trimmed toward its band; a trending one with room keeps its weight.

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?"
    },
    "stretched": {
      "type": "yes_no",
      "ask": "C > sma(C, 20) + 2 * atr(14)"
    },
    "mom": {
      "type": "yes_no",
      "ask": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally 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"
    },
    "stretched": {
      "yes_no": 0.063,
      "rule": "C > sma(C, 20) + 2 * atr(14)",
      "basis": "rule"
    },
    "mom": {
      "yes_no": 0.0537,
      "rule": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)",
      "basis": "rule"
    },
    "rally5": {
      "yes_no": 0.503
    }
  },
  "context": {
    "symbol": "GLD",
    "as_of": "2026-10-30"
  }
}

atr max roc sma

Fund-of-funds allocator · example 7

Credit sleeve: high yield, loans and EM debt

The credit managers' benchmarks warn first in risk-off markets; check trend and breakdowns.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 50-day moving average?
breakdownruleC < lowest(L, 20)
Closed under the 20-day low
crossrulecrossdown(sma(C, 10), sma(C, 50))
10-day average crossed under the 50-day today
down_weekforecastWill the stock be lower in a week?
Lower in a week

Answers

Symboltrendrulebreakdownrulecrossruledown_weekforecast
HYG0.19140.08110.050.425
BKLN0.81330.06090.050.434
EMB0.25840.05660.050.441

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

What it means

Session of 2026-10-30, 3 symbols: Is the stock above its 50-day moving average: true for BKLN of 3. Closed under the 20-day low: true for none of 3. 10-day average crossed under the 50-day today: true for none of 3. Highest odds for “Lower in a week”: EMB at 44%.

Breakdowns across all three credit benchmarks are a risk-off signal for the whole portfolio, not just the credit sleeve.

Request JSON (HYG; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "HYG"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 50-day moving average?"
    },
    "breakdown": {
      "type": "yes_no",
      "ask": "C < lowest(L, 20)"
    },
    "cross": {
      "type": "yes_no",
      "ask": "crossdown(sma(C, 10), sma(C, 50))"
    },
    "down_week": {
      "type": "yes_no",
      "instructions": "Will the stock be lower in a week?"
    }
  }
}
Response JSON (HYG, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.1914,
      "rule": "C > sma(C, 50)",
      "basis": "comparison"
    },
    "breakdown": {
      "yes_no": 0.0811,
      "rule": "C < lowest(L, 20)",
      "basis": "rule"
    },
    "cross": {
      "yes_no": 0.05,
      "rule": "crossdown(sma(C, 10), sma(C, 50))",
      "basis": "rule"
    },
    "down_week": {
      "yes_no": 0.425
    }
  },
  "context": {
    "symbol": "HYG",
    "as_of": "2026-10-30"
  }
}

crossdown lowest sma

Fund-of-funds allocator · example 8

Volatility regime gate for adding risk

Add to equity managers only when the market is calm; read SPY realized volatility and the VXX trend.

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

calmEnglish → ruleIs 20-day historical volatility below 20%?
vol5English → ruleIs 5-day volatility higher than 20-day volatility?
atrruleatr(14) > 1.2 * ref(atr(14), -10)
ATR up 20% in two weeks
vol_monthforecastWill volatility be higher over the next month?
Higher volatility next month
hv30forecastWill annualized volatility over the next 21 sessions exceed 30%?
Next-month volatility above 30%

Answers

QuestionAnswerReading
calm
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
ATR up 20% in two weeks
0.2117false
vol_month
Higher volatility next month
0.6969% · likely
hv30
Next-month volatility above 30%
0.56456% · close to even

Actions

Rules on the answers decide what to send.

calm >= 0.6 and atr < 0.5→Slackallocation-team
else→Slackallocation-team
What each action would send 1 of 2 fired · dry run, nothing sent
add_riskwould send (dry run)Slack → allocation-team
{
  "text": "SPY (2026-10-30): calm regime (20-day vol under 20% 95%). Higher vol next month 69%. Equity adds can proceed per plan."
}
deferrule 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: Higher volatility next month 69%; Next-month volatility above 30% 56%. Fired: add_risk (Slack → allocation-team).

The gate turns a vague feeling about the market into a rule the team agreed on in advance.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "calm": {
      "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": {
      "type": "yes_no",
      "ask": "atr(14) > 1.2 * ref(atr(14), -10)"
    },
    "vol_month": {
      "type": "yes_no",
      "instructions": "Will volatility be higher over the next month?"
    },
    "hv30": {
      "type": "yes_no",
      "instructions": "Will annualized volatility over the next 21 sessions exceed 30%?"
    }
  },
  "actions": [
    {
      "id": "add_risk",
      "when": "calm >= 0.6 and atr < 0.5",
      "do": "slack",
      "connection": "allocation-team",
      "message": "SPY ({{as_of}}): calm regime (20-day vol under 20% {{calm|pct}}). Higher vol next month {{vol_month|pct}}. Equity adds can proceed per plan."
    },
    {
      "id": "defer",
      "when": "else",
      "do": "slack",
      "connection": "allocation-team",
      "message": "SPY ({{as_of}}): volatility not calm (5d over 20d {{vol5|pct}}, ATR expanding {{atr|pct}}). Defer equity adds a week."
    }
  ],
  "dry_run": true
}
Response JSON (SPY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "calm": {
      "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": {
      "yes_no": 0.2117,
      "rule": "atr(14) > 1.2 * ref(atr(14), -10)",
      "basis": "rule"
    },
    "vol_month": {
      "yes_no": 0.69
    },
    "hv30": {
      "yes_no": 0.564
    }
  },
  "context": {
    "symbol": "SPY",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "add_risk",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "allocation-team",
      "preview": {
        "text": "SPY (2026-10-30): calm regime (20-day vol under 20% 95%). Higher vol next month 69%. Equity adds can proceed per plan."
      }
    },
    {
      "id": "defer",
      "fired": false,
      "status": "skipped"
    }
  ]
}

atr log offset ref sqrt std

Fund-of-funds allocator · example 9

Income managers: dividend ETF health

Check the dividend strategies that income managers are benchmarked against: trend, yield and payout growth.

ora-fin-0.1.13 symbols, one request each3 questions
  1. State3 symbols
  2. Questions3 asked
  3. Answersreal, captured
  4. Actionsnone

State

{"symbol":"SCHD"} then VYM, NOBL, one request each. The server fills in the latest completed session.

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
yieldEnglish → ruleIs the dividend yield above 3%?
raisedruleraised_last > 0.5
Raised its last dividend

Answers

Symboltrendruleyieldruleraisedrule
SCHD0.94630.42870.8591
VYM0.92740.09010.1409
NOBL0.93350.06740.1409

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

What it means

Session of 2026-10-30, 3 symbols: Is the stock above its 200-day moving average: true for SCHD, VYM, NOBL of 3. Is the dividend yield above 3%: true for none of 3. Raised its last dividend: true for SCHD of 3.

Income benchmarks in an uptrend with steady payouts mean the income sleeve is doing its job; a falling trend is a review.

Request JSON (SCHD; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SCHD"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "yield": {
      "type": "yes_no",
      "instructions": "Is the dividend yield above 3%?"
    },
    "raised": {
      "type": "yes_no",
      "ask": "raised_last > 0.5"
    }
  }
}
Response JSON (SCHD, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.9463,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "yield": {
      "yes_no": 0.4287,
      "rule": "div_yield_ttm > 3",
      "basis": "pattern"
    },
    "raised": {
      "yes_no": 0.8591,
      "rule": "raised_last > 0.5",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "SCHD",
    "as_of": "2026-10-30"
  }
}

div_yield_ttm raised_last sma

Fund-of-funds allocator · example 10

Small caps versus large caps for a size tilt

Decide whether to fund the small-cap manager by comparing IJR and MDY with SPY.

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

State

{"symbol":"IJR"} then MDY, SPY, 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
hh_hlrule(swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))
Higher swing highs and higher swing lows
momruleroc(C, 20) > 5
Up more than 5% in 20 sessions
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symboltrendrulehh_hlrulemomrulebeat_spyforecast
IJR0.24020.06850.11020.46
MDY0.22680.20370.07410.446
SPY0.07940.17360.05370.514

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

What it means

Session of 2026-10-30, 3 symbols: Stacked averages: close > 20 EMA > 50 > 200: true for none of 3. Higher swing highs and higher swing lows: true for none of 3. Up more than 5% in 20 sessions: true for none of 3. Highest odds for “Beating SPY over a month”: SPY at 51%.

Small and mid caps making higher swings while beating SPY support the size tilt; lagging ones keep it neutral.

Request JSON (IJR; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "IJR"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)"
    },
    "hh_hl": {
      "type": "yes_no",
      "ask": "(swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))"
    },
    "mom": {
      "type": "yes_no",
      "ask": "roc(C, 20) > 5"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  }
}
Response JSON (IJR, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.2402,
      "rule": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)",
      "basis": "rule"
    },
    "hh_hl": {
      "yes_no": 0.0685,
      "rule": "(swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))",
      "basis": "rule"
    },
    "mom": {
      "yes_no": 0.1102,
      "rule": "roc(C, 20) > 5",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.46
    }
  },
  "context": {
    "symbol": "IJR",
    "as_of": "2026-10-30"
  }
}

ema roc sma swinghigh swinglow

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 Buy side: Financial advisor / RIA, Wealth manager, Family office, Hedge fund PM, Quant researcher, Portfolio manager (long-only), Risk manager, Private equity, VC / growth investor.

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