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

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.

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

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

entryrule(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)
stopruleC > swinglow(5) and C - swinglow(5) < 1.5 * atr(14)
A stop under the last swing low is within 1.5 ATR
rrruleC > 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_clearruleC > sma(C, 50) and days_to_earnings > 5
Above the 50-day, no earnings in the next 5 days
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
entry
Uptrend pullback to the 20-day (entry zone)
0.6713true
stop
A stop under the last swing low is within 1.5 ATR
0.7569true
rr
At least 2:1 to the last swing high, stop at the last swing low
0.4055on the line (false)
earn_clear
Above the 50-day, no earnings in the next 5 days
0.2049false
up_week
Higher in a week
0.5959% · 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-bridge
else→Slackswing-desk
What each action would send 1 of 2 fired · dry run, nothing sent
stagerule false: skipped
waitwould send (dry run)Slack → swing-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%)."
      }
    }
  ]
}

atr days_to_earnings sma swinghigh swinglow

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.

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

State

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

Questions

hh_hlrule(swinghigh(3) > swinghigh(3, 2)) and (swinglow(3) > swinglow(3, 2))
Higher swing highs and higher swing lows
hl3ruleswinglow(3) > swinglow(3, 2)
Higher swing lows
hh2ruleswinghigh(5, 1) > swinghigh(5, 3)
Latest swing high above the one two pivots back
above_shruleC > swinghigh(5)
Above its last confirmed swing high
new_highforecastWill it make a new 20-day high in the next week?
A new 20-day high next week

Answers

QuestionAnswerReading
hh_hl
Higher swing highs and higher swing lows
0.06false
hl3
Higher swing lows
0.1576false
hh2
Latest swing high above the one two pivots back
0.8765true
above_sh
Above its last confirmed swing high
0.0537false
new_high
A new 20-day high next week
0.0273% · 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"
  }
}

swinghigh swinglow

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.

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

State

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

Questions

breakoutruleC > highest(C, 20) and V > 1.5 * ref(avg(V, 20), -1)
20-day breakout on 1.5× volume
donchianruleC > highest(C, 55)
55-day closing breakout
adxruleadx(14) > 20 and diplus(14) > diminus(14)
Trending up (ADX over 20 and +DI over −DI)
stopruleC > swinglow(5) and C - swinglow(5) < 1.5 * atr(14)
A stop under the last swing low is within 1.5 ATR
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
breakout
20-day breakout on 1.5× volume
0.0537false
donchian
55-day closing breakout
0.0537false
adx
Trending up (ADX over 20 and +DI over −DI)
0.1098false
stop
A stop under the last swing low is within 1.5 ATR
0.5233on the line (true)
up_week
Higher in a week
0.57758% · close to even

Actions

Rules on the answers decide what to send.

breakout >= 0.6 and adx >= 0.6→Webhookbroker-bridge
donchian >= 0.6→Slackswing-desk
What each action would send 0 of 2 fired · dry run, nothing sent
buyrule false: skipped
watchrule false: skipped

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

adx atr avg diminus diplus highest ref swinglow

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.

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

State

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

Questions

emaruleema(C, 8) > ema(C, 21)
8-day EMA above 21-day EMA
wmarulewma(C, 10) > wma(C, 30)
10-day WMA above 30-day WMA
rmaruleC > rma(C, 14)
Above the 14-day RMA
sloperulelinreg(C, 20) > ref(linreg(C, 20), -5)
20-day regression line rising over 5 sessions
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
ema
8-day EMA above 21-day EMA
0.6521true
wma
10-day WMA above 30-day WMA
0.5008on the line (true)
rma
Above the 14-day RMA
0.4445on the line (false)
slope
20-day regression line rising over 5 sessions
0.2925false
up_week
Higher in a week
0.57457% · 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"
  }
}

ema linreg ref rma wma

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.

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

State

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

Questions

rsi2rulersi(C, 2) < 10
Two-day RSI under 10
trendEnglish → ruleIs the stock above its 200-day moving average?
three_downruleC < 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
regimerule(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_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

Symbolrsi2ruletrendrulethree_downruleregimeruleup_weekforecast
SPY0.51640.94510.22770.46420.598
QQQ0.53560.79870.22410.77420.561
IWM0.19380.55640.12170.13640.526
DIA0.56310.87780.27480.20040.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"
  }
}

offset rsi sma

Swing trader · example 6

CCI and Williams %R momentum on LLY

Two oscillators that read the same trend from different angles.

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

State

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

Questions

ccirulecci(20) > 100
CCI above 100
willrrulewillr(14) > -20
Williams %R above −20
willr_osrulewillr(14) < -80
Williams %R below -80 (oversold)
stochEnglish → ruleIs stochastic %K above %D?
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
cci
CCI above 100
0.8531true
willr
Williams %R above −20
0.6655true
willr_os
Williams %R below -80 (oversold)
0.0632false
stoch
Is stochastic %K above %D
compiled to stochk(14, 3, 3) > stochd(14, 3, 3)
0.6893true
up_week
Higher in a week
0.54254% · 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"
  }
}

cci stochd stochk willr

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-)?

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

State

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

Questions

adx25ruleadx(14) > 25
Trending (ADX above 25)
dirulediplus(14) > diminus(14)
DI+ above DI-
di_bearrulediminus(14) > 25
DI- above 25
sma50_uprulesma(C, 50) > ref(sma(C, 50), -10)
The 50-day average is rising
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
adx25
Trending (ADX above 25)
0.8859true
di
DI+ above DI-
0.9409true
di_bear
DI- above 25
0.0545false
sma50_up
The 50-day average is rising
0.946true
up_week
Higher in a week
0.57758% · 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"
  }
}

adx diminus diplus ref sma

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.

ora-fin-0.1.14 symbols, one request each4 questions1 actionworkflow · Mon–Fri at 16:40 ET
  1. ScheduleMon–Fri at 16:40 ET
  2. State4 symbols
  3. Questions4 asked
  4. Answersreal, captured
  5. Actions1 rule · dry run

State

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

Questions

chandelierruleC < highest(H, 22) - 3 * atr(22)
Chandelier exit: 3 ATR under the 22-day high
low_breakruleC < lowest(L, 20)
Closed under the 20-day low
swing_lowruleC < swinglow(5, 1)
Closed below the last swing low
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symbolchandelierrulelow_breakruleswing_lowruledrop5forecastFired
NVDA0.92720.75540.72640.523exit
AAPL0.12920.07440.18870.365none
LLY0.06440.05370.05370.583none
COST0.08810.05530.05710.319none

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
NVDA 1 of 1 fired · dry run, nothing sent
exitwould send (dry run)Email → me
{
  "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%."
}
AAPL 0 of 1 fired · dry run, nothing sent
LLY 0 of 1 fired · dry run, nothing sent
COST 0 of 1 fired · dry run, nothing sent

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

atr highest lowest swinglow

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.

ora-fin-0.1.15 symbols, one request each4 questions1 action
  1. State5 symbols
  2. Questions4 asked
  3. Answersreal, captured
  4. 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_borulestd(C, 20) < 0.7 * std(C, 100) and C > highest(C, 20)
Squeeze, then a breakout
squeezerule(bbupper(C, 20, 2) - bblower(C, 20, 2)) / bbmid(C, 20) < 0.06
Bollinger bands narrower than 6% of price
bbwEnglish → ruleIs Bollinger Band width at its lowest in 120 sessions?
rally5forecastWill it rally at least 5% at some point in the next month?
A 5% rally within a month

Answers

Symbolsqueeze_borulesqueezerulebbwrulerally5forecastFired
XLK0.05370.05820.05560.566none
XLF0.34370.3320.07030.227none
XLV0.50120.05650.05370.416none
XLI0.15620.85190.25280.277none
XLY0.33540.48820.12990.252none

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-desk
XLK 0 of 1 fired · dry run, nothing sent
XLF 0 of 1 fired · dry run, nothing sent
XLV 0 of 1 fired · dry run, nothing sent
XLI 0 of 1 fired · dry run, nothing sent
XLY 0 of 1 fired · dry run, nothing sent

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

bblower bbmid bbupper highest min ref std

Swing trader · example 10

Bullish engulfing in an uptrend on KO

A reversal candle means more inside an existing uptrend.

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

engulfruleengulfing_bull() and C > sma(C, 50)
Bullish engulfing above the 50-day
haramiruleharami_bull()
harami bull candle: A small green body inside yesterday's red body.
piercingrulepiercing_line()
piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open).
trendrulesma(C, 50) > sma(C, 200)
50-day above the 200-day
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
engulf
Bullish engulfing above the 50-day
0.0596false
harami
harami bull candle: A small green body inside yesterday's red body.
0.1294false
piercing
piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open).
0.0596false
trend
50-day above the 200-day
0.9463true
up_week
Higher in a week
0.54955% · 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"
  }
}

engulfing_bull harami_bull piercing_line sma

Information, not investment advice. Rules answer from the latest completed daily session; forecasts are probabilities. Actions ran as dry runs: nothing was sent. More in 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.

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