Use cases · Sell side
Execution trader / desk: 20 ways to use Ora
Works orders: liquidity, volatility, gaps and when to be patient or aggressive. Each example is a complete, runnable request with the real answers it returned (36 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 (50)
offset 9ref 8atr 7avg 5sma 3std 3min 3hlc3 2sum 2abs 2log 2sqrt 2bbupper 2rsi 2bbmid 2tr 1max 1swinghigh 1willr 1days_since_earnings 1days_to_earnings 1last_earnings_move 1next_report_amc 1bblower 1atr_pct 1swinglow 1ema 1linreg 1rec 1rma 1zscore 1days_since_reverse_split 1days_since_split 1days_to_split 1last_split_ratio 1cci 1stochd 1stochk 1dark_cloud 1engulfing_bear 1gravestone_doji 1hanging_man 1highest 1shooting_star 1median 1obv 1percentrank 1between 1doji 1cum 1
Examples 1–10 of 20 · page 1 of 2
Execution trader / desk · example 1
AAPL buy order: VWAP or more aggressive participation?
Pick the execution algo from today's conditions: volatility, trend and whether price is above the rolling VWAP, then send the parameters to the EMS.
- StateAAPL
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"AAPL"} The server fills in the latest completed session.
Questions
above_vwap | rule | C > sum(hlc3() * V, 20) / sum(V, 20)Above its 20-day volume-weighted price |
atr_lo | English → rule | Is the 14-day ATR less than 2% of the price? |
trend | English → rule | Is the stock above its 50-day moving average? |
vol_rise | forecast | Will volatility rise over the next 5 days? Volatility rising over 5 days |
up_tom | forecast | Will the stock be up tomorrow? Up tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
above_vwapAbove its 20-day volume-weighted price | 0.6586 | true |
atr_loIs the 14-day ATR less than 2% of the price compiled to atr(14) / C < 0.02 | 0.5184 | on the line (true) |
trendIs the stock above its 50-day moving average compiled to C > sma(C, 50) | 0.9119 | true |
vol_riseVolatility rising over 5 days | 0.61 | 61% · likely |
up_tomUp tomorrow | 0.556 | 56% · close to even |
Actions
Rules on the answers decide what to send.
trend >= 0.6 and up_tom >= 0.55→Webhookemselse→Webhookems{
"symbol": "AAPL",
"side": "buy",
"algo": "POV",
"participation": 0.15,
"as_of": "2026-10-30",
"p_up_tomorrow": 0.556,
"p_trend": 0.9119
}What it means
For AAPL on the session of 2026-10-30: True now: Above its 20-day volume-weighted price; Is the stock above its 50-day moving average. On the line: Is the 14-day ATR less than 2% of the price. Forecasts: Volatility rising over 5 days 61%; Up tomorrow 56%. Fired: aggressive (Webhook → ems).
A trending stock with good next-day odds goes to a participation algo; otherwise the order is spread over the day with VWAP.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AAPL"
},
"questions": {
"above_vwap": {
"type": "yes_no",
"ask": "C > sum(hlc3() * V, 20) / sum(V, 20)"
},
"atr_lo": {
"type": "yes_no",
"instructions": "Is the 14-day ATR less than 2% of the price?"
},
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 50-day moving average?"
},
"vol_rise": {
"type": "yes_no",
"instructions": "Will volatility rise over the next 5 days?"
},
"up_tom": {
"type": "yes_no",
"instructions": "Will the stock be up tomorrow?"
}
},
"actions": [
{
"id": "aggressive",
"when": "trend >= 0.6 and up_tom >= 0.55",
"do": "webhook",
"connection": "ems",
"body": {
"symbol": "{{symbol}}",
"side": "buy",
"algo": "POV",
"participation": 0.15,
"as_of": "{{as_of}}",
"p_up_tomorrow": "{{up_tom}}",
"p_trend": "{{trend}}"
}
},
{
"id": "patient",
"when": "else",
"do": "webhook",
"connection": "ems",
"body": {
"symbol": "{{symbol}}",
"side": "buy",
"algo": "VWAP",
"start": "09:45",
"end": "15:45",
"as_of": "{{as_of}}",
"p_above_vwap": "{{above_vwap}}"
}
}
],
"dry_run": true
}Response JSON (AAPL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"above_vwap": {
"yes_no": 0.6586,
"rule": "C > sum(hlc3() * V, 20) / sum(V, 20)",
"basis": "rule"
},
"atr_lo": {
"yes_no": 0.5184,
"rule": "atr(14) / C < 0.02",
"basis": "pattern"
},
"trend": {
"yes_no": 0.9119,
"rule": "C > sma(C, 50)",
"basis": "comparison"
},
"vol_rise": {
"yes_no": 0.61
},
"up_tom": {
"yes_no": 0.556
}
},
"context": {
"symbol": "AAPL",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "aggressive",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "ems",
"preview": {
"body": {
"symbol": "AAPL",
"side": "buy",
"algo": "POV",
"participation": 0.15,
"as_of": "2026-10-30",
"p_up_tomorrow": 0.556,
"p_trend": 0.9119
}
}
},
{
"id": "patient",
"fired": false,
"status": "skipped"
}
]
}Execution trader / desk · example 2
Pre-trade liquidity check: TSLA, NVDA, IWM, XLU
Before staging the day's orders, confirm each name trades enough dollar volume and whether volume is drying up.
- State4 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"TSLA"} then NVDA, IWM, XLU, one request each. The server fills in the latest completed session.
Questions
liquid | rule | avg(C * V, 20) > 100000000Trades more than $100 million a day |
liquid50 | English → rule | Does the stock trade more than $50 million a day on average? |
dry | rule | V < 0.6 * avg(V, 20)Volume under 60% of normal |
half | English → rule | Was today's volume less than half its 20-day average? |
spike | forecast | Will volume spike tomorrow? A volume spike tomorrow |
Answers
| Symbol | liquidrule | liquid50rule | dryrule | halfrule | spikeforecast |
|---|---|---|---|---|---|
TSLA | 0.9463 | 0.9463 | 0.0764 | 0.0677 | 0.026 |
NVDA | 0.9463 | 0.9463 | 0.0544 | 0.0537 | 0.044 |
IWM | 0.9463 | 0.9463 | 0.0836 | 0.0699 | 0.018 |
XLU | 0.9463 | 0.9463 | 0.1146 | 0.1014 | 0.02 |
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: Trades more than $100 million a day: true for TSLA, NVDA, IWM, XLU of 4. Does the stock trade more than $50 million a day on average: true for TSLA, NVDA, IWM, XLU of 4. Volume under 60% of normal: true for none of 4. Was today's volume less than half its 20-day average: true for none of 4. Highest odds for “A volume spike tomorrow”: NVDA at 4%.
Names that fail the dollar-volume rule get smaller child orders and longer schedules.
Request JSON (TSLA; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TSLA"
},
"questions": {
"liquid": {
"type": "yes_no",
"ask": "avg(C * V, 20) > 100000000"
},
"liquid50": {
"type": "yes_no",
"instructions": "Does the stock trade more than $50 million a day on average?"
},
"dry": {
"type": "yes_no",
"ask": "V < 0.6 * avg(V, 20)"
},
"half": {
"type": "yes_no",
"instructions": "Was today's volume less than half its 20-day average?"
},
"spike": {
"type": "yes_no",
"instructions": "Will volume spike tomorrow?"
}
}
}Response JSON (TSLA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"liquid": {
"yes_no": 0.9463,
"rule": "avg(C * V, 20) > 100000000",
"basis": "rule"
},
"liquid50": {
"yes_no": 0.9463,
"rule": "avg(C * V, 20) > 50000000",
"basis": "pattern"
},
"dry": {
"yes_no": 0.0764,
"rule": "V < 0.6 * avg(V, 20)",
"basis": "rule"
},
"half": {
"yes_no": 0.0677,
"rule": "V < 0.5 * ref(avg(V, 20), -1)",
"basis": "pattern"
},
"spike": {
"yes_no": 0.026
}
},
"context": {
"symbol": "TSLA",
"as_of": "2026-10-30"
}
}Execution trader / desk · example 3
TSLA gapped: work the open or wait for the gap to settle?
Decide how to handle a market-on-open order when the stock gaps relative to ATR.
- StateTSLA
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"TSLA"} The server fills in the latest completed session.
Questions
gap_atr | rule | abs(O - C[-1]) > 0.5 * ref(atr(14), -1)Gap bigger than half an ATR |
gap_up | rule | O > C[-1] * 1.01Opened more than 1% above yesterday's close |
gap_dn | rule | O < C[-1] * 0.99Opened more than 1% below yesterday's close |
fill | English → rule | Did today's gap up fill? |
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 |
|---|---|---|
gap_atrGap bigger than half an ATR | 0.8646 | true |
gap_upOpened more than 1% above yesterday's close | 0.0562 | false |
gap_dnOpened more than 1% below yesterday's close | 0.8793 | true |
fillDid today's gap up fill compiled to (O > C[-1] * 1) and (L <= C[-1]) | 0.0708 | false |
big5A big move either way in 5 days | 0.248 | 25% · unlikely |
Actions
Rules on the answers decide what to send.
gap_atr >= 0.6→Slackexec-desk{
"text": "TSLA (2026-10-30): gap larger than half an ATR. Hold the open, start after 10:00. Gap up 6%, gap down 88%."
}What it means
For TSLA on the session of 2026-10-30: True now: Gap bigger than half an ATR; Opened more than 1% below yesterday's close. Not true: Opened more than 1% above yesterday's close; Did today's gap up fill. Forecasts: A big move either way in 5 days 25%. Fired: hold_open (Slack → exec-desk).
A gap bigger than half an ATR means the open is noisy; the desk waits instead of crossing the spread at the bell.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TSLA"
},
"questions": {
"gap_atr": {
"type": "yes_no",
"ask": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)"
},
"gap_up": {
"type": "yes_no",
"ask": "O > C[-1] * 1.01"
},
"gap_dn": {
"type": "yes_no",
"ask": "O < C[-1] * 0.99"
},
"fill": {
"type": "yes_no",
"instructions": "Did today's gap up fill?"
},
"big5": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
},
"actions": [
{
"id": "hold_open",
"when": "gap_atr >= 0.6",
"do": "slack",
"connection": "exec-desk",
"message": "{{symbol}} ({{as_of}}): gap larger than half an ATR. Hold the open, start after 10:00. Gap up {{gap_up|pct}}, gap down {{gap_dn|pct}}."
}
],
"dry_run": true
}Response JSON (TSLA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"gap_atr": {
"yes_no": 0.8646,
"rule": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)",
"basis": "rule"
},
"gap_up": {
"yes_no": 0.0562,
"rule": "O > C[-1] * 1.01",
"basis": "rule"
},
"gap_dn": {
"yes_no": 0.8793,
"rule": "O < C[-1] * 0.99",
"basis": "rule"
},
"fill": {
"yes_no": 0.0708,
"rule": "(O > C[-1] * 1) and (L <= C[-1])",
"basis": "pattern"
},
"big5": {
"yes_no": 0.248
}
},
"context": {
"symbol": "TSLA",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "hold_open",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "exec-desk",
"preview": {
"text": "TSLA (2026-10-30): gap larger than half an ATR. Hold the open, start after 10:00. Gap up 6%, gap down 88%."
}
}
]
}Execution trader / desk · example 4
MU: stretch the schedule when volatility expands
Measure ATR expansion and true range so the algo schedule matches the day's volatility.
- StateMU
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"MU"} The server fills in the latest completed session.
Questions
atr_exp | rule | atr(14) > 1.2 * ref(atr(14), -10)ATR up 20% in two weeks |
tr | rule | tr() > 1.5 * ref(atr(14), -1)True range 1.5× yesterday's ATR |
range15 | English → rule | Was today's range more than 1.5 ATR? |
vol5 | English → rule | Is 5-day volatility higher than 20-day volatility? |
calm | forecast | Will volatility calm down over the next 5 days? Volatility calming over 5 days |
Answers
| Question | Answer | Reading |
|---|---|---|
atr_expATR up 20% in two weeks | 0.1325 | false |
trTrue range 1.5× yesterday's ATR | 0.5312 | on the line (true) |
range15Was today's range more than 1.5 ATR compiled to (H - L) > 1.5 * atr(14) | 0.0904 | false |
vol5Is 5-day volatility higher than 20-day volatility compiled to std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19) | 0.8346 | true |
calmVolatility calming over 5 days | 0.691 | 69% · likely |
Actions
Rules on the answers decide what to send.
atr_exp >= 0.6 or tr >= 0.6→WebhookemsWhat it means
For MU on the session of 2026-10-30: True now: Is 5-day volatility higher than 20-day volatility. Not true: ATR up 20% in two weeks; Was today's range more than 1.5 ATR. On the line: True range 1.5× yesterday's ATR. Forecasts: Volatility calming over 5 days 69%. No action fired: every rule was false.
When ranges expand, the EMS lowers participation so the order does not chase the tape.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "MU"
},
"questions": {
"atr_exp": {
"type": "yes_no",
"ask": "atr(14) > 1.2 * ref(atr(14), -10)"
},
"tr": {
"type": "yes_no",
"ask": "tr() > 1.5 * ref(atr(14), -1)"
},
"range15": {
"type": "yes_no",
"instructions": "Was today's range more than 1.5 ATR?"
},
"vol5": {
"type": "yes_no",
"instructions": "Is 5-day volatility higher than 20-day volatility?"
},
"calm": {
"type": "yes_no",
"instructions": "Will volatility calm down over the next 5 days?"
}
},
"actions": [
{
"id": "stretch",
"when": "atr_exp >= 0.6 or tr >= 0.6",
"do": "webhook",
"connection": "ems",
"body": {
"symbol": "{{symbol}}",
"instruction": "extend_schedule",
"max_participation": 0.08,
"reason": "volatility_expanding",
"p_atr_expanding": "{{atr_exp}}",
"p_wide_tr": "{{tr}}",
"as_of": "{{as_of}}"
}
}
],
"dry_run": true
}Response JSON (MU, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"atr_exp": {
"yes_no": 0.1325,
"rule": "atr(14) > 1.2 * ref(atr(14), -10)",
"basis": "rule"
},
"tr": {
"yes_no": 0.5312,
"rule": "tr() > 1.5 * ref(atr(14), -1)",
"basis": "rule"
},
"range15": {
"yes_no": 0.0904,
"rule": "(H - L) > 1.5 * atr(14)",
"basis": "pattern"
},
"vol5": {
"yes_no": 0.8346,
"rule": "std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19)",
"basis": "pattern"
},
"calm": {
"yes_no": 0.691
}
},
"context": {
"symbol": "MU",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "stretch",
"fired": false,
"status": "skipped"
}
]
}Execution trader / desk · example 5
NVDA sell order: is there strength to sell into?
For a large sell, check whether the stock is near resistance, stretched or closing strong, to time the order.
- StateNVDA
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"NVDA"} The server fills in the latest completed session.
Questions
near_res | English → rule | Is the stock within 1% below its last swing high (resistance)? |
stretch | rule | C > sma(C, 20) + 2 * atr(14)Stretched: more than 2 ATR above the 20-day |
top_range | English → rule | Is the stock in the top 10% of its 20-day range? |
willr | rule | willr(14) > -20Williams %R above −20 |
up_tom | forecast | Will the stock be up tomorrow? Up tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
near_resIs the stock within 1% below its last swing high (resistance) compiled to (C <= swinghigh(5, 1)) and (C >= swinghigh(5, 1) * 0.99) | 0.0545 | false |
stretchStretched: more than 2 ATR above the 20-day | 0.0537 | false |
top_rangeIs the stock in the top 10% of its 20-day range compiled to (C - min(L, 20)) / (max(H, 20) - min(L, 20)) >= 0.9 | 0.0553 | false |
willrWilliams %R above −20 | 0.0646 | false |
up_tomUp tomorrow | 0.485 | 49% · close to even |
What it means
For NVDA on the session of 2026-10-30: Not true: Is the stock within 1% below its last swing high (resistance); Stretched: more than 2 ATR above the 20-day; Is the stock in the top 10% of its 20-day range; Williams %R above −20. Forecasts: Up tomorrow 49%.
Selling into strength works best near resistance and at the top of the range; the up-tomorrow odds help choose today or tomorrow.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "NVDA"
},
"questions": {
"near_res": {
"type": "yes_no",
"instructions": "Is the stock within 1% below its last swing high (resistance)?"
},
"stretch": {
"type": "yes_no",
"ask": "C > sma(C, 20) + 2 * atr(14)"
},
"top_range": {
"type": "yes_no",
"instructions": "Is the stock in the top 10% of its 20-day range?"
},
"willr": {
"type": "yes_no",
"ask": "willr(14) > -20"
},
"up_tom": {
"type": "yes_no",
"instructions": "Will the stock be up tomorrow?"
}
}
}Response JSON (NVDA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"near_res": {
"yes_no": 0.0545,
"rule": "(C <= swinghigh(5, 1)) and (C >= swinghigh(5, 1) * 0.99)",
"basis": "pattern"
},
"stretch": {
"yes_no": 0.0537,
"rule": "C > sma(C, 20) + 2 * atr(14)",
"basis": "rule"
},
"top_range": {
"yes_no": 0.0553,
"rule": "(C - min(L, 20)) / (max(H, 20) - min(L, 20)) >= 0.9",
"basis": "pattern"
},
"willr": {
"yes_no": 0.0646,
"rule": "willr(14) > -20",
"basis": "rule"
},
"up_tom": {
"yes_no": 0.485
}
},
"context": {
"symbol": "NVDA",
"as_of": "2026-10-30"
}
}Execution trader / desk · example 6
SPY: use the closing auction for the remainder?
Decide whether to leave the remaining shares for the close, based on how the day is trading.
- StateSPY
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"SPY"} 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 |
inside | rule | H < H[-1] and L > L[-1]An inside day |
vol | rule | V > avg(V, 20)Volume above its 20-day average |
above_mid | rule | C > hlc3()Close above the day's typical price |
up_tom | forecast | Will the stock be up tomorrow? Up tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
trend_dayA trend day up: opened near the low, closed near the high | 0.0537 | false |
insideAn inside day | 0.0537 | false |
volVolume above its 20-day average | 0.9463 | true |
above_midClose above the day's typical price | 0.4149 | on the line (false) |
up_tomUp tomorrow | 0.532 | 53% · close to even |
What it means
For SPY on the session of 2026-10-30: True now: Volume above its 20-day average. Not true: A trend day up: opened near the low, closed near the high; An inside day. On the line: Close above the day's typical price. Forecasts: Up tomorrow 53%.
On a quiet day the closing auction is efficient; a trend day argues for finishing the order earlier.
Request JSON
{
"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))"
},
"inside": {
"type": "yes_no",
"ask": "H < H[-1] and L > L[-1]"
},
"vol": {
"type": "yes_no",
"ask": "V > avg(V, 20)"
},
"above_mid": {
"type": "yes_no",
"ask": "C > hlc3()"
},
"up_tom": {
"type": "yes_no",
"instructions": "Will the stock be up tomorrow?"
}
}
}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"
},
"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"
},
"above_mid": {
"yes_no": 0.4149,
"rule": "C > hlc3()",
"basis": "rule"
},
"up_tom": {
"yes_no": 0.532
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
}
}Execution trader / desk · example 7
Earnings check before working AMZN, MSFT and NFLX orders
Flag orders in names that report within days, so the desk does not get caught trading through a print.
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"AMZN"} then MSFT, NFLX, one request each. The server fills in the latest completed session.
Questions
earn10 | rule | days_to_earnings <= 10Reports earnings within 10 days |
recent | English → rule | Did the stock report earnings in the last 7 days? |
big_react | rule | abs(last_earnings_move) > 5Last earnings move bigger than 5% |
amc | English → rule | Does the stock report after the close next time? |
Answers
| Symbol | earn10rule | recentrule | big_reactrule | amcrule | Fired |
|---|---|---|---|---|---|
AMZN | 0.0537 | 0.9317 | 0.0537 | 0.8591 | none |
MSFT | 0.0537 | 0.9187 | 0.0537 | 0.8591 | none |
NFLX | 0.0537 | 0.1409 | 0.9463 | 0.8591 | 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.
earn10 >= 0.6→Slackexec-deskWhat it means
Session of 2026-10-30, 3 symbols: Reports earnings within 10 days: true for none of 3. Did the stock report earnings in the last 7 days: true for AMZN, MSFT of 3. Last earnings move bigger than 5%: true for NFLX of 3. Does the stock report after the close next time: true for AMZN, MSFT, NFLX of 3. flag fired for none.
An order in a name about to report gets a human check; the last reaction size says how much is at stake.
Request JSON (AMZN; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AMZN"
},
"questions": {
"earn10": {
"type": "yes_no",
"ask": "days_to_earnings <= 10"
},
"recent": {
"type": "yes_no",
"instructions": "Did the stock report earnings in the last 7 days?"
},
"big_react": {
"type": "yes_no",
"ask": "abs(last_earnings_move) > 5"
},
"amc": {
"type": "yes_no",
"instructions": "Does the stock report after the close next time?"
}
},
"actions": [
{
"id": "flag",
"when": "earn10 >= 0.6",
"do": "slack",
"connection": "exec-desk",
"message": "{{symbol}}: reports within 10 days (after the close {{amc|pct}}). Last reaction over 5% {{big_react|pct}}. Confirm with the PM before working size."
}
],
"dry_run": true
}Response JSON (AMZN, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"earn10": {
"yes_no": 0.0537,
"rule": "days_to_earnings <= 10",
"basis": "rule"
},
"recent": {
"yes_no": 0.9317,
"rule": "days_since_earnings <= 7",
"basis": "pattern"
},
"big_react": {
"yes_no": 0.0537,
"rule": "abs(last_earnings_move) > 5",
"basis": "rule"
},
"amc": {
"yes_no": 0.8591,
"rule": "next_report_amc > 0.5",
"basis": "pattern"
}
},
"context": {
"symbol": "AMZN",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "flag",
"fired": false,
"status": "skipped"
}
]
}abs days_since_earnings days_to_earnings last_earnings_move next_report_amc
Execution trader / desk · example 8
AMD buy order: avoid chasing a vertical move
Block aggressive participation when the stock is extended above its averages and three up days are in.
- StateAMD
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"AMD"} The server fills in the latest completed session.
Questions
ext | English → rule | Is price extended more than 2 ATR above its 20-day average? |
up3 | English → rule | Has the stock closed higher 3 days in a row? |
bb | rule | C > bbupper(C, 20, 2)Closed above the upper Bollinger band |
rsi70 | rule | rsi(C, 14) > 70RSI above 70 |
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 |
|---|---|---|
extIs price extended more than 2 ATR above its 20-day average compiled to C - sma(C, 20) > 2 * atr(14) | 0.061 | false |
up3Has the stock closed higher 3 days in a row compiled to (C > C[-1]) and (C[-1] > C[-2]) and (C[-2] > C[-3]) | 0.0537 | false |
bbClosed above the upper Bollinger band | 0.0537 | false |
rsi70RSI above 70 | 0.055 | false |
drop5A 5% drawdown within a month | 0.763 | 76% · likely |
Actions
Rules on the answers decide what to send.
ext >= 0.6 or bb >= 0.6→Webhookemselse→Slackexec-desk{
"text": "AMD (2026-10-30): not extended (2 ATR rule 6%); normal participation is fine."
}What it means
For AMD on the session of 2026-10-30: Not true: Is price extended more than 2 ATR above its 20-day average; Has the stock closed higher 3 days in a row; Closed above the upper Bollinger band; RSI above 70. Forecasts: A 5% drawdown within a month 76%. Fired: normal (Slack → exec-desk).
An extended stock gets passive limits only; otherwise the desk works the order normally.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AMD"
},
"questions": {
"ext": {
"type": "yes_no",
"instructions": "Is price extended more than 2 ATR above its 20-day average?"
},
"up3": {
"type": "yes_no",
"instructions": "Has the stock closed higher 3 days in a row?"
},
"bb": {
"type": "yes_no",
"ask": "C > bbupper(C, 20, 2)"
},
"rsi70": {
"type": "yes_no",
"ask": "rsi(C, 14) > 70"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "passive_only",
"when": "ext >= 0.6 or bb >= 0.6",
"do": "webhook",
"connection": "ems",
"body": {
"symbol": "{{symbol}}",
"instruction": "passive_only",
"limit_offset_bps": -5,
"p_extended": "{{ext}}",
"p_above_band": "{{bb}}",
"as_of": "{{as_of}}"
}
},
{
"id": "normal",
"when": "else",
"do": "slack",
"connection": "exec-desk",
"message": "{{symbol}} ({{as_of}}): not extended (2 ATR rule {{ext|pct}}); normal participation is fine."
}
],
"dry_run": true
}Response JSON (AMD, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"ext": {
"yes_no": 0.061,
"rule": "C - sma(C, 20) > 2 * atr(14)",
"basis": "pattern"
},
"up3": {
"yes_no": 0.0537,
"rule": "(C > C[-1]) and (C[-1] > C[-2]) and (C[-2] > C[-3])",
"basis": "pattern"
},
"bb": {
"yes_no": 0.0537,
"rule": "C > bbupper(C, 20, 2)",
"basis": "rule"
},
"rsi70": {
"yes_no": 0.055,
"rule": "rsi(C, 14) > 70",
"basis": "rule"
},
"drop5": {
"yes_no": 0.763
}
},
"context": {
"symbol": "AMD",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "passive_only",
"fired": false,
"status": "skipped"
},
{
"id": "normal",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "exec-desk",
"preview": {
"text": "AMD (2026-10-30): not extended (2 ATR rule 6%); normal participation is fine."
}
}
]
}Execution trader / desk · example 9
XLE: will today's range be wide? Plan child-order sizes
Use NR7, compression and the big-move forecast to size child orders for an energy ETF program.
- StateXLE
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"XLE"} The server fills in the latest completed session.
Questions
nr7 | English → rule | Is today an NR7 day, the narrowest range of the last 7 sessions? |
compress | rule | std(C, 10) < 0.5 * std(C, 50)Swings less than half their 50-day size |
bbw | English → rule | Is Bollinger Band width at its lowest in 120 sessions? |
big5 | forecast | Will there be a big move in either direction in the next 5 days? A big move either way in 5 days |
move2 | forecast | Will the stock move more than 2% in either direction in 5 trading days? A 2%+ move either way in 5 days |
Answers
| Question | Answer | Reading |
|---|---|---|
nr7Is today an NR7 day, the narrowest range of the last 7 sessions compiled to (H > L) and ((H - L) <= ref(min(H - L, 6), -1)) | 0.3985 | false |
compressSwings less than half their 50-day size | 0.8148 | true |
bbwIs Bollinger Band width at its lowest in 120 sessions compiled to ((bbupper(C, 20) - bblower(C, 20)) / bbmid(C, 20)) <= ref(min(((bbupper(C, 20) - bblower(C, 20)) / bbmid(C, 20)), 119), -1) | 0.0774 | false |
big5A big move either way in 5 days | 0.398 | 40% · unlikely |
move2A 2%+ move either way in 5 days | 0.36 | 36% · unlikely |
What it means
For XLE on the session of 2026-10-30: True now: Swings less than half their 50-day size. Not true: Is today an NR7 day, the narrowest range of the last 7 sessions; Is Bollinger Band width at its lowest in 120 sessions. Forecasts: A big move either way in 5 days 40%; A 2%+ move either way in 5 days 36%.
Compression after a narrow day often precedes expansion; the forecast quantifies how likely a big move is, not its direction.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLE"
},
"questions": {
"nr7": {
"type": "yes_no",
"instructions": "Is today an NR7 day, the narrowest range of the last 7 sessions?"
},
"compress": {
"type": "yes_no",
"ask": "std(C, 10) < 0.5 * std(C, 50)"
},
"bbw": {
"type": "yes_no",
"instructions": "Is Bollinger Band width at its lowest in 120 sessions?"
},
"big5": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
},
"move2": {
"type": "yes_no",
"instructions": "Will the stock move more than 2% in either direction in 5 trading days?"
}
}
}Response JSON (XLE, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"nr7": {
"yes_no": 0.3985,
"rule": "(H > L) and ((H - L) <= ref(min(H - L, 6), -1))",
"basis": "pattern"
},
"compress": {
"yes_no": 0.8148,
"rule": "std(C, 10) < 0.5 * std(C, 50)",
"basis": "rule"
},
"bbw": {
"yes_no": 0.0774,
"rule": "((bbupper(C, 20) - bblower(C, 20)) / bbmid(C, 20)) <= ref(min(((bbupper(C, 20) - bblower(C, 20)) / bbmid(C, 20)), 119), -1)",
"basis": "pattern"
},
"big5": {
"yes_no": 0.398
},
"move2": {
"yes_no": 0.36
}
},
"context": {
"symbol": "XLE",
"as_of": "2026-10-30"
}
}Execution trader / desk · example 10
Sector ETF program: XLK, XLF, XLI, XLB, XLY volatility tiers
Assign each leg of a sector program to a volatility tier before release.
- State5 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"XLK"} then XLF, XLI, XLB, XLY, one request each. The server fills in the latest completed session.
Questions
atr3 | rule | atr_pct(14) > 3A typical day moves more than 3% |
hv | English → rule | Is 20-day historical volatility below 20%? |
wide | rule | (H - L) > 2 * avg(H - L, 20)Range more than twice the 20-day average range |
vol_up | forecast | Will volatility be higher over the next month? Higher volatility next month |
Answers
| Symbol | atr3rule | hvrule | widerule | vol_upforecast |
|---|---|---|---|---|
XLK | 0.0784 | 0.078 | 0.2142 | 0.407 |
XLF | 0.0537 | 0.9463 | 0.086 | 0.577 |
XLI | 0.0537 | 0.941 | 0.0913 | 0.577 |
XLB | 0.0537 | 0.9463 | 0.0537 | 0.679 |
XLY | 0.0537 | 0.9001 | 0.0537 | 0.521 |
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: A typical day moves more than 3%: true for none of 5. Is 20-day historical volatility below 20%: true for XLF, XLI, XLB, XLY of 5. Range more than twice the 20-day average range: true for none of 5. Highest odds for “Higher volatility next month”: XLB at 68%.
Low-volatility legs get larger slices; legs with a wide day or high ATR are scheduled more slowly.
Request JSON (XLK; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLK"
},
"questions": {
"atr3": {
"type": "yes_no",
"ask": "atr_pct(14) > 3"
},
"hv": {
"type": "yes_no",
"instructions": "Is 20-day historical volatility below 20%?"
},
"wide": {
"type": "yes_no",
"ask": "(H - L) > 2 * avg(H - L, 20)"
},
"vol_up": {
"type": "yes_no",
"instructions": "Will volatility be higher over the next month?"
}
}
}Response JSON (XLK, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"atr3": {
"yes_no": 0.0784,
"rule": "atr_pct(14) > 3",
"basis": "rule"
},
"hv": {
"yes_no": 0.078,
"rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2",
"basis": "pattern"
},
"wide": {
"yes_no": 0.2142,
"rule": "(H - L) > 2 * avg(H - L, 20)",
"basis": "rule"
},
"vol_up": {
"yes_no": 0.407
}
},
"context": {
"symbol": "XLK",
"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, Market maker, Prop trading firm, Compliance officer.