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.
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.
- StateAMD
- Questions6 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"AMD"} The server fills in the latest completed session.
Questions
atr_pct | rule | atr_pct(14) > 4ATR over 4% of price |
atr_rank | rule | percentrank(atr(14), 120) > 80ATR in the top 20% of the last 120 sessions |
hv | rule | std(log(C / C[-1]), 20) * sqrt(252) > 0.4Annualized 20-day volatility above 40% |
tr_wide | rule | tr() > 1.5 * ref(atr(14), -1)True range 1.5× yesterday's ATR |
vol_up | forecast | Will volatility rise over the next 5 days? Volatility rising over 5 days |
hv30 | forecast | Will annualized volatility over the next 21 sessions exceed 30%? Next-month volatility above 30% |
Answers
| Question | Answer | Reading |
|---|---|---|
atr_pctATR over 4% of price | 0.9226 | true |
atr_rankATR in the top 20% of the last 120 sessions | 0.0832 | false |
hvAnnualized 20-day volatility above 40% | 0.9363 | true |
tr_wideTrue range 1.5× yesterday's ATR | 0.9413 | true |
vol_upVolatility rising over 5 days | 0.397 | 40% · unlikely |
hv30Next-month volatility above 30% | 0.501 | 50% · close to even |
Actions
Rules on the answers decide what to send.
atr_rank >= 0.6 or atr_pct >= 0.6→Webhookrisk-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"
}
}
}
]
}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.
- StateCCL
- Questions6 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"CCL"} The server fills in the latest completed session.
Questions
vol_spike | rule | V > 2 * ref(avg(V, 20), -1)Volume more than twice the previous 20-day average |
unfilled_gap | rule | L > H[-1]An unfilled gap up |
trend_day | rule | (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 |
soldiers | rule | three_white_soldiers()three white soldiers candle: Three green bars, each closing higher and opening inside the previous body. |
rally10 | forecast | Will it rally at least 10% at some point in the next month? A 10% rally within a month |
gap_up | forecast | Will it gap up tomorrow? A gap up tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
vol_spikeVolume more than twice the previous 20-day average | 0.0778 | false |
unfilled_gapAn unfilled gap up | 0.088 | false |
trend_dayA trend day up: opened near the low, closed near the high | 0.1889 | false |
soldiersthree white soldiers candle: Three green bars, each closing higher and opening inside the previous body. | 0.0742 | false |
rally10A 10% rally within a month | 0.501 | 50% · close to even |
gap_upA gap up tomorrow | 0.076 | 8% · 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-deskWhat 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"
}
]
}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.
- State4 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"SMH"} then SOXX, CRM, NOW, one request each. The server fills in the latest completed session.
Questions
stacked | rule | C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)Stacked averages: close > 20 EMA > 50 > 200 |
roc63 | rule | roc(C, 63) > 0Up over three months |
adx | rule | adx(14) > 25Trending (ADX above 25) |
highestbars | rule | highestbars(C, 50) <= 5The 50-day closing high came in the last 5 sessions |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | stackedrule | roc63rule | adxrule | highestbarsrule | beat_spyforecast |
|---|---|---|---|---|---|
SMH | 0.0803 | 0.2019 | 0.5057 | 0.1903 | 0.538 |
SOXX | 0.0769 | 0.1524 | 0.5902 | 0.19 | 0.533 |
CRM | 0.2151 | 0.9134 | 0.2012 | 0.0617 | 0.551 |
NOW | 0.0537 | 0.2262 | 0.9318 | 0.55 | 0.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"
}
}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.
- StatePFE
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"PFE"} The server fills in the latest completed session.
Questions
ex_soon | rule | days_to_ex_div <= 30Goes ex-dividend within 30 days |
yield3 | rule | div_yield_ttm > 3Yield above 3% |
next_div | rule | next_div_amount > 0A next dividend is declared |
trend | English → rule | Is the stock below its 200-day moving average? |
Answers
| Question | Answer | Reading |
|---|---|---|
ex_soonGoes ex-dividend within 30 days | 0.9463 | true |
yield3Yield above 3% | 0.9463 | true |
next_divA next dividend is declared | 0.9463 | true |
trendIs the stock below its 200-day moving average compiled to C < sma(C, 200) | 0.0537 | false |
Actions
Rules on the answers decide what to send.
ex_soon >= 0.6→Slackpm-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."
}
}
]
}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.
- StateUNH
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"UNH"} The server fills in the latest completed session.
Questions
rsi2 | rule | rsi(C, 2) < 10Two-day RSI under 10 |
stoch | English → rule | Is the stock oversold on the stochastic, below 20? |
willr | rule | willr(14) < -90Williams %R under -90 |
hammer | rule | 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. |
piercing | rule | piercing_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_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
rsi2Two-day RSI under 10 | 0.221 | false |
stochIs the stock oversold on the stochastic, below 20 compiled to stochk(14, 3, 3) < 20 | 0.0809 | false |
willrWilliams %R under -90 | 0.0748 | false |
hammerhammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back. | 0.0701 | false |
piercingpiercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open). | 0.1039 | false |
up_weekHigher in a week | 0.485 | 49% · 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"
}
}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.
- State3 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"TLT"} then GLD, UUP, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
macd | English → rule | Is MACD above zero? |
obv | rule | obv() > sma(obv(), 20)On-balance volume above its 20-day average |
sum_up | rule | sum(sign(C - C[-1]), 10) > 2Net up days over the last ten sessions above two |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Symbol | trendrule | macdrule | obvrule | sum_uprule | up_weekforecast |
|---|---|---|---|---|---|
TLT | 0.1127 | 0.8818 | 0.8722 | 0.45 | 0.561 |
GLD | 0.0537 | 0.1255 | 0.1358 | 0.1074 | 0.566 |
UUP | 0.9463 | 0.8581 | 0.1311 | 0.1852 | 0.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"
}
}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.
- StateBKNG
- Questions6 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"BKNG"} The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
pullback | rule | (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) |
beat | rule | beat_eps_last > 0.5 and beat_revenue_last > 0.5Beat on EPS and revenue last quarter |
earn_soon | English → rule | Is earnings in the next 14 days? |
rr | rule | C > 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 |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
trendIs the stock above its 200-day moving average compiled to C > sma(C, 200) | 0.1014 | false |
pullbackUptrend pullback to the 20-day (entry zone) | 0.1252 | false |
beatBeat on EPS and revenue last quarter | 0.8591 | true |
earn_soonIs earnings in the next 14 days compiled to days_to_earnings <= 14 | 0.9463 | true |
rrAt least 2:1 to the last swing high, stop at the last swing low | 0.3293 | false |
rally5A 5% rally within a month | 0.648 | 65% · likely |
Actions
Rules on the answers decide what to send.
trend >= 0→Webhookresearch-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.
- StateQCOM
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"QCOM"} The server fills in the latest completed session.
Questions
nr7_prior | rule | (H[-1] - L[-1]) < lowest(H - L, 6)Yesterday was the narrowest range of 7 sessions |
wide | rule | (H - L) > 2 * avg(H - L, 20)Range more than twice the 20-day average range |
tr | rule | tr() > 1.5 * ref(atr(14), -1)True range 1.5× yesterday's ATR |
close_top | rule | (C - L) / (H - L) > 0.75Closed in the top quarter of the day's range |
big5 | forecast | Will there be a big move in either direction in the next 5 days? A big move either way in 5 days |
Answers
| Question | Answer | Reading |
|---|---|---|
nr7_priorYesterday was the narrowest range of 7 sessions | 0.1772 | false |
wideRange more than twice the 20-day average range | 0.7997 | true |
trTrue range 1.5× yesterday's ATR | 0.9463 | true |
close_topClosed in the top quarter of the day's range | 0.0749 | false |
big5A big move either way in 5 days | 0.276 | 28% · 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"
}
}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.
- StateSPY
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"SPY"} The server fills in the latest completed session.
Questions
shock | rule | zscore(C / C[-1] - 1, 20) < -2A two-sigma down day |
down_3 | English → rule | Did the stock fall more than 3% today? |
below_50d | English → rule | Is the stock more than 5% below its 50-day moving average? |
crossdown | rule | crossdown(sma(C, 20), sma(C, 50))20-day average crossed below the 50-day today |
drop10 | forecast | Will it drop at least 10% at some point in the next month? A 10% drawdown within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
shockA two-sigma down day | 0.6995 | true |
down_3Did the stock fall more than 3% today compiled to C / C[-1] - 1 < -0.03 | 0.0709 | false |
below_50dIs the stock more than 5% below its 50-day moving average compiled to C < sma(C, 50) * 0.95 | 0.0537 | false |
crossdown20-day average crossed below the 50-day today | 0.05 | false |
drop10A 10% drawdown within a month | 0.205 | 21% · unlikely |
Actions
Rules on the answers decide what to send.
shock >= 0.6 or (down_3 >= 0.6 and below_50d >= 0.6)→Webhookomselse→Slackpm-desk{
"command": "pause_strategy",
"strategy": "momentum_sleeve",
"reason": "market_shock",
"p_shock": 0.6995,
"p_drop10": 0.205,
"as_of": "2026-10-30"
}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"
}
]
}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.
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"NVDA"} then WMT, CMG, one request each. The server fills in the latest completed session.
Questions
split_3y | rule | days_since_split <= 1095Split in the last three years |
ratio | rule | last_split_ratio >= 4Last split at least 4-for-1 |
announced | English → rule | Is a stock split coming up? |
multi | English → rule | Has the stock split more than once in the past five years? |
Answers
| Symbol | split_3yrule | ratiorule | announcedrule | multirule |
|---|---|---|---|---|
NVDA | 0.9463 | 0.9463 | 0.0537 | 0.1409 |
WMT | 0.9463 | 0.0683 | 0.0537 | 0.1409 |
CMG | 0.9463 | 0.9463 | 0.0537 | 0.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"
}
}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.