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 11–20 of 20 · page 2 of 2
Prop trading firm · example 11
No holding NVDA through earnings without sign-off
Remind traders to flatten or get approval when a held name reports within days.
- StateNVDA
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"NVDA"} The server fills in the latest completed session.
Questions
earn | rule | days_to_earnings <= 10Reports earnings within 10 days |
amc | English → rule | Does the stock report after the close next time? |
big | rule | abs(last_earnings_move) > 5Last earnings move bigger than 5% |
clear | rule | C > sma(C, 50) and days_to_earnings > 5Above the 50-day, no earnings in the next 5 days |
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 |
|---|---|---|
earnReports earnings within 10 days | 0.0563 | false |
amcDoes the stock report after the close next time compiled to next_report_amc > 0.5 | 0.8591 | true |
bigLast earnings move bigger than 5% | 0.9463 | true |
clearAbove the 50-day, no earnings in the next 5 days | 0.0746 | false |
big5A big move either way in 5 days | 0.318 | 32% · unlikely |
Actions
Rules on the answers decide what to send.
earn >= 0.6→Slackrisk-floorWhat it means
For NVDA on the session of 2026-10-30: True now: Does the stock report after the close next time; Last earnings move bigger than 5%. Not true: Reports earnings within 10 days; Above the 50-day, no earnings in the next 5 days. Forecasts: A big move either way in 5 days 32%. No action fired: every rule was false.
The firm rule is simple: event risk needs a decision, and the alert makes sure it is made.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "NVDA"
},
"questions": {
"earn": {
"type": "yes_no",
"ask": "days_to_earnings <= 10"
},
"amc": {
"type": "yes_no",
"instructions": "Does the stock report after the close next time?"
},
"big": {
"type": "yes_no",
"ask": "abs(last_earnings_move) > 5"
},
"clear": {
"type": "yes_no",
"ask": "C > sma(C, 50) and days_to_earnings > 5"
},
"big5": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
},
"actions": [
{
"id": "remind",
"when": "earn >= 0.6",
"do": "slack",
"connection": "risk-floor",
"message": "{{symbol}} reports within 10 days (after the close {{amc|pct}}, last reaction over 5% {{big|pct}}). Flatten or get risk sign-off."
}
],
"dry_run": true
}Response JSON (NVDA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"earn": {
"yes_no": 0.0563,
"rule": "days_to_earnings <= 10",
"basis": "rule"
},
"amc": {
"yes_no": 0.8591,
"rule": "next_report_amc > 0.5",
"basis": "pattern"
},
"big": {
"yes_no": 0.9463,
"rule": "abs(last_earnings_move) > 5",
"basis": "rule"
},
"clear": {
"yes_no": 0.0746,
"rule": "C > sma(C, 50) and days_to_earnings > 5",
"basis": "rule"
},
"big5": {
"yes_no": 0.318
}
},
"context": {
"symbol": "NVDA",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "remind",
"fired": false,
"status": "skipped"
}
]
}Prop trading firm · example 12
Desk volatility regime: TSLA, MSTR, TQQQ, ARKK
Classify high-beta names into volatility regimes so traders size the day correctly.
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"TSLA"} then MSTR, TQQQ, ARKK, one request each. The server fills in the latest completed session.
Questions
hv | rule | std(log(C / C[-1]), 20) * sqrt(252) > 0.620-day annualised volatility above 60% |
atr | rule | atr_pct(14) > 3A typical day moves more than 3% |
vol5 | English → rule | Is 5-day volatility higher than 20-day volatility? |
hv_next | forecast | Will annualized volatility over the next 21 sessions exceed 30%? Next-month volatility above 30% |
Answers
| Symbol | hvrule | atrrule | vol5rule | hv_nextforecast |
|---|---|---|---|---|
TSLA | 0.0624 | 0.848 | 0.7322 | 0.441 |
MSTR | 0.8075 | 0.9463 | 0.4012 | 0.454 |
TQQQ | 0.8054 | 0.9463 | 0.9113 | 0.51 |
ARKK | 0.0537 | 0.9369 | 0.9108 | 0.426 |
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: 20-day annualised volatility above 60%: true for MSTR, TQQQ of 4. A typical day moves more than 3%: true for TSLA, MSTR, TQQQ, ARKK of 4. Is 5-day volatility higher than 20-day volatility: true for TSLA, TQQQ, ARKK of 4. Highest odds for “Next-month volatility above 30%”: TQQQ at 51%.
Names in the top regime trade at a fraction of normal size until volatility falls.
Request JSON (TSLA; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TSLA"
},
"questions": {
"hv": {
"type": "yes_no",
"ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.6"
},
"atr": {
"type": "yes_no",
"ask": "atr_pct(14) > 3"
},
"vol5": {
"type": "yes_no",
"instructions": "Is 5-day volatility higher than 20-day volatility?"
},
"hv_next": {
"type": "yes_no",
"instructions": "Will annualized volatility over the next 21 sessions exceed 30%?"
}
}
}Response JSON (TSLA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"hv": {
"yes_no": 0.0624,
"rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.6",
"basis": "rule"
},
"atr": {
"yes_no": 0.848,
"rule": "atr_pct(14) > 3",
"basis": "rule"
},
"vol5": {
"yes_no": 0.7322,
"rule": "std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19)",
"basis": "pattern"
},
"hv_next": {
"yes_no": 0.441
}
},
"context": {
"symbol": "TSLA",
"as_of": "2026-10-30"
}
}Prop trading firm · example 13
QQQ pivots for tomorrow: swing high, swing low and mid-range
Check where price sits against the last swing pivots to plan tomorrow's levels.
- StateQQQ
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"QQQ"} The server fills in the latest completed session.
Questions
above_sh | rule | C > swinghigh(3, 1)Close above the latest swing high (strength 3) |
below_sl2 | rule | C < swinglow(3, 2)Close below the second-latest swing low (strength 3) |
near_res | rule | C <= swinghigh(5) and C >= 0.97 * swinghigh(5)Within 3% under the last swing high |
near_sup | rule | C >= swinglow(5) and C <= 1.03 * swinglow(5)Within 3% above the last swing low |
break | forecast | Will it break above resistance this week? Breaking resistance this week |
Answers
| Question | Answer | Reading |
|---|---|---|
above_shClose above the latest swing high (strength 3) | 0.066 | false |
below_sl2Close below the second-latest swing low (strength 3) | 0.8259 | true |
near_resWithin 3% under the last swing high | 0.0611 | false |
near_supWithin 3% above the last swing low | 0.2731 | false |
breakBreaking resistance this week | 0.472 | 47% · close to even |
What it means
For QQQ on the session of 2026-10-30: True now: Close below the second-latest swing low (strength 3). Not true: Close above the latest swing high (strength 3); Within 3% under the last swing high; Within 3% above the last swing low. Forecasts: Breaking resistance this week 47%.
Pivot facts mark the levels on the plan; the forecast is the odds of breaking resistance this week.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "QQQ"
},
"questions": {
"above_sh": {
"type": "yes_no",
"ask": "C > swinghigh(3, 1)"
},
"below_sl2": {
"type": "yes_no",
"ask": "C < swinglow(3, 2)"
},
"near_res": {
"type": "yes_no",
"ask": "C <= swinghigh(5) and C >= 0.97 * swinghigh(5)"
},
"near_sup": {
"type": "yes_no",
"ask": "C >= swinglow(5) and C <= 1.03 * swinglow(5)"
},
"break": {
"type": "yes_no",
"instructions": "Will it break above resistance this week?"
}
}
}Response JSON (QQQ, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"above_sh": {
"yes_no": 0.066,
"rule": "C > swinghigh(3, 1)",
"basis": "rule"
},
"below_sl2": {
"yes_no": 0.8259,
"rule": "C < swinglow(3, 2)",
"basis": "rule"
},
"near_res": {
"yes_no": 0.0611,
"rule": "C <= swinghigh(5) and C >= 0.97 * swinghigh(5)",
"basis": "rule"
},
"near_sup": {
"yes_no": 0.2731,
"rule": "C >= swinglow(5) and C <= 1.03 * swinglow(5)",
"basis": "rule"
},
"break": {
"yes_no": 0.472
}
},
"context": {
"symbol": "QQQ",
"as_of": "2026-10-30"
}
}Prop trading firm · example 14
XLF vs KRE: is the regional bank leg weaker?
Compare the large-bank and regional-bank ETFs on trend and momentum for a pairs trade.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"XLF"} then KRE, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
roc | rule | roc(C, 20) > 5Up more than 5% in 20 sessions |
macd | English → rule | Is MACD above zero? |
ext | rule | C > sma(C, 200) * 1.10More than 10% above the 200-day |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | trendrule | rocrule | macdrule | extrule | beat_spyforecast |
|---|---|---|---|---|---|
XLF | 0.6692 | 0.606 | 0.7625 | 0.1018 | 0.448 |
KRE | 0.5119 | 0.1371 | 0.7123 | 0.0804 | 0.479 |
true false not known for rules; forecasts are odds. Hover a column for its question.
What it means
Session of 2026-10-30, 2 symbols: Above the 50-day average: true for XLF of 2. Up more than 5% in 20 sessions: true for XLF of 2. Is MACD above zero: true for XLF, KRE of 2. More than 10% above the 200-day: true for none of 2. Highest odds for “Beating SPY over a month”: KRE at 48%.
If KRE fails rules XLF passes, the pair is long XLF short KRE; identical answers mean no edge.
Request JSON (XLF; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLF"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"roc": {
"type": "yes_no",
"ask": "roc(C, 20) > 5"
},
"macd": {
"type": "yes_no",
"instructions": "Is MACD above zero?"
},
"ext": {
"type": "yes_no",
"ask": "C > sma(C, 200) * 1.10"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
}
}Response JSON (XLF, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.6692,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"roc": {
"yes_no": 0.606,
"rule": "roc(C, 20) > 5",
"basis": "rule"
},
"macd": {
"yes_no": 0.7625,
"rule": "macd(C) > 0",
"basis": "pattern"
},
"ext": {
"yes_no": 0.1018,
"rule": "C > sma(C, 200) * 1.10",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.448
}
},
"context": {
"symbol": "XLF",
"as_of": "2026-10-30"
}
}Prop trading firm · example 15
Fade check: is LLY overbought on several measures?
Look for agreement across RSI, stochastic, CCI and Bollinger Bands before a counter-trend short.
- StateLLY
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"LLY"} The server fills in the latest completed session.
Questions
rsi | English → rule | Is the stock overbought on RSI, above 70? |
stoch | English → rule | Is the stock overbought on the stochastic, above 80? |
cci | rule | cci(20) > 200CCI(20) above 200 |
bb | English → rule | Did the stock close above the upper Bollinger Band? |
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 |
|---|---|---|
rsiIs the stock overbought on RSI, above 70 compiled to rsi(C, 14) > 70 | 0.8226 | true |
stochIs the stock overbought on the stochastic, above 80 compiled to stochk(14, 3, 3) > 80 | 0.6126 | true |
cciCCI(20) above 200 | 0.5194 | on the line (true) |
bbDid the stock close above the upper Bollinger Band compiled to C > bbupper(C, 20) | 0.7663 | true |
drop5A 5% drawdown within a month | 0.583 | 58% · close to even |
What it means
For LLY on the session of 2026-10-30: True now: Is the stock overbought on RSI, above 70; Is the stock overbought on the stochastic, above 80; Did the stock close above the upper Bollinger Band. On the line: CCI(20) above 200. Forecasts: A 5% drawdown within a month 58%.
A fade needs several overbought readings at once; one alone is just a strong stock.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "LLY"
},
"questions": {
"rsi": {
"type": "yes_no",
"instructions": "Is the stock overbought on RSI, above 70?"
},
"stoch": {
"type": "yes_no",
"instructions": "Is the stock overbought on the stochastic, above 80?"
},
"cci": {
"type": "yes_no",
"ask": "cci(20) > 200"
},
"bb": {
"type": "yes_no",
"instructions": "Did the stock close above the upper Bollinger Band?"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
}
}Response JSON (LLY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"rsi": {
"yes_no": 0.8226,
"rule": "rsi(C, 14) > 70",
"basis": "pattern"
},
"stoch": {
"yes_no": 0.6126,
"rule": "stochk(14, 3, 3) > 80",
"basis": "pattern"
},
"cci": {
"yes_no": 0.5194,
"rule": "cci(20) > 200",
"basis": "rule"
},
"bb": {
"yes_no": 0.7663,
"rule": "C > bbupper(C, 20)",
"basis": "comparison"
},
"drop5": {
"yes_no": 0.583
}
},
"context": {
"symbol": "LLY",
"as_of": "2026-10-30"
}
}Prop trading firm · example 16
Weekly commodity book review: USO, UNG, SLV, GDX
Every Friday, email the commodity traders how each instrument closed the week and its volatility outlook.
- ScheduleFri at 16:45 ET
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"USO"} then UNG, SLV, GDX, one request each. The server fills in the latest completed session.
Questions
week_dn | English → rule | Is the stock down over the last week? |
range_wk | rule | (max(H, 5) - min(L, 5)) > 1.5 * ref(max(H, 5) - min(L, 5), -5)This week's range is 1.5× last week's |
hv | rule | std(log(C / C[-1]), 20) * sqrt(252) > 0.4Annualized 20-day volatility above 40% |
vol_up | forecast | Will volatility be higher over the next month? Higher volatility next month |
Answers
| Symbol | week_dnrule | range_wkrule | hvrule | vol_upforecast | Fired |
|---|---|---|---|---|---|
USO | 0.5628 | 0.0592 | 0.1075 | 0.669 | weekly |
UNG | 0.8445 | 0.0725 | 0.2734 | 0.463 | weekly |
SLV | 0.9067 | 0.1641 | 0.7561 | 0.455 | weekly |
GDX | 0.7506 | 0.1356 | 0.7216 | 0.495 | weekly |
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.
hv >= 0→Emailcommodity-desk{
"subject": "USO week to 2026-10-30",
"text": "USO: down on the week 56%, weekly range expanding 6%, 20-day vol over 40% 11%. Higher volatility next month: 67%."
}{
"subject": "UNG week to 2026-10-30",
"text": "UNG: down on the week 84%, weekly range expanding 7%, 20-day vol over 40% 27%. Higher volatility next month: 46%."
}{
"subject": "SLV week to 2026-10-30",
"text": "SLV: down on the week 91%, weekly range expanding 16%, 20-day vol over 40% 76%. Higher volatility next month: 46%."
}{
"subject": "GDX week to 2026-10-30",
"text": "GDX: down on the week 75%, weekly range expanding 14%, 20-day vol over 40% 72%. Higher volatility next month: 50%."
}What it means
Session of 2026-10-30, 4 symbols: Is the stock down over the last week: true for UNG, SLV, GDX of 4. This week's range is 1.5× last week's: true for none of 4. Annualized 20-day volatility above 40%: true for SLV, GDX of 4. Highest odds for “Higher volatility next month”: USO at 67%. weekly fired for USO, UNG, SLV, GDX.
A short weekly digest per instrument; the volatility outlook sets next week's size.
As a scheduled workflow (Fri at 16:45 ET)
Create it under Workflows in the console: it runs these questions for every symbol on the schedule and fires the actions per symbol. The answers above are what one run returned.
{
"name": "Weekly commodity book review: USO, UNG, SLV, GDX",
"symbols": "USO UNG SLV GDX",
"days": [
5
],
"at_time": "16:45",
"model": "ora-fin-0.1.1",
"questions": {
"week_dn": {
"type": "yes_no",
"instructions": "Is the stock down over the last week?"
},
"range_wk": {
"type": "yes_no",
"ask": "(max(H, 5) - min(L, 5)) > 1.5 * ref(max(H, 5) - min(L, 5), -5)"
},
"hv": {
"type": "yes_no",
"ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4"
},
"vol_up": {
"type": "yes_no",
"instructions": "Will volatility be higher over the next month?"
}
},
"actions": [
{
"id": "weekly",
"when": "hv >= 0",
"do": "email",
"connection": "commodity-desk",
"subject": "{{symbol}} week to {{as_of}}",
"message": "{{symbol}}: down on the week {{week_dn|pct}}, weekly range expanding {{range_wk|pct}}, 20-day vol over 40% {{hv|pct}}. Higher volatility next month: {{vol_up|pct}}."
}
]
}Request JSON (USO; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "USO"
},
"questions": {
"week_dn": {
"type": "yes_no",
"instructions": "Is the stock down over the last week?"
},
"range_wk": {
"type": "yes_no",
"ask": "(max(H, 5) - min(L, 5)) > 1.5 * ref(max(H, 5) - min(L, 5), -5)"
},
"hv": {
"type": "yes_no",
"ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4"
},
"vol_up": {
"type": "yes_no",
"instructions": "Will volatility be higher over the next month?"
}
},
"actions": [
{
"id": "weekly",
"when": "hv >= 0",
"do": "email",
"connection": "commodity-desk",
"subject": "{{symbol}} week to {{as_of}}",
"message": "{{symbol}}: down on the week {{week_dn|pct}}, weekly range expanding {{range_wk|pct}}, 20-day vol over 40% {{hv|pct}}. Higher volatility next month: {{vol_up|pct}}."
}
],
"dry_run": true
}Response JSON (USO, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"week_dn": {
"yes_no": 0.5628,
"rule": "C < C[-5]",
"basis": "pattern"
},
"range_wk": {
"yes_no": 0.0592,
"rule": "(max(H, 5) - min(L, 5)) > 1.5 * ref(max(H, 5) - min(L, 5), -5)",
"basis": "rule"
},
"hv": {
"yes_no": 0.1075,
"rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4",
"basis": "rule"
},
"vol_up": {
"yes_no": 0.669
}
},
"context": {
"symbol": "USO",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "weekly",
"fired": true,
"status": "dry_run",
"do": "email",
"connection": "commodity-desk",
"preview": {
"subject": "USO week to 2026-10-30",
"text": "USO: down on the week 56%, weekly range expanding 6%, 20-day vol over 40% 11%. Higher volatility next month: 67%."
}
}
]
}Prop trading firm · example 17
HD failed breakdown: long setup with defined risk
Find a failed breakdown (undercut the 20-day low and closed back above) with a nearby stop.
- StateHD
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"HD"} The server fills in the latest completed session.
Questions
failed | rule | L < lowest(L, 20) and C > lowest(L, 20)Undercut the 20-day low and closed back above it |
key_rev | English → rule | Did the stock make a new 10-day low and close up on the day? |
stop | English → rule | Is a stop below yesterday's low less than 1 ATR away? |
tweezer | rule | tweezer_bottom()tweezer bottom candle: Red then green, with lows within 0.1% of each other. |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
failedUndercut the 20-day low and closed back above it | 0.0537 | false |
key_revDid the stock make a new 10-day low and close up on the day compiled to (L < lowest(L, 10)) and (C > C[-1]) | 0.0698 | false |
stopIs a stop below yesterday's low less than 1 ATR away compiled to (C > L[-1]) and (C - L[-1] < 1 * atr(14)) | 0.5766 | on the line (true) |
tweezertweezer bottom candle: Red then green, with lows within 0.1% of each other. | 0.0661 | false |
up_weekHigher in a week | 0.552 | 55% · close to even |
What it means
For HD on the session of 2026-10-30: Not true: Undercut the 20-day low and closed back above it; Did the stock make a new 10-day low and close up on the day; tweezer bottom candle: Red then green, with lows within 0.1% of each other.. On the line: Is a stop below yesterday's low less than 1 ATR away. Forecasts: Higher in a week 55%.
A failed breakdown with a stop under the low inside one ATR gives a clear risk; without it the setup is skipped.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "HD"
},
"questions": {
"failed": {
"type": "yes_no",
"ask": "L < lowest(L, 20) and C > lowest(L, 20)"
},
"key_rev": {
"type": "yes_no",
"instructions": "Did the stock make a new 10-day low and close up on the day?"
},
"stop": {
"type": "yes_no",
"instructions": "Is a stop below yesterday's low less than 1 ATR away?"
},
"tweezer": {
"type": "yes_no",
"ask": "tweezer_bottom()"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (HD, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"failed": {
"yes_no": 0.0537,
"rule": "L < lowest(L, 20) and C > lowest(L, 20)",
"basis": "rule"
},
"key_rev": {
"yes_no": 0.0698,
"rule": "(L < lowest(L, 10)) and (C > C[-1])",
"basis": "pattern"
},
"stop": {
"yes_no": 0.5766,
"rule": "(C > L[-1]) and (C - L[-1] < 1 * atr(14))",
"basis": "pattern"
},
"tweezer": {
"yes_no": 0.0661,
"rule": "tweezer_bottom()",
"basis": "rule"
},
"up_week": {
"yes_no": 0.552
}
},
"context": {
"symbol": "HD",
"as_of": "2026-10-30"
}
}Prop trading firm · example 18
Momentum with participation: COST, LLY, NFLX, GE
Find names up over a month on rising volume and above their 50-day for the momentum book.
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"COST"} then LLY, NFLX, GE, one request each. The server fills in the latest completed session.
Questions
mp | rule | roc(C, 20) > 5 and V > avg(V, 50) and C > sma(C, 50)Momentum with participation |
quarter | rule | roc(C, 63) > 10 and C >= 0.95 * max(H, 63)Up more than 10% in a quarter, near the high |
obv | rule | obv() > sma(obv(), 20)On-balance volume above its 20-day average |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
Answers
| Symbol | mprule | quarterrule | obvrule | rally5forecast |
|---|---|---|---|---|
COST | 0.8468 | 0.2031 | 0.793 | 0.353 |
LLY | 0.9454 | 0.8246 | 0.9459 | 0.603 |
NFLX | 0.0723 | 0.0537 | 0.1147 | 0.645 |
GE | 0.1116 | 0.0542 | 0.3639 | 0.618 |
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: Momentum with participation: true for COST, LLY of 4. Up more than 10% in a quarter, near the high: true for LLY of 4. On-balance volume above its 20-day average: true for COST, LLY of 4. Highest odds for “A 5% rally within a month”: NFLX at 65%.
Names passing the participation rule rank above those rising on thin volume.
Request JSON (COST; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "COST"
},
"questions": {
"mp": {
"type": "yes_no",
"ask": "roc(C, 20) > 5 and V > avg(V, 50) and C > sma(C, 50)"
},
"quarter": {
"type": "yes_no",
"ask": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)"
},
"obv": {
"type": "yes_no",
"ask": "obv() > sma(obv(), 20)"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
}
}
}Response JSON (COST, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"mp": {
"yes_no": 0.8468,
"rule": "roc(C, 20) > 5 and V > avg(V, 50) and C > sma(C, 50)",
"basis": "rule"
},
"quarter": {
"yes_no": 0.2031,
"rule": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)",
"basis": "rule"
},
"obv": {
"yes_no": 0.793,
"rule": "obv() > sma(obv(), 20)",
"basis": "rule"
},
"rally5": {
"yes_no": 0.353
}
},
"context": {
"symbol": "COST",
"as_of": "2026-10-30"
}
}Prop trading firm · example 19
AAPL up-day persistence with sign and sum
Measure how persistent buying has been with counts of up closes, for a trader's trend journal.
- StateAAPL
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"AAPL"} The server fills in the latest completed session.
Questions
signs | rule | sum(sign(C - C[-1]), 10) > 2Up closes outnumber down closes by more than two in ten sessions |
up6 | rule | sum(C > C[-1], 10) >= 6Up on at least six of the last ten days |
two_up | rule | C > C[-1] and C[-1] > C[-2]Two higher closes in a row |
hh | rule | H > H[-1] and L > L[-1]Higher high and higher low |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
signsUp closes outnumber down closes by more than two in ten sessions | 0.0615 | false |
up6Up on at least six of the last ten days | 0.0615 | false |
two_upTwo higher closes in a row | 0.127 | false |
hhHigher high and higher low | 0.0537 | false |
up_weekHigher in a week | 0.59 | 59% · close to even |
What it means
For AAPL on the session of 2026-10-30: Not true: Up closes outnumber down closes by more than two in ten sessions; Up on at least six of the last ten days; Two higher closes in a row; Higher high and higher low. Forecasts: Higher in a week 59%.
Persistence rules describe the trend's texture; the journal records them next to each trade.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AAPL"
},
"questions": {
"signs": {
"type": "yes_no",
"ask": "sum(sign(C - C[-1]), 10) > 2"
},
"up6": {
"type": "yes_no",
"ask": "sum(C > C[-1], 10) >= 6"
},
"two_up": {
"type": "yes_no",
"ask": "C > C[-1] and C[-1] > C[-2]"
},
"hh": {
"type": "yes_no",
"ask": "H > H[-1] and L > L[-1]"
},
"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": {
"signs": {
"yes_no": 0.0615,
"rule": "sum(sign(C - C[-1]), 10) > 2",
"basis": "rule"
},
"up6": {
"yes_no": 0.0615,
"rule": "sum(C > C[-1], 10) >= 6",
"basis": "rule"
},
"two_up": {
"yes_no": 0.127,
"rule": "C > C[-1] and C[-1] > C[-2]",
"basis": "rule"
},
"hh": {
"yes_no": 0.0537,
"rule": "H > H[-1] and L > L[-1]",
"basis": "rule"
},
"up_week": {
"yes_no": 0.59
}
},
"context": {
"symbol": "AAPL",
"as_of": "2026-10-30"
}
}Prop trading firm · example 20
SMH: doji after a run, trim winners
Tell traders to trim when an indecision candle prints after a strong month.
- StateSMH
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"SMH"} The server fills in the latest completed session.
Questions
doji_run | rule | doji() and roc(C, 20) > 10Doji after a 10% month |
doji | English → rule | Is today's candle a doji? |
spin | English → rule | Is today's candle a spinning top? |
stretch | rule | C > sma(C, 20) + 2 * atr(14)Stretched: more than 2 ATR above the 20-day |
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 |
|---|---|---|
doji_runDoji after a 10% month | 0.0537 | false |
dojiIs today's candle a doji compiled to doji() | 0.0727 | false |
spinIs today's candle a spinning top compiled to spinning_top() | 0.0889 | false |
stretchStretched: more than 2 ATR above the 20-day | 0.0547 | false |
drop5A 5% drawdown within a month | 0.641 | 64% · likely |
Actions
Rules on the answers decide what to send.
doji_run >= 0.6 or (stretch >= 0.6 and drop5 >= 0.4)→Slackprop-ideasWhat it means
For SMH on the session of 2026-10-30: Not true: Doji after a 10% month; Is today's candle a doji; Is today's candle a spinning top; Stretched: more than 2 ATR above the 20-day. Forecasts: A 5% drawdown within a month 64%. No action fired: every rule was false.
Indecision after a run is a reason to take some profit, not to reverse.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SMH"
},
"questions": {
"doji_run": {
"type": "yes_no",
"ask": "doji() and roc(C, 20) > 10"
},
"doji": {
"type": "yes_no",
"instructions": "Is today's candle a doji?"
},
"spin": {
"type": "yes_no",
"instructions": "Is today's candle a spinning top?"
},
"stretch": {
"type": "yes_no",
"ask": "C > sma(C, 20) + 2 * atr(14)"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "trim",
"when": "doji_run >= 0.6 or (stretch >= 0.6 and drop5 >= 0.4)",
"do": "slack",
"connection": "prop-ideas",
"message": "{{symbol}} ({{as_of}}): indecision after a run (doji after a 10% month {{doji_run|pct}}, stretched {{stretch|pct}}). Consider trimming winners."
}
],
"dry_run": true
}Response JSON (SMH, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"doji_run": {
"yes_no": 0.0537,
"rule": "doji() and roc(C, 20) > 10",
"basis": "rule"
},
"doji": {
"yes_no": 0.0727,
"rule": "doji()",
"basis": "pattern"
},
"spin": {
"yes_no": 0.0889,
"rule": "spinning_top()",
"basis": "pattern"
},
"stretch": {
"yes_no": 0.0547,
"rule": "C > sma(C, 20) + 2 * atr(14)",
"basis": "rule"
},
"drop5": {
"yes_no": 0.641
}
},
"context": {
"symbol": "SMH",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "trim",
"fired": false,
"status": "skipped"
}
]
}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.