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

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.

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

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

State

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

Questions

ex_soonruledays_to_ex_div <= 30
Goes ex-dividend within 30 days
recent_exruledays_since_ex_div <= 1
Went ex-dividend today or yesterday
paysrulepays_dividend > 0.5
Pays a dividend
quarterlyrulediv_count_ttm >= 4
Pays at least quarterly
next_upEnglish → ruleIs the next declared dividend larger than the last one?

Answers

QuestionAnswerReading
ex_soon
Goes ex-dividend within 30 days
0.0537false
recent_ex
Went ex-dividend today or yesterday
0.0537false
pays
Pays a dividend
0.8591true
quarterly
Pays at least quarterly
0.55on the line (true)
next_up
Is the next declared dividend larger than the last one
compiled to next_div_amount > last_div_amount
0.50not known

Actions

Rules on the answers decide what to send.

recent_ex >= 0.6→Webhookpricing-model
ex_soon >= 0.6→Slackquote-desk
What each action would send 0 of 2 fired · dry run, nothing sent
ex_adjustrule false: skipped
upcomingrule false: skipped

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

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

State

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

Questions

announcedruledays_to_split <= 365
A split is announced
split_3yEnglish → ruleHas the stock split in the past three years?
reverseEnglish → ruleWas the last split a reverse split?
multirulesplits_5y >= 2
Two or more splits in five years

Answers

Symbolannouncedrulesplit_3yrulereverserulemultirule
NVDA0.05370.94630.14090.1409
AAPL0.05370.05370.14090.0683
TSLA0.05370.05370.14090.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"
  }
}

days_since_split days_to_split reverse_split_last splits_5y

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.

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

State

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

Questions

adxruleadx(14) > 25
Trending (ADX above 25)
upruleadx(14) > 20 and diplus(14) > diminus(14)
Trending up (ADX over 20 and +DI over −DI)
dmirulediminus(14) > diplus(14)
-DI above +DI
hh_hlEnglish → ruleIs the stock making higher swing highs and higher swing lows?
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
adx
Trending (ADX above 25)
0.1827false
up
Trending up (ADX over 20 and +DI over −DI)
0.5561on the line (true)
dmi
-DI above +DI
0.4439on the line (false)
hh_hl
Is 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.1895false
up_week
Higher in a week
0.49650% · 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"
  }
}

adx diminus diplus swinghigh swinglow

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.

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

State

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

Questions

prankrulepercentrank(C, 50) < 20
Close in the bottom fifth of the last 50 closes
below_medruleC < median(C, 20)
Close below its 20-day median
zsrulezscore(C, 20) < -2
Two deviations under the 20-day mean
rsi2rulersi(C, 2) < 10
Two-day RSI under 10
up_tomforecastWill the stock be up tomorrow?
Up tomorrow

Answers

QuestionAnswerReading
prank
Close in the bottom fifth of the last 50 closes
0.2762false
below_med
Close below its 20-day median
0.2882false
zs
Two deviations under the 20-day mean
0.0668false
rsi2
Two-day RSI under 10
0.1938false
up_tom
Up tomorrow
0.48649% · 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"
  }
}

median percentrank rsi zscore

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.

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

State

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

Questions

insideruleinside_bar()
inside bar candle: Today's high and low are inside yesterday's (equal counts).
boEnglish → ruleDid the stock break out above yesterday's inside bar?
nr7rule(H - L) < lowest(H - L, 6)
Narrowest range of the last seven sessions (NR7)
marubozurulemarubozu()
marubozu candle: Body at least 90% of the range: almost no wicks.
big5forecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days

Answers

QuestionAnswerReading
inside
inside bar candle: Today's high and low are inside yesterday's (equal counts).
0.0537false
bo
Did 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.0537false
nr7
Narrowest range of the last seven sessions (NR7)
0.0537false
marubozu
marubozu candle: Body at least 90% of the range: almost no wicks.
0.0555false
big5
A big move either way in 5 days
0.27628% · 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"
  }
}

inside_bar lowest marubozu offset

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.

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

State

{"symbol":"HYG"} then JNK, one request each. The server fills in the latest completed session.

Questions

bdruleC < lowest(L, 20)
Closed under the 20-day low
down_volEnglish → ruleDid the stock fall on above-average volume?
below50ruleC < sma(C, 50)
Close below the 50-day average
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symbolbdruledown_volrulebelow50ruledrop5forecastFired
HYG0.08110.68340.80860.009stress
JNK0.08130.53880.82580.011none

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
HYG 1 of 1 fired · dry run, nothing sent
stresswould send (dry run)Slack → quote-desk
{
  "text": "HYG (2026-10-30): credit ETF under pressure (20-day low break 8%, down on volume 68%). Widen and cut size."
}
JNK 0 of 1 fired · dry run, nothing sent

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

avg lowest offset ref sma

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.

ora-fin-0.1.13 symbols, one request each4 questionsworkflow · Mon at 08:45 ET
  1. ScheduleMon at 08:45 ET
  2. State3 symbols
  3. Questions4 asked
  4. Answersreal, captured
  5. Actionsnone

State

{"symbol":"IBIT"} then FBTC, GBTC, one request each. The server fills in the latest completed session.

Questions

atr3ruleatr_pct(14) > 3
A typical day moves more than 3%
gapruleabs(O - C[-1]) > 0.5 * ref(atr(14), -1)
Gap bigger than half an ATR
hvrulestd(log(C / C[-1]), 20) * sqrt(252) > 0.4
Annualized 20-day volatility above 40%
gap_dnforecastWill it gap down tomorrow?
A gap down tomorrow

Answers

Symbolatr3rulegaprulehvrulegap_dnforecast
IBIT0.23650.94440.12390.134
FBTC0.18810.94390.11810.15
GBTC0.17540.94380.12110.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"
  }
}

abs atr atr_pct log offset ref sqrt std

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.

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

State

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

Questions

toprule(C - L) / (H - L) > 0.75
Closed in the top quarter of the day's range
leastruleleast(O, C) - L > 2 * abs(C - O)
Lower wick over twice the body
greatestruleH - greatest(O, C) > 2 * abs(C - O)
Upper wick over twice the body
greenruleC > O
Closed above its open
up_tomforecastWill the stock be up tomorrow?
Up tomorrow

Answers

QuestionAnswerReading
top
Closed in the top quarter of the day's range
0.0753false
least
Lower wick over twice the body
0.0547false
greatest
Upper wick over twice the body
0.0537false
green
Closed above its open
0.0597false
up_tom
Up tomorrow
0.52653% · 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"
  }
}

abs greatest least

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.

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

State

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

Questions

quietrulebarssince(C > highest(C, 20)) > 30
No 20-day breakout for 30 sessions
since_lowrulebarssince(C < lowest(C, 20)) > 10
More than ten sessions since the last 20-day closing low
lowbarsrulelowestbars(L, 20) >= 10
The 20-day low is at least ten sessions old
dryruleV < 0.6 * avg(V, 20)
Volume under 60% of normal
calmforecastWill volatility calm down over the next 5 days?
Volatility calming over 5 days

Answers

QuestionAnswerReading
quiet
No 20-day breakout for 30 sessions
0.1482false
since_low
More than ten sessions since the last 20-day closing low
0.8017true
lowbars
The 20-day low is at least ten sessions old
0.8636true
dry
Volume under 60% of normal
0.0537false
calm
Volatility calming over 5 days
0.70370% · 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"
  }
}

avg barssince highest lowest lowestbars

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.

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

State

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

Questions

goldenEnglish → ruleDid a golden cross happen today?
deathEnglish → ruleDid a death cross happen today?
x50rulecrossup(C, sma(C, 50))
Close crossed above the 50-day today
xdn50rulecrossdown(C, sma(C, 50))
Close crossed below the 50-day today

Answers

Symbolgoldenruledeathrulex50rulexdn50rule
MSFT0.06380.06310.050.05
WMT0.05370.05370.050.05
HD0.05370.05370.050.05
MCD0.05370.05370.050.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"
  }
}

crossdown crossup ref sma

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.

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