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 · Buy side

Financial advisor / RIA: 20 ways to use Ora

Client portfolios, rebalancing, reviews and timely notes before clients call. Each example is a complete, runnable request with the real answers it returned (37 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 (50)

sma 14max 7offset 5atr 4days_to_earnings 3rsi 3abs 3log 3sqrt 3std 3ref 3pays_dividend 2swinglow 2cut_last 2min 2beat_eps_last 1beat_revenue_last 1shooting_star 1swinghigh 1div_yield_ttm 1years_of_growth 1beat_streak 1last_earnings_move 1next_report_amc 1misses_last4 1macd 1avg 1days_since_earnings 1harami_bull 1morning_star 1piercing_line 1tweezer_bottom 1crossdown 1bblower 1ema 1roc 1linreg 1days_since_split 1days_to_split 1last_split_ratio 1reverse_split_last 1splits_5y 1highest 1lowest 1atr_pct 1adx 1diminus 1diplus 1wma 1days_to_ex_div 1

Examples 11–20 of 20 · page 2 of 2

Financial advisor / RIA · example 11

Did a bullish reversal candle print in UNH after the selloff?

Before suggesting clients add to a beaten-down name, look for reversal candles near the lows.

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

State

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

Questions

morningrulemorning_star()
morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first.
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).
haramiruleharami_bull()
harami bull candle: A small green body inside yesterday's red body.
tweezerruletweezer_bottom()
tweezer bottom candle: Red then green, with lows within 0.1% of each other.
near_lowEnglish → ruleIs the stock within 10% of its 52-week low?
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
morning
morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first.
0.0925false
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.1039false
harami
harami bull candle: A small green body inside yesterday's red body.
0.1039false
tweezer
tweezer bottom candle: Red then green, with lows within 0.1% of each other.
0.1039false
near_low
Is the stock within 10% of its 52-week low
compiled to abs(C / min(L, 252) - 1) <= 0.1
0.0537false
up_week
Higher in a week
0.48549% · close to even

What it means

For UNH on the session of 2026-10-30: Not true: morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first.; piercing line candle: After a red day, opens below its close and closes above the middle of its body (but under its open).; harami bull candle: A small green body inside yesterday's red body.; tweezer bottom candle: Red then green, with lows within 0.1% of each other.; Is the stock within 10% of its 52-week low. Forecasts: Higher in a week 49%.

Candles are evidence of buying interest at the lows, not a signal by themselves; they matter more when they print near the 52-week low.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "UNH"
  },
  "questions": {
    "morning": {
      "type": "yes_no",
      "ask": "morning_star()"
    },
    "piercing": {
      "type": "yes_no",
      "ask": "piercing_line()"
    },
    "harami": {
      "type": "yes_no",
      "ask": "harami_bull()"
    },
    "tweezer": {
      "type": "yes_no",
      "ask": "tweezer_bottom()"
    },
    "near_low": {
      "type": "yes_no",
      "instructions": "Is the stock within 10% of its 52-week low?"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (UNH, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "morning": {
      "yes_no": 0.0925,
      "rule": "morning_star()",
      "basis": "rule"
    },
    "piercing": {
      "yes_no": 0.1039,
      "rule": "piercing_line()",
      "basis": "rule"
    },
    "harami": {
      "yes_no": 0.1039,
      "rule": "harami_bull()",
      "basis": "rule"
    },
    "tweezer": {
      "yes_no": 0.1039,
      "rule": "tweezer_bottom()",
      "basis": "rule"
    },
    "near_low": {
      "yes_no": 0.0537,
      "rule": "abs(C / min(L, 252) - 1) <= 0.1",
      "basis": "comparison"
    },
    "up_week": {
      "yes_no": 0.485
    }
  },
  "context": {
    "symbol": "UNH",
    "as_of": "2026-10-30"
  }
}

abs harami_bull min morning_star piercing_line tweezer_bottom

Financial advisor / RIA · example 12

Friday model-portfolio digest to the advisor channel

Every Friday after the close, check each ETF in the growth model and post to Slack any sleeve that broke its 50-day.

ora-fin-0.1.15 symbols, one request each4 questions1 actionworkflow · Fri at 16:45 ET
  1. ScheduleFri at 16:45 ET
  2. State5 symbols
  3. Questions4 asked
  4. Answersreal, captured
  5. Actions1 rule · dry run

State

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

Questions

above_50druleC > sma(C, 50)
Above the 50-day average
cross_downrulecrossdown(C, sma(C, 50))
Crossed below the 50-day today
trendEnglish → ruleIs the stock above its 200-day moving average?
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

Symbolabove_50drulecross_downruletrendruleup_weekforecastFired
VTI0.12420.950.94150.57lost_50d
VEA0.13140.050.58770.559lost_50d
VWO0.05610.050.08870.516lost_50d
QQQ0.06530.050.79870.561lost_50d
IWM0.21760.050.55640.526lost_50d

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.

cross_down >= 0.6 or above_50d < 0.4→Slackadvisor-team
VTI 1 of 1 fired · dry run, nothing sent
lost_50dwould send (dry run)Slack → advisor-team
{
  "text": "VTI (2026-10-30) is below its 50-day (crossed today 95%). 200-day trend 94%; higher in a week 57%."
}
VEA 1 of 1 fired · dry run, nothing sent
lost_50dwould send (dry run)Slack → advisor-team
{
  "text": "VEA (2026-10-30) is below its 50-day (crossed today 5%). 200-day trend 59%; higher in a week 56%."
}
VWO 1 of 1 fired · dry run, nothing sent
lost_50dwould send (dry run)Slack → advisor-team
{
  "text": "VWO (2026-10-30) is below its 50-day (crossed today 5%). 200-day trend 9%; higher in a week 52%."
}
QQQ 1 of 1 fired · dry run, nothing sent
lost_50dwould send (dry run)Slack → advisor-team
{
  "text": "QQQ (2026-10-30) is below its 50-day (crossed today 5%). 200-day trend 80%; higher in a week 56%."
}
IWM 1 of 1 fired · dry run, nothing sent
lost_50dwould send (dry run)Slack → advisor-team
{
  "text": "IWM (2026-10-30) is below its 50-day (crossed today 5%). 200-day trend 56%; higher in a week 53%."
}

What it means

Session of 2026-10-30, 5 symbols: Above the 50-day average: true for none of 5. Crossed below the 50-day today: true for VTI of 5. Is the stock above its 200-day moving average: true for VTI, QQQ of 5. Highest odds for “Higher in a week”: VTI at 57%. lost_50d fired for VTI, VEA, VWO, QQQ, IWM.

Each sleeve gets its own answers; only sleeves below the 50-day reach the channel, so the digest stays short.

As a scheduled workflow (Fri at 16:45 ET)

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

{
  "name": "Friday model-portfolio digest to the advisor channel",
  "symbols": "VTI VEA VWO QQQ IWM",
  "days": [
    5
  ],
  "at_time": "16:45",
  "model": "ora-fin-0.1.1",
  "questions": {
    "above_50d": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "cross_down": {
      "type": "yes_no",
      "ask": "crossdown(C, sma(C, 50))"
    },
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  },
  "actions": [
    {
      "id": "lost_50d",
      "when": "cross_down >= 0.6 or above_50d < 0.4",
      "do": "slack",
      "connection": "advisor-team",
      "message": "{{symbol}} ({{as_of}}) is below its 50-day (crossed today {{cross_down|pct}}). 200-day trend {{trend|pct}}; higher in a week {{up_week|pct}}."
    }
  ]
}
Request JSON (VTI; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VTI"
  },
  "questions": {
    "above_50d": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "cross_down": {
      "type": "yes_no",
      "ask": "crossdown(C, sma(C, 50))"
    },
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  },
  "actions": [
    {
      "id": "lost_50d",
      "when": "cross_down >= 0.6 or above_50d < 0.4",
      "do": "slack",
      "connection": "advisor-team",
      "message": "{{symbol}} ({{as_of}}) is below its 50-day (crossed today {{cross_down|pct}}). 200-day trend {{trend|pct}}; higher in a week {{up_week|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (VTI, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "above_50d": {
      "yes_no": 0.1242,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "cross_down": {
      "yes_no": 0.95,
      "rule": "crossdown(C, sma(C, 50))",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.9415,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "up_week": {
      "yes_no": 0.57
    }
  },
  "context": {
    "symbol": "VTI",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "lost_50d",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "advisor-team",
      "preview": {
        "text": "VTI (2026-10-30) is below its 50-day (crossed today 95%). 200-day trend 94%; higher in a week 57%."
      }
    }
  ]
}

crossdown sma

Financial advisor / RIA · example 13

Roth conversion timing: is VOO in a dip?

Converting during a market dip moves more shares for the same tax; check whether the broad market is pulled back right now.

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

State

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

Questions

pullbackEnglish → ruleHas the stock pulled back at least 5% from its 20-day high?
rsi40English → ruleIs RSI below 40?
below_bandruleC < bblower(C, 20, 2)
Closed under the lower Bollinger band
trendEnglish → ruleIs the stock above its 200-day moving average?
rally5forecastWill it rally at least 5% at some point in the next month?
A 5% rally within a month

Answers

QuestionAnswerReading
pullback
Has the stock pulled back at least 5% from its 20-day high
compiled to C <= max(H, 20) * 0.95
0.0617false
rsi40
Is RSI below 40
compiled to rsi(C, 14) < 40
0.4424on the line (false)
below_band
Closed under the lower Bollinger band
0.5834on the line (true)
trend
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.9463true
rally5
A 5% rally within a month
0.2222% · unlikely

What it means

For VOO on the session of 2026-10-30: True now: Is the stock above its 200-day moving average. Not true: Has the stock pulled back at least 5% from its 20-day high. On the line: Is RSI below 40; Closed under the lower Bollinger band. Forecasts: A 5% rally within a month 22%.

A pullback inside a long-term uptrend is the kind of window advisors use for conversions; no dip simply means convert on the normal schedule.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VOO"
  },
  "questions": {
    "pullback": {
      "type": "yes_no",
      "instructions": "Has the stock pulled back at least 5% from its 20-day high?"
    },
    "rsi40": {
      "type": "yes_no",
      "instructions": "Is RSI below 40?"
    },
    "below_band": {
      "type": "yes_no",
      "ask": "C < bblower(C, 20, 2)"
    },
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  }
}
Response JSON (VOO, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "pullback": {
      "yes_no": 0.0617,
      "rule": "C <= max(H, 20) * 0.95",
      "basis": "pattern"
    },
    "rsi40": {
      "yes_no": 0.4424,
      "rule": "rsi(C, 14) < 40",
      "basis": "comparison"
    },
    "below_band": {
      "yes_no": 0.5834,
      "rule": "C < bblower(C, 20, 2)",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.9463,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "rally5": {
      "yes_no": 0.22
    }
  },
  "context": {
    "symbol": "VOO",
    "as_of": "2026-10-30"
  }
}

bblower max rsi sma

Financial advisor / RIA · example 14

Which sectors lead? XLK, XLV, XLE and XLF for client tilts

Compare momentum and trend across four sector ETFs before adjusting a client's sector tilt.

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

State

{"symbol":"XLK"} then XLV, XLE, XLF, one request each. The server fills in the latest completed session.

Questions

roc20ruleroc(C, 20) > 5
Up more than 5% in 20 sessions
stackedruleC > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)
Stacked averages: close > 20 EMA > 50 > 200
quarter_leaderruleroc(C, 63) > 10 and C >= 0.95 * max(H, 63)
Up more than 10% in a quarter, near the high
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symbolroc20rulestackedrulequarter_leaderrulebeat_spyforecast
XLK0.05370.07010.06240.498
XLV0.91570.93840.83220.534
XLE0.8970.92660.93360.55
XLF0.6060.38310.07850.448

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: Up more than 5% in 20 sessions: true for XLV, XLE, XLF of 4. Stacked averages: close > 20 EMA > 50 > 200: true for XLV, XLE of 4. Up more than 10% in a quarter, near the high: true for XLV, XLE of 4. Highest odds for “Beating SPY over a month”: XLE at 55%.

Sectors with stacked averages and a quarter of leadership are the tilt candidates; the beat-SPY forecast is a tie-breaker, not a mandate.

Request JSON (XLK; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "XLK"
  },
  "questions": {
    "roc20": {
      "type": "yes_no",
      "ask": "roc(C, 20) > 5"
    },
    "stacked": {
      "type": "yes_no",
      "ask": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)"
    },
    "quarter_leader": {
      "type": "yes_no",
      "ask": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  }
}
Response JSON (XLK, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "roc20": {
      "yes_no": 0.0537,
      "rule": "roc(C, 20) > 5",
      "basis": "rule"
    },
    "stacked": {
      "yes_no": 0.0701,
      "rule": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)",
      "basis": "rule"
    },
    "quarter_leader": {
      "yes_no": 0.0624,
      "rule": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.498
    }
  },
  "context": {
    "symbol": "XLK",
    "as_of": "2026-10-30"
  }
}

ema max roc sma

Financial advisor / RIA · example 15

Rate check for an income client: SHY vs IEF trend

Before recommending bonds or a fixed product, see whether short and intermediate Treasury ETFs are trending.

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

State

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

Questions

trendruleC > sma(C, 50)
Above the 50-day average
sma50_risingrulesma(C, 50) > ref(sma(C, 50), -10)
The 50-day average is rising
linreg_uprulelinreg(C, 20) > ref(linreg(C, 20), -5)
20-day regression line rising over a week
atr_lowEnglish → ruleIs the 14-day ATR less than 2% of the price?
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

Symboltrendrulesma50_risingrulelinreg_upruleatr_lowruleup_weekforecast
SHY0.89710.16240.8990.94630.594
IEF0.85140.08820.89770.94630.483

true false not known for rules; forecasts are odds. Hover a column for its question.

What it means

Session of 2026-10-30, 2 symbols: Above the 50-day average: true for SHY, IEF of 2. The 50-day average is rising: true for none of 2. 20-day regression line rising over a week: true for SHY, IEF of 2. Is the 14-day ATR less than 2% of the price: true for SHY, IEF of 2. Highest odds for “Higher in a week”: SHY at 59%.

Rising bond prices mean falling yields; the trend rules tell the advisor which way rates have been moving before the conversation.

Request JSON (SHY; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SHY"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "sma50_rising": {
      "type": "yes_no",
      "ask": "sma(C, 50) > ref(sma(C, 50), -10)"
    },
    "linreg_up": {
      "type": "yes_no",
      "ask": "linreg(C, 20) > ref(linreg(C, 20), -5)"
    },
    "atr_low": {
      "type": "yes_no",
      "instructions": "Is the 14-day ATR less than 2% of the price?"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (SHY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.8971,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "sma50_rising": {
      "yes_no": 0.1624,
      "rule": "sma(C, 50) > ref(sma(C, 50), -10)",
      "basis": "rule"
    },
    "linreg_up": {
      "yes_no": 0.899,
      "rule": "linreg(C, 20) > ref(linreg(C, 20), -5)",
      "basis": "rule"
    },
    "atr_low": {
      "yes_no": 0.9463,
      "rule": "atr(14) / C < 0.02",
      "basis": "pattern"
    },
    "up_week": {
      "yes_no": 0.594
    }
  },
  "context": {
    "symbol": "SHY",
    "as_of": "2026-10-30"
  }
}

atr linreg ref sma

Financial advisor / RIA · example 16

Explaining an NVDA split to a client

A client sees a lower share price and more shares; confirm the split history so the advisor can explain it clearly.

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

split_3yEnglish → ruleHas the stock split in the past three years?
ratio4rulelast_split_ratio >= 4
Last split at least 4-for-1
reverseEnglish → ruleWas the last split a reverse split?
announcedEnglish → ruleIs a stock split coming up?
multirulesplits_5y >= 2
Two or more splits in five years

Answers

QuestionAnswerReading
split_3y
Has the stock split in the past three years
compiled to days_since_split <= 1095
0.9463true
ratio4
Last split at least 4-for-1
0.9463true
reverse
Was the last split a reverse split
compiled to reverse_split_last > 0.5
0.1409false
announced
Is a stock split coming up
compiled to days_to_split <= 365
0.0537false
multi
Two or more splits in five years
0.1409false

What it means

For NVDA on the session of 2026-10-30: True now: Has the stock split in the past three years; Last split at least 4-for-1. Not true: Was the last split a reverse split; Is a stock split coming up; Two or more splits in five years.

Split facts come from the corporate-action record and explain share-count changes; they say nothing about value, which is the point to make to the client.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "questions": {
    "split_3y": {
      "type": "yes_no",
      "instructions": "Has the stock split in the past three years?"
    },
    "ratio4": {
      "type": "yes_no",
      "ask": "last_split_ratio >= 4"
    },
    "reverse": {
      "type": "yes_no",
      "instructions": "Was the last split a reverse split?"
    },
    "announced": {
      "type": "yes_no",
      "instructions": "Is a stock split coming up?"
    },
    "multi": {
      "type": "yes_no",
      "ask": "splits_5y >= 2"
    }
  }
}
Response JSON (NVDA, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "split_3y": {
      "yes_no": 0.9463,
      "rule": "days_since_split <= 1095",
      "basis": "pattern"
    },
    "ratio4": {
      "yes_no": 0.9463,
      "rule": "last_split_ratio >= 4",
      "basis": "rule"
    },
    "reverse": {
      "yes_no": 0.1409,
      "rule": "reverse_split_last > 0.5",
      "basis": "pattern"
    },
    "announced": {
      "yes_no": 0.0537,
      "rule": "days_to_split <= 365",
      "basis": "pattern"
    },
    "multi": {
      "yes_no": 0.1409,
      "rule": "splits_5y >= 2",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "NVDA",
    "as_of": "2026-10-30"
  }
}

days_since_split days_to_split last_split_ratio reverse_split_last splits_5y

Financial advisor / RIA · example 17

Stop review on CVX and XOM energy positions

Check whether energy holdings closed below a protective stop level and email the advisor with the result.

ora-fin-0.1.12 symbols, one request each4 questions2 actions
  1. State2 symbols
  2. Questions4 asked
  3. Answersreal, captured
  4. Actions2 rules · dry run

State

{"symbol":"CVX"} then XOM, 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 latest 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
CVX0.0550.05370.05370.496ok
XOM0.05370.05370.05370.506ok

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
else→Emailme
CVX 1 of 2 fired · dry run, nothing sent
stop_hitrule false: skipped
okwould send (dry run)Email → me
{
  "subject": "CVX: stops intact",
  "text": "CVX (2026-10-30) is above its stop levels. 5% drawdown odds: 50%."
}
XOM 1 of 2 fired · dry run, nothing sent
stop_hitrule false: skipped
okwould send (dry run)Email → me
{
  "subject": "XOM: stops intact",
  "text": "XOM (2026-10-30) is above its stop levels. 5% drawdown odds: 51%."
}

What it means

Session of 2026-10-30, 2 symbols: Chandelier exit: 3 ATR under the 22-day high: true for none of 2. Closed under the 20-day low: true for none of 2. Closed below the latest swing low: true for none of 2. Highest odds for “A 5% drawdown within a month”: XOM at 51%. stop_hit fired for none. ok fired for CVX, XOM.

Exact stop checks decide the email; the drawdown forecast is included so the advisor sees the risk even when stops hold.

Request JSON (CVX; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "CVX"
  },
  "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": "stop_hit",
      "when": "chandelier >= 0.6 or swing_low >= 0.6",
      "do": "email",
      "connection": "me",
      "subject": "{{symbol}}: protective stop level broken",
      "message": "{{symbol}} ({{as_of}}) closed through a stop level (chandelier {{chandelier|pct}}, swing low {{swing_low|pct}}). Review client accounts holding it."
    },
    {
      "id": "ok",
      "when": "else",
      "do": "email",
      "connection": "me",
      "subject": "{{symbol}}: stops intact",
      "message": "{{symbol}} ({{as_of}}) is above its stop levels. 5% drawdown odds: {{drop5|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (CVX, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "chandelier": {
      "yes_no": 0.055,
      "rule": "C < highest(H, 22) - 3 * atr(22)",
      "basis": "rule"
    },
    "low_break": {
      "yes_no": 0.0537,
      "rule": "C < lowest(L, 20)",
      "basis": "rule"
    },
    "swing_low": {
      "yes_no": 0.0537,
      "rule": "C < swinglow(5, 1)",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.496
    }
  },
  "context": {
    "symbol": "CVX",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "stop_hit",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "ok",
      "fired": true,
      "status": "dry_run",
      "do": "email",
      "connection": "me",
      "preview": {
        "subject": "CVX: stops intact",
        "text": "CVX (2026-10-30) is above its stop levels. 5% drawdown odds: 50%."
      }
    }
  ]
}

atr highest lowest swinglow

Financial advisor / RIA · example 18

A client wants to buy TSLA today: suitability context

Give the advisor volatility and trend facts to discuss position size before a client buys a volatile stock.

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

State

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

Questions

atr3ruleatr_pct(14) > 3
A typical day moves more than 3%
hv40English → ruleIs 20-day historical volatility above 40%?
trendEnglish → ruleIs the stock above its 50-day moving average?
gap_riskEnglish → ruleIs earnings in the next 14 days?
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month
rally10forecastWill it rally at least 10% at some point in the next month?
A 10% rally within a month

Answers

QuestionAnswerReading
atr3
A typical day moves more than 3%
0.848true
hv40
Is 20-day historical volatility above 40%
compiled to std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) > 0.4
0.3248false
trend
Is the stock above its 50-day moving average
compiled to C > sma(C, 50)
0.8961true
gap_risk
Is earnings in the next 14 days
compiled to days_to_earnings <= 14
0.0537false
drop10
A 10% drawdown within a month
0.63864% · likely
rally10
A 10% rally within a month
0.68769% · likely

What it means

For TSLA on the session of 2026-10-30: True now: A typical day moves more than 3%; Is the stock above its 50-day moving average. Not true: Is 20-day historical volatility above 40%; Is earnings in the next 14 days. Forecasts: A 10% drawdown within a month 64%; A 10% rally within a month 69%.

High ATR and volatility facts argue for a smaller position; both ten-percent forecasts show that big moves are possible in either direction.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA"
  },
  "questions": {
    "atr3": {
      "type": "yes_no",
      "ask": "atr_pct(14) > 3"
    },
    "hv40": {
      "type": "yes_no",
      "instructions": "Is 20-day historical volatility above 40%?"
    },
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 50-day moving average?"
    },
    "gap_risk": {
      "type": "yes_no",
      "instructions": "Is earnings in the next 14 days?"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    },
    "rally10": {
      "type": "yes_no",
      "instructions": "Will it rally at least 10% at some point in the next month?"
    }
  }
}
Response JSON (TSLA, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "atr3": {
      "yes_no": 0.848,
      "rule": "atr_pct(14) > 3",
      "basis": "rule"
    },
    "hv40": {
      "yes_no": 0.3248,
      "rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) > 0.4",
      "basis": "pattern"
    },
    "trend": {
      "yes_no": 0.8961,
      "rule": "C > sma(C, 50)",
      "basis": "comparison"
    },
    "gap_risk": {
      "yes_no": 0.0537,
      "rule": "days_to_earnings <= 14",
      "basis": "pattern"
    },
    "drop10": {
      "yes_no": 0.638
    },
    "rally10": {
      "yes_no": 0.687
    }
  },
  "context": {
    "symbol": "TSLA",
    "as_of": "2026-10-30"
  }
}

atr_pct days_to_earnings log offset sma sqrt std

Financial advisor / RIA · example 19

Is the GLD hedge working for nervous clients?

For clients who asked for a gold allocation, check the gold ETF's trend and momentum against a cooling market.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
near_highruleC >= 0.98 * max(H, 252)
Within 2% of the 52-week high
adxruleadx(14) > 20 and diplus(14) > diminus(14)
Trending up (ADX over 20 and +DI over −DI)
wmarulewma(C, 10) > wma(C, 30)
10-day weighted average above the 30-day
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

QuestionAnswerReading
trend
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.0537false
near_high
Within 2% of the 52-week high
0.0537false
adx
Trending up (ADX over 20 and +DI over −DI)
0.074false
wma
10-day weighted average above the 30-day
0.1787false
beat_spy
Beating SPY over a month
0.54454% · close to even

What it means

For GLD on the session of 2026-10-30: Not true: Is the stock above its 200-day moving average; Within 2% of the 52-week high; Trending up (ADX over 20 and +DI over −DI); 10-day weighted average above the 30-day. Forecasts: Beating SPY over a month 54%.

A trending gold ETF near its high is doing its job as a diversifier; the forecast compares it with the market over the next month.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "GLD"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "near_high": {
      "type": "yes_no",
      "ask": "C >= 0.98 * max(H, 252)"
    },
    "adx": {
      "type": "yes_no",
      "ask": "adx(14) > 20 and diplus(14) > diminus(14)"
    },
    "wma": {
      "type": "yes_no",
      "ask": "wma(C, 10) > wma(C, 30)"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  }
}
Response JSON (GLD, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.0537,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "near_high": {
      "yes_no": 0.0537,
      "rule": "C >= 0.98 * max(H, 252)",
      "basis": "rule"
    },
    "adx": {
      "yes_no": 0.074,
      "rule": "adx(14) > 20 and diplus(14) > diminus(14)",
      "basis": "rule"
    },
    "wma": {
      "yes_no": 0.1787,
      "rule": "wma(C, 10) > wma(C, 30)",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.544
    }
  },
  "context": {
    "symbol": "GLD",
    "as_of": "2026-10-30"
  }
}

adx diminus diplus max sma wma

Financial advisor / RIA · example 20

RMD timing: sell from strength in SCHD or VIG?

When a client must take a required distribution, pick the dividend ETF that is closer to its high to sell from strength.

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

State

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

Questions

near_highruleC >= 0.98 * max(H, 252)
Within 2% of the 52-week high
range_topEnglish → ruleIs the stock in the top 10% of its 20-day range?
rsi50rulersi(C, 14) > 50
RSI above 50
ex_soonruledays_to_ex_div <= 30
Goes ex-dividend within 30 days
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symbolnear_highrulerange_toprulersi50ruleex_soonruledrop5forecastFired
SCHD0.74950.52620.91740.05370.207sell_here
VIG0.79970.40190.91010.05370.114sell_here

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.

near_high >= 0.6 and ex_soon < 0.4→Webhookrebalance-queue
SCHD 1 of 1 fired · dry run, nothing sent
sell_herewould send (dry run)Webhook → rebalance-queue
{
  "action": "propose_sale",
  "reason": "rmd",
  "symbol": "SCHD",
  "p_near_high": 0.7495,
  "p_ex_soon": 0.0537,
  "as_of": "2026-10-30"
}
VIG 1 of 1 fired · dry run, nothing sent
sell_herewould send (dry run)Webhook → rebalance-queue
{
  "action": "propose_sale",
  "reason": "rmd",
  "symbol": "VIG",
  "p_near_high": 0.7997,
  "p_ex_soon": 0.0537,
  "as_of": "2026-10-30"
}

What it means

Session of 2026-10-30, 2 symbols: Within 2% of the 52-week high: true for SCHD, VIG of 2. Is the stock in the top 10% of its 20-day range: true for none of 2. RSI above 50: true for SCHD, VIG of 2. Goes ex-dividend within 30 days: true for none of 2. Highest odds for “A 5% drawdown within a month”: SCHD at 21%. sell_here fired for SCHD, VIG.

The sale proposal queues only for the fund near its high and not about to go ex-dividend; the advisor still approves every trade.

Request JSON (SCHD; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SCHD"
  },
  "questions": {
    "near_high": {
      "type": "yes_no",
      "ask": "C >= 0.98 * max(H, 252)"
    },
    "range_top": {
      "type": "yes_no",
      "instructions": "Is the stock in the top 10% of its 20-day range?"
    },
    "rsi50": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 50"
    },
    "ex_soon": {
      "type": "yes_no",
      "ask": "days_to_ex_div <= 30"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "sell_here",
      "when": "near_high >= 0.6 and ex_soon < 0.4",
      "do": "webhook",
      "connection": "rebalance-queue",
      "body": {
        "action": "propose_sale",
        "reason": "rmd",
        "symbol": "{{symbol}}",
        "p_near_high": "{{near_high}}",
        "p_ex_soon": "{{ex_soon}}",
        "as_of": "{{as_of}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (SCHD, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "near_high": {
      "yes_no": 0.7495,
      "rule": "C >= 0.98 * max(H, 252)",
      "basis": "rule"
    },
    "range_top": {
      "yes_no": 0.5262,
      "rule": "(C - min(L, 20)) / (max(H, 20) - min(L, 20)) >= 0.9",
      "basis": "pattern"
    },
    "rsi50": {
      "yes_no": 0.9174,
      "rule": "rsi(C, 14) > 50",
      "basis": "rule"
    },
    "ex_soon": {
      "yes_no": 0.0537,
      "rule": "days_to_ex_div <= 30",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.207
    }
  },
  "context": {
    "symbol": "SCHD",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "sell_here",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "rebalance-queue",
      "preview": {
        "body": {
          "action": "propose_sale",
          "reason": "rmd",
          "symbol": "SCHD",
          "p_near_high": 0.7495,
          "p_ex_soon": 0.0537,
          "as_of": "2026-10-30"
        }
      }
    }
  ]
}

days_to_ex_div max min rsi

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 Buy side: Wealth manager, Family office, Hedge fund PM, Quant researcher, Portfolio manager (long-only), Risk manager, Private equity, VC / growth investor, Fund-of-funds allocator.

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