Use cases · Sell side
Prop trading firm: 20 ways to use Ora
Trader risk rules, setup scans and firm-wide kill switches on the daily data. Each example is a complete, runnable request with the real answers it returned (47 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 (40)
offset 11sma 8atr 4avg 4ref 4swinghigh 4swinglow 4std 3roc 3abs 2highest 2rsi 2atr_pct 2lowest 2log 2sqrt 2max 2zscore 1bblower 1crossup 1three_black_crows 1adx 1hammer 1inverted_hammer 1morning_star 1three_white_soldiers 1days_to_earnings 1last_earnings_move 1next_report_amc 1macd 1bbupper 1cci 1stochk 1min 1tweezer_bottom 1obv 1sign 1sum 1doji 1spinning_top 1
Examples 1–10 of 20 · page 1 of 2
Prop trading firm · example 1
Firm-wide kill switch: SPY shock day cuts trader limits
When the index has a shock day, send the risk system a firm-wide instruction to halve trader limits.
- 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 |
big | rule | abs(C - C[-1]) > 1.5 * atr(14)Today's move was bigger than 1.5 ATR |
down3 | English → rule | Did the stock fall more than 3% today? |
below200 | English → rule | Is the stock below its 200-day moving average? |
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 |
|---|---|---|
shockA two-sigma down day | 0.6995 | true |
bigToday's move was bigger than 1.5 ATR | 0.8053 | true |
down3Did the stock fall more than 3% today compiled to C / C[-1] - 1 < -0.03 | 0.0709 | false |
below200Is the stock below its 200-day moving average compiled to C < sma(C, 200) | 0.0549 | false |
big5A big move either way in 5 days | 0.425 | 43% · close to even |
Actions
Rules on the answers decide what to send.
shock >= 0.6 or (big >= 0.6 and down3 >= 0.6)→Webhookrisk-systemelse→Slackrisk-floor{
"scope": "firm",
"action": "scale_limits",
"factor": 0.5,
"trigger": "SPY_shock_day",
"p_shock": 0.6995,
"p_big_move5": 0.425,
"as_of": "2026-10-30"
}What it means
For SPY on the session of 2026-10-30: True now: A two-sigma down day; Today's move was bigger than 1.5 ATR. Not true: Did the stock fall more than 3% today; Is the stock below its 200-day moving average. Forecasts: A big move either way in 5 days 43%. Fired: halve (Webhook → risk-system).
Exact rules on the index trigger the switch; the else branch confirms limits stay where they are.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"shock": {
"type": "yes_no",
"ask": "zscore(C / C[-1] - 1, 20) < -2"
},
"big": {
"type": "yes_no",
"ask": "abs(C - C[-1]) > 1.5 * atr(14)"
},
"down3": {
"type": "yes_no",
"instructions": "Did the stock fall more than 3% today?"
},
"below200": {
"type": "yes_no",
"instructions": "Is the stock below its 200-day moving average?"
},
"big5": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
},
"actions": [
{
"id": "halve",
"when": "shock >= 0.6 or (big >= 0.6 and down3 >= 0.6)",
"do": "webhook",
"connection": "risk-system",
"body": {
"scope": "firm",
"action": "scale_limits",
"factor": 0.5,
"trigger": "{{symbol}}_shock_day",
"p_shock": "{{shock}}",
"p_big_move5": "{{big5}}",
"as_of": "{{as_of}}"
}
},
{
"id": "normal",
"when": "else",
"do": "slack",
"connection": "risk-floor",
"message": "{{symbol}} ({{as_of}}): no shock day (z-score rule {{shock|pct}}). Limits unchanged."
}
],
"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"
},
"big": {
"yes_no": 0.8053,
"rule": "abs(C - C[-1]) > 1.5 * atr(14)",
"basis": "rule"
},
"down3": {
"yes_no": 0.0709,
"rule": "C / C[-1] - 1 < -0.03",
"basis": "pattern"
},
"below200": {
"yes_no": 0.0549,
"rule": "C < sma(C, 200)",
"basis": "comparison"
},
"big5": {
"yes_no": 0.425
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "halve",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "risk-system",
"preview": {
"body": {
"scope": "firm",
"action": "scale_limits",
"factor": 0.5,
"trigger": "SPY_shock_day",
"p_shock": 0.6995,
"p_big_move5": 0.425,
"as_of": "2026-10-30"
}
}
},
{
"id": "normal",
"fired": false,
"status": "skipped"
}
]
}Prop trading firm · example 2
Breakout scan for the desk: NVDA, AMD, SMCI, MU, TSM, ASML
Each evening, scan semiconductor names for volume breakouts and post the hits to the trader channel.
- ScheduleMon–Fri at 17:00 ET
- State6 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"NVDA"} then AMD, SMCI, MU, TSM, ASML, one request each. The server fills in the latest completed session.
Questions
bo | rule | C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)20-day breakout on 1.5× volume |
squeeze_bo | rule | std(C, 20) < 0.7 * std(C, 100) and C > highest(C, 20)Squeeze, then a breakout |
high20 | rule | H > highest(H, 20)Took out the 20-day high intraday |
new_high | forecast | Will it make a new 20-day high in the next week? A new 20-day high next week |
Answers
| Symbol | borule | squeeze_borule | high20rule | new_highforecast | Fired |
|---|---|---|---|---|---|
NVDA | 0.0537 | 0.0537 | 0.0537 | 0.027 | none |
AMD | 0.0537 | 0.0537 | 0.0537 | 0.052 | none |
SMCI | 0.0562 | 0.0562 | 0.0542 | 0.038 | none |
MU | 0.0543 | 0.0543 | 0.0537 | 0.055 | none |
TSM | 0.0537 | 0.0537 | 0.0537 | 0.037 | none |
ASML | 0.0537 | 0.0537 | 0.0544 | 0.038 | none |
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.
bo >= 0.6 or squeeze_bo >= 0.6→Slackprop-ideasWhat it means
Session of 2026-10-30, 6 symbols: 20-day breakout on 1.5× volume: true for none of 6. Squeeze, then a breakout: true for none of 6. Took out the 20-day high intraday: true for none of 6. Highest odds for “A new 20-day high next week”: MU at 6%. hit fired for none.
Only names where a breakout rule is true post; traders review them before the next open.
As a scheduled workflow (Mon–Fri at 17:00 ET)
Create it under Workflows in the console: it runs these questions for every symbol on the schedule and fires the actions per symbol. The answers above are what one run returned.
{
"name": "Breakout scan for the desk: NVDA, AMD, SMCI, MU, TSM, ASML",
"symbols": "NVDA AMD SMCI MU TSM ASML",
"days": [
1,
2,
3,
4,
5
],
"at_time": "17:00",
"model": "ora-fin-0.1.1",
"questions": {
"bo": {
"type": "yes_no",
"ask": "C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)"
},
"squeeze_bo": {
"type": "yes_no",
"ask": "std(C, 20) < 0.7 * std(C, 100) and C > highest(C, 20)"
},
"high20": {
"type": "yes_no",
"ask": "H > highest(H, 20)"
},
"new_high": {
"type": "yes_no",
"instructions": "Will it make a new 20-day high in the next week?"
}
},
"actions": [
{
"id": "hit",
"when": "bo >= 0.6 or squeeze_bo >= 0.6",
"do": "slack",
"connection": "prop-ideas",
"message": "{{symbol}} ({{as_of}}): breakout (volume {{bo|pct}}, from a squeeze {{squeeze_bo|pct}}). New 20-day high next week {{new_high|pct}}."
}
]
}Request JSON (NVDA; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "NVDA"
},
"questions": {
"bo": {
"type": "yes_no",
"ask": "C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)"
},
"squeeze_bo": {
"type": "yes_no",
"ask": "std(C, 20) < 0.7 * std(C, 100) and C > highest(C, 20)"
},
"high20": {
"type": "yes_no",
"ask": "H > highest(H, 20)"
},
"new_high": {
"type": "yes_no",
"instructions": "Will it make a new 20-day high in the next week?"
}
},
"actions": [
{
"id": "hit",
"when": "bo >= 0.6 or squeeze_bo >= 0.6",
"do": "slack",
"connection": "prop-ideas",
"message": "{{symbol}} ({{as_of}}): breakout (volume {{bo|pct}}, from a squeeze {{squeeze_bo|pct}}). New 20-day high next week {{new_high|pct}}."
}
],
"dry_run": true
}Response JSON (NVDA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"bo": {
"yes_no": 0.0537,
"rule": "C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"squeeze_bo": {
"yes_no": 0.0537,
"rule": "std(C, 20) < 0.7 * std(C, 100) and C > highest(C, 20)",
"basis": "rule"
},
"high20": {
"yes_no": 0.0537,
"rule": "H > highest(H, 20)",
"basis": "rule"
},
"new_high": {
"yes_no": 0.027
}
},
"context": {
"symbol": "NVDA",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "hit",
"fired": false,
"status": "skipped"
}
]
}Prop trading firm · example 3
Trader risk rule: no new TSLA longs below the 50-day after a drawdown
Enforce a desk rule: when the stock is under its 50-day and down five percent over a month, block new longs.
- StateTSLA
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"TSLA"} The server fills in the latest completed session.
Questions
below50 | rule | C < sma(C, 50)Close below the 50-day average |
down_month | English → rule | Is the stock down more than 5% over the last month? |
lh_ll | English → rule | Is the stock making lower swing highs and lower swing lows? |
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 |
|---|---|---|
below50Close below the 50-day average | 0.1039 | false |
down_monthIs the stock down more than 5% over the last month compiled to C / C[-21] - 1 < -0.05 | 0.0713 | false |
lh_llIs the stock making lower swing highs and lower swing lows compiled to (swinghigh(5, 1) < swinghigh(5, 2)) and (swinglow(5, 1) < swinglow(5, 2)) | 0.4322 | on the line (false) |
drop10A 10% drawdown within a month | 0.638 | 64% · likely |
Actions
Rules on the answers decide what to send.
below50 >= 0.6 and down_month >= 0.6→Webhookrisk-systemWhat it means
For TSLA on the session of 2026-10-30: Not true: Close below the 50-day average; Is the stock down more than 5% over the last month. On the line: Is the stock making lower swing highs and lower swing lows. Forecasts: A 10% drawdown within a month 64%. No action fired: every rule was false.
The block is a firm rule applied the same way every day; traders can see exactly which conditions triggered it.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TSLA"
},
"questions": {
"below50": {
"type": "yes_no",
"ask": "C < sma(C, 50)"
},
"down_month": {
"type": "yes_no",
"instructions": "Is the stock down more than 5% over the last month?"
},
"lh_ll": {
"type": "yes_no",
"instructions": "Is the stock making lower swing highs and lower swing lows?"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
}
},
"actions": [
{
"id": "block",
"when": "below50 >= 0.6 and down_month >= 0.6",
"do": "webhook",
"connection": "risk-system",
"body": {
"symbol": "{{symbol}}",
"action": "block_new_longs",
"rule": "below_50d_and_down_5pct_month",
"as_of": "{{as_of}}"
}
}
],
"dry_run": true
}Response JSON (TSLA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"below50": {
"yes_no": 0.1039,
"rule": "C < sma(C, 50)",
"basis": "rule"
},
"down_month": {
"yes_no": 0.0713,
"rule": "C / C[-21] - 1 < -0.05",
"basis": "pattern"
},
"lh_ll": {
"yes_no": 0.4322,
"rule": "(swinghigh(5, 1) < swinghigh(5, 2)) and (swinglow(5, 1) < swinglow(5, 2))",
"basis": "pattern"
},
"drop10": {
"yes_no": 0.638
}
},
"context": {
"symbol": "TSLA",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "block",
"fired": false,
"status": "skipped"
}
]
}Prop trading firm · example 4
RSI(2) mean-reversion scan on index ETFs
Find oversold index ETFs in long-term uptrends for the short-term reversion book.
- State4 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"SPY"} then QQQ, IWM, DIA, one request each. The server fills in the latest completed session.
Questions
rsi2 | rule | rsi(C, 2) < 10Two-day RSI under 10 |
trend | English → rule | Is the stock above its 200-day moving average? |
three_down | rule | C < C[-1] and C[-1] < C[-2] and C[-2] < C[-3] and C > sma(C, 200)Three lower closes while above the 200-day |
back_in | rule | crossup(C, bblower(C, 20, 2))Crossed back above the lower band |
up_tom | forecast | Will the stock be up tomorrow? Up tomorrow |
Answers
| Symbol | rsi2rule | trendrule | three_downrule | back_inrule | up_tomforecast |
|---|---|---|---|---|---|
SPY | 0.5164 | 0.9451 | 0.2277 | 0.05 | 0.532 |
QQQ | 0.5356 | 0.7987 | 0.2241 | 0.05 | 0.533 |
IWM | 0.1938 | 0.5564 | 0.1217 | 0.05 | 0.486 |
DIA | 0.5631 | 0.8778 | 0.2748 | 0.05 | 0.52 |
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: Two-day RSI under 10: true for none of 4. Is the stock above its 200-day moving average: true for SPY, QQQ, DIA of 4. Three lower closes while above the 200-day: true for none of 4. Crossed back above the lower band: true for none of 4. Highest odds for “Up tomorrow”: QQQ at 53%.
Oversold in an uptrend is the setup; the up-tomorrow odds rank the candidates.
Request JSON (SPY; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"rsi2": {
"type": "yes_no",
"ask": "rsi(C, 2) < 10"
},
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"three_down": {
"type": "yes_no",
"ask": "C < C[-1] and C[-1] < C[-2] and C[-2] < C[-3] and C > sma(C, 200)"
},
"back_in": {
"type": "yes_no",
"ask": "crossup(C, bblower(C, 20, 2))"
},
"up_tom": {
"type": "yes_no",
"instructions": "Will the stock be up tomorrow?"
}
}
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"rsi2": {
"yes_no": 0.5164,
"rule": "rsi(C, 2) < 10",
"basis": "rule"
},
"trend": {
"yes_no": 0.9451,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"three_down": {
"yes_no": 0.2277,
"rule": "C < C[-1] and C[-1] < C[-2] and C[-2] < C[-3] and C > sma(C, 200)",
"basis": "rule"
},
"back_in": {
"yes_no": 0.05,
"rule": "crossup(C, bblower(C, 20, 2))",
"basis": "rule"
},
"up_tom": {
"yes_no": 0.532
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
}
}Prop trading firm · example 5
NFLX gap-and-go: did the gap hold and close strong?
Check the classic opening-gap continuation setup on the daily bar for tomorrow's plan.
- StateNFLX
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"NFLX"} The server fills in the latest completed session.
Questions
gap | rule | O > C[-1] * 1.01Opened more than 1% above yesterday's close |
held | rule | L > H[-1]An unfilled gap up |
top | rule | (C - L) / (H - L) > 0.75Closed in the top quarter of the day's range |
faded | rule | O > C[-1] and C < C[-1]Gapped up but closed under yesterday's close |
up_tom | forecast | Will the stock be up tomorrow? Up tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
gapOpened more than 1% above yesterday's close | 0.4929 | on the line (false) |
heldAn unfilled gap up | 0.2232 | false |
topClosed in the top quarter of the day's range | 0.0983 | false |
fadedGapped up but closed under yesterday's close | 0.4872 | on the line (false) |
up_tomUp tomorrow | 0.499 | 50% · close to even |
What it means
For NFLX on the session of 2026-10-30: Not true: An unfilled gap up; Closed in the top quarter of the day's range. On the line: Opened more than 1% above yesterday's close; Gapped up but closed under yesterday's close. Forecasts: Up tomorrow 50%.
A gap that held with a close in the top quarter is a continuation candidate; a faded gap is not.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "NFLX"
},
"questions": {
"gap": {
"type": "yes_no",
"ask": "O > C[-1] * 1.01"
},
"held": {
"type": "yes_no",
"ask": "L > H[-1]"
},
"top": {
"type": "yes_no",
"ask": "(C - L) / (H - L) > 0.75"
},
"faded": {
"type": "yes_no",
"ask": "O > C[-1] and C < C[-1]"
},
"up_tom": {
"type": "yes_no",
"instructions": "Will the stock be up tomorrow?"
}
}
}Response JSON (NFLX, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"gap": {
"yes_no": 0.4929,
"rule": "O > C[-1] * 1.01",
"basis": "rule"
},
"held": {
"yes_no": 0.2232,
"rule": "L > H[-1]",
"basis": "rule"
},
"top": {
"yes_no": 0.0983,
"rule": "(C - L) / (H - L) > 0.75",
"basis": "rule"
},
"faded": {
"yes_no": 0.4872,
"rule": "O > C[-1] and C < C[-1]",
"basis": "rule"
},
"up_tom": {
"yes_no": 0.499
}
},
"context": {
"symbol": "NFLX",
"as_of": "2026-10-30"
}
}Prop trading firm · example 6
AMD position sizing: does a 2 ATR stop fit the risk budget?
Confirm a trader can take a meaningful position with a 2 ATR stop at one percent of the account at risk.
- StateAMD
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"AMD"} The server fills in the latest completed session.
Questions
size | rule | 0.01 / (2 * atr(14) / C) >= 0.25A 2-ATR stop risking 1% allows at least a 25% position |
stop | rule | C > L[-1] and C - L[-1] < atr(14)A stop under yesterday's low is less than 1 ATR away |
atr3 | rule | atr_pct(14) > 3A typical day moves more than 3% |
rr | English → rule | Is the risk/reward at least 2:1, targeting the last swing high with a stop at the last swing low? |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
sizeA 2-ATR stop risking 1% allows at least a 25% position | 0.0537 | false |
stopA stop under yesterday's low is less than 1 ATR away | 0.0567 | false |
atr3A typical day moves more than 3% | 0.9441 | true |
rrIs the risk/reward at least 2:1, targeting the last swing high with a stop at the last swing low compiled to (C > swinglow(5, 1)) and (C < swinghigh(5, 1)) and (swinghigh(5, 1) - C >= 2 * (C - swinglow(5, 1))) | 0.5233 | on the line (true) |
drop5A 5% drawdown within a month | 0.763 | 76% · likely |
What it means
For AMD on the session of 2026-10-30: True now: A typical day moves more than 3%. Not true: A 2-ATR stop risking 1% allows at least a 25% position; A stop under yesterday's low is less than 1 ATR away. On the line: Is the risk/reward at least 2:1, targeting the last swing high with a stop at the last swing low. Forecasts: A 5% drawdown within a month 76%.
If the size rule is false, the stop is too wide for the budget and the trade is taken smaller or skipped.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AMD"
},
"questions": {
"size": {
"type": "yes_no",
"ask": "0.01 / (2 * atr(14) / C) >= 0.25"
},
"stop": {
"type": "yes_no",
"ask": "C > L[-1] and C - L[-1] < atr(14)"
},
"atr3": {
"type": "yes_no",
"ask": "atr_pct(14) > 3"
},
"rr": {
"type": "yes_no",
"instructions": "Is the risk/reward at least 2:1, targeting the last swing high with a stop at the last swing low?"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
}
}Response JSON (AMD, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"size": {
"yes_no": 0.0537,
"rule": "0.01 / (2 * atr(14) / C) >= 0.25",
"basis": "rule"
},
"stop": {
"yes_no": 0.0567,
"rule": "C > L[-1] and C - L[-1] < atr(14)",
"basis": "rule"
},
"atr3": {
"yes_no": 0.9441,
"rule": "atr_pct(14) > 3",
"basis": "rule"
},
"rr": {
"yes_no": 0.5233,
"rule": "(C > swinglow(5, 1)) and (C < swinghigh(5, 1)) and (swinghigh(5, 1) - C >= 2 * (C - swinglow(5, 1)))",
"basis": "pattern"
},
"drop5": {
"yes_no": 0.763
}
},
"context": {
"symbol": "AMD",
"as_of": "2026-10-30"
}
}Prop trading firm · example 7
Short-side scan: breakdowns in BA, INTC, NKE, PFE
Find names breaking their 20-day lows on volume with lower swing highs for the short book.
- State4 symbols
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"BA"} then INTC, NKE, PFE, one request each. The server fills in the latest completed session.
Questions
bd | rule | C < lowest(L, 20)Closed under the 20-day low |
down_vol | rule | C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)Down on heavy volume |
lh_ll | English → rule | Is the stock making lower swing highs and lower swing lows? |
crows | rule | three_black_crows()three black crows candle: Three red bars, each closing lower and opening inside the previous body. |
new_low | forecast | Will it make a new 20-day low in the next week? A new 20-day low next week |
Answers
| Symbol | bdrule | down_volrule | lh_llrule | crowsrule | new_lowforecast | Fired |
|---|---|---|---|---|---|---|
BA | 0.191 | 0.1406 | 0.5498 | 0.107 | 0.408 | none |
INTC | 0.9122 | 0.9463 | 0.1552 | 0.0537 | 0.723 | short_idea |
NKE | 0.0537 | 0.1209 | 0.9398 | 0.0731 | 0.038 | none |
PFE | 0.0539 | 0.0847 | 0.1586 | 0.0847 | 0.026 | none |
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.
bd >= 0.6 and down_vol >= 0.6→Slackprop-ideas{
"text": "INTC (2026-10-30): broke its 20-day low on volume. Lower highs and lows 16%. New 20-day low next week 72%."
}What it means
Session of 2026-10-30, 4 symbols: Closed under the 20-day low: true for INTC of 4. Down on heavy volume: true for INTC of 4. Is the stock making lower swing highs and lower swing lows: true for NKE of 4. three black crows candle: Three red bars, each closing lower and opening inside the previous body.: true for none of 4. Highest odds for “A new 20-day low next week”: INTC at 72%. short_idea fired for INTC.
Only volume breakdowns post; structure and the forecast help choose between them.
Request JSON (BA; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "BA"
},
"questions": {
"bd": {
"type": "yes_no",
"ask": "C < lowest(L, 20)"
},
"down_vol": {
"type": "yes_no",
"ask": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)"
},
"lh_ll": {
"type": "yes_no",
"instructions": "Is the stock making lower swing highs and lower swing lows?"
},
"crows": {
"type": "yes_no",
"ask": "three_black_crows()"
},
"new_low": {
"type": "yes_no",
"instructions": "Will it make a new 20-day low in the next week?"
}
},
"actions": [
{
"id": "short_idea",
"when": "bd >= 0.6 and down_vol >= 0.6",
"do": "slack",
"connection": "prop-ideas",
"message": "{{symbol}} ({{as_of}}): broke its 20-day low on volume. Lower highs and lows {{lh_ll|pct}}. New 20-day low next week {{new_low|pct}}."
}
],
"dry_run": true
}Response JSON (BA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"bd": {
"yes_no": 0.191,
"rule": "C < lowest(L, 20)",
"basis": "rule"
},
"down_vol": {
"yes_no": 0.1406,
"rule": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"lh_ll": {
"yes_no": 0.5498,
"rule": "(swinghigh(5, 1) < swinghigh(5, 2)) and (swinglow(5, 1) < swinglow(5, 2))",
"basis": "pattern"
},
"crows": {
"yes_no": 0.107,
"rule": "three_black_crows()",
"basis": "rule"
},
"new_low": {
"yes_no": 0.408
}
},
"context": {
"symbol": "BA",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "short_idea",
"fired": false,
"status": "skipped"
}
]
}Prop trading firm · example 8
End-of-day context email for the head trader
Email a one-line market context per index so P&L reviews account for the kind of day it was.
- ScheduleMon–Fri at 16:20 ET
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"SPY"} then QQQ, IWM, one request each. The server fills in the latest completed session.
Questions
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 |
wide | rule | (H - L) > 2 * avg(H - L, 20)Range more than twice the 20-day average range |
inside | rule | H < H[-1] and L > L[-1]An inside day |
vol | rule | V > avg(V, 20)Volume above its 20-day average |
Answers
| Symbol | trend_dayrule | widerule | insiderule | volrule | Fired |
|---|---|---|---|---|---|
SPY | 0.0537 | 0.262 | 0.0537 | 0.9463 | context |
QQQ | 0.0537 | 0.1755 | 0.0537 | 0.9463 | context |
IWM | 0.0537 | 0.1804 | 0.0637 | 0.4577 | context |
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.
vol >= 0→Emailhead-trader{
"subject": "Context SPY 2026-10-30",
"text": "SPY: trend day 5%, wide range 26%, inside day 5%, volume above average 95%."
}{
"subject": "Context QQQ 2026-10-30",
"text": "QQQ: trend day 5%, wide range 18%, inside day 5%, volume above average 95%."
}{
"subject": "Context IWM 2026-10-30",
"text": "IWM: trend day 5%, wide range 18%, inside day 6%, volume above average 46%."
}What it means
Session of 2026-10-30, 3 symbols: A trend day up: opened near the low, closed near the high: true for none of 3. Range more than twice the 20-day average range: true for none of 3. An inside day: true for none of 3. Volume above its 20-day average: true for SPY, QQQ of 3. context fired for SPY, QQQ, IWM.
Traders are judged against the day they had; the context email makes that part of every review.
As a scheduled workflow (Mon–Fri at 16:20 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": "End-of-day context email for the head trader",
"symbols": "SPY QQQ IWM",
"days": [
1,
2,
3,
4,
5
],
"at_time": "16:20",
"model": "ora-fin-0.1.1",
"questions": {
"trend_day": {
"type": "yes_no",
"ask": "(O <= L + 0.2 * (H - L)) and (C >= H - 0.2 * (H - L))"
},
"wide": {
"type": "yes_no",
"ask": "(H - L) > 2 * avg(H - L, 20)"
},
"inside": {
"type": "yes_no",
"ask": "H < H[-1] and L > L[-1]"
},
"vol": {
"type": "yes_no",
"ask": "V > avg(V, 20)"
}
},
"actions": [
{
"id": "context",
"when": "vol >= 0",
"do": "email",
"connection": "head-trader",
"subject": "Context {{symbol}} {{as_of}}",
"message": "{{symbol}}: trend day {{trend_day|pct}}, wide range {{wide|pct}}, inside day {{inside|pct}}, volume above average {{vol|pct}}."
}
]
}Request JSON (SPY; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"trend_day": {
"type": "yes_no",
"ask": "(O <= L + 0.2 * (H - L)) and (C >= H - 0.2 * (H - L))"
},
"wide": {
"type": "yes_no",
"ask": "(H - L) > 2 * avg(H - L, 20)"
},
"inside": {
"type": "yes_no",
"ask": "H < H[-1] and L > L[-1]"
},
"vol": {
"type": "yes_no",
"ask": "V > avg(V, 20)"
}
},
"actions": [
{
"id": "context",
"when": "vol >= 0",
"do": "email",
"connection": "head-trader",
"subject": "Context {{symbol}} {{as_of}}",
"message": "{{symbol}}: trend day {{trend_day|pct}}, wide range {{wide|pct}}, inside day {{inside|pct}}, volume above average {{vol|pct}}."
}
],
"dry_run": true
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend_day": {
"yes_no": 0.0537,
"rule": "(O <= L + 0.2 * (H - L)) and (C >= H - 0.2 * (H - L))",
"basis": "rule"
},
"wide": {
"yes_no": 0.262,
"rule": "(H - L) > 2 * avg(H - L, 20)",
"basis": "rule"
},
"inside": {
"yes_no": 0.0537,
"rule": "H < H[-1] and L > L[-1]",
"basis": "rule"
},
"vol": {
"yes_no": 0.9463,
"rule": "V > avg(V, 20)",
"basis": "rule"
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "context",
"fired": true,
"status": "dry_run",
"do": "email",
"connection": "head-trader",
"preview": {
"subject": "Context SPY 2026-10-30",
"text": "SPY: trend day 5%, wide range 26%, inside day 5%, volume above average 95%."
}
}
]
}Prop trading firm · example 9
GLD trend-following: 55-day breakout with ADX
A classic turtle-style entry check for gold: a 55-day closing breakout in a strong trend.
- StateGLD
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"GLD"} The server fills in the latest completed session.
Questions
don | rule | C > highest(C, 55)55-day closing breakout |
adx | rule | adx(14) > 25Trending (ADX above 25) |
sma_up | rule | sma(C, 50) > ref(sma(C, 50), -10)The 50-day average is rising |
stacked | English → rule | Is price above the 20-day, the 20-day above the 50-day, and the 50-day above the 200-day moving average? |
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 |
|---|---|---|
don55-day closing breakout | 0.0537 | false |
adxTrending (ADX above 25) | 0.2061 | false |
sma_upThe 50-day average is rising | 0.082 | false |
stackedIs price above the 20-day, the 20-day above the 50-day, and the 50-day above the 200-day moving average compiled to (C > sma(C, 20)) and (sma(C, 20) > sma(C, 50)) and (sma(C, 50) > sma(C, 200)) | 0.0537 | false |
rally5A 5% rally within a month | 0.503 | 50% · close to even |
Actions
Rules on the answers decide what to send.
don >= 0.6 and adx >= 0.6→Webhookprop-omsWhat it means
For GLD on the session of 2026-10-30: Not true: 55-day closing breakout; Trending (ADX above 25); The 50-day average is rising; Is price above the 20-day, the 20-day above the 50-day, and the 50-day above the 200-day moving average. Forecasts: A 5% rally within a month 50%. No action fired: every rule was false.
The order only goes out when both the breakout and trend strength are true.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "GLD"
},
"questions": {
"don": {
"type": "yes_no",
"ask": "C > highest(C, 55)"
},
"adx": {
"type": "yes_no",
"ask": "adx(14) > 25"
},
"sma_up": {
"type": "yes_no",
"ask": "sma(C, 50) > ref(sma(C, 50), -10)"
},
"stacked": {
"type": "yes_no",
"instructions": "Is price above the 20-day, the 20-day above the 50-day, and the 50-day above the 200-day moving average?"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "entry",
"when": "don >= 0.6 and adx >= 0.6",
"do": "webhook",
"connection": "prop-oms",
"body": {
"symbol": "{{symbol}}",
"side": "buy",
"strategy": "donchian_55",
"stop_atr": 2,
"p_breakout": "{{don}}",
"p_adx": "{{adx}}",
"as_of": "{{as_of}}"
}
}
],
"dry_run": true
}Response JSON (GLD, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"don": {
"yes_no": 0.0537,
"rule": "C > highest(C, 55)",
"basis": "rule"
},
"adx": {
"yes_no": 0.2061,
"rule": "adx(14) > 25",
"basis": "rule"
},
"sma_up": {
"yes_no": 0.082,
"rule": "sma(C, 50) > ref(sma(C, 50), -10)",
"basis": "rule"
},
"stacked": {
"yes_no": 0.0537,
"rule": "(C > sma(C, 20)) and (sma(C, 20) > sma(C, 50)) and (sma(C, 50) > sma(C, 200))",
"basis": "pattern"
},
"rally5": {
"yes_no": 0.503
}
},
"context": {
"symbol": "GLD",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "entry",
"fired": false,
"status": "skipped"
}
]
}Prop trading firm · example 10
Bullish candle scan: hammers, morning stars and soldiers
Scan large caps for bullish reversal and continuation candles for the swing book.
- State5 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"AAPL"} then MSFT, JPM, WMT, XOM, one request each. The server fills in the latest completed session.
Questions
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. |
inv_hammer | rule | inverted_hammer()inverted hammer candle: Shooting-star shape after a five-bar decline. |
morning | rule | morning_star()morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first. |
soldiers | rule | three_white_soldiers()three white soldiers candle: Three green bars, each closing higher and opening inside the previous body. |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Symbol | hammerrule | inv_hammerrule | morningrule | soldiersrule | up_weekforecast |
|---|---|---|---|---|---|
AAPL | 0.1795 | 0.0537 | 0.0805 | 0.0777 | 0.59 |
MSFT | 0.5701 | 0.0537 | 0.0631 | 0.0603 | 0.574 |
JPM | 0.0547 | 0.0537 | 0.0592 | 0.0597 | 0.558 |
WMT | 0.0653 | 0.1733 | 0.0898 | 0.0922 | 0.535 |
XOM | 0.0971 | 0.1089 | 0.1635 | 0.0833 | 0.577 |
true false not known for rules; forecasts are odds. Hover a column for its question.
What it means
Session of 2026-10-30, 5 symbols: hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back.: true for none of 5. inverted hammer candle: Shooting-star shape after a five-bar decline.: true for none of 5. morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first.: true for none of 5. three white soldiers candle: Three green bars, each closing higher and opening inside the previous body.: true for none of 5. Highest odds for “Higher in a week”: AAPL at 59%.
A pattern hit is a candidate, not a trade; traders check the trend and level before acting.
Request JSON (AAPL; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AAPL"
},
"questions": {
"hammer": {
"type": "yes_no",
"ask": "hammer()"
},
"inv_hammer": {
"type": "yes_no",
"ask": "inverted_hammer()"
},
"morning": {
"type": "yes_no",
"ask": "morning_star()"
},
"soldiers": {
"type": "yes_no",
"ask": "three_white_soldiers()"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (AAPL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"hammer": {
"yes_no": 0.1795,
"rule": "hammer()",
"basis": "rule"
},
"inv_hammer": {
"yes_no": 0.0537,
"rule": "inverted_hammer()",
"basis": "rule"
},
"morning": {
"yes_no": 0.0805,
"rule": "morning_star()",
"basis": "rule"
},
"soldiers": {
"yes_no": 0.0777,
"rule": "three_white_soldiers()",
"basis": "rule"
},
"up_week": {
"yes_no": 0.59
}
},
"context": {
"symbol": "AAPL",
"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 Sell side: Equity research analyst, Sell-side sales trader, Execution trader / desk, Market maker, Compliance officer.