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

Fund-of-funds allocator · example 11

Emerging markets entry check: VWO and EEM

Before raising the EM manager's allocation, look for an uptrend turn with participation.

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

State

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

Questions

crossrulecrossup(C, sma(C, 200))
Crossed above the 200-day today
aboveEnglish → ruleIs the stock above its 200-day moving average?
volruleC > C[-1] and V > 1.5 * ref(avg(V, 20), -1)
Up on heavy volume
macdEnglish → ruleIs MACD above zero?
rally5forecastWill it rally at least 5% at some point in the next month?
A 5% rally within a month

Answers

Symbolcrossruleaboverulevolrulemacdrulerally5forecast
VWO0.050.08870.06450.05860.283
EEM0.050.14490.07010.06440.49

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: Crossed above the 200-day today: true for none of 2. Is the stock above its 200-day moving average: true for none of 2. Up on heavy volume: true for none of 2. Is MACD above zero: true for none of 2. Highest odds for “A 5% rally within a month”: EEM at 49%.

An EM benchmark above its 200-day with MACD positive is the condition for a staged increase.

Request JSON (VWO; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VWO"
  },
  "questions": {
    "cross": {
      "type": "yes_no",
      "ask": "crossup(C, sma(C, 200))"
    },
    "above": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "vol": {
      "type": "yes_no",
      "ask": "C > C[-1] and V > 1.5 * ref(avg(V, 20), -1)"
    },
    "macd": {
      "type": "yes_no",
      "instructions": "Is MACD above zero?"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  }
}
Response JSON (VWO, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "cross": {
      "yes_no": 0.05,
      "rule": "crossup(C, sma(C, 200))",
      "basis": "rule"
    },
    "above": {
      "yes_no": 0.0887,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "vol": {
      "yes_no": 0.0645,
      "rule": "C > C[-1] and V > 1.5 * ref(avg(V, 20), -1)",
      "basis": "rule"
    },
    "macd": {
      "yes_no": 0.0586,
      "rule": "macd(C) > 0",
      "basis": "pattern"
    },
    "rally5": {
      "yes_no": 0.283
    }
  },
  "context": {
    "symbol": "VWO",
    "as_of": "2026-10-30"
  }
}

avg crossup macd offset ref sma

Fund-of-funds allocator · example 12

Trend-following overlay across asset classes

Many allocators run a simple trend overlay: hold each asset only above its 10-month average.

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

State

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

Questions

ten_monthruleC > sma(C, 210)
Above its 10-month (210-session) average
emaruleema(C, 50) > ema(C, 150)
50-day EMA above the 150-day EMA
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symbolten_monthruleemaruledrop5forecastFired
SPY0.94630.94630.203in
TLT0.10720.05370.164out
GLD0.05370.05370.435out

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.

ten_month < 0.4→Webhookallocation-system
else→Webhookallocation-system
SPY 1 of 2 fired · dry run, nothing sent
outrule false: skipped
inwould send (dry run)Webhook → allocation-system
{
  "overlay": "trend_10m",
  "symbol": "SPY",
  "signal": "hold",
  "p_above": 0.9463,
  "as_of": "2026-10-30"
}
TLT 1 of 2 fired · dry run, nothing sent
outwould send (dry run)Webhook → allocation-system
{
  "overlay": "trend_10m",
  "symbol": "TLT",
  "signal": "underweight",
  "p_above": 0.1072,
  "as_of": "2026-10-30"
}
inrule false: skipped
GLD 1 of 2 fired · dry run, nothing sent
outwould send (dry run)Webhook → allocation-system
{
  "overlay": "trend_10m",
  "symbol": "GLD",
  "signal": "underweight",
  "p_above": 0.0537,
  "as_of": "2026-10-30"
}
inrule false: skipped

What it means

Session of 2026-10-30, 3 symbols: Above its 10-month (210-session) average: true for SPY of 3. 50-day EMA above the 150-day EMA: true for SPY of 3. Highest odds for “A 5% drawdown within a month”: GLD at 44%. out fired for TLT, GLD. in fired for SPY.

Each asset gets a hold or underweight signal; the overlay is mechanical and the allocation system applies policy limits.

Request JSON (SPY; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "ten_month": {
      "type": "yes_no",
      "ask": "C > sma(C, 210)"
    },
    "ema": {
      "type": "yes_no",
      "ask": "ema(C, 50) > ema(C, 150)"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "out",
      "when": "ten_month < 0.4",
      "do": "webhook",
      "connection": "allocation-system",
      "body": {
        "overlay": "trend_10m",
        "symbol": "{{symbol}}",
        "signal": "underweight",
        "p_above": "{{ten_month}}",
        "as_of": "{{as_of}}"
      }
    },
    {
      "id": "in",
      "when": "else",
      "do": "webhook",
      "connection": "allocation-system",
      "body": {
        "overlay": "trend_10m",
        "symbol": "{{symbol}}",
        "signal": "hold",
        "p_above": "{{ten_month}}",
        "as_of": "{{as_of}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (SPY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "ten_month": {
      "yes_no": 0.9463,
      "rule": "C > sma(C, 210)",
      "basis": "rule"
    },
    "ema": {
      "yes_no": 0.9463,
      "rule": "ema(C, 50) > ema(C, 150)",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.203
    }
  },
  "context": {
    "symbol": "SPY",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "out",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "in",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "allocation-system",
      "preview": {
        "body": {
          "overlay": "trend_10m",
          "symbol": "SPY",
          "signal": "hold",
          "p_above": 0.9463,
          "as_of": "2026-10-30"
        }
      }
    }
  ]
}

ema sma

Fund-of-funds allocator · example 13

Country rotation among developed markets

A country-rotation manager is benchmarked against these funds; check which countries lead.

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

State

{"symbol":"EWG"} then EWU, EWJ, one request each. The server fills in the latest completed session.

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
momruleroc(C, 63) > 10 and C >= 0.95 * max(H, 63)
Up more than 10% in a quarter, near the high
rsirulersi(C, 14) > 50
RSI above 50

Answers

Symboltrendrulemomrulersirule
EWG0.53320.05370.6183
EWU0.85650.05370.7896
EWJ0.7780.05370.0681

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 EWU, EWJ of 3. Up more than 10% in a quarter, near the high: true for none of 3. RSI above 50: true for EWG, EWU of 3.

Leaders and laggards explain the rotation manager's positioning and help judge whether its bets are working.

Request JSON (EWG; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "EWG"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "mom": {
      "type": "yes_no",
      "ask": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)"
    },
    "rsi": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 50"
    }
  }
}
Response JSON (EWG, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.5332,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "mom": {
      "yes_no": 0.0537,
      "rule": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)",
      "basis": "rule"
    },
    "rsi": {
      "yes_no": 0.6183,
      "rule": "rsi(C, 14) > 50",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "EWG",
    "as_of": "2026-10-30"
  }
}

max roc rsi sma

Fund-of-funds allocator · example 14

Manager drawdown review: when to call the manager

If a manager's benchmark is in a sharp drawdown and still falling, schedule a call before the investment committee asks.

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

Questions

ddruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
fallingEnglish → ruleIs the stock down more than 5% over the last month?
belowEnglish → ruleIs the stock below its 200-day moving average?
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

Symbolddrulefallingrulebelowruledrop10forecastFired
ARKK0.09880.74630.18680.61none
XBI0.05370.14460.07960.503none

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.

dd >= 0.6 and falling >= 0.6→Emailme
ARKK 0 of 1 fired · dry run, nothing sent
XBI 0 of 1 fired · dry run, nothing sent

What it means

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

The email is a reminder to talk to the manager, not a signal to redeem.

Request JSON (ARKK; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "ARKK"
  },
  "questions": {
    "dd": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "falling": {
      "type": "yes_no",
      "instructions": "Is the stock down more than 5% over the last month?"
    },
    "below": {
      "type": "yes_no",
      "instructions": "Is the stock below its 200-day moving average?"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "call",
      "when": "dd >= 0.6 and falling >= 0.6",
      "do": "email",
      "connection": "me",
      "subject": "Schedule manager call: {{symbol}}",
      "message": "{{symbol}} ({{as_of}}) is over 20% off its high and down over 5% this month. 10% drawdown odds within a month: {{drop10|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (ARKK, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "dd": {
      "yes_no": 0.0988,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "falling": {
      "yes_no": 0.7463,
      "rule": "C / C[-21] - 1 < -0.05",
      "basis": "pattern"
    },
    "below": {
      "yes_no": 0.1868,
      "rule": "C < sma(C, 200)",
      "basis": "comparison"
    },
    "drop10": {
      "yes_no": 0.61
    }
  },
  "context": {
    "symbol": "ARKK",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "call",
      "fired": false,
      "status": "skipped"
    }
  ]
}

max offset sma

Fund-of-funds allocator · example 15

Inflation protection: TIPS versus nominal bonds

Compare TIP and IEF to see whether the market is paying for inflation protection.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 50-day moving average?
momruleroc(C, 20) > 1
Up more than 1% over 20 sessions
zsrulezscore(C, 60) > 1
More than one standard deviation above its 60-day mean
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

Symboltrendrulemomrulezsruleup_weekforecast
TIP0.86490.86310.34670.567
IEF0.85140.89260.25050.483

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

What it means

Session of 2026-10-30, 2 symbols: Is the stock above its 50-day moving average: true for TIP, IEF of 2. Up more than 1% over 20 sessions: true for TIP, IEF of 2. More than one standard deviation above its 60-day mean: true for none of 2. Highest odds for “Higher in a week”: TIP at 57%.

TIPS leading nominals points to rising inflation expectations, which supports the real-assets sleeve.

Request JSON (TIP; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TIP"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 50-day moving average?"
    },
    "mom": {
      "type": "yes_no",
      "ask": "roc(C, 20) > 1"
    },
    "zs": {
      "type": "yes_no",
      "ask": "zscore(C, 60) > 1"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (TIP, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.8649,
      "rule": "C > sma(C, 50)",
      "basis": "comparison"
    },
    "mom": {
      "yes_no": 0.8631,
      "rule": "roc(C, 20) > 1",
      "basis": "rule"
    },
    "zs": {
      "yes_no": 0.3467,
      "rule": "zscore(C, 60) > 1",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.567
    }
  },
  "context": {
    "symbol": "TIP",
    "as_of": "2026-10-30"
  }
}

roc sma zscore

Fund-of-funds allocator · example 16

Reversal candles on the equity sleeves

A short scan for reversal candles on the main equity benchmarks before the monthly meeting.

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

State

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

Questions

engulf_bullruleengulfing_bull()
engulfing bull candle: A green body that engulfs yesterday's red body.
engulf_bearruleengulfing_bear()
engulfing bear candle: A red body that engulfs yesterday's green body.
harami_bearruleharami_bear()
harami bear candle: A small red body inside yesterday's green body.
darkruledark_cloud()
dark cloud candle: After a green day, opens above its close and closes below the middle of its body (but above its open).
dojiruledoji()
doji candle: Body at most 10% of the day's range.
down_weekforecastWill the stock be lower in a week?
Lower in a week

Answers

Symbolengulf_bullruleengulf_bearruleharami_bearruledarkruledojiruledown_weekforecast
SPY0.05970.06040.05970.05970.05790.541
EFA0.17010.11150.18510.11150.30220.491

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: engulfing bull candle: A green body that engulfs yesterday's red body.: true for none of 2. engulfing bear candle: A red body that engulfs yesterday's green body.: true for none of 2. harami bear candle: A small red body inside yesterday's green body.: true for none of 2. dark cloud candle: After a green day, opens above its close and closes below the middle of its body (but above its open).: true for none of 2. Highest odds for “Lower in a week”: SPY at 54%.

Candles are discussion points for the meeting; no allocation changes on a single bar.

Request JSON (SPY; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "engulf_bull": {
      "type": "yes_no",
      "ask": "engulfing_bull()"
    },
    "engulf_bear": {
      "type": "yes_no",
      "ask": "engulfing_bear()"
    },
    "harami_bear": {
      "type": "yes_no",
      "ask": "harami_bear()"
    },
    "dark": {
      "type": "yes_no",
      "ask": "dark_cloud()"
    },
    "doji": {
      "type": "yes_no",
      "ask": "doji()"
    },
    "down_week": {
      "type": "yes_no",
      "instructions": "Will the stock be lower in a week?"
    }
  }
}
Response JSON (SPY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "engulf_bull": {
      "yes_no": 0.0597,
      "rule": "engulfing_bull()",
      "basis": "rule"
    },
    "engulf_bear": {
      "yes_no": 0.0604,
      "rule": "engulfing_bear()",
      "basis": "rule"
    },
    "harami_bear": {
      "yes_no": 0.0597,
      "rule": "harami_bear()",
      "basis": "rule"
    },
    "dark": {
      "yes_no": 0.0597,
      "rule": "dark_cloud()",
      "basis": "rule"
    },
    "doji": {
      "yes_no": 0.0579,
      "rule": "doji()",
      "basis": "rule"
    },
    "down_week": {
      "yes_no": 0.541
    }
  },
  "context": {
    "symbol": "SPY",
    "as_of": "2026-10-30"
  }
}

dark_cloud doji engulfing_bear engulfing_bull harami_bear

Fund-of-funds allocator · example 17

Monthly investment committee pack: one line per sleeve

On the first Monday of the month the committee gets a line per sleeve benchmark with trend and drawdown odds.

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

State

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

Questions

trendEnglish → 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
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

Symboltrendruledrop5forecastup_weekforecastFired
VTI0.94150.1870.57line
VXUS0.32550.2330.587line
BND0.20130.0070.545line
GLD0.05370.4350.566line

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→Slackinvestment-committee
VTI 1 of 1 fired · dry run, nothing sent
linewould send (dry run)Slack → investment-committee
{
  "text": "VTI (2026-10-30): above 200-day 94%, 5% drawdown within a month 19%, higher in a week 57%."
}
VXUS 1 of 1 fired · dry run, nothing sent
linewould send (dry run)Slack → investment-committee
{
  "text": "VXUS (2026-10-30): above 200-day 33%, 5% drawdown within a month 23%, higher in a week 59%."
}
BND 1 of 1 fired · dry run, nothing sent
linewould send (dry run)Slack → investment-committee
{
  "text": "BND (2026-10-30): above 200-day 20%, 5% drawdown within a month 1%, higher in a week 55%."
}
GLD 1 of 1 fired · dry run, nothing sent
linewould send (dry run)Slack → investment-committee
{
  "text": "GLD (2026-10-30): above 200-day 5%, 5% drawdown within a month 44%, higher in a week 57%."
}

What it means

Session of 2026-10-30, 4 symbols: Is the stock above its 200-day moving average: true for VTI of 4. Highest odds for “A 5% drawdown within a month”: GLD at 44%. line fired for VTI, VXUS, BND, GLD.

The same lines every month make changes easy to see; the committee discusses only what moved.

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

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

{
  "name": "Monthly investment committee pack: one line per sleeve",
  "symbols": "VTI VXUS BND GLD",
  "days": [
    1
  ],
  "at_time": "07:30",
  "model": "ora-fin-0.1.1",
  "questions": {
    "trend": {
      "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?"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  },
  "actions": [
    {
      "id": "line",
      "when": "trend >= 0",
      "do": "slack",
      "connection": "investment-committee",
      "message": "{{symbol}} ({{as_of}}): above 200-day {{trend|pct}}, 5% drawdown within a month {{drop5|pct}}, higher in a week {{up_week|pct}}."
    }
  ]
}
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?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  },
  "actions": [
    {
      "id": "line",
      "when": "trend >= 0",
      "do": "slack",
      "connection": "investment-committee",
      "message": "{{symbol}} ({{as_of}}): above 200-day {{trend|pct}}, 5% drawdown within a month {{drop5|pct}}, higher in a week {{up_week|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (VTI, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.9415,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "drop5": {
      "yes_no": 0.187
    },
    "up_week": {
      "yes_no": 0.57
    }
  },
  "context": {
    "symbol": "VTI",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "line",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "investment-committee",
      "preview": {
        "text": "VTI (2026-10-30): above 200-day 94%, 5% drawdown within a month 19%, higher in a week 57%."
      }
    }
  ]
}

sma

Fund-of-funds allocator · example 18

Momentum crash risk in the momentum sleeve

Momentum strategies suffer sharp reversals; check MTUM for extension and topping signs.

ora-fin-0.1.1MTUM6 questions
  1. StateMTUM
  2. Questions6 asked
  3. Answersreal, captured
  4. Actionsnone

State

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

Questions

extEnglish → ruleIs price extended more than 2 ATR above its 20-day average?
greatestruleH - greatest(O, C) > 2 * abs(C - O)
Upper wick more than twice the body
leastruleleast(O, C) - L > 2 * abs(C - O)
Lower wick more than twice the body
outsideruleoutside_bar()
outside bar candle: Today's high above yesterday's and low below it.
gaprulegap_up()
gap up candle: Today's whole range is above yesterday's high: an unfilled gap up.
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

QuestionAnswerReading
ext
Is price extended more than 2 ATR above its 20-day average
compiled to C - sma(C, 20) > 2 * atr(14)
0.0537false
greatest
Upper wick more than twice the body
0.0888false
least
Lower wick more than twice the body
0.14false
outside
outside bar candle: Today's high above yesterday's and low below it.
0.054false
gap
gap up candle: Today's whole range is above yesterday's high: an unfilled gap up.
0.0537false
drop5
A 5% drawdown within a month
0.47247% · close to even

What it means

For MTUM on the session of 2026-10-30: Not true: Is price extended more than 2 ATR above its 20-day average; Upper wick more than twice the body; Lower wick more than twice the body; outside bar candle: Today's high above yesterday's and low below it.; gap up candle: Today's whole range is above yesterday's high: an unfilled gap up.. Forecasts: A 5% drawdown within a month 47%.

An extended momentum sleeve printing long upper wicks is the setup for a rebalance back to the band.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MTUM"
  },
  "questions": {
    "ext": {
      "type": "yes_no",
      "instructions": "Is price extended more than 2 ATR above its 20-day average?"
    },
    "greatest": {
      "type": "yes_no",
      "ask": "H - greatest(O, C) > 2 * abs(C - O)"
    },
    "least": {
      "type": "yes_no",
      "ask": "least(O, C) - L > 2 * abs(C - O)"
    },
    "outside": {
      "type": "yes_no",
      "ask": "outside_bar()"
    },
    "gap": {
      "type": "yes_no",
      "ask": "gap_up()"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}
Response JSON (MTUM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "ext": {
      "yes_no": 0.0537,
      "rule": "C - sma(C, 20) > 2 * atr(14)",
      "basis": "pattern"
    },
    "greatest": {
      "yes_no": 0.0888,
      "rule": "H - greatest(O, C) > 2 * abs(C - O)",
      "basis": "rule"
    },
    "least": {
      "yes_no": 0.14,
      "rule": "least(O, C) - L > 2 * abs(C - O)",
      "basis": "rule"
    },
    "outside": {
      "yes_no": 0.054,
      "rule": "outside_bar()",
      "basis": "rule"
    },
    "gap": {
      "yes_no": 0.0537,
      "rule": "gap_up()",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.472
    }
  },
  "context": {
    "symbol": "MTUM",
    "as_of": "2026-10-30"
  }
}

abs atr gap_up greatest least outside_bar sma

Fund-of-funds allocator · example 19

Breadth check: equal weight versus cap weight

Concentrated markets make active managers look bad; check whether equal-weight is keeping up.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 50-day moving average?
momruleroc(C, 20) > 5
Up more than 5% in 20 sessions
highbarsrulehighestbars(C, 60) <= 5
60-day closing high within the last 5 sessions
mostlyrulesum(C > C[-1], 10) >= 6
Up on at least six of the last ten days
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symboltrendrulemomrulehighbarsrulemostlyrulebeat_spyforecast
RSP0.78580.33980.05440.550.446
SPY0.11280.05370.11190.550.514

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

What it means

Session of 2026-10-30, 2 symbols: Is the stock above its 50-day moving average: true for RSP of 2. Up more than 5% in 20 sessions: true for none of 2. 60-day closing high within the last 5 sessions: true for none of 2. Up on at least six of the last ten days: true for none of 2. Highest odds for “Beating SPY over a month”: SPY at 51%.

If SPY sets highs while RSP does not, expect active managers to trail the benchmark this quarter.

Request JSON (RSP; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "RSP"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 50-day moving average?"
    },
    "mom": {
      "type": "yes_no",
      "ask": "roc(C, 20) > 5"
    },
    "highbars": {
      "type": "yes_no",
      "ask": "highestbars(C, 60) <= 5"
    },
    "mostly": {
      "type": "yes_no",
      "ask": "sum(C > C[-1], 10) >= 6"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  }
}
Response JSON (RSP, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.7858,
      "rule": "C > sma(C, 50)",
      "basis": "comparison"
    },
    "mom": {
      "yes_no": 0.3398,
      "rule": "roc(C, 20) > 5",
      "basis": "rule"
    },
    "highbars": {
      "yes_no": 0.0544,
      "rule": "highestbars(C, 60) <= 5",
      "basis": "rule"
    },
    "mostly": {
      "yes_no": 0.55,
      "rule": "sum(C > C[-1], 10) >= 6",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.446
    }
  },
  "context": {
    "symbol": "RSP",
    "as_of": "2026-10-30"
  }
}

highestbars offset roc sma sum

Fund-of-funds allocator · example 20

Commodity manager benchmarks: energy, metals, agriculture

Check the benchmarks of the commodity managers for trend and stretch.

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

State

{"symbol":"USO"} then COPX, DBA, one request each. The server fills in the latest completed session.

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
adxruleadx(14) > 20
ADX above 20 (trending)
wilderruleC > rma(C, 30)
Above the 30-day Wilder average
rally5forecastWill it rally at least 5% at some point in the next month?
A 5% rally within a month

Answers

Symboltrendruleadxrulewilderrulerally5forecast
USO0.94630.9220.94470.658
COPX0.09030.76440.07990.718
DBA0.19790.87810.06970.161

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 USO of 3. ADX above 20 (trending): true for USO, COPX, DBA of 3. Above the 30-day Wilder average: true for USO of 3. Highest odds for “A 5% rally within a month”: COPX at 72%.

Trending benchmarks favor trend-following commodity managers; range-bound ones favor discretionary managers.

Request JSON (USO; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "USO"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "adx": {
      "type": "yes_no",
      "ask": "adx(14) > 20"
    },
    "wilder": {
      "type": "yes_no",
      "ask": "C > rma(C, 30)"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  }
}
Response JSON (USO, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.9463,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "adx": {
      "yes_no": 0.922,
      "rule": "adx(14) > 20",
      "basis": "rule"
    },
    "wilder": {
      "yes_no": 0.9447,
      "rule": "C > rma(C, 30)",
      "basis": "rule"
    },
    "rally5": {
      "yes_no": 0.658
    }
  },
  "context": {
    "symbol": "USO",
    "as_of": "2026-10-30"
  }
}

adx rma 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 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.