Use cases · Individuals
Swing trader: 20 ways to use Ora
Holds for days to weeks: trend, pullback entries, swing structure, stops and risk/reward. Each example is a complete, runnable request with the real answers it returned (35 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 (47)
sma 8swinglow 8swinghigh 6highest 5ref 5atr 4ema 3offset 3min 3days_to_earnings 2adx 2avg 2diminus 2diplus 2rsi 2max 2roc 2linreg 1rma 1wma 1cci 1stochd 1stochk 1willr 1lowest 1bblower 1bbmid 1bbupper 1std 1engulfing_bull 1harami_bull 1piercing_line 1abs 1beat_streak 1last_earnings_move 1next_report_bmo 1mean 1rec 1barssince 1lowestbars 1crossdown 1dark_cloud 1engulfing_bear 1percentrank 1zscore 1cum 1log 1
Examples 1–10 of 20 · page 1 of 2
Swing trader · example 1
AAPL pullback to the 20-day inside an uptrend
The bread-and-butter swing entry: uptrend intact, price pulled back to the 20-day, stop under the swing low.
- StateAAPL
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"AAPL"} The server fills in the latest completed session.
Questions
entry | rule | (C > sma(C, 50)) and (sma(C, 50) > sma(C, 200)) and (L <= sma(C, 20) * 1.01) and (C >= sma(C, 20))Uptrend pullback to the 20-day (entry zone) |
stop | rule | C > swinglow(5) and C - swinglow(5) < 1.5 * atr(14)A stop under the last swing low is within 1.5 ATR |
rr | rule | C > swinglow(5) and C < swinghigh(5) and swinghigh(5) - C >= 2 * (C - swinglow(5))At least 2:1 to the last swing high, stop at the last swing low |
earn_clear | rule | C > sma(C, 50) and days_to_earnings > 5Above the 50-day, no earnings in the next 5 days |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
entryUptrend pullback to the 20-day (entry zone) | 0.6713 | true |
stopA stop under the last swing low is within 1.5 ATR | 0.7569 | true |
rrAt least 2:1 to the last swing high, stop at the last swing low | 0.4055 | on the line (false) |
earn_clearAbove the 50-day, no earnings in the next 5 days | 0.2049 | false |
up_weekHigher in a week | 0.59 | 59% · close to even |
Actions
Rules on the answers decide what to send.
entry >= 0.6 and stop >= 0.6 and earn_clear >= 0.6→Webhookbroker-bridgeelse→Slackswing-desk{
"text": "AAPL (2026-10-30): no full pullback setup (entry 67%, stop 76%, clear of earnings 20%)."
}What it means
For AAPL on the session of 2026-10-30: True now: Uptrend pullback to the 20-day (entry zone); A stop under the last swing low is within 1.5 ATR. Not true: Above the 50-day, no earnings in the next 5 days. On the line: At least 2:1 to the last swing high, stop at the last swing low. Forecasts: Higher in a week 59%. Fired: wait (Slack → swing-desk).
Entry zone plus a close stop plus no earnings in the next days is a full setup; any false check means wait.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AAPL"
},
"questions": {
"entry": {
"type": "yes_no",
"ask": "(C > sma(C, 50)) and (sma(C, 50) > sma(C, 200)) and (L <= sma(C, 20) * 1.01) and (C >= sma(C, 20))"
},
"stop": {
"type": "yes_no",
"ask": "C > swinglow(5) and C - swinglow(5) < 1.5 * atr(14)"
},
"rr": {
"type": "yes_no",
"ask": "C > swinglow(5) and C < swinghigh(5) and swinghigh(5) - C >= 2 * (C - swinglow(5))"
},
"earn_clear": {
"type": "yes_no",
"ask": "C > sma(C, 50) and days_to_earnings > 5"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "stage",
"when": "entry >= 0.6 and stop >= 0.6 and earn_clear >= 0.6",
"do": "webhook",
"connection": "broker-bridge",
"body": {
"symbol": "{{symbol}}",
"side": "buy",
"order": "limit",
"limit_ref": "sma(C, 20)",
"stop_ref": "swinglow(5)",
"p_entry": "{{entry}}",
"p_up_week": "{{up_week}}",
"as_of": "{{as_of}}"
}
},
{
"id": "wait",
"when": "else",
"do": "slack",
"connection": "swing-desk",
"message": "{{symbol}} ({{as_of}}): no full pullback setup (entry {{entry|pct}}, stop {{stop|pct}}, clear of earnings {{earn_clear|pct}})."
}
],
"dry_run": true
}Response JSON (AAPL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"entry": {
"yes_no": 0.6713,
"rule": "(C > sma(C, 50)) and (sma(C, 50) > sma(C, 200)) and (L <= sma(C, 20) * 1.01) and (C >= sma(C, 20))",
"basis": "rule"
},
"stop": {
"yes_no": 0.7569,
"rule": "C > swinglow(5) and C - swinglow(5) < 1.5 * atr(14)",
"basis": "rule"
},
"rr": {
"yes_no": 0.4055,
"rule": "C > swinglow(5) and C < swinghigh(5) and swinghigh(5) - C >= 2 * (C - swinglow(5))",
"basis": "rule"
},
"earn_clear": {
"yes_no": 0.2049,
"rule": "C > sma(C, 50) and days_to_earnings > 5",
"basis": "rule"
},
"up_week": {
"yes_no": 0.59
}
},
"context": {
"symbol": "AAPL",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "stage",
"fired": false,
"status": "skipped"
},
{
"id": "wait",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "swing-desk",
"preview": {
"text": "AAPL (2026-10-30): no full pullback setup (entry 67%, stop 76%, clear of earnings 20%)."
}
}
]
}Swing trader · example 2
Higher highs and higher lows: swing structure on NVDA
Confirm the trend from swing pivots, not averages: are both the swing highs and swing lows rising.
- StateNVDA
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"NVDA"} The server fills in the latest completed session.
Questions
hh_hl | rule | (swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))Higher swing highs and higher swing lows |
hl3 | rule | swinglow(3) > swinglow(3, 2)Higher swing lows |
hh2 | rule | swinghigh(5, 1) > swinghigh(5, 3)Latest swing high above the one two pivots back |
above_sh | rule | C > swinghigh(5)Above its last confirmed swing high |
new_high | forecast | Will it make a new 20-day high in the next week? A new 20-day high next week |
Answers
| Question | Answer | Reading |
|---|---|---|
hh_hlHigher swing highs and higher swing lows | 0.06 | false |
hl3Higher swing lows | 0.1576 | false |
hh2Latest swing high above the one two pivots back | 0.8765 | true |
above_shAbove its last confirmed swing high | 0.0537 | false |
new_highA new 20-day high next week | 0.027 | 3% · unlikely |
What it means
For NVDA on the session of 2026-10-30: True now: Latest swing high above the one two pivots back. Not true: Higher swing highs and higher swing lows; Higher swing lows; Above its last confirmed swing high. Forecasts: A new 20-day high next week 3%.
Rising pivots keep the trader long; the first lower swing low is the exit signal, whatever the averages say.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "NVDA"
},
"questions": {
"hh_hl": {
"type": "yes_no",
"ask": "(swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))"
},
"hl3": {
"type": "yes_no",
"ask": "swinglow(3) > swinglow(3, 2)"
},
"hh2": {
"type": "yes_no",
"ask": "swinghigh(5, 1) > swinghigh(5, 3)"
},
"above_sh": {
"type": "yes_no",
"ask": "C > swinghigh(5)"
},
"new_high": {
"type": "yes_no",
"instructions": "Will it make a new 20-day high in the next week?"
}
}
}Response JSON (NVDA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"hh_hl": {
"yes_no": 0.06,
"rule": "(swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))",
"basis": "rule"
},
"hl3": {
"yes_no": 0.1576,
"rule": "swinglow(3) > swinglow(3, 2)",
"basis": "rule"
},
"hh2": {
"yes_no": 0.8765,
"rule": "swinghigh(5, 1) > swinghigh(5, 3)",
"basis": "rule"
},
"above_sh": {
"yes_no": 0.0537,
"rule": "C > swinghigh(5)",
"basis": "rule"
},
"new_high": {
"yes_no": 0.027
}
},
"context": {
"symbol": "NVDA",
"as_of": "2026-10-30"
}
}Swing trader · example 3
Breakout on volume to my broker (webhook) for AMD
A 20-day closing high on 1.5x volume stages a buy order with a stop at the last swing low.
- StateAMD
- Questions5 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"AMD"} The server fills in the latest completed session.
Questions
breakout | rule | C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)20-day breakout on 1.5× volume |
donchian | rule | C > highest(C, 55)55-day closing breakout |
adx | rule | adx(14) > 20 and diplus(14) > diminus(14)Trending up (ADX over 20 and +DI over −DI) |
stop | rule | C > swinglow(5) and C - swinglow(5) < 1.5 * atr(14)A stop under the last swing low is within 1.5 ATR |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
breakout20-day breakout on 1.5× volume | 0.0537 | false |
donchian55-day closing breakout | 0.0537 | false |
adxTrending up (ADX over 20 and +DI over −DI) | 0.1098 | false |
stopA stop under the last swing low is within 1.5 ATR | 0.5233 | on the line (true) |
up_weekHigher in a week | 0.577 | 58% · close to even |
Actions
Rules on the answers decide what to send.
breakout >= 0.6 and adx >= 0.6→Webhookbroker-bridgedonchian >= 0.6→Slackswing-deskWhat it means
For AMD on the session of 2026-10-30: Not true: 20-day breakout on 1.5× volume; 55-day closing breakout; Trending up (ADX over 20 and +DI over −DI). On the line: A stop under the last swing low is within 1.5 ATR. Forecasts: Higher in a week 58%. No action fired: every rule was false.
Only a confirmed breakout sends the order; a price-only breakout goes to Slack as a watch item.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "AMD"
},
"questions": {
"breakout": {
"type": "yes_no",
"ask": "C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)"
},
"donchian": {
"type": "yes_no",
"ask": "C > highest(C, 55)"
},
"adx": {
"type": "yes_no",
"ask": "adx(14) > 20 and diplus(14) > diminus(14)"
},
"stop": {
"type": "yes_no",
"ask": "C > swinglow(5) and C - swinglow(5) < 1.5 * atr(14)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "buy",
"when": "breakout >= 0.6 and adx >= 0.6",
"do": "webhook",
"connection": "broker-bridge",
"body": {
"symbol": "{{symbol}}",
"side": "buy",
"order": "stop_limit",
"stop_loss": "swinglow(5)",
"reason": "20d_breakout_volume",
"p_up_week": "{{up_week}}",
"as_of": "{{as_of}}"
}
},
{
"id": "watch",
"when": "donchian >= 0.6",
"do": "slack",
"connection": "swing-desk",
"message": "{{symbol}} ({{as_of}}): above its 55-day high but without full confirmation (breakout on volume {{breakout|pct}})."
}
],
"dry_run": true
}Response JSON (AMD, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"breakout": {
"yes_no": 0.0537,
"rule": "C > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)",
"basis": "rule"
},
"donchian": {
"yes_no": 0.0537,
"rule": "C > highest(C, 55)",
"basis": "rule"
},
"adx": {
"yes_no": 0.1098,
"rule": "adx(14) > 20 and diplus(14) > diminus(14)",
"basis": "rule"
},
"stop": {
"yes_no": 0.5233,
"rule": "C > swinglow(5) and C - swinglow(5) < 1.5 * atr(14)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.577
}
},
"context": {
"symbol": "AMD",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "buy",
"fired": false,
"status": "skipped"
},
{
"id": "watch",
"fired": false,
"status": "skipped"
}
]
}Swing trader · example 4
EMA and WMA trend ribbon on MSFT
Short-term weighted and exponential averages stacked above the longer ones: a fast trend read.
- StateMSFT
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"MSFT"} The server fills in the latest completed session.
Questions
ema | rule | ema(C, 8) > ema(C, 21)8-day EMA above 21-day EMA |
wma | rule | wma(C, 10) > wma(C, 30)10-day WMA above 30-day WMA |
rma | rule | C > rma(C, 14)Above the 14-day RMA |
slope | rule | linreg(C, 20) > ref(linreg(C, 20), -5)20-day regression line rising over 5 sessions |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
ema8-day EMA above 21-day EMA | 0.6521 | true |
wma10-day WMA above 30-day WMA | 0.5008 | on the line (true) |
rmaAbove the 14-day RMA | 0.4445 | on the line (false) |
slope20-day regression line rising over 5 sessions | 0.2925 | false |
up_weekHigher in a week | 0.574 | 57% · close to even |
What it means
For MSFT on the session of 2026-10-30: True now: 8-day EMA above 21-day EMA. Not true: 20-day regression line rising over 5 sessions. On the line: 10-day WMA above 30-day WMA; Above the 14-day RMA. Forecasts: Higher in a week 57%.
All four true is a ribbon in gear; mixed answers mean the trend is rolling over and the trader tightens stops.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "MSFT"
},
"questions": {
"ema": {
"type": "yes_no",
"ask": "ema(C, 8) > ema(C, 21)"
},
"wma": {
"type": "yes_no",
"ask": "wma(C, 10) > wma(C, 30)"
},
"rma": {
"type": "yes_no",
"ask": "C > rma(C, 14)"
},
"slope": {
"type": "yes_no",
"ask": "linreg(C, 20) > ref(linreg(C, 20), -5)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (MSFT, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"ema": {
"yes_no": 0.6521,
"rule": "ema(C, 8) > ema(C, 21)",
"basis": "rule"
},
"wma": {
"yes_no": 0.5008,
"rule": "wma(C, 10) > wma(C, 30)",
"basis": "rule"
},
"rma": {
"yes_no": 0.4445,
"rule": "C > rma(C, 14)",
"basis": "rule"
},
"slope": {
"yes_no": 0.2925,
"rule": "linreg(C, 20) > ref(linreg(C, 20), -5)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.574
}
},
"context": {
"symbol": "MSFT",
"as_of": "2026-10-30"
}
}Swing trader · example 5
RSI(2) oversold in an uptrend: SPY, QQQ, IWM, DIA
The short-term mean-reversion swing: a deeply oversold RSI(2) while the index stays above its 200-day.
- State4 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"SPY"} then QQQ, IWM, DIA, one request each. The server fills in the latest completed session.
Questions
rsi2 | rule | rsi(C, 2) < 10Two-day RSI under 10 |
trend | English → rule | Is the stock above its 200-day moving average? |
three_down | rule | C < C[-1] and C[-1] < C[-2] and C[-2] < C[-3] and C > sma(C, 200)Three lower closes while above the 200-day |
regime | rule | (C > sma(C, 200) and rsi(C, 14) < 40) or (C < sma(C, 200) and rsi(C, 14) < 25)Oversold, with the line set by the trend |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Symbol | rsi2rule | trendrule | three_downrule | regimerule | up_weekforecast |
|---|---|---|---|---|---|
SPY | 0.5164 | 0.9451 | 0.2277 | 0.4642 | 0.598 |
QQQ | 0.5356 | 0.7987 | 0.2241 | 0.7742 | 0.561 |
IWM | 0.1938 | 0.5564 | 0.1217 | 0.1364 | 0.526 |
DIA | 0.5631 | 0.8778 | 0.2748 | 0.2004 | 0.567 |
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: Two-day RSI under 10: true for none of 4. Is the stock above its 200-day moving average: true for SPY, QQQ, DIA of 4. Three lower closes while above the 200-day: true for none of 4. Oversold, with the line set by the trend: true for QQQ of 4. Highest odds for “Higher in a week”: SPY at 60%.
The index with RSI(2) under 10 above its 200-day is the buy for a few days; below the 200-day the setup is skipped.
Request JSON (SPY; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"rsi2": {
"type": "yes_no",
"ask": "rsi(C, 2) < 10"
},
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"three_down": {
"type": "yes_no",
"ask": "C < C[-1] and C[-1] < C[-2] and C[-2] < C[-3] and C > sma(C, 200)"
},
"regime": {
"type": "yes_no",
"ask": "(C > sma(C, 200) and rsi(C, 14) < 40) or (C < sma(C, 200) and rsi(C, 14) < 25)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"rsi2": {
"yes_no": 0.5164,
"rule": "rsi(C, 2) < 10",
"basis": "rule"
},
"trend": {
"yes_no": 0.9451,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"three_down": {
"yes_no": 0.2277,
"rule": "C < C[-1] and C[-1] < C[-2] and C[-2] < C[-3] and C > sma(C, 200)",
"basis": "rule"
},
"regime": {
"yes_no": 0.4642,
"rule": "(C > sma(C, 200) and rsi(C, 14) < 40) or (C < sma(C, 200) and rsi(C, 14) < 25)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.598
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
}
}Swing trader · example 6
CCI and Williams %R momentum on LLY
Two oscillators that read the same trend from different angles.
- StateLLY
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"LLY"} The server fills in the latest completed session.
Questions
cci | rule | cci(20) > 100CCI above 100 |
willr | rule | willr(14) > -20Williams %R above −20 |
willr_os | rule | willr(14) < -80Williams %R below -80 (oversold) |
stoch | English → rule | Is stochastic %K above %D? |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
cciCCI above 100 | 0.8531 | true |
willrWilliams %R above −20 | 0.6655 | true |
willr_osWilliams %R below -80 (oversold) | 0.0632 | false |
stochIs stochastic %K above %D compiled to stochk(14, 3, 3) > stochd(14, 3, 3) | 0.6893 | true |
up_weekHigher in a week | 0.542 | 54% · close to even |
What it means
For LLY on the session of 2026-10-30: True now: CCI above 100; Williams %R above −20; Is stochastic %K above %D. Not true: Williams %R below -80 (oversold). Forecasts: Higher in a week 54%.
Both overbought oscillators true in an uptrend is strength, not a sell signal; Williams %R under -80 is a pullback to buy.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "LLY"
},
"questions": {
"cci": {
"type": "yes_no",
"ask": "cci(20) > 100"
},
"willr": {
"type": "yes_no",
"ask": "willr(14) > -20"
},
"willr_os": {
"type": "yes_no",
"ask": "willr(14) < -80"
},
"stoch": {
"type": "yes_no",
"instructions": "Is stochastic %K above %D?"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (LLY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"cci": {
"yes_no": 0.8531,
"rule": "cci(20) > 100",
"basis": "rule"
},
"willr": {
"yes_no": 0.6655,
"rule": "willr(14) > -20",
"basis": "rule"
},
"willr_os": {
"yes_no": 0.0632,
"rule": "willr(14) < -80",
"basis": "rule"
},
"stoch": {
"yes_no": 0.6893,
"rule": "stochk(14, 3, 3) > stochd(14, 3, 3)",
"basis": "comparison"
},
"up_week": {
"yes_no": 0.542
}
},
"context": {
"symbol": "LLY",
"as_of": "2026-10-30"
}
}Swing trader · example 7
ADX trend filter before taking a swing in XOM
Is there a trend at all, and which side is in control (DI+ vs DI-)?
- StateXOM
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"XOM"} The server fills in the latest completed session.
Questions
adx25 | rule | adx(14) > 25Trending (ADX above 25) |
di | rule | diplus(14) > diminus(14)DI+ above DI- |
di_bear | rule | diminus(14) > 25DI- above 25 |
sma50_up | rule | sma(C, 50) > ref(sma(C, 50), -10)The 50-day average is rising |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
adx25Trending (ADX above 25) | 0.8859 | true |
diDI+ above DI- | 0.9409 | true |
di_bearDI- above 25 | 0.0545 | false |
sma50_upThe 50-day average is rising | 0.946 | true |
up_weekHigher in a week | 0.577 | 58% · close to even |
What it means
For XOM on the session of 2026-10-30: True now: Trending (ADX above 25); DI+ above DI-; The 50-day average is rising. Not true: DI- above 25. Forecasts: Higher in a week 58%.
Without ADX above 25 the trader uses range tactics; with it, the DI side picks the direction.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XOM"
},
"questions": {
"adx25": {
"type": "yes_no",
"ask": "adx(14) > 25"
},
"di": {
"type": "yes_no",
"ask": "diplus(14) > diminus(14)"
},
"di_bear": {
"type": "yes_no",
"ask": "diminus(14) > 25"
},
"sma50_up": {
"type": "yes_no",
"ask": "sma(C, 50) > ref(sma(C, 50), -10)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (XOM, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"adx25": {
"yes_no": 0.8859,
"rule": "adx(14) > 25",
"basis": "rule"
},
"di": {
"yes_no": 0.9409,
"rule": "diplus(14) > diminus(14)",
"basis": "rule"
},
"di_bear": {
"yes_no": 0.0545,
"rule": "diminus(14) > 25",
"basis": "rule"
},
"sma50_up": {
"yes_no": 0.946,
"rule": "sma(C, 50) > ref(sma(C, 50), -10)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.577
}
},
"context": {
"symbol": "XOM",
"as_of": "2026-10-30"
}
}Swing trader · example 8
Trail my open swing longs with a chandelier stop
Every evening, check each open position against a 3-ATR chandelier stop and email the ones to exit.
- ScheduleMon–Fri at 16:40 ET
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"NVDA"} then AAPL, LLY, COST, one request each. The server fills in the latest completed session.
Questions
chandelier | rule | C < highest(H, 22) - 3 * atr(22)Chandelier exit: 3 ATR under the 22-day high |
low_break | rule | C < lowest(L, 20)Closed under the 20-day low |
swing_low | rule | C < swinglow(5, 1)Closed below the last swing low |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | chandelierrule | low_breakrule | swing_lowrule | drop5forecast | Fired |
|---|---|---|---|---|---|
NVDA | 0.9272 | 0.7554 | 0.7264 | 0.523 | exit |
AAPL | 0.1292 | 0.0744 | 0.1887 | 0.365 | none |
LLY | 0.0644 | 0.0537 | 0.0537 | 0.583 | none |
COST | 0.0881 | 0.0553 | 0.0571 | 0.319 | 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.
chandelier >= 0.6 or swing_low >= 0.6→Emailme{
"subject": "Exit NVDA: trailing stop hit",
"text": "NVDA (2026-10-30): chandelier 93%, below swing low 73%. Exit at the open. 5% drawdown odds 52%."
}What it means
Session of 2026-10-30, 4 symbols: Chandelier exit: 3 ATR under the 22-day high: true for NVDA of 4. Closed under the 20-day low: true for NVDA of 4. Closed below the last swing low: true for NVDA of 4. Highest odds for “A 5% drawdown within a month”: LLY at 58%. exit fired for NVDA.
An email means the trailing stop was hit on the close; the position is exited at the next open.
As a scheduled workflow (Mon–Fri at 16:40 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": "Trail my open swing longs with a chandelier stop",
"symbols": "NVDA AAPL LLY COST",
"days": [
1,
2,
3,
4,
5
],
"at_time": "16:40",
"model": "ora-fin-0.1.1",
"questions": {
"chandelier": {
"type": "yes_no",
"ask": "C < highest(H, 22) - 3 * atr(22)"
},
"low_break": {
"type": "yes_no",
"ask": "C < lowest(L, 20)"
},
"swing_low": {
"type": "yes_no",
"ask": "C < swinglow(5, 1)"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "exit",
"when": "chandelier >= 0.6 or swing_low >= 0.6",
"do": "email",
"connection": "me",
"subject": "Exit {{symbol}}: trailing stop hit",
"message": "{{symbol}} ({{as_of}}): chandelier {{chandelier|pct}}, below swing low {{swing_low|pct}}. Exit at the open. 5% drawdown odds {{drop5|pct}}."
}
]
}Request JSON (NVDA; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "NVDA"
},
"questions": {
"chandelier": {
"type": "yes_no",
"ask": "C < highest(H, 22) - 3 * atr(22)"
},
"low_break": {
"type": "yes_no",
"ask": "C < lowest(L, 20)"
},
"swing_low": {
"type": "yes_no",
"ask": "C < swinglow(5, 1)"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "exit",
"when": "chandelier >= 0.6 or swing_low >= 0.6",
"do": "email",
"connection": "me",
"subject": "Exit {{symbol}}: trailing stop hit",
"message": "{{symbol}} ({{as_of}}): chandelier {{chandelier|pct}}, below swing low {{swing_low|pct}}. Exit at the open. 5% drawdown odds {{drop5|pct}}."
}
],
"dry_run": true
}Response JSON (NVDA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"chandelier": {
"yes_no": 0.9272,
"rule": "C < highest(H, 22) - 3 * atr(22)",
"basis": "rule"
},
"low_break": {
"yes_no": 0.7554,
"rule": "C < lowest(L, 20)",
"basis": "rule"
},
"swing_low": {
"yes_no": 0.7264,
"rule": "C < swinglow(5, 1)",
"basis": "rule"
},
"drop5": {
"yes_no": 0.523
}
},
"context": {
"symbol": "NVDA",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "exit",
"fired": true,
"status": "dry_run",
"do": "email",
"connection": "me",
"preview": {
"subject": "Exit NVDA: trailing stop hit",
"text": "NVDA (2026-10-30): chandelier 93%, below swing low 73%. Exit at the open. 5% drawdown odds 52%."
}
}
]
}Swing trader · example 9
Squeeze breakout scan: XLK, XLF, XLV, XLI, XLY
Sector ETFs coming out of a volatility squeeze with a fresh 20-day high.
- State5 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"XLK"} then XLF, XLV, XLI, XLY, one request each. The server fills in the latest completed session.
Questions
squeeze_bo | rule | std(C, 20) < 0.7 * std(C, 100) and C > highest(C, 20)Squeeze, then a breakout |
squeeze | rule | (bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06Bollinger bands narrower than 6% of price |
bbw | English → rule | Is Bollinger Band width at its lowest in 120 sessions? |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
Answers
| Symbol | squeeze_borule | squeezerule | bbwrule | rally5forecast | Fired |
|---|---|---|---|---|---|
XLK | 0.0537 | 0.0582 | 0.0556 | 0.566 | none |
XLF | 0.3437 | 0.332 | 0.0703 | 0.227 | none |
XLV | 0.5012 | 0.0565 | 0.0537 | 0.416 | none |
XLI | 0.1562 | 0.8519 | 0.2528 | 0.277 | none |
XLY | 0.3354 | 0.4882 | 0.1299 | 0.252 | 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.
squeeze_bo >= 0.6→Webhookteams-deskWhat it means
Session of 2026-10-30, 5 symbols: Squeeze, then a breakout: true for none of 5. Bollinger bands narrower than 6% of price: true for XLI of 5. Is Bollinger Band width at its lowest in 120 sessions: true for none of 5. Highest odds for “A 5% rally within a month”: XLK at 57%. teams fired for none.
Sectors with a squeeze breakout get a swing position; a squeeze without the breakout goes on the watchlist.
Request JSON (XLK; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "XLK"
},
"questions": {
"squeeze_bo": {
"type": "yes_no",
"ask": "std(C, 20) < 0.7 * std(C, 100) and C > highest(C, 20)"
},
"squeeze": {
"type": "yes_no",
"ask": "(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06"
},
"bbw": {
"type": "yes_no",
"instructions": "Is Bollinger Band width at its lowest in 120 sessions?"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "teams",
"when": "squeeze_bo >= 0.6",
"do": "webhook",
"connection": "teams-desk",
"body": {
"text": "{{symbol}} ({{as_of}}) broke out of a squeeze (rule {{squeeze_bo|pct}}); 5% rally odds {{rally5|pct}}."
}
}
],
"dry_run": true
}Response JSON (XLK, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"squeeze_bo": {
"yes_no": 0.0537,
"rule": "std(C, 20) < 0.7 * std(C, 100) and C > highest(C, 20)",
"basis": "rule"
},
"squeeze": {
"yes_no": 0.0582,
"rule": "(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06",
"basis": "rule"
},
"bbw": {
"yes_no": 0.0556,
"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"
},
"rally5": {
"yes_no": 0.566
}
},
"context": {
"symbol": "XLK",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "teams",
"fired": false,
"status": "skipped"
}
]
}Swing trader · example 10
Bullish engulfing in an uptrend on KO
A reversal candle means more inside an existing uptrend.
- StateKO
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"KO"} The server fills in the latest completed session.
Questions
engulf | rule | engulfing_bull() and C > sma(C, 50)Bullish engulfing above the 50-day |
harami | rule | harami_bull()harami bull candle: A small green body inside yesterday's red body. |
piercing | rule | piercing_line()piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open). |
trend | rule | sma(C, 50) > sma(C, 200)50-day above the 200-day |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
engulfBullish engulfing above the 50-day | 0.0596 | false |
haramiharami bull candle: A small green body inside yesterday's red body. | 0.1294 | false |
piercingpiercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open). | 0.0596 | false |
trend50-day above the 200-day | 0.9463 | true |
up_weekHigher in a week | 0.549 | 55% · close to even |
What it means
For KO on the session of 2026-10-30: True now: 50-day above the 200-day. Not true: Bullish engulfing above the 50-day; harami bull candle: A small green body inside yesterday's red body.; piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open).. Forecasts: Higher in a week 55%.
Any of the three bullish two-bar patterns inside a golden alignment is an entry; the same candle in a downtrend is ignored.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "KO"
},
"questions": {
"engulf": {
"type": "yes_no",
"ask": "engulfing_bull() and C > sma(C, 50)"
},
"harami": {
"type": "yes_no",
"ask": "harami_bull()"
},
"piercing": {
"type": "yes_no",
"ask": "piercing_line()"
},
"trend": {
"type": "yes_no",
"ask": "sma(C, 50) > sma(C, 200)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (KO, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"engulf": {
"yes_no": 0.0596,
"rule": "engulfing_bull() and C > sma(C, 50)",
"basis": "rule"
},
"harami": {
"yes_no": 0.1294,
"rule": "harami_bull()",
"basis": "rule"
},
"piercing": {
"yes_no": 0.0596,
"rule": "piercing_line()",
"basis": "rule"
},
"trend": {
"yes_no": 0.9463,
"rule": "sma(C, 50) > sma(C, 200)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.549
}
},
"context": {
"symbol": "KO",
"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, Options trader, Dividend investor, Long-term passive investor, Crypto trader, FX trader, Commodities trader, Social trading community, Students and universities.