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.
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.
- StateSPY
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"SPY"} The server fills in the latest completed session.
Questions
hv_low | English → rule | Is 20-day historical volatility below 20%? |
atr_low | English → rule | Is the 14-day ATR less than 2% of the price? |
calm | forecast | Will volatility calm down over the next 5 days? Volatility calming over 5 days |
vol_up | forecast | Will volatility be higher over the next month? Higher volatility next month |
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 |
|---|---|---|
hv_lowIs 20-day historical volatility below 20% compiled to std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2 | 0.9463 | true |
atr_lowIs the 14-day ATR less than 2% of the price compiled to atr(14) / C < 0.02 | 0.9463 | true |
calmVolatility calming over 5 days | 0.452 | 45% · close to even |
vol_upHigher volatility next month | 0.69 | 69% · likely |
big5A big move either way in 5 days | 0.425 | 43% · 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"
}
}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.
- StateQQQ
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"QQQ"} The server fills in the latest completed session.
Questions
tight | English → rule | Has the stock traded in a range of less than 5% over the last 10 sessions? |
no_trend | rule | adx(14) < 20ADX under 20 (no trend) |
mid | rule | between((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 |
move2 | forecast | Will the stock move more than 2% in either direction in 5 trading days? A 2%+ move either way in 5 days |
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 |
|---|---|---|
tightHas 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.1879 | false |
no_trendADX under 20 (no trend) | 0.0933 | false |
midPrice in the middle of its Bollinger Bands | 0.05 | false |
move2A 2%+ move either way in 5 days | 0.36 | 36% · unlikely |
big5A big move either way in 5 days | 0.355 | 36% · unlikely |
Actions
Rules on the answers decide what to send.
tight >= 0.6 and no_trend >= 0.6 and move2 < 0.4→Slackoptions-deskelse→Slackoptions-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."
}
}
]
}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.
- StateNVDA
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"NVDA"} The server fills in the latest completed session.
Questions
soon | English → rule | Is earnings in the next 14 days? |
big | rule | abs(last_earnings_move) > 5Last earnings move bigger than 5% |
gap | English → rule | Did the stock gap up after its last earnings? |
amc | English → rule | Does the stock report after the close next time? |
big5 | forecast | Will there be a big move in either direction in the next 5 days? A big move either way in 5 days |
hv30 | forecast | Will annualized volatility over the next 21 sessions exceed 30%? Next-month volatility above 30% |
Answers
| Question | Answer | Reading |
|---|---|---|
soonIs earnings in the next 14 days compiled to days_to_earnings <= 14 | 0.1033 | false |
bigLast earnings move bigger than 5% | 0.9463 | true |
gapDid the stock gap up after its last earnings compiled to last_earnings_gap > 0 | 0.9463 | true |
amcDoes the stock report after the close next time compiled to next_report_amc > 0.5 | 0.8591 | true |
big5A big move either way in 5 days | 0.318 | 32% · unlikely |
hv30Next-month volatility above 30% | 0.46 | 46% · 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.
- StateAAPL
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"AAPL"} The server fills in the latest completed session.
Questions
ext | English → rule | Is price extended more than 2 ATR above its 20-day average? |
rsi_ob | rule | rsi(C, 14) > 70RSI above 70 |
bb_up | rule | C > bbupper(C, 20, 2)Closed above the upper Bollinger band |
hist_down | rule | macdhist(C) < ref(macdhist(C), -1)MACD histogram falling |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
extIs price extended more than 2 ATR above its 20-day average compiled to C - sma(C, 20) > 2 * atr(14) | 0.114 | false |
rsi_obRSI above 70 | 0.0657 | false |
bb_upClosed above the upper Bollinger band | 0.2547 | false |
hist_downMACD histogram falling | 0.8034 | true |
rally5A 5% rally within a month | 0.446 | 45% · 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-deskelse→Slackoptions-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."
}
}
]
}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.
- StateKO
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"KO"} The server fills in the latest completed session.
Questions
near_sup | English → rule | Is the stock within 2% above its last swing low (support)? |
trend | English → rule | Is the stock above its 200-day moving average? |
pays | rule | pays_dividend > 0.5Pays a dividend |
no_cut | rule | cut_last < 0.5Did not cut its last dividend |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
near_supIs the stock within 2% above its last swing low (support) compiled to (C >= swinglow(5, 1)) and (C <= swinglow(5, 1) * 1.02) | 0.059 | false |
trendIs the stock above its 200-day moving average compiled to C > sma(C, 200) | 0.9463 | true |
paysPays a dividend | 0.8591 | true |
no_cutDid not cut its last dividend | 0.8591 | true |
drop5A 5% drawdown within a month | 0.361 | 36% · 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"
}
}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.
- StateTSLA
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"TSLA"} The server fills in the latest completed session.
Questions
squeeze | rule | (bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06Bollinger bands narrower than 6% of price |
comp | rule | std(C, 10) < 0.5 * std(C, 50)Swings less than half their 50-day size |
bbw | English → rule | Is Bollinger Band width at its lowest in 120 sessions? |
vol_rise | forecast | Will volatility rise over the next 5 days? Volatility rising over 5 days |
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 |
|---|---|---|
squeezeBollinger bands narrower than 6% of price | 0.1208 | false |
compSwings less than half their 50-day size | 0.1204 | false |
bbwIs Bollinger Band width at its lowest in 120 sessions compiled to ((bbupper(C, 20) - bblower(C, 20)) / bbmid(C, 20)) <= ref(min(((bbupper(C, 20) - bblower(C, 20)) / bbmid(C, 20)), 119), -1) | 0.1888 | false |
vol_riseVolatility rising over 5 days | 0.38 | 38% · unlikely |
big5A big move either way in 5 days | 0.248 | 25% · unlikely |
Actions
Rules on the answers decide what to send.
squeeze >= 0.6 or bbw >= 0.6→Webhookoptions-alertsWhat 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"
}
]
}Options trader · example 7
Realized volatility term structure on AMD
Compare short and long realized volatility, written out with std, log and sqrt.
- StateAMD
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"AMD"} The server fills in the latest completed session.
Questions
hv20 | rule | std(log(C / C[-1]), 20) * sqrt(252) > 0.420-day realized volatility above 40% |
hv5_gt | English → rule | Is 5-day volatility higher than 20-day volatility? |
hv_rank | rule | percentrank(std(log(C / C[-1]), 20), 252) > 70Realized volatility in the top 30% of its year |
hv30 | forecast | Will annualized volatility over the next 21 sessions exceed 30%? Next-month volatility above 30% |
vol_up | forecast | Will volatility be higher over the next month? Higher volatility next month |
Answers
| Question | Answer | Reading |
|---|---|---|
hv2020-day realized volatility above 40% | 0.9363 | true |
hv5_gtIs 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.9281 | true |
hv_rankRealized volatility in the top 30% of its year | 0.2344 | false |
hv30Next-month volatility above 30% | 0.501 | 50% · close to even |
vol_upHigher volatility next month | 0.394 | 39% · 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"
}
}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.
- ScheduleMon at 09:00 ET
- State5 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"SPY"} then QQQ, IWM, TLT, GLD, one request each. The server fills in the latest completed session.
Questions
move2 | forecast | Will the stock move more than 2% in either direction in 5 trading days? A 2%+ move either way in 5 days |
big5 | forecast | Will there be a big move in either direction in the next 5 days? A big move either way in 5 days |
atr | rule | atr_pct(14) > 1.5ATR above 1.5% of price |
calm | forecast | Will volatility calm down over the next 5 days? Volatility calming over 5 days |
Answers
| Symbol | move2forecast | big5forecast | atrrule | calmforecast | Fired |
|---|---|---|---|---|---|
SPY | 0.394 | 0.425 | 0.0537 | 0.452 | none |
QQQ | 0.36 | 0.355 | 0.9104 | 0.563 | none |
IWM | 0.322 | 0.342 | 0.0909 | 0.522 | none |
TLT | 0.35 | 0.371 | 0.0537 | 0.596 | none |
GLD | 0.389 | 0.427 | 0.9152 | 0.482 | 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.
move2 >= 0.45→Slackoptions-deskWhat 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"
}
]
}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.
- StatePG
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"PG"} The server fills in the latest completed session.
Questions
ex_soon | rule | days_to_ex_div <= 30Goes ex-dividend within 30 days |
pays | English → rule | Does the stock pay a dividend? |
near_high | rule | C >= 0.98 * max(H, 252)Within 2% of the 52-week high |
ex_recent | English → rule | Did the stock go ex-dividend in the last 30 days? |
Answers
| Question | Answer | Reading |
|---|---|---|
ex_soonGoes ex-dividend within 30 days | 0.0537 | false |
paysDoes the stock pay a dividend compiled to pays_dividend > 0.5 | 0.8591 | true |
near_highWithin 2% of the 52-week high | 0.4029 | on the line (false) |
ex_recentDid the stock go ex-dividend in the last 30 days compiled to days_since_ex_div <= 30 | 0.9463 | true |
Actions
Rules on the answers decide what to send.
ex_soon >= 0.6→EmailmeWhat 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"
}
]
}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.
- StateSPY
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"SPY"} The server fills in the latest completed session.
Questions
near200 | rule | abs(C / sma(C, 200) - 1) < 0.03Within 3% of the 200-day |
atr_exp | rule | atr(14) > 1.2 * ref(atr(14), -10)ATR up 20% in two weeks |
vol5 | English → rule | Is 5-day volatility higher than 20-day volatility? |
drop10 | forecast | Will it drop at least 10% at some point in the next month? A 10% drawdown within a month |
vol_up | forecast | Will volatility be higher over the next month? Higher volatility next month |
Answers
| Question | Answer | Reading |
|---|---|---|
near200Within 3% of the 200-day | 0.2187 | false |
atr_expATR up 20% in two weeks | 0.2117 | false |
vol5Is 5-day volatility higher than 20-day volatility compiled to std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19) | 0.8872 | true |
drop10A 10% drawdown within a month | 0.205 | 21% · unlikely |
vol_upHigher volatility next month | 0.69 | 69% · 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"
}
}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.