Ora
All use cases All industries

Individuals

Retail investorActive day traderSwing traderOptions traderDividend investorLong-term passive investorCrypto traderFX traderCommodities traderSocial trading communityStudents and universities

Buy side

Financial advisor / RIAWealth managerFamily officeHedge fund PMQuant researcherPortfolio manager (long-only)Risk managerPrivate equityVC / growth investorFund-of-funds allocator

Sell side

Equity research analystSell-side sales traderExecution trader / deskMarket makerProp trading firmCompliance officer

Corporates

Investor relations teamCorporate treasuryCFO officeBank credit analystFinancial journalist / media

Builders

Quant developerFintech app builderRobo-advisorBroker appAlgo / bot developerData vendor / platformTrading educator / newsletter

Institutions

ETF issuerIndex providerInsurance investment officePension fundEndowmentSovereign wealth fund

Use cases · 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.

Answers were captured on ora-fin-0.1.1. Another model changes the request JSON and the Playground link; run it there to see its answers.
Rule functions and facts used by this player (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.

ora-fin-0.1.1AAPL5 questions2 actions
  1. StateAAPL
  2. Questions5 asked
  3. Answersreal, captured
  4. Actions2 rules · dry run

State

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

Questions

above_vwapruleC > sum(hlc3() * V, 20) / sum(V, 20)
Above its 20-day volume-weighted price
atr_loEnglish → ruleIs the 14-day ATR less than 2% of the price?
trendEnglish → ruleIs the stock above its 50-day moving average?
vol_riseforecastWill volatility rise over the next 5 days?
Volatility rising over 5 days
up_tomforecastWill the stock be up tomorrow?
Up tomorrow

Answers

QuestionAnswerReading
above_vwap
Above its 20-day volume-weighted price
0.6586true
atr_lo
Is the 14-day ATR less than 2% of the price
compiled to atr(14) / C < 0.02
0.5184on the line (true)
trend
Is the stock above its 50-day moving average
compiled to C > sma(C, 50)
0.9119true
vol_rise
Volatility rising over 5 days
0.6161% · likely
up_tom
Up tomorrow
0.55656% · close to even

Actions

Rules on the answers decide what to send.

trend >= 0.6 and up_tom >= 0.55→Webhookems
else→Webhookems
What each action would send 1 of 2 fired · dry run, nothing sent
aggressivewould send (dry run)Webhook → ems
{
  "symbol": "AAPL",
  "side": "buy",
  "algo": "POV",
  "participation": 0.15,
  "as_of": "2026-10-30",
  "p_up_tomorrow": 0.556,
  "p_trend": 0.9119
}
patientrule false: skipped

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"
    }
  ]
}

atr hlc3 sma sum

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.

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

State

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

Questions

liquidruleavg(C * V, 20) > 100000000
Trades more than $100 million a day
liquid50English → ruleDoes the stock trade more than $50 million a day on average?
dryruleV < 0.6 * avg(V, 20)
Volume under 60% of normal
halfEnglish → ruleWas today's volume less than half its 20-day average?
spikeforecastWill volume spike tomorrow?
A volume spike tomorrow

Answers

Symbolliquidruleliquid50ruledryrulehalfrulespikeforecast
TSLA0.94630.94630.07640.06770.026
NVDA0.94630.94630.05440.05370.044
IWM0.94630.94630.08360.06990.018
XLU0.94630.94630.11460.10140.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"
  }
}

avg ref

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.

ora-fin-0.1.1TSLA5 questions1 action
  1. StateTSLA
  2. Questions5 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

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

Questions

gap_atrruleabs(O - C[-1]) > 0.5 * ref(atr(14), -1)
Gap bigger than half an ATR
gap_upruleO > C[-1] * 1.01
Opened more than 1% above yesterday's close
gap_dnruleO < C[-1] * 0.99
Opened more than 1% below yesterday's close
fillEnglish → ruleDid today's gap up fill?
big5forecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days

Answers

QuestionAnswerReading
gap_atr
Gap bigger than half an ATR
0.8646true
gap_up
Opened more than 1% above yesterday's close
0.0562false
gap_dn
Opened more than 1% below yesterday's close
0.8793true
fill
Did today's gap up fill
compiled to (O > C[-1] * 1) and (L <= C[-1])
0.0708false
big5
A big move either way in 5 days
0.24825% · unlikely

Actions

Rules on the answers decide what to send.

gap_atr >= 0.6→Slackexec-desk
What each action would send 1 of 1 fired · dry run, nothing sent
hold_openwould send (dry run)Slack → exec-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%."
      }
    }
  ]
}

abs atr offset ref

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.

ora-fin-0.1.1MU5 questions1 action
  1. StateMU
  2. Questions5 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

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

Questions

atr_expruleatr(14) > 1.2 * ref(atr(14), -10)
ATR up 20% in two weeks
trruletr() > 1.5 * ref(atr(14), -1)
True range 1.5× yesterday's ATR
range15English → ruleWas today's range more than 1.5 ATR?
vol5English → ruleIs 5-day volatility higher than 20-day volatility?
calmforecastWill volatility calm down over the next 5 days?
Volatility calming over 5 days

Answers

QuestionAnswerReading
atr_exp
ATR up 20% in two weeks
0.1325false
tr
True range 1.5× yesterday's ATR
0.5312on the line (true)
range15
Was today's range more than 1.5 ATR
compiled to (H - L) > 1.5 * atr(14)
0.0904false
vol5
Is 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.8346true
calm
Volatility calming over 5 days
0.69169% · likely

Actions

Rules on the answers decide what to send.

atr_exp >= 0.6 or tr >= 0.6→Webhookems
What each action would send 0 of 1 fired · dry run, nothing sent
stretchrule false: skipped

What 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"
    }
  ]
}

atr log offset ref sqrt std tr

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.

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

State

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

Questions

near_resEnglish → ruleIs the stock within 1% below its last swing high (resistance)?
stretchruleC > sma(C, 20) + 2 * atr(14)
Stretched: more than 2 ATR above the 20-day
top_rangeEnglish → ruleIs the stock in the top 10% of its 20-day range?
willrrulewillr(14) > -20
Williams %R above −20
up_tomforecastWill the stock be up tomorrow?
Up tomorrow

Answers

QuestionAnswerReading
near_res
Is the stock within 1% below its last swing high (resistance)
compiled to (C <= swinghigh(5, 1)) and (C >= swinghigh(5, 1) * 0.99)
0.0545false
stretch
Stretched: more than 2 ATR above the 20-day
0.0537false
top_range
Is 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.0553false
willr
Williams %R above −20
0.0646false
up_tom
Up tomorrow
0.48549% · 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"
  }
}

atr max min sma swinghigh willr

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.

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

State

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

Questions

trend_dayrule(O <= L + 0.2 * (H - L)) and (C >= H - 0.2 * (H - L))
A trend day up: opened near the low, closed near the high
insideruleH < H[-1] and L > L[-1]
An inside day
volruleV > avg(V, 20)
Volume above its 20-day average
above_midruleC > hlc3()
Close above the day's typical price
up_tomforecastWill the stock be up tomorrow?
Up tomorrow

Answers

QuestionAnswerReading
trend_day
A trend day up: opened near the low, closed near the high
0.0537false
inside
An inside day
0.0537false
vol
Volume above its 20-day average
0.9463true
above_mid
Close above the day's typical price
0.4149on the line (false)
up_tom
Up tomorrow
0.53253% · 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"
  }
}

avg hlc3 offset

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.

ora-fin-0.1.13 symbols, one request each4 questions1 action
  1. State3 symbols
  2. Questions4 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

{"symbol":"AMZN"} then MSFT, NFLX, one request each. The server fills in the latest completed session.

Questions

earn10ruledays_to_earnings <= 10
Reports earnings within 10 days
recentEnglish → ruleDid the stock report earnings in the last 7 days?
big_reactruleabs(last_earnings_move) > 5
Last earnings move bigger than 5%
amcEnglish → ruleDoes the stock report after the close next time?

Answers

Symbolearn10rulerecentrulebig_reactruleamcruleFired
AMZN0.05370.93170.05370.8591none
MSFT0.05370.91870.05370.8591none
NFLX0.05370.14090.94630.8591none

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-desk
AMZN 0 of 1 fired · dry run, nothing sent
MSFT 0 of 1 fired · dry run, nothing sent
NFLX 0 of 1 fired · dry run, nothing sent

What 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.

ora-fin-0.1.1AMD5 questions2 actions
  1. StateAMD
  2. Questions5 asked
  3. Answersreal, captured
  4. Actions2 rules · dry run

State

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

Questions

extEnglish → ruleIs price extended more than 2 ATR above its 20-day average?
up3English → ruleHas the stock closed higher 3 days in a row?
bbruleC > bbupper(C, 20, 2)
Closed above the upper Bollinger band
rsi70rulersi(C, 14) > 70
RSI above 70
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

QuestionAnswerReading
ext
Is price extended more than 2 ATR above its 20-day average
compiled to C - sma(C, 20) > 2 * atr(14)
0.061false
up3
Has 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.0537false
bb
Closed above the upper Bollinger band
0.0537false
rsi70
RSI above 70
0.055false
drop5
A 5% drawdown within a month
0.76376% · likely

Actions

Rules on the answers decide what to send.

ext >= 0.6 or bb >= 0.6→Webhookems
else→Slackexec-desk
What each action would send 1 of 2 fired · dry run, nothing sent
passive_onlyrule false: skipped
normalwould send (dry run)Slack → exec-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."
      }
    }
  ]
}

atr bbupper offset rsi sma

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.

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

State

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

Questions

nr7English → ruleIs today an NR7 day, the narrowest range of the last 7 sessions?
compressrulestd(C, 10) < 0.5 * std(C, 50)
Swings less than half their 50-day size
bbwEnglish → ruleIs Bollinger Band width at its lowest in 120 sessions?
big5forecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days
move2forecastWill the stock move more than 2% in either direction in 5 trading days?
A 2%+ move either way in 5 days

Answers

QuestionAnswerReading
nr7
Is 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.3985false
compress
Swings less than half their 50-day size
0.8148true
bbw
Is 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.0774false
big5
A big move either way in 5 days
0.39840% · unlikely
move2
A 2%+ move either way in 5 days
0.3636% · 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"
  }
}

bblower bbmid bbupper min ref std

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.

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

State

{"symbol":"XLK"} then XLF, XLI, XLB, XLY, one request each. The server fills in the latest completed session.

Questions

atr3ruleatr_pct(14) > 3
A typical day moves more than 3%
hvEnglish → ruleIs 20-day historical volatility below 20%?
widerule(H - L) > 2 * avg(H - L, 20)
Range more than twice the 20-day average range
vol_upforecastWill volatility be higher over the next month?
Higher volatility next month

Answers

Symbolatr3rulehvrulewiderulevol_upforecast
XLK0.07840.0780.21420.407
XLF0.05370.94630.0860.577
XLI0.05370.9410.09130.577
XLB0.05370.94630.05370.679
XLY0.05370.90010.05370.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"
  }
}

atr_pct avg log offset sqrt std

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.

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