Use cases · Sell side
Market maker: 20 ways to use Ora
Quotes two-sided markets: volatility regime, event risk, gaps and inventory warnings. 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 (56)
offset 10ref 6atr 5abs 5log 4sqrt 4std 4sma 4atr_pct 3zscore 3avg 3lowest 3rsi 2bblower 2percentrank 2highest 2days_to_earnings 1last_earnings_gap 1last_earnings_move 1next_report_amc 1macd 1macdsignal 1bbmid 1bbupper 1max 1min 1spinning_top 1outside_bar 1evening_star 1harami_bear 1shooting_star 1tweezer_top 1days_since_ex_div 1days_to_ex_div 1div_count_ttm 1last_div_amount 1next_div_amount 1pays_dividend 1days_since_split 1days_to_split 1reverse_split_last 1splits_5y 1adx 1diminus 1diplus 1swinghigh 1swinglow 1median 1inside_bar 1marubozu 1greatest 1least 1barssince 1lowestbars 1crossdown 1crossup 1
Examples 11–20 of 20 · page 2 of 2
Market maker · example 11
T ex-dividend: adjust fair value on the ex-date
Make sure the quoting model drops fair value by the dividend when the stock goes ex.
- StateT
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"T"} The server fills in the latest completed session.
Questions
ex_soon | rule | days_to_ex_div <= 30Goes ex-dividend within 30 days |
recent_ex | rule | days_since_ex_div <= 1Went ex-dividend today or yesterday |
pays | rule | pays_dividend > 0.5Pays a dividend |
quarterly | rule | div_count_ttm >= 4Pays at least quarterly |
next_up | English → rule | Is the next declared dividend larger than the last one? |
Answers
| Question | Answer | Reading |
|---|---|---|
ex_soonGoes ex-dividend within 30 days | 0.0537 | false |
recent_exWent ex-dividend today or yesterday | 0.0537 | false |
paysPays a dividend | 0.8591 | true |
quarterlyPays at least quarterly | 0.55 | on the line (true) |
next_upIs the next declared dividend larger than the last one compiled to next_div_amount > last_div_amount | 0.50 | not known |
Actions
Rules on the answers decide what to send.
recent_ex >= 0.6→Webhookpricing-modelex_soon >= 0.6→Slackquote-deskWhat it means
For T on the session of 2026-10-30: True now: Pays a dividend. Not true: Goes ex-dividend within 30 days; Went ex-dividend today or yesterday. On the line: Pays at least quarterly. Not known (no data on record): Is the next declared dividend larger than the last one. No action fired: every rule was false.
Dividend facts drive a fair-value adjustment only on the ex-date; an upcoming ex-date is a reminder.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "T"
},
"questions": {
"ex_soon": {
"type": "yes_no",
"ask": "days_to_ex_div <= 30"
},
"recent_ex": {
"type": "yes_no",
"ask": "days_since_ex_div <= 1"
},
"pays": {
"type": "yes_no",
"ask": "pays_dividend > 0.5"
},
"quarterly": {
"type": "yes_no",
"ask": "div_count_ttm >= 4"
},
"next_up": {
"type": "yes_no",
"instructions": "Is the next declared dividend larger than the last one?"
}
},
"actions": [
{
"id": "ex_adjust",
"when": "recent_ex >= 0.6",
"do": "webhook",
"connection": "pricing-model",
"body": {
"symbol": "{{symbol}}",
"action": "apply_ex_dividend",
"as_of": "{{as_of}}"
}
},
{
"id": "upcoming",
"when": "ex_soon >= 0.6",
"do": "slack",
"connection": "quote-desk",
"message": "{{symbol}}: ex-dividend within 30 days. Check the dividend input in the pricing model."
}
],
"dry_run": true
}Response JSON (T, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"ex_soon": {
"yes_no": 0.0537,
"rule": "days_to_ex_div <= 30",
"basis": "rule"
},
"recent_ex": {
"yes_no": 0.0537,
"rule": "days_since_ex_div <= 1",
"basis": "rule"
},
"pays": {
"yes_no": 0.8591,
"rule": "pays_dividend > 0.5",
"basis": "rule"
},
"quarterly": {
"yes_no": 0.55,
"rule": "div_count_ttm >= 4",
"basis": "rule"
},
"next_up": {
"yes_no": 0.5,
"rule": "next_div_amount > last_div_amount",
"basis": "pattern"
}
},
"context": {
"symbol": "T",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "ex_adjust",
"fired": false,
"status": "skipped"
},
{
"id": "upcoming",
"fired": false,
"status": "skipped"
}
]
}days_since_ex_div days_to_ex_div div_count_ttm last_div_amount next_div_amount pays_dividend
Market maker · example 12
Split check for quoting: NVDA, AAPL, TSLA
Confirm no split is announced that would change tick size, lot and quote parameters.
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"NVDA"} then AAPL, TSLA, one request each. The server fills in the latest completed session.
Questions
announced | rule | days_to_split <= 365A split is announced |
split_3y | English → rule | Has the stock split in the past three years? |
reverse | English → rule | Was the last split a reverse split? |
multi | rule | splits_5y >= 2Two or more splits in five years |
Answers
| Symbol | announcedrule | split_3yrule | reverserule | multirule |
|---|---|---|---|---|
NVDA | 0.0537 | 0.9463 | 0.1409 | 0.1409 |
AAPL | 0.0537 | 0.0537 | 0.1409 | 0.0683 |
TSLA | 0.0537 | 0.0537 | 0.1409 | 0.1409 |
true false not known for rules; forecasts are odds. Hover a column for its question.
What it means
Session of 2026-10-30, 3 symbols: A split is announced: true for none of 3. Has the stock split in the past three years: true for NVDA of 3. Was the last split a reverse split: true for none of 3. Two or more splits in five years: true for none of 3.
An announced split changes quoting parameters on the effective date; recent splits explain changes in historic share volumes.
Request JSON (NVDA; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "NVDA"
},
"questions": {
"announced": {
"type": "yes_no",
"ask": "days_to_split <= 365"
},
"split_3y": {
"type": "yes_no",
"instructions": "Has the stock split in the past three years?"
},
"reverse": {
"type": "yes_no",
"instructions": "Was the last split a reverse split?"
},
"multi": {
"type": "yes_no",
"ask": "splits_5y >= 2"
}
}
}Response JSON (NVDA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"announced": {
"yes_no": 0.0537,
"rule": "days_to_split <= 365",
"basis": "rule"
},
"split_3y": {
"yes_no": 0.9463,
"rule": "days_since_split <= 1095",
"basis": "pattern"
},
"reverse": {
"yes_no": 0.1409,
"rule": "reverse_split_last > 0.5",
"basis": "pattern"
},
"multi": {
"yes_no": 0.1409,
"rule": "splits_5y >= 2",
"basis": "rule"
}
},
"context": {
"symbol": "NVDA",
"as_of": "2026-10-30"
}
}Market maker · example 13
GE: strong trend means wider inventory limits on one side
Use ADX and directional lines to decide whether to allow more inventory with the trend.
- StateGE
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"GE"} The server fills in the latest completed session.
Questions
adx | rule | adx(14) > 25Trending (ADX above 25) |
up | rule | adx(14) > 20 and diplus(14) > diminus(14)Trending up (ADX over 20 and +DI over −DI) |
dmi | rule | diminus(14) > diplus(14)-DI above +DI |
hh_hl | English → rule | Is the stock making higher swing highs and higher swing lows? |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
adxTrending (ADX above 25) | 0.1827 | false |
upTrending up (ADX over 20 and +DI over −DI) | 0.5561 | on the line (true) |
dmi-DI above +DI | 0.4439 | on the line (false) |
hh_hlIs the stock making higher swing highs and higher swing lows compiled to (swinghigh(5, 1) > swinghigh(5, 2)) and (swinglow(5, 1) > swinglow(5, 2)) | 0.1895 | false |
up_weekHigher in a week | 0.496 | 50% · close to even |
What it means
For GE on the session of 2026-10-30: Not true: Trending (ADX above 25); Is the stock making higher swing highs and higher swing lows. On the line: Trending up (ADX over 20 and +DI over −DI); -DI above +DI. Forecasts: Higher in a week 50%.
A strong directional trend argues for asymmetric inventory limits, never for taking a view.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "GE"
},
"questions": {
"adx": {
"type": "yes_no",
"ask": "adx(14) > 25"
},
"up": {
"type": "yes_no",
"ask": "adx(14) > 20 and diplus(14) > diminus(14)"
},
"dmi": {
"type": "yes_no",
"ask": "diminus(14) > diplus(14)"
},
"hh_hl": {
"type": "yes_no",
"instructions": "Is the stock making higher swing highs and higher swing lows?"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (GE, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"adx": {
"yes_no": 0.1827,
"rule": "adx(14) > 25",
"basis": "rule"
},
"up": {
"yes_no": 0.5561,
"rule": "adx(14) > 20 and diplus(14) > diminus(14)",
"basis": "rule"
},
"dmi": {
"yes_no": 0.4439,
"rule": "diminus(14) > diplus(14)",
"basis": "rule"
},
"hh_hl": {
"yes_no": 0.1895,
"rule": "(swinghigh(5, 1) > swinghigh(5, 2)) and (swinglow(5, 1) > swinglow(5, 2))",
"basis": "pattern"
},
"up_week": {
"yes_no": 0.496
}
},
"context": {
"symbol": "GE",
"as_of": "2026-10-30"
}
}Market maker · example 14
IWM: where is price in its recent distribution?
Use percentile rank and median distance to judge whether quotes should lean for mean reversion.
- StateIWM
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"IWM"} The server fills in the latest completed session.
Questions
prank | rule | percentrank(C, 50) < 20Close in the bottom fifth of the last 50 closes |
below_med | rule | C < median(C, 20)Close below its 20-day median |
zs | rule | zscore(C, 20) < -2Two deviations under the 20-day mean |
rsi2 | rule | rsi(C, 2) < 10Two-day RSI under 10 |
up_tom | forecast | Will the stock be up tomorrow? Up tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
prankClose in the bottom fifth of the last 50 closes | 0.2762 | false |
below_medClose below its 20-day median | 0.2882 | false |
zsTwo deviations under the 20-day mean | 0.0668 | false |
rsi2Two-day RSI under 10 | 0.1938 | false |
up_tomUp tomorrow | 0.486 | 49% · close to even |
What it means
For IWM on the session of 2026-10-30: Not true: Close in the bottom fifth of the last 50 closes; Close below its 20-day median; Two deviations under the 20-day mean; Two-day RSI under 10. Forecasts: Up tomorrow 49%.
Low percentile and oversold short-term readings support a slight bid lean; it is unwound quickly.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "IWM"
},
"questions": {
"prank": {
"type": "yes_no",
"ask": "percentrank(C, 50) < 20"
},
"below_med": {
"type": "yes_no",
"ask": "C < median(C, 20)"
},
"zs": {
"type": "yes_no",
"ask": "zscore(C, 20) < -2"
},
"rsi2": {
"type": "yes_no",
"ask": "rsi(C, 2) < 10"
},
"up_tom": {
"type": "yes_no",
"instructions": "Will the stock be up tomorrow?"
}
}
}Response JSON (IWM, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"prank": {
"yes_no": 0.2762,
"rule": "percentrank(C, 50) < 20",
"basis": "rule"
},
"below_med": {
"yes_no": 0.2882,
"rule": "C < median(C, 20)",
"basis": "rule"
},
"zs": {
"yes_no": 0.0668,
"rule": "zscore(C, 20) < -2",
"basis": "rule"
},
"rsi2": {
"yes_no": 0.1938,
"rule": "rsi(C, 2) < 10",
"basis": "rule"
},
"up_tom": {
"yes_no": 0.486
}
},
"context": {
"symbol": "IWM",
"as_of": "2026-10-30"
}
}Market maker · example 15
AMZN inside bar: prepare for a break either way
After an inside bar, widen slightly at the edges of yesterday's range in case of a break.
- StateAMZN
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"AMZN"} The server fills in the latest completed session.
Questions
inside | rule | inside_bar()inside bar candle: Today's high and low are inside yesterday's (equal counts). |
bo | English → rule | Did the stock break out above yesterday's inside bar? |
nr7 | rule | (H - L) < lowest(H - L, 6)Narrowest range of the last seven sessions (NR7) |
marubozu | rule | marubozu()marubozu candle: Body at least 90% of the range: almost no wicks. |
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 |
|---|---|---|
insideinside bar candle: Today's high and low are inside yesterday's (equal counts). | 0.0537 | false |
boDid the stock break out above yesterday's inside bar compiled to (H[-1] <= H[-2]) and (L[-1] >= L[-2]) and (C > H[-1]) | 0.0537 | false |
nr7Narrowest range of the last seven sessions (NR7) | 0.0537 | false |
marubozumarubozu candle: Body at least 90% of the range: almost no wicks. | 0.0555 | false |
big5A big move either way in 5 days | 0.276 | 28% · unlikely |
What it means
For AMZN on the session of 2026-10-30: Not true: inside bar candle: Today's high and low are inside yesterday's (equal counts).; Did the stock break out above yesterday's inside bar; Narrowest range of the last seven sessions (NR7); marubozu candle: Body at least 90% of the range: almost no wicks.. Forecasts: A big move either way in 5 days 28%.
An inside bar or NR7 day concentrates risk at the edges; the forecast estimates how likely a big move is.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AMZN"
},
"questions": {
"inside": {
"type": "yes_no",
"ask": "inside_bar()"
},
"bo": {
"type": "yes_no",
"instructions": "Did the stock break out above yesterday's inside bar?"
},
"nr7": {
"type": "yes_no",
"ask": "(H - L) < lowest(H - L, 6)"
},
"marubozu": {
"type": "yes_no",
"ask": "marubozu()"
},
"big5": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
}
}Response JSON (AMZN, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"inside": {
"yes_no": 0.0537,
"rule": "inside_bar()",
"basis": "rule"
},
"bo": {
"yes_no": 0.0537,
"rule": "(H[-1] <= H[-2]) and (L[-1] >= L[-2]) and (C > H[-1])",
"basis": "pattern"
},
"nr7": {
"yes_no": 0.0537,
"rule": "(H - L) < lowest(H - L, 6)",
"basis": "rule"
},
"marubozu": {
"yes_no": 0.0555,
"rule": "marubozu()",
"basis": "rule"
},
"big5": {
"yes_no": 0.276
}
},
"context": {
"symbol": "AMZN",
"as_of": "2026-10-30"
}
}Market maker · example 16
HYG and JNK: credit ETF stress check
When high-yield ETFs break down on volume, widen quotes and alert the desk.
- State2 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"HYG"} then JNK, one request each. The server fills in the latest completed session.
Questions
bd | rule | C < lowest(L, 20)Closed under the 20-day low |
down_vol | English → rule | Did the stock fall on above-average volume? |
below50 | rule | C < sma(C, 50)Close below the 50-day average |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | bdrule | down_volrule | below50rule | drop5forecast | Fired |
|---|---|---|---|---|---|
HYG | 0.0811 | 0.6834 | 0.8086 | 0.009 | stress |
JNK | 0.0813 | 0.5388 | 0.8258 | 0.011 | none |
true false not known for rules; forecasts are odds. Hover a column for its question.
Actions
Rules on the answers decide what to send. Each symbol runs its own request, so each one can fire.
bd >= 0.6 or down_vol >= 0.6→Slackquote-desk{
"text": "HYG (2026-10-30): credit ETF under pressure (20-day low break 8%, down on volume 68%). Widen and cut size."
}What it means
Session of 2026-10-30, 2 symbols: Closed under the 20-day low: true for none of 2. Did the stock fall on above-average volume: true for HYG of 2. Close below the 50-day average: true for HYG, JNK of 2. Highest odds for “A 5% drawdown within a month”: JNK at 1%. stress fired for HYG.
Credit ETF stress often spreads; the alert gives the desk time to adjust before the creation basket moves.
Request JSON (HYG; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "HYG"
},
"questions": {
"bd": {
"type": "yes_no",
"ask": "C < lowest(L, 20)"
},
"down_vol": {
"type": "yes_no",
"instructions": "Did the stock fall on above-average volume?"
},
"below50": {
"type": "yes_no",
"ask": "C < sma(C, 50)"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "stress",
"when": "bd >= 0.6 or down_vol >= 0.6",
"do": "slack",
"connection": "quote-desk",
"message": "{{symbol}} ({{as_of}}): credit ETF under pressure (20-day low break {{bd|pct}}, down on volume {{down_vol|pct}}). Widen and cut size."
}
],
"dry_run": true
}Response JSON (HYG, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"bd": {
"yes_no": 0.0811,
"rule": "C < lowest(L, 20)",
"basis": "rule"
},
"down_vol": {
"yes_no": 0.6834,
"rule": "(C < C[-1]) and (V > ref(avg(V, 20), -1))",
"basis": "pattern"
},
"below50": {
"yes_no": 0.8086,
"rule": "C < sma(C, 50)",
"basis": "rule"
},
"drop5": {
"yes_no": 0.009
}
},
"context": {
"symbol": "HYG",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "stress",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "quote-desk",
"preview": {
"text": "HYG (2026-10-30): credit ETF under pressure (20-day low break 8%, down on volume 68%). Widen and cut size."
}
}
]
}Market maker · example 17
Spot bitcoin ETFs: IBIT, FBTC, GBTC quoting regime
Check volatility and gap risk for the bitcoin ETFs, whose underlying trades all weekend.
- ScheduleMon at 08:45 ET
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"IBIT"} then FBTC, GBTC, one request each. The server fills in the latest completed session.
Questions
atr3 | rule | atr_pct(14) > 3A typical day moves more than 3% |
gap | rule | abs(O - C[-1]) > 0.5 * ref(atr(14), -1)Gap bigger than half an ATR |
hv | rule | std(log(C / C[-1]), 20) * sqrt(252) > 0.4Annualized 20-day volatility above 40% |
gap_dn | forecast | Will it gap down tomorrow? A gap down tomorrow |
Answers
| Symbol | atr3rule | gaprule | hvrule | gap_dnforecast |
|---|---|---|---|---|
IBIT | 0.2365 | 0.9444 | 0.1239 | 0.134 |
FBTC | 0.1881 | 0.9439 | 0.1181 | 0.15 |
GBTC | 0.1754 | 0.9438 | 0.1211 | 0.133 |
true false not known for rules; forecasts are odds. Hover a column for its question.
What it means
Session of 2026-10-30, 3 symbols: A typical day moves more than 3%: true for none of 3. Gap bigger than half an ATR: true for IBIT, FBTC, GBTC of 3. Annualized 20-day volatility above 40%: true for none of 3. Highest odds for “A gap down tomorrow”: FBTC at 15%.
Monday mornings carry the weekend's move; high gap and ATR readings mean wider opening quotes.
As a scheduled workflow (Mon at 08: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": "Spot bitcoin ETFs: IBIT, FBTC, GBTC quoting regime",
"symbols": "IBIT FBTC GBTC",
"days": [
1
],
"at_time": "08:45",
"model": "ora-fin-0.1.1",
"questions": {
"atr3": {
"type": "yes_no",
"ask": "atr_pct(14) > 3"
},
"gap": {
"type": "yes_no",
"ask": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)"
},
"hv": {
"type": "yes_no",
"ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4"
},
"gap_dn": {
"type": "yes_no",
"instructions": "Will it gap down tomorrow?"
}
}
}Request JSON (IBIT; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "IBIT"
},
"questions": {
"atr3": {
"type": "yes_no",
"ask": "atr_pct(14) > 3"
},
"gap": {
"type": "yes_no",
"ask": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)"
},
"hv": {
"type": "yes_no",
"ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4"
},
"gap_dn": {
"type": "yes_no",
"instructions": "Will it gap down tomorrow?"
}
}
}Response JSON (IBIT, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"atr3": {
"yes_no": 0.2365,
"rule": "atr_pct(14) > 3",
"basis": "rule"
},
"gap": {
"yes_no": 0.9444,
"rule": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)",
"basis": "rule"
},
"hv": {
"yes_no": 0.1239,
"rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4",
"basis": "rule"
},
"gap_dn": {
"yes_no": 0.134
}
},
"context": {
"symbol": "IBIT",
"as_of": "2026-10-30"
}
}Market maker · example 18
JPM: closing strength and the next morning's quote
Use the close location and mid-price measures to set the opening reference for the next session.
- StateJPM
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"JPM"} The server fills in the latest completed session.
Questions
top | rule | (C - L) / (H - L) > 0.75Closed in the top quarter of the day's range |
least | rule | least(O, C) - L > 2 * abs(C - O)Lower wick over twice the body |
greatest | rule | H - greatest(O, C) > 2 * abs(C - O)Upper wick over twice the body |
green | rule | C > OClosed above its open |
up_tom | forecast | Will the stock be up tomorrow? Up tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
topClosed in the top quarter of the day's range | 0.0753 | false |
leastLower wick over twice the body | 0.0547 | false |
greatestUpper wick over twice the body | 0.0537 | false |
greenClosed above its open | 0.0597 | false |
up_tomUp tomorrow | 0.526 | 53% · close to even |
What it means
For JPM on the session of 2026-10-30: Not true: Closed in the top quarter of the day's range; Lower wick over twice the body; Upper wick over twice the body; Closed above its open. Forecasts: Up tomorrow 53%.
A long lower wick and a strong close suggest support underneath; the opening reference leans slightly higher.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "JPM"
},
"questions": {
"top": {
"type": "yes_no",
"ask": "(C - L) / (H - L) > 0.75"
},
"least": {
"type": "yes_no",
"ask": "least(O, C) - L > 2 * abs(C - O)"
},
"greatest": {
"type": "yes_no",
"ask": "H - greatest(O, C) > 2 * abs(C - O)"
},
"green": {
"type": "yes_no",
"ask": "C > O"
},
"up_tom": {
"type": "yes_no",
"instructions": "Will the stock be up tomorrow?"
}
}
}Response JSON (JPM, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"top": {
"yes_no": 0.0753,
"rule": "(C - L) / (H - L) > 0.75",
"basis": "rule"
},
"least": {
"yes_no": 0.0547,
"rule": "least(O, C) - L > 2 * abs(C - O)",
"basis": "rule"
},
"greatest": {
"yes_no": 0.0537,
"rule": "H - greatest(O, C) > 2 * abs(C - O)",
"basis": "rule"
},
"green": {
"yes_no": 0.0597,
"rule": "C > O",
"basis": "rule"
},
"up_tom": {
"yes_no": 0.526
}
},
"context": {
"symbol": "JPM",
"as_of": "2026-10-30"
}
}Market maker · example 19
PEP: quiet since the last breakout, stay tight
When a stock has not broken out in weeks and ranges are small, keep quotes tight.
- StatePEP
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"PEP"} The server fills in the latest completed session.
Questions
quiet | rule | barssince(C > highest(C, 20)) > 30No 20-day breakout for 30 sessions |
since_low | rule | barssince(C < lowest(C, 20)) > 10More than ten sessions since the last 20-day closing low |
lowbars | rule | lowestbars(L, 20) >= 10The 20-day low is at least ten sessions old |
dry | rule | V < 0.6 * avg(V, 20)Volume under 60% of normal |
calm | forecast | Will volatility calm down over the next 5 days? Volatility calming over 5 days |
Answers
| Question | Answer | Reading |
|---|---|---|
quietNo 20-day breakout for 30 sessions | 0.1482 | false |
since_lowMore than ten sessions since the last 20-day closing low | 0.8017 | true |
lowbarsThe 20-day low is at least ten sessions old | 0.8636 | true |
dryVolume under 60% of normal | 0.0537 | false |
calmVolatility calming over 5 days | 0.703 | 70% · likely |
What it means
For PEP on the session of 2026-10-30: True now: More than ten sessions since the last 20-day closing low; The 20-day low is at least ten sessions old. Not true: No 20-day breakout for 30 sessions; Volume under 60% of normal. Forecasts: Volatility calming over 5 days 70%.
Long quiet spells reduce the risk of being picked off; tight quotes win flow until something changes.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "PEP"
},
"questions": {
"quiet": {
"type": "yes_no",
"ask": "barssince(C > highest(C, 20)) > 30"
},
"since_low": {
"type": "yes_no",
"ask": "barssince(C < lowest(C, 20)) > 10"
},
"lowbars": {
"type": "yes_no",
"ask": "lowestbars(L, 20) >= 10"
},
"dry": {
"type": "yes_no",
"ask": "V < 0.6 * avg(V, 20)"
},
"calm": {
"type": "yes_no",
"instructions": "Will volatility calm down over the next 5 days?"
}
}
}Response JSON (PEP, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"quiet": {
"yes_no": 0.1482,
"rule": "barssince(C > highest(C, 20)) > 30",
"basis": "rule"
},
"since_low": {
"yes_no": 0.8017,
"rule": "barssince(C < lowest(C, 20)) > 10",
"basis": "rule"
},
"lowbars": {
"yes_no": 0.8636,
"rule": "lowestbars(L, 20) >= 10",
"basis": "rule"
},
"dry": {
"yes_no": 0.0537,
"rule": "V < 0.6 * avg(V, 20)",
"basis": "rule"
},
"calm": {
"yes_no": 0.703
}
},
"context": {
"symbol": "PEP",
"as_of": "2026-10-30"
}
}Market maker · example 20
Moving-average events across MSFT, WMT, HD, MCD
Flag names whose 50-day and 200-day averages crossed, since crosses tend to bring headline flow.
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"MSFT"} then WMT, HD, MCD, one request each. The server fills in the latest completed session.
Questions
golden | English → rule | Did a golden cross happen today? |
death | English → rule | Did a death cross happen today? |
x50 | rule | crossup(C, sma(C, 50))Close crossed above the 50-day today |
xdn50 | rule | crossdown(C, sma(C, 50))Close crossed below the 50-day today |
Answers
| Symbol | goldenrule | deathrule | x50rule | xdn50rule |
|---|---|---|---|---|
MSFT | 0.0638 | 0.0631 | 0.05 | 0.05 |
WMT | 0.0537 | 0.0537 | 0.05 | 0.05 |
HD | 0.0537 | 0.0537 | 0.05 | 0.05 |
MCD | 0.0537 | 0.0537 | 0.05 | 0.05 |
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: Did a golden cross happen today: true for none of 4. Did a death cross happen today: true for none of 4. Close crossed above the 50-day today: true for none of 4. Close crossed below the 50-day today: true for none of 4.
Cross days bring retail and systematic flow; the desk expects higher volume and adjusts size.
Request JSON (MSFT; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "MSFT"
},
"questions": {
"golden": {
"type": "yes_no",
"instructions": "Did a golden cross happen today?"
},
"death": {
"type": "yes_no",
"instructions": "Did a death cross happen today?"
},
"x50": {
"type": "yes_no",
"ask": "crossup(C, sma(C, 50))"
},
"xdn50": {
"type": "yes_no",
"ask": "crossdown(C, sma(C, 50))"
}
}
}Response JSON (MSFT, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"golden": {
"yes_no": 0.0638,
"rule": "(sma(C, 50) > sma(C, 200)) and (ref(sma(C, 50), -1) <= ref(sma(C, 200), -1))",
"basis": "pattern"
},
"death": {
"yes_no": 0.0631,
"rule": "(sma(C, 50) < sma(C, 200)) and (ref(sma(C, 50), -1) >= ref(sma(C, 200), -1))",
"basis": "pattern"
},
"x50": {
"yes_no": 0.05,
"rule": "crossup(C, sma(C, 50))",
"basis": "rule"
},
"xdn50": {
"yes_no": 0.05,
"rule": "crossdown(C, sma(C, 50))",
"basis": "rule"
}
},
"context": {
"symbol": "MSFT",
"as_of": "2026-10-30"
}
}Information, not investment advice. Rules answer from the latest completed daily session; forecasts are probabilities. Actions ran as dry runs: nothing was sent. More in Sell side: Equity research analyst, Sell-side sales trader, Execution trader / desk, Prop trading firm, Compliance officer.