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 · Individuals

Options trader: 20 ways to use Ora

Picks strategies by volatility regime, expected range and the event calendar. Each example is a complete, runnable request with the real answers it returned (30 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 (48)

offset 7atr 6std 6ref 6log 5sqrt 5abs 5sma 5bbupper 3max 3bblower 2min 2last_earnings_move 2pays_dividend 2adx 1between 1days_to_earnings 1last_earnings_gap 1next_report_amc 1macdhist 1rsi 1cut_last 1swinglow 1bbmid 1percentrank 1atr_pct 1days_since_ex_div 1days_to_ex_div 1hanging_man 1harami_bear 1highest 1inverted_hammer 1shooting_star 1lowest 1tr 1beats_last4 1ema 1eps_growth_yoy 1avg 1years_of_growth 1days_since_split 1days_to_split 1last_split_ratio 1splits_5y 1barssince 1crossup 1beat_eps_last 1days_since_earnings 1

Examples 1–10 of 20 · page 1 of 2

Options trader · example 1

Sell premium on SPY? Volatility regime check

Short premium works when realized volatility is calm and likely to stay calm; check both before selling.

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

hv_lowEnglish → ruleIs 20-day historical volatility below 20%?
atr_lowEnglish → ruleIs the 14-day ATR less than 2% of the price?
calmforecastWill volatility calm down over the next 5 days?
Volatility calming over 5 days
vol_upforecastWill volatility be higher over the next month?
Higher volatility next month
big5forecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days

Answers

QuestionAnswerReading
hv_low
Is 20-day historical volatility below 20%
compiled to std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2
0.9463true
atr_low
Is the 14-day ATR less than 2% of the price
compiled to atr(14) / C < 0.02
0.9463true
calm
Volatility calming over 5 days
0.45245% · close to even
vol_up
Higher volatility next month
0.6969% · likely
big5
A big move either way in 5 days
0.42543% · close to even

What it means

For SPY on the session of 2026-10-30: True now: Is 20-day historical volatility below 20%; Is the 14-day ATR less than 2% of the price. Forecasts: Volatility calming over 5 days 45%; Higher volatility next month 69%; A big move either way in 5 days 43%.

Calm realized volatility and low odds of a big move favor selling premium; rising volatility odds favor owning it instead.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "hv_low": {
      "type": "yes_no",
      "instructions": "Is 20-day historical volatility below 20%?"
    },
    "atr_low": {
      "type": "yes_no",
      "instructions": "Is the 14-day ATR less than 2% of the price?"
    },
    "calm": {
      "type": "yes_no",
      "instructions": "Will volatility calm down over the next 5 days?"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will volatility be higher over the next month?"
    },
    "big5": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  }
}
Response JSON (SPY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "hv_low": {
      "yes_no": 0.9463,
      "rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2",
      "basis": "pattern"
    },
    "atr_low": {
      "yes_no": 0.9463,
      "rule": "atr(14) / C < 0.02",
      "basis": "pattern"
    },
    "calm": {
      "yes_no": 0.452
    },
    "vol_up": {
      "yes_no": 0.69
    },
    "big5": {
      "yes_no": 0.425
    }
  },
  "context": {
    "symbol": "SPY",
    "as_of": "2026-10-30"
  }
}

atr log offset sqrt std

Options trader · example 2

QQQ iron condor: is the stock range-bound

A condor needs a range: tight 10-day range, weak ADX, price mid-band.

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

State

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

Questions

tightEnglish → ruleHas the stock traded in a range of less than 5% over the last 10 sessions?
no_trendruleadx(14) < 20
ADX under 20 (no trend)
midrulebetween((C - bblower(C, 20, 2)) / (bbupper(C, 20, 2) - bblower(C, 20, 2)), 0.3, 0.7)
Price in the middle of its Bollinger Bands
move2forecastWill the stock move more than 2% in either direction in 5 trading days?
A 2%+ move either way in 5 days
big5forecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days

Answers

QuestionAnswerReading
tight
Has the stock traded in a range of less than 5% over the last 10 sessions
compiled to max(H, 10) / min(L, 10) - 1 < 0.05
0.1879false
no_trend
ADX under 20 (no trend)
0.0933false
mid
Price in the middle of its Bollinger Bands
0.05false
move2
A 2%+ move either way in 5 days
0.3636% · unlikely
big5
A big move either way in 5 days
0.35536% · unlikely

Actions

Rules on the answers decide what to send.

tight >= 0.6 and no_trend >= 0.6 and move2 < 0.4→Slackoptions-desk
else→Slackoptions-desk
What each action would send 1 of 2 fired · dry run, nothing sent
condorrule false: skipped
no_condorwould send (dry run)Slack → options-desk
{
  "text": "QQQ (2026-10-30): not range-bound enough for a condor."
}

What it means

For QQQ on the session of 2026-10-30: Not true: Has the stock traded in a range of less than 5% over the last 10 sessions; ADX under 20 (no trend); Price in the middle of its Bollinger Bands. Forecasts: A 2%+ move either way in 5 days 36%; A big move either way in 5 days 36%. Fired: no_condor (Slack → options-desk).

Range rules true and low odds of a 2% move is a condor setup; a trend or high move odds means skip.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "QQQ"
  },
  "questions": {
    "tight": {
      "type": "yes_no",
      "instructions": "Has the stock traded in a range of less than 5% over the last 10 sessions?"
    },
    "no_trend": {
      "type": "yes_no",
      "ask": "adx(14) < 20"
    },
    "mid": {
      "type": "yes_no",
      "ask": "between((C - bblower(C, 20, 2)) / (bbupper(C, 20, 2) - bblower(C, 20, 2)), 0.3, 0.7)"
    },
    "move2": {
      "type": "yes_no",
      "instructions": "Will the stock move more than 2% in either direction in 5 trading days?"
    },
    "big5": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  },
  "actions": [
    {
      "id": "condor",
      "when": "tight >= 0.6 and no_trend >= 0.6 and move2 < 0.4",
      "do": "slack",
      "connection": "options-desk",
      "message": "{{symbol}} ({{as_of}}): range-bound (tight {{tight|pct}}, ADX under 20 {{no_trend|pct}}); 2% move odds {{move2|pct}}. Condor candidate."
    },
    {
      "id": "no_condor",
      "when": "else",
      "do": "slack",
      "connection": "options-desk",
      "message": "{{symbol}} ({{as_of}}): not range-bound enough for a condor."
    }
  ],
  "dry_run": true
}
Response JSON (QQQ, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "tight": {
      "yes_no": 0.1879,
      "rule": "max(H, 10) / min(L, 10) - 1 < 0.05",
      "basis": "pattern"
    },
    "no_trend": {
      "yes_no": 0.0933,
      "rule": "adx(14) < 20",
      "basis": "rule"
    },
    "mid": {
      "yes_no": 0.05,
      "rule": "between((C - bblower(C, 20, 2)) / (bbupper(C, 20, 2) - bblower(C, 20, 2)), 0.3, 0.7)",
      "basis": "rule"
    },
    "move2": {
      "yes_no": 0.36
    },
    "big5": {
      "yes_no": 0.355
    }
  },
  "context": {
    "symbol": "QQQ",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "condor",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "no_condor",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "options-desk",
      "preview": {
        "text": "QQQ (2026-10-30): not range-bound enough for a condor."
      }
    }
  ]
}

adx bblower bbupper between max min

Options trader · example 3

NVDA earnings straddle: does it move enough

Before buying a straddle into a report, check the date, the last reaction and the big-move odds.

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

State

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

Questions

soonEnglish → ruleIs earnings in the next 14 days?
bigruleabs(last_earnings_move) > 5
Last earnings move bigger than 5%
gapEnglish → ruleDid the stock gap up after its last earnings?
amcEnglish → ruleDoes the stock report after the close next time?
big5forecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days
hv30forecastWill annualized volatility over the next 21 sessions exceed 30%?
Next-month volatility above 30%

Answers

QuestionAnswerReading
soon
Is earnings in the next 14 days
compiled to days_to_earnings <= 14
0.1033false
big
Last earnings move bigger than 5%
0.9463true
gap
Did the stock gap up after its last earnings
compiled to last_earnings_gap > 0
0.9463true
amc
Does the stock report after the close next time
compiled to next_report_amc > 0.5
0.8591true
big5
A big move either way in 5 days
0.31832% · unlikely
hv30
Next-month volatility above 30%
0.4646% · close to even

What it means

For NVDA on the session of 2026-10-30: True now: Last earnings move bigger than 5%; Did the stock gap up after its last earnings; Does the stock report after the close next time. Not true: Is earnings in the next 14 days. Forecasts: A big move either way in 5 days 32%; Next-month volatility above 30% 46%.

A report inside two weeks with a history of large reactions supports owning the straddle; small past reactions argue for selling it.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "questions": {
    "soon": {
      "type": "yes_no",
      "instructions": "Is earnings in the next 14 days?"
    },
    "big": {
      "type": "yes_no",
      "ask": "abs(last_earnings_move) > 5"
    },
    "gap": {
      "type": "yes_no",
      "instructions": "Did the stock gap up after its last earnings?"
    },
    "amc": {
      "type": "yes_no",
      "instructions": "Does the stock report after the close next time?"
    },
    "big5": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    },
    "hv30": {
      "type": "yes_no",
      "instructions": "Will annualized volatility over the next 21 sessions exceed 30%?"
    }
  }
}
Response JSON (NVDA, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "soon": {
      "yes_no": 0.1033,
      "rule": "days_to_earnings <= 14",
      "basis": "pattern"
    },
    "big": {
      "yes_no": 0.9463,
      "rule": "abs(last_earnings_move) > 5",
      "basis": "rule"
    },
    "gap": {
      "yes_no": 0.9463,
      "rule": "last_earnings_gap > 0",
      "basis": "pattern"
    },
    "amc": {
      "yes_no": 0.8591,
      "rule": "next_report_amc > 0.5",
      "basis": "pattern"
    },
    "big5": {
      "yes_no": 0.318
    },
    "hv30": {
      "yes_no": 0.46
    }
  },
  "context": {
    "symbol": "NVDA",
    "as_of": "2026-10-30"
  }
}

abs days_to_earnings last_earnings_gap last_earnings_move next_report_amc

Options trader · example 4

Covered calls on AAPL: extended enough to sell upside

Sell calls when the stock is stretched and momentum is fading, not when it is breaking out.

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

extEnglish → ruleIs price extended more than 2 ATR above its 20-day average?
rsi_obrulersi(C, 14) > 70
RSI above 70
bb_upruleC > bbupper(C, 20, 2)
Closed above the upper Bollinger band
hist_downrulemacdhist(C) < ref(macdhist(C), -1)
MACD histogram falling
rally5forecastWill it rally at least 5% at some point in the next month?
A 5% rally 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.114false
rsi_ob
RSI above 70
0.0657false
bb_up
Closed above the upper Bollinger band
0.2547false
hist_down
MACD histogram falling
0.8034true
rally5
A 5% rally within a month
0.44645% · close to even

Actions

Rules on the answers decide what to send.

ext >= 0.6 or (rsi_ob >= 0.6 and hist_down >= 0.6)→Slackoptions-desk
else→Slackoptions-desk
What each action would send 1 of 2 fired · dry run, nothing sent
sell_callsrule false: skipped
hold_shareswould send (dry run)Slack → options-desk
{
  "text": "AAPL (2026-10-30): not stretched; no covered call today."
}

What it means

For AAPL on the session of 2026-10-30: True now: MACD histogram falling. Not true: Is price extended more than 2 ATR above its 20-day average; RSI above 70; Closed above the upper Bollinger band. Forecasts: A 5% rally within a month 45%. Fired: hold_shares (Slack → options-desk).

When the stock is stretched and the MACD histogram is falling, the call premium is worth more than the capped upside.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AAPL"
  },
  "questions": {
    "ext": {
      "type": "yes_no",
      "instructions": "Is price extended more than 2 ATR above its 20-day average?"
    },
    "rsi_ob": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 70"
    },
    "bb_up": {
      "type": "yes_no",
      "ask": "C > bbupper(C, 20, 2)"
    },
    "hist_down": {
      "type": "yes_no",
      "ask": "macdhist(C) < ref(macdhist(C), -1)"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "sell_calls",
      "when": "ext >= 0.6 or (rsi_ob >= 0.6 and hist_down >= 0.6)",
      "do": "slack",
      "connection": "options-desk",
      "message": "{{symbol}} ({{as_of}}): stretched (2 ATR {{ext|pct}}, RSI 70 {{rsi_ob|pct}}). Covered call window. 5% rally odds {{rally5|pct}}."
    },
    {
      "id": "hold_shares",
      "when": "else",
      "do": "slack",
      "connection": "options-desk",
      "message": "{{symbol}} ({{as_of}}): not stretched; no covered call today."
    }
  ],
  "dry_run": true
}
Response JSON (AAPL, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "ext": {
      "yes_no": 0.114,
      "rule": "C - sma(C, 20) > 2 * atr(14)",
      "basis": "pattern"
    },
    "rsi_ob": {
      "yes_no": 0.0657,
      "rule": "rsi(C, 14) > 70",
      "basis": "rule"
    },
    "bb_up": {
      "yes_no": 0.2547,
      "rule": "C > bbupper(C, 20, 2)",
      "basis": "rule"
    },
    "hist_down": {
      "yes_no": 0.8034,
      "rule": "macdhist(C) < ref(macdhist(C), -1)",
      "basis": "rule"
    },
    "rally5": {
      "yes_no": 0.446
    }
  },
  "context": {
    "symbol": "AAPL",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "sell_calls",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "hold_shares",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "options-desk",
      "preview": {
        "text": "AAPL (2026-10-30): not stretched; no covered call today."
      }
    }
  ]
}

atr bbupper macdhist ref rsi sma

Options trader · example 5

Cash-secured put on KO near support

Sell a put where you would happily own the shares: near support, in a long uptrend, dividend intact.

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

State

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

Questions

near_supEnglish → ruleIs the stock within 2% above its last swing low (support)?
trendEnglish → ruleIs the stock above its 200-day moving average?
paysrulepays_dividend > 0.5
Pays a dividend
no_cutrulecut_last < 0.5
Did not cut its last dividend
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

QuestionAnswerReading
near_sup
Is the stock within 2% above its last swing low (support)
compiled to (C >= swinglow(5, 1)) and (C <= swinglow(5, 1) * 1.02)
0.059false
trend
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.9463true
pays
Pays a dividend
0.8591true
no_cut
Did not cut its last dividend
0.8591true
drop5
A 5% drawdown within a month
0.36136% · unlikely

What it means

For KO on the session of 2026-10-30: True now: Is the stock above its 200-day moving average; Pays a dividend; Did not cut its last dividend. Not true: Is the stock within 2% above its last swing low (support). Forecasts: A 5% drawdown within a month 36%.

Near support in a dividend payer with a long uptrend is the place to sell puts; high drawdown odds mean a lower strike.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "KO"
  },
  "questions": {
    "near_sup": {
      "type": "yes_no",
      "instructions": "Is the stock within 2% above its last swing low (support)?"
    },
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "pays": {
      "type": "yes_no",
      "ask": "pays_dividend > 0.5"
    },
    "no_cut": {
      "type": "yes_no",
      "ask": "cut_last < 0.5"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}
Response JSON (KO, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "near_sup": {
      "yes_no": 0.059,
      "rule": "(C >= swinglow(5, 1)) and (C <= swinglow(5, 1) * 1.02)",
      "basis": "pattern"
    },
    "trend": {
      "yes_no": 0.9463,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "pays": {
      "yes_no": 0.8591,
      "rule": "pays_dividend > 0.5",
      "basis": "rule"
    },
    "no_cut": {
      "yes_no": 0.8591,
      "rule": "cut_last < 0.5",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.361
    }
  },
  "context": {
    "symbol": "KO",
    "as_of": "2026-10-30"
  }
}

cut_last pays_dividend sma swinglow

Options trader · example 6

Long gamma when volatility is coiled: TSLA

A Bollinger squeeze and falling 5-day volatility often come before an expansion that favors owned options.

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

squeezerule(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06
Bollinger bands narrower than 6% of price
comprulestd(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?
vol_riseforecastWill volatility rise over the next 5 days?
Volatility rising over 5 days
big5forecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days

Answers

QuestionAnswerReading
squeeze
Bollinger bands narrower than 6% of price
0.1208false
comp
Swings less than half their 50-day size
0.1204false
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.1888false
vol_rise
Volatility rising over 5 days
0.3838% · unlikely
big5
A big move either way in 5 days
0.24825% · unlikely

Actions

Rules on the answers decide what to send.

squeeze >= 0.6 or bbw >= 0.6→Webhookoptions-alerts
What each action would send 0 of 1 fired · dry run, nothing sent
alert_apprule false: skipped

What it means

For TSLA on the session of 2026-10-30: Not true: Bollinger bands narrower than 6% of price; Swings less than half their 50-day size; Is Bollinger Band width at its lowest in 120 sessions. Forecasts: Volatility rising over 5 days 38%; A big move either way in 5 days 25%. No action fired: every rule was false.

Compression plus rising-volatility odds is a reason to buy options, not sell them.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA"
  },
  "questions": {
    "squeeze": {
      "type": "yes_no",
      "ask": "(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06"
    },
    "comp": {
      "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?"
    },
    "vol_rise": {
      "type": "yes_no",
      "instructions": "Will volatility rise over the next 5 days?"
    },
    "big5": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  },
  "actions": [
    {
      "id": "alert_app",
      "when": "squeeze >= 0.6 or bbw >= 0.6",
      "do": "webhook",
      "connection": "options-alerts",
      "body": {
        "symbol": "{{symbol}}",
        "signal": "vol_compression",
        "p_squeeze": "{{squeeze}}",
        "p_bbw_low": "{{bbw}}",
        "p_vol_rise_5d": "{{vol_rise}}",
        "as_of": "{{as_of}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (TSLA, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "squeeze": {
      "yes_no": 0.1208,
      "rule": "(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06",
      "basis": "rule"
    },
    "comp": {
      "yes_no": 0.1204,
      "rule": "std(C, 10) < 0.5 * std(C, 50)",
      "basis": "rule"
    },
    "bbw": {
      "yes_no": 0.1888,
      "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"
    },
    "vol_rise": {
      "yes_no": 0.38
    },
    "big5": {
      "yes_no": 0.248
    }
  },
  "context": {
    "symbol": "TSLA",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "alert_app",
      "fired": false,
      "status": "skipped"
    }
  ]
}

bblower bbmid bbupper min ref std

Options trader · example 7

Realized volatility term structure on AMD

Compare short and long realized volatility, written out with std, log and sqrt.

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

State

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

Questions

hv20rulestd(log(C / C[-1]), 20) * sqrt(252) > 0.4
20-day realized volatility above 40%
hv5_gtEnglish → ruleIs 5-day volatility higher than 20-day volatility?
hv_rankrulepercentrank(std(log(C / C[-1]), 20), 252) > 70
Realized volatility in the top 30% of its year
hv30forecastWill annualized volatility over the next 21 sessions exceed 30%?
Next-month volatility above 30%
vol_upforecastWill volatility be higher over the next month?
Higher volatility next month

Answers

QuestionAnswerReading
hv20
20-day realized volatility above 40%
0.9363true
hv5_gt
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.9281true
hv_rank
Realized volatility in the top 30% of its year
0.2344false
hv30
Next-month volatility above 30%
0.50150% · close to even
vol_up
Higher volatility next month
0.39439% · unlikely

What it means

For AMD on the session of 2026-10-30: True now: 20-day realized volatility above 40%; Is 5-day volatility higher than 20-day volatility. Not true: Realized volatility in the top 30% of its year. Forecasts: Next-month volatility above 30% 50%; Higher volatility next month 39%.

High realized volatility in the top of its yearly range is rich premium to sell only if the forecast says it will fall.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AMD"
  },
  "questions": {
    "hv20": {
      "type": "yes_no",
      "ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4"
    },
    "hv5_gt": {
      "type": "yes_no",
      "instructions": "Is 5-day volatility higher than 20-day volatility?"
    },
    "hv_rank": {
      "type": "yes_no",
      "ask": "percentrank(std(log(C / C[-1]), 20), 252) > 70"
    },
    "hv30": {
      "type": "yes_no",
      "instructions": "Will annualized volatility over the next 21 sessions exceed 30%?"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will volatility be higher over the next month?"
    }
  }
}
Response JSON (AMD, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "hv20": {
      "yes_no": 0.9363,
      "rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4",
      "basis": "rule"
    },
    "hv5_gt": {
      "yes_no": 0.9281,
      "rule": "std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19)",
      "basis": "pattern"
    },
    "hv_rank": {
      "yes_no": 0.2344,
      "rule": "percentrank(std(log(C / C[-1]), 20), 252) > 70",
      "basis": "rule"
    },
    "hv30": {
      "yes_no": 0.501
    },
    "vol_up": {
      "yes_no": 0.394
    }
  },
  "context": {
    "symbol": "AMD",
    "as_of": "2026-10-30"
  }
}

log offset percentrank sqrt std

Options trader · example 8

Weekly options scan: big-move odds for SPY, QQQ, IWM, TLT, GLD

Every Monday before the open, which underlyings are likely to move 2% this week.

ora-fin-0.1.15 symbols, one request each4 questions1 actionworkflow · Mon at 09:00 ET
  1. ScheduleMon at 09:00 ET
  2. State5 symbols
  3. Questions4 asked
  4. Answersreal, captured
  5. Actions1 rule · dry run

State

{"symbol":"SPY"} then QQQ, IWM, TLT, GLD, one request each. The server fills in the latest completed session.

Questions

move2forecastWill the stock move more than 2% in either direction in 5 trading days?
A 2%+ move either way in 5 days
big5forecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days
atrruleatr_pct(14) > 1.5
ATR above 1.5% of price
calmforecastWill volatility calm down over the next 5 days?
Volatility calming over 5 days

Answers

Symbolmove2forecastbig5forecastatrrulecalmforecastFired
SPY0.3940.4250.05370.452none
QQQ0.360.3550.91040.563none
IWM0.3220.3420.09090.522none
TLT0.350.3710.05370.596none
GLD0.3890.4270.91520.482none

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.

move2 >= 0.45→Slackoptions-desk
SPY 0 of 1 fired · dry run, nothing sent
QQQ 0 of 1 fired · dry run, nothing sent
IWM 0 of 1 fired · dry run, nothing sent
TLT 0 of 1 fired · dry run, nothing sent
GLD 0 of 1 fired · dry run, nothing sent

What it means

Session of 2026-10-30, 5 symbols: ATR above 1.5% of price: true for QQQ, GLD of 5. Highest odds for “A 2%+ move either way in 5 days”: SPY at 39%. weekly fired for none.

High move odds favor long weeklies, low odds favor short premium; the trader picks the strategy per symbol.

As a scheduled workflow (Mon at 09:00 ET)

Create it under Workflows in the console: it runs these questions for every symbol on the schedule and fires the actions per symbol. The answers above are what one run returned.

{
  "name": "Weekly options scan: big-move odds for SPY, QQQ, IWM, TLT, GLD",
  "symbols": "SPY QQQ IWM TLT GLD",
  "days": [
    1
  ],
  "at_time": "09:00",
  "model": "ora-fin-0.1.1",
  "questions": {
    "move2": {
      "type": "yes_no",
      "instructions": "Will the stock move more than 2% in either direction in 5 trading days?"
    },
    "big5": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    },
    "atr": {
      "type": "yes_no",
      "ask": "atr_pct(14) > 1.5"
    },
    "calm": {
      "type": "yes_no",
      "instructions": "Will volatility calm down over the next 5 days?"
    }
  },
  "actions": [
    {
      "id": "weekly",
      "when": "move2 >= 0.45",
      "do": "slack",
      "connection": "options-desk",
      "message": "{{symbol}} ({{as_of}}): 2% weekly move odds {{move2|pct}}; big move {{big5|pct}}. Lean long gamma."
    }
  ]
}
Request JSON (SPY; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "move2": {
      "type": "yes_no",
      "instructions": "Will the stock move more than 2% in either direction in 5 trading days?"
    },
    "big5": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    },
    "atr": {
      "type": "yes_no",
      "ask": "atr_pct(14) > 1.5"
    },
    "calm": {
      "type": "yes_no",
      "instructions": "Will volatility calm down over the next 5 days?"
    }
  },
  "actions": [
    {
      "id": "weekly",
      "when": "move2 >= 0.45",
      "do": "slack",
      "connection": "options-desk",
      "message": "{{symbol}} ({{as_of}}): 2% weekly move odds {{move2|pct}}; big move {{big5|pct}}. Lean long gamma."
    }
  ],
  "dry_run": true
}
Response JSON (SPY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "move2": {
      "yes_no": 0.394
    },
    "big5": {
      "yes_no": 0.425
    },
    "atr": {
      "yes_no": 0.0537,
      "rule": "atr_pct(14) > 1.5",
      "basis": "rule"
    },
    "calm": {
      "yes_no": 0.452
    }
  },
  "context": {
    "symbol": "SPY",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "weekly",
      "fired": false,
      "status": "skipped"
    }
  ]
}

atr_pct

Options trader · example 9

Early-assignment risk on short calls before ex-dividend: PG

Short calls in the money can be assigned before ex-date; check whether one is close.

ora-fin-0.1.1PG4 questions1 action
  1. StatePG
  2. Questions4 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

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

Questions

ex_soonruledays_to_ex_div <= 30
Goes ex-dividend within 30 days
paysEnglish → ruleDoes the stock pay a dividend?
near_highruleC >= 0.98 * max(H, 252)
Within 2% of the 52-week high
ex_recentEnglish → ruleDid the stock go ex-dividend in the last 30 days?

Answers

QuestionAnswerReading
ex_soon
Goes ex-dividend within 30 days
0.0537false
pays
Does the stock pay a dividend
compiled to pays_dividend > 0.5
0.8591true
near_high
Within 2% of the 52-week high
0.4029on the line (false)
ex_recent
Did the stock go ex-dividend in the last 30 days
compiled to days_since_ex_div <= 30
0.9463true

Actions

Rules on the answers decide what to send.

ex_soon >= 0.6→Emailme
What each action would send 0 of 1 fired · dry run, nothing sent
roll_callsrule false: skipped

What it means

For PG on the session of 2026-10-30: True now: Does the stock pay a dividend; Did the stock go ex-dividend in the last 30 days. Not true: Goes ex-dividend within 30 days. On the line: Within 2% of the 52-week high. No action fired: every rule was false.

If an ex-date is within thirty days and the stock is near its high, the trader rolls short calls before the ex-date.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "PG"
  },
  "questions": {
    "ex_soon": {
      "type": "yes_no",
      "ask": "days_to_ex_div <= 30"
    },
    "pays": {
      "type": "yes_no",
      "instructions": "Does the stock pay a dividend?"
    },
    "near_high": {
      "type": "yes_no",
      "ask": "C >= 0.98 * max(H, 252)"
    },
    "ex_recent": {
      "type": "yes_no",
      "instructions": "Did the stock go ex-dividend in the last 30 days?"
    }
  },
  "actions": [
    {
      "id": "roll_calls",
      "when": "ex_soon >= 0.6",
      "do": "email",
      "connection": "me",
      "subject": "{{symbol}}: ex-dividend soon, check short calls",
      "message": "{{symbol}} ({{as_of}}) has a declared ex-date within 30 days ({{ex_soon|pct}}). Review in-the-money short calls for early assignment."
    }
  ],
  "dry_run": true
}
Response JSON (PG, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "ex_soon": {
      "yes_no": 0.0537,
      "rule": "days_to_ex_div <= 30",
      "basis": "rule"
    },
    "pays": {
      "yes_no": 0.8591,
      "rule": "pays_dividend > 0.5",
      "basis": "pattern"
    },
    "near_high": {
      "yes_no": 0.4029,
      "rule": "C >= 0.98 * max(H, 252)",
      "basis": "rule"
    },
    "ex_recent": {
      "yes_no": 0.9463,
      "rule": "days_since_ex_div <= 30",
      "basis": "pattern"
    }
  },
  "context": {
    "symbol": "PG",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "roll_calls",
      "fired": false,
      "status": "skipped"
    }
  ]
}

days_since_ex_div days_to_ex_div max pays_dividend

Options trader · example 10

Crash-hedge check: is SPY near its 200-day with rising volatility

Buy index puts when trend support is close and volatility is turning up, not after the drop.

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

near200ruleabs(C / sma(C, 200) - 1) < 0.03
Within 3% of the 200-day
atr_expruleatr(14) > 1.2 * ref(atr(14), -10)
ATR up 20% in two weeks
vol5English → ruleIs 5-day volatility higher than 20-day volatility?
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month
vol_upforecastWill volatility be higher over the next month?
Higher volatility next month

Answers

QuestionAnswerReading
near200
Within 3% of the 200-day
0.2187false
atr_exp
ATR up 20% in two weeks
0.2117false
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.8872true
drop10
A 10% drawdown within a month
0.20521% · unlikely
vol_up
Higher volatility next month
0.6969% · likely

What it means

For SPY on the session of 2026-10-30: True now: Is 5-day volatility higher than 20-day volatility. Not true: Within 3% of the 200-day; ATR up 20% in two weeks. Forecasts: A 10% drawdown within a month 21%; Higher volatility next month 69%.

Near the 200-day with expanding ATR, puts are insurance worth buying; far above it, the trader waits.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "near200": {
      "type": "yes_no",
      "ask": "abs(C / sma(C, 200) - 1) < 0.03"
    },
    "atr_exp": {
      "type": "yes_no",
      "ask": "atr(14) > 1.2 * ref(atr(14), -10)"
    },
    "vol5": {
      "type": "yes_no",
      "instructions": "Is 5-day volatility higher than 20-day volatility?"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will volatility be higher over the next month?"
    }
  }
}
Response JSON (SPY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "near200": {
      "yes_no": 0.2187,
      "rule": "abs(C / sma(C, 200) - 1) < 0.03",
      "basis": "rule"
    },
    "atr_exp": {
      "yes_no": 0.2117,
      "rule": "atr(14) > 1.2 * ref(atr(14), -10)",
      "basis": "rule"
    },
    "vol5": {
      "yes_no": 0.8872,
      "rule": "std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19)",
      "basis": "pattern"
    },
    "drop10": {
      "yes_no": 0.205
    },
    "vol_up": {
      "yes_no": 0.69
    }
  },
  "context": {
    "symbol": "SPY",
    "as_of": "2026-10-30"
  }
}

abs atr log offset ref sma 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 Individuals: Retail investor, Active day trader, Swing trader, Dividend investor, Long-term passive investor, Crypto trader, FX trader, Commodities trader, Social trading community, Students and universities.

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