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

Hedge fund PM: 20 ways to use Ora

Long/short books: catalysts, crowding, stops and gross/net decisions every morning. Each example is a complete, runnable request with the real answers it returned (43 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 (58)

sma 9offset 8ref 5atr 4avg 3lowest 3swinglow 3days_to_earnings 3roc 3log 2sqrt 2std 2macd 2swinghigh 2abs 2last_earnings_move 2ema 2rsi 2highest 2beat_eps_last 2beat_revenue_last 2percentrank 2days_to_ex_div 2tr 2macdsignal 1three_black_crows 1beat_streak 1eps_surprise_pct 1linreg 1engulfing_bear 1evening_star 1shooting_star 1days_since_earnings 1last_earnings_gap 1pre_earnings_close 1revenue_surprise_pct 1max 1dark_cloud 1next_report_bmo 1atr_pct 1three_white_soldiers 1adx 1highestbars 1div_yield_ttm 1next_div_amount 1hammer 1piercing_line 1stochk 1willr 1obv 1sign 1sum 1crossdown 1zscore 1days_since_split 1days_to_split 1last_split_ratio 1splits_5y 1

Examples 11–20 of 20 · page 2 of 2

Hedge fund PM · example 11

Size by regime: is AMD in a high-volatility regime?

Scale position size by volatility: compare current ATR and realized volatility with their history.

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

State

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

Questions

atr_pctruleatr_pct(14) > 4
ATR over 4% of price
atr_rankrulepercentrank(atr(14), 120) > 80
ATR in the top 20% of the last 120 sessions
hvrulestd(log(C / C[-1]), 20) * sqrt(252) > 0.4
Annualized 20-day volatility above 40%
tr_wideruletr() > 1.5 * ref(atr(14), -1)
True range 1.5× yesterday's ATR
vol_upforecastWill volatility rise over the next 5 days?
Volatility rising over 5 days
hv30forecastWill annualized volatility over the next 21 sessions exceed 30%?
Next-month volatility above 30%

Answers

QuestionAnswerReading
atr_pct
ATR over 4% of price
0.9226true
atr_rank
ATR in the top 20% of the last 120 sessions
0.0832false
hv
Annualized 20-day volatility above 40%
0.9363true
tr_wide
True range 1.5× yesterday's ATR
0.9413true
vol_up
Volatility rising over 5 days
0.39740% · unlikely
hv30
Next-month volatility above 30%
0.50150% · close to even

Actions

Rules on the answers decide what to send.

atr_rank >= 0.6 or atr_pct >= 0.6→Webhookrisk-system
What each action would send 1 of 1 fired · dry run, nothing sent
resizewould send (dry run)Webhook → risk-system
{
  "symbol": "AMD",
  "action": "scale_target",
  "factor": 0.6,
  "reason": "high_vol_regime",
  "p_atr_rank": 0.0832,
  "as_of": "2026-10-30"
}

What it means

For AMD on the session of 2026-10-30: True now: ATR over 4% of price; Annualized 20-day volatility above 40%; True range 1.5× yesterday's ATR. Not true: ATR in the top 20% of the last 120 sessions. Forecasts: Volatility rising over 5 days 40%; Next-month volatility above 30% 50%. Fired: resize (Webhook → risk-system).

When volatility is high against its own history the target is scaled down; the forecasts show whether that regime is expected to persist.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AMD"
  },
  "questions": {
    "atr_pct": {
      "type": "yes_no",
      "ask": "atr_pct(14) > 4"
    },
    "atr_rank": {
      "type": "yes_no",
      "ask": "percentrank(atr(14), 120) > 80"
    },
    "hv": {
      "type": "yes_no",
      "ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4"
    },
    "tr_wide": {
      "type": "yes_no",
      "ask": "tr() > 1.5 * ref(atr(14), -1)"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will volatility rise over the next 5 days?"
    },
    "hv30": {
      "type": "yes_no",
      "instructions": "Will annualized volatility over the next 21 sessions exceed 30%?"
    }
  },
  "actions": [
    {
      "id": "resize",
      "when": "atr_rank >= 0.6 or atr_pct >= 0.6",
      "do": "webhook",
      "connection": "risk-system",
      "body": {
        "symbol": "{{symbol}}",
        "action": "scale_target",
        "factor": 0.6,
        "reason": "high_vol_regime",
        "p_atr_rank": "{{atr_rank}}",
        "as_of": "{{as_of}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (AMD, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "atr_pct": {
      "yes_no": 0.9226,
      "rule": "atr_pct(14) > 4",
      "basis": "rule"
    },
    "atr_rank": {
      "yes_no": 0.0832,
      "rule": "percentrank(atr(14), 120) > 80",
      "basis": "rule"
    },
    "hv": {
      "yes_no": 0.9363,
      "rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4",
      "basis": "rule"
    },
    "tr_wide": {
      "yes_no": 0.9413,
      "rule": "tr() > 1.5 * ref(atr(14), -1)",
      "basis": "rule"
    },
    "vol_up": {
      "yes_no": 0.397
    },
    "hv30": {
      "yes_no": 0.501
    }
  },
  "context": {
    "symbol": "AMD",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "resize",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "risk-system",
      "preview": {
        "body": {
          "symbol": "AMD",
          "action": "scale_target",
          "factor": 0.6,
          "reason": "high_vol_regime",
          "p_atr_rank": 0.0832,
          "as_of": "2026-10-30"
        }
      }
    }
  ]
}

atr atr_pct log offset percentrank ref sqrt std tr

Hedge fund PM · example 12

Short squeeze risk on a CCL short

Before pressing a short in a heavily traded name, check for squeeze signs: volume spikes, gaps up and strong closes.

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

State

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

Questions

vol_spikeruleV > 2 * ref(avg(V, 20), -1)
Volume more than twice the previous 20-day average
unfilled_gapruleL > H[-1]
An unfilled gap up
trend_dayrule(O <= L + 0.2 * (H - L)) and (C >= H - 0.2 * (H - L))
A trend day up: opened near the low, closed near the high
soldiersrulethree_white_soldiers()
three white soldiers candle: Three green bars, each closing higher and opening inside the previous body.
rally10forecastWill it rally at least 10% at some point in the next month?
A 10% rally within a month
gap_upforecastWill it gap up tomorrow?
A gap up tomorrow

Answers

QuestionAnswerReading
vol_spike
Volume more than twice the previous 20-day average
0.0778false
unfilled_gap
An unfilled gap up
0.088false
trend_day
A trend day up: opened near the low, closed near the high
0.1889false
soldiers
three white soldiers candle: Three green bars, each closing higher and opening inside the previous body.
0.0742false
rally10
A 10% rally within a month
0.50150% · close to even
gap_up
A gap up tomorrow
0.0768% · unlikely

Actions

Rules on the answers decide what to send.

vol_spike >= 0.6 and (unfilled_gap >= 0.6 or trend_day >= 0.6)→Slackpm-desk
What each action would send 0 of 1 fired · dry run, nothing sent
cover_halfrule false: skipped

What it means

For CCL on the session of 2026-10-30: Not true: Volume more than twice the previous 20-day average; An unfilled gap up; A trend day up: opened near the low, closed near the high; three white soldiers candle: Three green bars, each closing higher and opening inside the previous body.. Forecasts: A 10% rally within a month 50%; A gap up tomorrow 8%. No action fired: every rule was false.

Volume plus an unfilled gap or a trend day is how squeezes start; the cover suggestion goes to the desk, never straight to the OMS.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "CCL"
  },
  "questions": {
    "vol_spike": {
      "type": "yes_no",
      "ask": "V > 2 * ref(avg(V, 20), -1)"
    },
    "unfilled_gap": {
      "type": "yes_no",
      "ask": "L > H[-1]"
    },
    "trend_day": {
      "type": "yes_no",
      "ask": "(O <= L + 0.2 * (H - L)) and (C >= H - 0.2 * (H - L))"
    },
    "soldiers": {
      "type": "yes_no",
      "ask": "three_white_soldiers()"
    },
    "rally10": {
      "type": "yes_no",
      "instructions": "Will it rally at least 10% at some point in the next month?"
    },
    "gap_up": {
      "type": "yes_no",
      "instructions": "Will it gap up tomorrow?"
    }
  },
  "actions": [
    {
      "id": "cover_half",
      "when": "vol_spike >= 0.6 and (unfilled_gap >= 0.6 or trend_day >= 0.6)",
      "do": "slack",
      "connection": "pm-desk",
      "message": "{{symbol}} ({{as_of}}): squeeze signs, volume spike {{vol_spike|pct}} with a gap/trend day. Consider covering half. 10% rally odds {{rally10|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (CCL, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "vol_spike": {
      "yes_no": 0.0778,
      "rule": "V > 2 * ref(avg(V, 20), -1)",
      "basis": "rule"
    },
    "unfilled_gap": {
      "yes_no": 0.088,
      "rule": "L > H[-1]",
      "basis": "rule"
    },
    "trend_day": {
      "yes_no": 0.1889,
      "rule": "(O <= L + 0.2 * (H - L)) and (C >= H - 0.2 * (H - L))",
      "basis": "rule"
    },
    "soldiers": {
      "yes_no": 0.0742,
      "rule": "three_white_soldiers()",
      "basis": "rule"
    },
    "rally10": {
      "yes_no": 0.501
    },
    "gap_up": {
      "yes_no": 0.076
    }
  },
  "context": {
    "symbol": "CCL",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "cover_half",
      "fired": false,
      "status": "skipped"
    }
  ]
}

avg offset ref three_white_soldiers

Hedge fund PM · example 13

Semis vs software: SMH, SOXX, CRM and NOW compared

Compare chip and software leaders on trend and momentum to pick the long and the funding short.

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

State

{"symbol":"SMH"} then SOXX, CRM, NOW, one request each. The server fills in the latest completed session.

Questions

stackedruleC > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)
Stacked averages: close > 20 EMA > 50 > 200
roc63ruleroc(C, 63) > 0
Up over three months
adxruleadx(14) > 25
Trending (ADX above 25)
highestbarsrulehighestbars(C, 50) <= 5
The 50-day closing high came in the last 5 sessions
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symbolstackedruleroc63ruleadxrulehighestbarsrulebeat_spyforecast
SMH0.08030.20190.50570.19030.538
SOXX0.07690.15240.59020.190.533
CRM0.21510.91340.20120.06170.551
NOW0.05370.22620.93180.550.355

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: Stacked averages: close > 20 EMA > 50 > 200: true for none of 4. Up over three months: true for CRM of 4. Trending (ADX above 25): true for NOW of 4. The 50-day closing high came in the last 5 sessions: true for none of 4. Highest odds for “Beating SPY over a month”: CRM at 55%.

Leaders show stacked averages and a fresh high; the funding short is the name with the fewest trend rules true.

Request JSON (SMH; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SMH"
  },
  "questions": {
    "stacked": {
      "type": "yes_no",
      "ask": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)"
    },
    "roc63": {
      "type": "yes_no",
      "ask": "roc(C, 63) > 0"
    },
    "adx": {
      "type": "yes_no",
      "ask": "adx(14) > 25"
    },
    "highestbars": {
      "type": "yes_no",
      "ask": "highestbars(C, 50) <= 5"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  }
}
Response JSON (SMH, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "stacked": {
      "yes_no": 0.0803,
      "rule": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)",
      "basis": "rule"
    },
    "roc63": {
      "yes_no": 0.2019,
      "rule": "roc(C, 63) > 0",
      "basis": "rule"
    },
    "adx": {
      "yes_no": 0.5057,
      "rule": "adx(14) > 25",
      "basis": "rule"
    },
    "highestbars": {
      "yes_no": 0.1903,
      "rule": "highestbars(C, 50) <= 5",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.538
    }
  },
  "context": {
    "symbol": "SMH",
    "as_of": "2026-10-30"
  }
}

adx ema highestbars roc sma

Hedge fund PM · example 14

Avoid paying the dividend on a short: PFE ex-date check

Short sellers owe the dividend; check the ex-date before holding a short through it.

ora-fin-0.1.1PFE4 questions1 action
  1. StatePFE
  2. Questions4 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

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

Questions

ex_soonruledays_to_ex_div <= 30
Goes ex-dividend within 30 days
yield3rulediv_yield_ttm > 3
Yield above 3%
next_divrulenext_div_amount > 0
A next dividend is declared
trendEnglish → ruleIs the stock below its 200-day moving average?

Answers

QuestionAnswerReading
ex_soon
Goes ex-dividend within 30 days
0.9463true
yield3
Yield above 3%
0.9463true
next_div
A next dividend is declared
0.9463true
trend
Is the stock below its 200-day moving average
compiled to C < sma(C, 200)
0.0537false

Actions

Rules on the answers decide what to send.

ex_soon >= 0.6→Slackpm-desk
What each action would send 1 of 1 fired · dry run, nothing sent
ex_warningwould send (dry run)Slack → pm-desk
{
  "text": "PFE goes ex-dividend within 30 days (95%). Yield over 3% 95%. Short pays the dividend; decide before the ex-date."
}

What it means

For PFE on the session of 2026-10-30: True now: Goes ex-dividend within 30 days; Yield above 3%; A next dividend is declared. Not true: Is the stock below its 200-day moving average. Fired: ex_warning (Slack → pm-desk).

The yield makes the cost of carrying the short concrete; the ex-date fact only sees declared dates.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "PFE"
  },
  "questions": {
    "ex_soon": {
      "type": "yes_no",
      "ask": "days_to_ex_div <= 30"
    },
    "yield3": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 3"
    },
    "next_div": {
      "type": "yes_no",
      "ask": "next_div_amount > 0"
    },
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock below its 200-day moving average?"
    }
  },
  "actions": [
    {
      "id": "ex_warning",
      "when": "ex_soon >= 0.6",
      "do": "slack",
      "connection": "pm-desk",
      "message": "{{symbol}} goes ex-dividend within 30 days ({{ex_soon|pct}}). Yield over 3% {{yield3|pct}}. Short pays the dividend; decide before the ex-date."
    }
  ],
  "dry_run": true
}
Response JSON (PFE, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "ex_soon": {
      "yes_no": 0.9463,
      "rule": "days_to_ex_div <= 30",
      "basis": "rule"
    },
    "yield3": {
      "yes_no": 0.9463,
      "rule": "div_yield_ttm > 3",
      "basis": "rule"
    },
    "next_div": {
      "yes_no": 0.9463,
      "rule": "next_div_amount > 0",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.0537,
      "rule": "C < sma(C, 200)",
      "basis": "comparison"
    }
  },
  "context": {
    "symbol": "PFE",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "ex_warning",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "pm-desk",
      "preview": {
        "text": "PFE goes ex-dividend within 30 days (95%). Yield over 3% 95%. Short pays the dividend; decide before the ex-date."
      }
    }
  ]
}

days_to_ex_div div_yield_ttm next_div_amount sma

Hedge fund PM · example 15

Oversold quality long: is UNH washed out?

Find a mean-reversion long in a quality name: oversold oscillators and a reversal candle.

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

State

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

Questions

rsi2rulersi(C, 2) < 10
Two-day RSI under 10
stochEnglish → ruleIs the stock oversold on the stochastic, below 20?
willrrulewillr(14) < -90
Williams %R under -90
hammerrulehammer()
hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back.
piercingrulepiercing_line()
piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open).
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
rsi2
Two-day RSI under 10
0.221false
stoch
Is the stock oversold on the stochastic, below 20
compiled to stochk(14, 3, 3) < 20
0.0809false
willr
Williams %R under -90
0.0748false
hammer
hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back.
0.0701false
piercing
piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open).
0.1039false
up_week
Higher in a week
0.48549% · close to even

What it means

For UNH on the session of 2026-10-30: Not true: Two-day RSI under 10; Is the stock oversold on the stochastic, below 20; Williams %R under -90; hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back.; piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open).. Forecasts: Higher in a week 49%.

Oversold readings plus a reversal candle make the case for a small, tight-stop long; the forecast says how often such weeks end higher.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "UNH"
  },
  "questions": {
    "rsi2": {
      "type": "yes_no",
      "ask": "rsi(C, 2) < 10"
    },
    "stoch": {
      "type": "yes_no",
      "instructions": "Is the stock oversold on the stochastic, below 20?"
    },
    "willr": {
      "type": "yes_no",
      "ask": "willr(14) < -90"
    },
    "hammer": {
      "type": "yes_no",
      "ask": "hammer()"
    },
    "piercing": {
      "type": "yes_no",
      "ask": "piercing_line()"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (UNH, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "rsi2": {
      "yes_no": 0.221,
      "rule": "rsi(C, 2) < 10",
      "basis": "rule"
    },
    "stoch": {
      "yes_no": 0.0809,
      "rule": "stochk(14, 3, 3) < 20",
      "basis": "pattern"
    },
    "willr": {
      "yes_no": 0.0748,
      "rule": "willr(14) < -90",
      "basis": "rule"
    },
    "hammer": {
      "yes_no": 0.0701,
      "rule": "hammer()",
      "basis": "rule"
    },
    "piercing": {
      "yes_no": 0.1039,
      "rule": "piercing_line()",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.485
    }
  },
  "context": {
    "symbol": "UNH",
    "as_of": "2026-10-30"
  }
}

hammer piercing_line rsi stochk willr

Hedge fund PM · example 16

Macro hedges: are TLT and GLD trending as the hedge book expects?

Check that the book's macro hedges are behaving: trend and momentum in long bonds and gold.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
macdEnglish → ruleIs MACD above zero?
obvruleobv() > sma(obv(), 20)
On-balance volume above its 20-day average
sum_uprulesum(sign(C - C[-1]), 10) > 2
Net up days over the last ten sessions above two
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

Symboltrendrulemacdruleobvrulesum_upruleup_weekforecast
TLT0.11270.88180.87220.450.561
GLD0.05370.12550.13580.10740.566
UUP0.94630.85810.13110.18520.561

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 UUP of 3. Is MACD above zero: true for TLT, UUP of 3. On-balance volume above its 20-day average: true for TLT of 3. Net up days over the last ten sessions above two: true for none of 3. Highest odds for “Higher in a week”: GLD at 57%.

Hedges that are trending earn their carry; a hedge going nowhere is a cost the PM reviews at the next rebalance.

Request JSON (TLT; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TLT"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "macd": {
      "type": "yes_no",
      "instructions": "Is MACD above zero?"
    },
    "obv": {
      "type": "yes_no",
      "ask": "obv() > sma(obv(), 20)"
    },
    "sum_up": {
      "type": "yes_no",
      "ask": "sum(sign(C - C[-1]), 10) > 2"
    },
    "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.1127,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "macd": {
      "yes_no": 0.8818,
      "rule": "macd(C) > 0",
      "basis": "pattern"
    },
    "obv": {
      "yes_no": 0.8722,
      "rule": "obv() > sma(obv(), 20)",
      "basis": "rule"
    },
    "sum_up": {
      "yes_no": 0.45,
      "rule": "sum(sign(C - C[-1]), 10) > 2",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.561
    }
  },
  "context": {
    "symbol": "TLT",
    "as_of": "2026-10-30"
  }
}

macd obv offset sign sma sum

Hedge fund PM · example 17

Analyst idea intake: technical and event check on BKNG

When an analyst pitches a long, run a standard technical and event check and post it to the research system.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
pullbackrule(C > sma(C, 50)) and (sma(C, 50) > sma(C, 200)) and (L <= sma(C, 20) * 1.01) and (C >= sma(C, 20))
Uptrend pullback to the 20-day (entry zone)
beatrulebeat_eps_last > 0.5 and beat_revenue_last > 0.5
Beat on EPS and revenue last quarter
earn_soonEnglish → ruleIs earnings in the next 14 days?
rrruleC > swinglow(5) and C < swinghigh(5) and swinghigh(5) - C >= 2 * (C - swinglow(5))
At least 2:1 to the last swing high, stop at the last swing low
rally5forecastWill it rally at least 5% at some point in the next month?
A 5% rally within a month

Answers

QuestionAnswerReading
trend
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.1014false
pullback
Uptrend pullback to the 20-day (entry zone)
0.1252false
beat
Beat on EPS and revenue last quarter
0.8591true
earn_soon
Is earnings in the next 14 days
compiled to days_to_earnings <= 14
0.9463true
rr
At least 2:1 to the last swing high, stop at the last swing low
0.3293false
rally5
A 5% rally within a month
0.64865% · likely

Actions

Rules on the answers decide what to send.

trend >= 0→Webhookresearch-db
What each action would send 1 of 1 fired · dry run, nothing sent
intakewould send (dry run)Webhook → research-db
{
  "idea": "long",
  "symbol": "BKNG",
  "checks": {
    "above_200d": 0.1014,
    "pullback_entry": 0.1252,
    "beat_both": 0.8591,
    "earnings_14d": 0.9463,
    "reward_2to1": 0.3293
  },
  "p_rally5": 0.648,
  "as_of": "2026-10-30"
}

What it means

For BKNG on the session of 2026-10-30: True now: Beat on EPS and revenue last quarter; Is earnings in the next 14 days. Not true: Is the stock above its 200-day moving average; Uptrend pullback to the 20-day (entry zone); At least 2:1 to the last swing high, stop at the last swing low. Forecasts: A 5% rally within a month 65%. Fired: intake (Webhook → research-db).

Every pitch gets the same checklist attached in the research database, so the discussion starts from the same facts.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "BKNG"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "pullback": {
      "type": "yes_no",
      "ask": "(C > sma(C, 50)) and (sma(C, 50) > sma(C, 200)) and (L <= sma(C, 20) * 1.01) and (C >= sma(C, 20))"
    },
    "beat": {
      "type": "yes_no",
      "ask": "beat_eps_last > 0.5 and beat_revenue_last > 0.5"
    },
    "earn_soon": {
      "type": "yes_no",
      "instructions": "Is earnings in the next 14 days?"
    },
    "rr": {
      "type": "yes_no",
      "ask": "C > swinglow(5) and C < swinghigh(5) and swinghigh(5) - C >= 2 * (C - swinglow(5))"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "intake",
      "when": "trend >= 0",
      "do": "webhook",
      "connection": "research-db",
      "body": {
        "idea": "long",
        "symbol": "{{symbol}}",
        "checks": {
          "above_200d": "{{trend}}",
          "pullback_entry": "{{pullback}}",
          "beat_both": "{{beat}}",
          "earnings_14d": "{{earn_soon}}",
          "reward_2to1": "{{rr}}"
        },
        "p_rally5": "{{rally5}}",
        "as_of": "{{as_of}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (BKNG, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.1014,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "pullback": {
      "yes_no": 0.1252,
      "rule": "(C > sma(C, 50)) and (sma(C, 50) > sma(C, 200)) and (L <= sma(C, 20) * 1.01) and (C >= sma(C, 20))",
      "basis": "rule"
    },
    "beat": {
      "yes_no": 0.8591,
      "rule": "beat_eps_last > 0.5 and beat_revenue_last > 0.5",
      "basis": "rule"
    },
    "earn_soon": {
      "yes_no": 0.9463,
      "rule": "days_to_earnings <= 14",
      "basis": "pattern"
    },
    "rr": {
      "yes_no": 0.3293,
      "rule": "C > swinglow(5) and C < swinghigh(5) and swinghigh(5) - C >= 2 * (C - swinglow(5))",
      "basis": "rule"
    },
    "rally5": {
      "yes_no": 0.648
    }
  },
  "context": {
    "symbol": "BKNG",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "intake",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "research-db",
      "preview": {
        "body": {
          "idea": "long",
          "symbol": "BKNG",
          "checks": {
            "above_200d": 0.1014,
            "pullback_entry": 0.1252,
            "beat_both": 0.8591,
            "earnings_14d": 0.9463,
            "reward_2to1": 0.3293
          },
          "p_rally5": 0.648,
          "as_of": "2026-10-30"
        }
      }
    }
  ]
}

beat_eps_last beat_revenue_last days_to_earnings sma swinghigh swinglow

Hedge fund PM · example 18

Range expansion after compression in QCOM

Catch the first wide day after a quiet stretch, often the start of a directional move.

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

State

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

Questions

nr7_priorrule(H[-1] - L[-1]) < lowest(H - L, 6)
Yesterday was the narrowest range of 7 sessions
widerule(H - L) > 2 * avg(H - L, 20)
Range more than twice the 20-day average range
trruletr() > 1.5 * ref(atr(14), -1)
True range 1.5× yesterday's ATR
close_toprule(C - L) / (H - L) > 0.75
Closed in the top quarter of the day's range
big5forecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days

Answers

QuestionAnswerReading
nr7_prior
Yesterday was the narrowest range of 7 sessions
0.1772false
wide
Range more than twice the 20-day average range
0.7997true
tr
True range 1.5× yesterday's ATR
0.9463true
close_top
Closed in the top quarter of the day's range
0.0749false
big5
A big move either way in 5 days
0.27628% · unlikely

What it means

For QCOM on the session of 2026-10-30: True now: Range more than twice the 20-day average range; True range 1.5× yesterday's ATR. Not true: Yesterday was the narrowest range of 7 sessions; Closed in the top quarter of the day's range. Forecasts: A big move either way in 5 days 28%.

A wide day closing in its top quarter after a narrow one is the expansion setup; direction comes from the close.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "QCOM"
  },
  "questions": {
    "nr7_prior": {
      "type": "yes_no",
      "ask": "(H[-1] - L[-1]) < lowest(H - L, 6)"
    },
    "wide": {
      "type": "yes_no",
      "ask": "(H - L) > 2 * avg(H - L, 20)"
    },
    "tr": {
      "type": "yes_no",
      "ask": "tr() > 1.5 * ref(atr(14), -1)"
    },
    "close_top": {
      "type": "yes_no",
      "ask": "(C - L) / (H - L) > 0.75"
    },
    "big5": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  }
}
Response JSON (QCOM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "nr7_prior": {
      "yes_no": 0.1772,
      "rule": "(H[-1] - L[-1]) < lowest(H - L, 6)",
      "basis": "rule"
    },
    "wide": {
      "yes_no": 0.7997,
      "rule": "(H - L) > 2 * avg(H - L, 20)",
      "basis": "rule"
    },
    "tr": {
      "yes_no": 0.9463,
      "rule": "tr() > 1.5 * ref(atr(14), -1)",
      "basis": "rule"
    },
    "close_top": {
      "yes_no": 0.0749,
      "rule": "(C - L) / (H - L) > 0.75",
      "basis": "rule"
    },
    "big5": {
      "yes_no": 0.276
    }
  },
  "context": {
    "symbol": "QCOM",
    "as_of": "2026-10-30"
  }
}

atr avg lowest offset ref tr

Hedge fund PM · example 19

Kill switch: flatten the momentum sleeve on a market shock

If the market prints a return shock with broken trend, tell the OMS to pause new momentum entries.

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

shockrulezscore(C / C[-1] - 1, 20) < -2
A two-sigma down day
down_3English → ruleDid the stock fall more than 3% today?
below_50dEnglish → ruleIs the stock more than 5% below its 50-day moving average?
crossdownrulecrossdown(sma(C, 20), sma(C, 50))
20-day average crossed below the 50-day today
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

QuestionAnswerReading
shock
A two-sigma down day
0.6995true
down_3
Did the stock fall more than 3% today
compiled to C / C[-1] - 1 < -0.03
0.0709false
below_50d
Is the stock more than 5% below its 50-day moving average
compiled to C < sma(C, 50) * 0.95
0.0537false
crossdown
20-day average crossed below the 50-day today
0.05false
drop10
A 10% drawdown within a month
0.20521% · unlikely

Actions

Rules on the answers decide what to send.

shock >= 0.6 or (down_3 >= 0.6 and below_50d >= 0.6)→Webhookoms
else→Slackpm-desk
What each action would send 1 of 2 fired · dry run, nothing sent
pausewould send (dry run)Webhook → oms
{
  "command": "pause_strategy",
  "strategy": "momentum_sleeve",
  "reason": "market_shock",
  "p_shock": 0.6995,
  "p_drop10": 0.205,
  "as_of": "2026-10-30"
}
okrule false: skipped

What it means

For SPY on the session of 2026-10-30: True now: A two-sigma down day. Not true: Did the stock fall more than 3% today; Is the stock more than 5% below its 50-day moving average; 20-day average crossed below the 50-day today. Forecasts: A 10% drawdown within a month 21%. Fired: pause (Webhook → oms).

The pause is mechanical and reversible; the PM restarts the sleeve by hand once conditions settle.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "shock": {
      "type": "yes_no",
      "ask": "zscore(C / C[-1] - 1, 20) < -2"
    },
    "down_3": {
      "type": "yes_no",
      "instructions": "Did the stock fall more than 3% today?"
    },
    "below_50d": {
      "type": "yes_no",
      "instructions": "Is the stock more than 5% below its 50-day moving average?"
    },
    "crossdown": {
      "type": "yes_no",
      "ask": "crossdown(sma(C, 20), sma(C, 50))"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "pause",
      "when": "shock >= 0.6 or (down_3 >= 0.6 and below_50d >= 0.6)",
      "do": "webhook",
      "connection": "oms",
      "body": {
        "command": "pause_strategy",
        "strategy": "momentum_sleeve",
        "reason": "market_shock",
        "p_shock": "{{shock}}",
        "p_drop10": "{{drop10}}",
        "as_of": "{{as_of}}"
      }
    },
    {
      "id": "ok",
      "when": "else",
      "do": "slack",
      "connection": "pm-desk",
      "message": "SPY ({{as_of}}): no shock. 10% drawdown odds {{drop10|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (SPY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "shock": {
      "yes_no": 0.6995,
      "rule": "zscore(C / C[-1] - 1, 20) < -2",
      "basis": "rule"
    },
    "down_3": {
      "yes_no": 0.0709,
      "rule": "C / C[-1] - 1 < -0.03",
      "basis": "pattern"
    },
    "below_50d": {
      "yes_no": 0.0537,
      "rule": "C < sma(C, 50) * 0.95",
      "basis": "comparison"
    },
    "crossdown": {
      "yes_no": 0.05,
      "rule": "crossdown(sma(C, 20), sma(C, 50))",
      "basis": "rule"
    },
    "drop10": {
      "yes_no": 0.205
    }
  },
  "context": {
    "symbol": "SPY",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "pause",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "oms",
      "preview": {
        "body": {
          "command": "pause_strategy",
          "strategy": "momentum_sleeve",
          "reason": "market_shock",
          "p_shock": 0.6995,
          "p_drop10": 0.205,
          "as_of": "2026-10-30"
        }
      }
    },
    {
      "id": "ok",
      "fired": false,
      "status": "skipped"
    }
  ]
}

crossdown offset sma zscore

Hedge fund PM · example 20

Split news and index flows: has a stock split recently?

Recent large splits can change who owns a stock; check split history on a few big names held in the book.

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

State

{"symbol":"NVDA"} then WMT, CMG, one request each. The server fills in the latest completed session.

Questions

split_3yruledays_since_split <= 1095
Split in the last three years
ratiorulelast_split_ratio >= 4
Last split at least 4-for-1
announcedEnglish → ruleIs a stock split coming up?
multiEnglish → ruleHas the stock split more than once in the past five years?

Answers

Symbolsplit_3yruleratioruleannouncedrulemultirule
NVDA0.94630.94630.05370.1409
WMT0.94630.06830.05370.1409
CMG0.94630.94630.05370.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: Split in the last three years: true for NVDA, WMT, CMG of 3. Last split at least 4-for-1: true for NVDA, CMG of 3. Is a stock split coming up: true for none of 3. Has the stock split more than once in the past five years: true for none of 3.

Split facts explain share-count changes in the position records; they carry no view on price.

Request JSON (NVDA; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "questions": {
    "split_3y": {
      "type": "yes_no",
      "ask": "days_since_split <= 1095"
    },
    "ratio": {
      "type": "yes_no",
      "ask": "last_split_ratio >= 4"
    },
    "announced": {
      "type": "yes_no",
      "instructions": "Is a stock split coming up?"
    },
    "multi": {
      "type": "yes_no",
      "instructions": "Has the stock split more than once in the past five years?"
    }
  }
}
Response JSON (NVDA, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "split_3y": {
      "yes_no": 0.9463,
      "rule": "days_since_split <= 1095",
      "basis": "rule"
    },
    "ratio": {
      "yes_no": 0.9463,
      "rule": "last_split_ratio >= 4",
      "basis": "rule"
    },
    "announced": {
      "yes_no": 0.0537,
      "rule": "days_to_split <= 365",
      "basis": "pattern"
    },
    "multi": {
      "yes_no": 0.1409,
      "rule": "splits_5y >= 2",
      "basis": "pattern"
    }
  },
  "context": {
    "symbol": "NVDA",
    "as_of": "2026-10-30"
  }
}

days_since_split days_to_split last_split_ratio splits_5y

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, Quant researcher, Portfolio manager (long-only), Risk manager, Private equity, VC / growth investor, Fund-of-funds allocator.

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