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 1–10 of 20 · page 1 of 2

Financial advisor / RIA · example 1

Client review prep: is AAPL still a healthy core holding?

Before a quarterly client meeting, summarize the trend, the last earnings report and the near-term risk of a large position in one request.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
goldenrulesma(C, 50) > sma(C, 200)
50-day above the 200-day
beatEnglish → ruleDid the stock beat on both EPS and revenue last quarter?
earn_soonEnglish → ruleIs earnings in the next 14 days?
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
trend
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.9463true
golden
50-day above the 200-day
0.9463true
beat
Did the stock beat on both EPS and revenue last quarter
compiled to beat_eps_last > 0.5 and beat_revenue_last > 0.5
0.8591true
earn_soon
Is earnings in the next 14 days
compiled to days_to_earnings <= 14
0.9463true
drop5
A 5% drawdown within a month
0.36537% · unlikely
up_week
Higher in a week
0.5959% · close to even

What it means

For AAPL on the session of 2026-10-30: True now: Is the stock above its 200-day moving average; 50-day above the 200-day; Did the stock beat on both EPS and revenue last quarter; Is earnings in the next 14 days. Forecasts: A 5% drawdown within a month 37%; Higher in a week 59%.

Trend and earnings facts give the advisor a plain-language status for the review; the two forecasts frame the near-term risk without promising a direction.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AAPL"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "golden": {
      "type": "yes_no",
      "ask": "sma(C, 50) > sma(C, 200)"
    },
    "beat": {
      "type": "yes_no",
      "instructions": "Did the stock beat on both EPS and revenue last quarter?"
    },
    "earn_soon": {
      "type": "yes_no",
      "instructions": "Is earnings in the next 14 days?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (AAPL, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.9463,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "golden": {
      "yes_no": 0.9463,
      "rule": "sma(C, 50) > sma(C, 200)",
      "basis": "rule"
    },
    "beat": {
      "yes_no": 0.8591,
      "rule": "beat_eps_last > 0.5 and beat_revenue_last > 0.5",
      "basis": "pattern"
    },
    "earn_soon": {
      "yes_no": 0.9463,
      "rule": "days_to_earnings <= 14",
      "basis": "pattern"
    },
    "drop5": {
      "yes_no": 0.365
    },
    "up_week": {
      "yes_no": 0.59
    }
  },
  "context": {
    "symbol": "AAPL",
    "as_of": "2026-10-30"
  }
}

beat_eps_last beat_revenue_last days_to_earnings sma

Financial advisor / RIA · example 2

Concentrated NVDA position: is it stretched enough to trim for a client?

A client holds a large NVDA position after a long run; check whether the stock is extended before suggesting a partial trim and log the decision in the CRM.

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

State

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

Questions

ext_200dEnglish → ruleIs the stock more than 10% above its 200-day moving average?
stretchedruleC > sma(C, 20) + 2 * atr(14)
Stretched: more than 2 ATR above the 20-day
rsi70rulersi(C, 14) > 70
RSI above 70
shootingruleshooting_star()
shooting star candle: Upper wick at least twice the body, lower wick at most 10% of the range, after a five-bar rise.
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

QuestionAnswerReading
ext_200d
Is the stock more than 10% above its 200-day moving average
compiled to C > sma(C, 200) * 1.1
0.06false
stretched
Stretched: more than 2 ATR above the 20-day
0.0537false
rsi70
RSI above 70
0.0537false
shooting
shooting star candle: Upper wick at least twice the body, lower wick at most 10% of the range, after a five-bar rise.
0.0537false
drop10
A 10% drawdown within a month
0.52352% · close to even

Actions

Rules on the answers decide what to send.

stretched >= 0.6 or (ext_200d >= 0.6 and rsi70 >= 0.6)→Webhookcrm-notes
else→Webhookcrm-notes
What each action would send 1 of 2 fired · dry run, nothing sent
trim_noterule false: skipped
no_trimwould send (dry run)Webhook → crm-notes
{
  "type": "advisor_note",
  "symbol": "NVDA",
  "topic": "concentration_review",
  "suggestion": "no_action",
  "p_stretched": 0.0537,
  "as_of": "2026-10-30"
}

What it means

For NVDA on the session of 2026-10-30: Not true: Is the stock more than 10% above its 200-day moving average; Stretched: more than 2 ATR above the 20-day; RSI above 70; shooting star candle: Upper wick at least twice the body, lower wick at most 10% of the range, after a five-bar rise.. Forecasts: A 10% drawdown within a month 52%. Fired: no_trim (Webhook → crm-notes).

Either way a note lands in the CRM, so the file shows the check was done; the trim branch fires only when the stretch rules agree.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "questions": {
    "ext_200d": {
      "type": "yes_no",
      "instructions": "Is the stock more than 10% above its 200-day moving average?"
    },
    "stretched": {
      "type": "yes_no",
      "ask": "C > sma(C, 20) + 2 * atr(14)"
    },
    "rsi70": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 70"
    },
    "shooting": {
      "type": "yes_no",
      "ask": "shooting_star()"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "trim_note",
      "when": "stretched >= 0.6 or (ext_200d >= 0.6 and rsi70 >= 0.6)",
      "do": "webhook",
      "connection": "crm-notes",
      "body": {
        "type": "advisor_note",
        "symbol": "{{symbol}}",
        "topic": "concentration_review",
        "suggestion": "discuss_partial_trim",
        "p_stretched": "{{stretched}}",
        "p_overbought": "{{rsi70}}",
        "p_drop10": "{{drop10}}",
        "as_of": "{{as_of}}"
      }
    },
    {
      "id": "no_trim",
      "when": "else",
      "do": "webhook",
      "connection": "crm-notes",
      "body": {
        "type": "advisor_note",
        "symbol": "{{symbol}}",
        "topic": "concentration_review",
        "suggestion": "no_action",
        "p_stretched": "{{stretched}}",
        "as_of": "{{as_of}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (NVDA, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "ext_200d": {
      "yes_no": 0.06,
      "rule": "C > sma(C, 200) * 1.1",
      "basis": "comparison"
    },
    "stretched": {
      "yes_no": 0.0537,
      "rule": "C > sma(C, 20) + 2 * atr(14)",
      "basis": "rule"
    },
    "rsi70": {
      "yes_no": 0.0537,
      "rule": "rsi(C, 14) > 70",
      "basis": "rule"
    },
    "shooting": {
      "yes_no": 0.0537,
      "rule": "shooting_star()",
      "basis": "rule"
    },
    "drop10": {
      "yes_no": 0.523
    }
  },
  "context": {
    "symbol": "NVDA",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "trim_note",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "no_trim",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "crm-notes",
      "preview": {
        "body": {
          "type": "advisor_note",
          "symbol": "NVDA",
          "topic": "concentration_review",
          "suggestion": "no_action",
          "p_stretched": 0.0537,
          "as_of": "2026-10-30"
        }
      }
    }
  ]
}

atr rsi shooting_star sma

Financial advisor / RIA · example 3

60/40 rebalancing band check on SPY and AGG

Check the stock and bond sleeves of a balanced model each Monday and email the advisor when either sleeve has moved enough to warrant a rebalance review.

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

State

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

Questions

up_10_3mEnglish → ruleIs the stock up more than 10% over the last three months?
down_5mEnglish → ruleIs the stock down more than 5% over the last month?
trendEnglish → ruleIs the stock above its 200-day moving average?
big_moveforecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days

Answers

Symbolup_10_3mruledown_5mruletrendrulebig_moveforecastFired
SPY0.05370.06520.94510.425none
AGG0.05370.05370.2480.274none

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.

up_10_3m >= 0.6 or down_5m >= 0.6→Emailme
SPY 0 of 1 fired · dry run, nothing sent
AGG 0 of 1 fired · dry run, nothing sent

What it means

Session of 2026-10-30, 2 symbols: Is the stock up more than 10% over the last three months: true for none of 2. Is the stock down more than 5% over the last month: true for none of 2. Is the stock above its 200-day moving average: true for SPY of 2. Highest odds for “A big move either way in 5 days”: SPY at 43%. review fired for none.

A quiet Monday means both sleeves are inside their normal range; an email means one leg moved enough that drift is worth checking.

As a scheduled workflow (Mon at 09:15 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": "60/40 rebalancing band check on SPY and AGG",
  "symbols": "SPY AGG",
  "days": [
    1
  ],
  "at_time": "09:15",
  "model": "ora-fin-0.1.1",
  "questions": {
    "up_10_3m": {
      "type": "yes_no",
      "instructions": "Is the stock up more than 10% over the last three months?"
    },
    "down_5m": {
      "type": "yes_no",
      "instructions": "Is the stock down more than 5% over the last month?"
    },
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "big_move": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  },
  "actions": [
    {
      "id": "review",
      "when": "up_10_3m >= 0.6 or down_5m >= 0.6",
      "do": "email",
      "connection": "me",
      "subject": "Rebalance review: {{symbol}} moved",
      "message": "{{symbol}} ({{as_of}}): up over 10% in three months {{up_10_3m|pct}}, down 5% this month {{down_5m|pct}}. Check the 60/40 drift across client accounts."
    }
  ]
}
Request JSON (SPY; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "up_10_3m": {
      "type": "yes_no",
      "instructions": "Is the stock up more than 10% over the last three months?"
    },
    "down_5m": {
      "type": "yes_no",
      "instructions": "Is the stock down more than 5% over the last month?"
    },
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "big_move": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  },
  "actions": [
    {
      "id": "review",
      "when": "up_10_3m >= 0.6 or down_5m >= 0.6",
      "do": "email",
      "connection": "me",
      "subject": "Rebalance review: {{symbol}} moved",
      "message": "{{symbol}} ({{as_of}}): up over 10% in three months {{up_10_3m|pct}}, down 5% this month {{down_5m|pct}}. Check the 60/40 drift across client accounts."
    }
  ],
  "dry_run": true
}
Response JSON (SPY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "up_10_3m": {
      "yes_no": 0.0537,
      "rule": "C / C[-63] - 1 > 0.1",
      "basis": "pattern"
    },
    "down_5m": {
      "yes_no": 0.0652,
      "rule": "C / C[-21] - 1 < -0.05",
      "basis": "pattern"
    },
    "trend": {
      "yes_no": 0.9451,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "big_move": {
      "yes_no": 0.425
    }
  },
  "context": {
    "symbol": "SPY",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "review",
      "fired": false,
      "status": "skipped"
    }
  ]
}

offset sma

Financial advisor / RIA · example 4

Tax-loss harvesting candidate: is PFE down enough and still weak?

In the fourth quarter, find positions with a meaningful loss and a weak trend that may be worth harvesting and replacing.

ora-fin-0.1.1PFE5 questions1 action
  1. StatePFE
  2. Questions5 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

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

Questions

drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
below_200dEnglish → ruleIs the stock below its 200-day moving average?
lh_llEnglish → ruleIs the stock making lower swing highs and lower swing lows?
paysEnglish → ruleDoes the stock pay a dividend?
rally5forecastWill it rally at least 5% at some point in the next month?
A 5% rally within a month

Answers

QuestionAnswerReading
drawdown
More than 20% off the 52-week high
0.0537false
below_200d
Is the stock below its 200-day moving average
compiled to C < sma(C, 200)
0.0537false
lh_ll
Is the stock making lower swing highs and lower swing lows
compiled to (swinghigh(5, 1) < swinghigh(5, 2)) and (swinglow(5, 1) < swinglow(5, 2))
0.1586false
pays
Does the stock pay a dividend
compiled to pays_dividend > 0.5
0.8591true
rally5
A 5% rally within a month
0.43544% · close to even

Actions

Rules on the answers decide what to send.

drawdown >= 0.6 and below_200d >= 0.6→Emailme
What each action would send 0 of 1 fired · dry run, nothing sent
harvest_flagrule false: skipped

What it means

For PFE on the session of 2026-10-30: True now: Does the stock pay a dividend. Not true: More than 20% off the 52-week high; Is the stock below its 200-day moving average; Is the stock making lower swing highs and lower swing lows. Forecasts: A 5% rally within a month 44%. No action fired: every rule was false.

Harvesting is a tax decision first; the rules only flag positions that are both down and in a downtrend, and the forecast is context for timing.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "PFE"
  },
  "questions": {
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "below_200d": {
      "type": "yes_no",
      "instructions": "Is the stock below its 200-day moving average?"
    },
    "lh_ll": {
      "type": "yes_no",
      "instructions": "Is the stock making lower swing highs and lower swing lows?"
    },
    "pays": {
      "type": "yes_no",
      "instructions": "Does the stock pay a dividend?"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "harvest_flag",
      "when": "drawdown >= 0.6 and below_200d >= 0.6",
      "do": "email",
      "connection": "me",
      "subject": "Harvest candidate: {{symbol}}",
      "message": "{{symbol}} ({{as_of}}) is 20% off its high and below the 200-day. Review lots with losses; mind the wash-sale window. Odds of a 5% rally within a month: {{rally5|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (PFE, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "drawdown": {
      "yes_no": 0.0537,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "below_200d": {
      "yes_no": 0.0537,
      "rule": "C < sma(C, 200)",
      "basis": "comparison"
    },
    "lh_ll": {
      "yes_no": 0.1586,
      "rule": "(swinghigh(5, 1) < swinghigh(5, 2)) and (swinglow(5, 1) < swinglow(5, 2))",
      "basis": "pattern"
    },
    "pays": {
      "yes_no": 0.8591,
      "rule": "pays_dividend > 0.5",
      "basis": "pattern"
    },
    "rally5": {
      "yes_no": 0.435
    }
  },
  "context": {
    "symbol": "PFE",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "harvest_flag",
      "fired": false,
      "status": "skipped"
    }
  ]
}

max pays_dividend sma swinghigh swinglow

Financial advisor / RIA · example 5

Retiree income check: are JNJ, PG and KO dividends intact?

For clients living on dividends, confirm each holding still pays, has not cut and keeps growing its payout.

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

State

{"symbol":"JNJ"} then PG, KO, one request each. The server fills in the latest completed session.

Questions

paysrulepays_dividend > 0.5
Pays a dividend
no_cutrulecut_last < 0.5
Did not cut its last dividend
grow25English → ruleHas the stock grown its dividend for 25 years in a row?
yield3English → ruleIs the dividend yield above 3%?
raise_nextforecastWill the company raise its dividend next year?
Raising the dividend next year

Answers

Symbolpaysruleno_cutrulegrow25ruleyield3ruleraise_nextforecast
JNJ0.85910.85910.94630.06480.495
PG0.85910.85910.94630.20910.46
KO0.85910.85910.06830.05370.517

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

What it means

Session of 2026-10-30, 3 symbols: Pays a dividend: true for JNJ, PG, KO of 3. Did not cut its last dividend: true for JNJ, PG, KO of 3. Has the stock grown its dividend for 25 years in a row: true for JNJ, PG of 3. Is the dividend yield above 3%: true for none of 3. Highest odds for “Raising the dividend next year”: KO at 52%.

Payout facts answer from the dividend record; a cut or a broken growth streak is the trigger to talk to the client, not the price.

Request JSON (JNJ; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "JNJ"
  },
  "questions": {
    "pays": {
      "type": "yes_no",
      "ask": "pays_dividend > 0.5"
    },
    "no_cut": {
      "type": "yes_no",
      "ask": "cut_last < 0.5"
    },
    "grow25": {
      "type": "yes_no",
      "instructions": "Has the stock grown its dividend for 25 years in a row?"
    },
    "yield3": {
      "type": "yes_no",
      "instructions": "Is the dividend yield above 3%?"
    },
    "raise_next": {
      "type": "yes_no",
      "instructions": "Will the company raise its dividend next year?"
    }
  }
}
Response JSON (JNJ, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "pays": {
      "yes_no": 0.8591,
      "rule": "pays_dividend > 0.5",
      "basis": "rule"
    },
    "no_cut": {
      "yes_no": 0.8591,
      "rule": "cut_last < 0.5",
      "basis": "rule"
    },
    "grow25": {
      "yes_no": 0.9463,
      "rule": "years_of_growth >= 25",
      "basis": "pattern"
    },
    "yield3": {
      "yes_no": 0.0648,
      "rule": "div_yield_ttm > 3",
      "basis": "pattern"
    },
    "raise_next": {
      "yes_no": 0.495
    }
  },
  "context": {
    "symbol": "JNJ",
    "as_of": "2026-10-30"
  }
}

cut_last div_yield_ttm pays_dividend years_of_growth

Financial advisor / RIA · example 6

Heads-up before MSFT earnings for clients who own it

When a widely held stock reports within days, send the team a Slack heads-up so advisors can expect client calls.

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

State

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

Questions

soonruledays_to_earnings <= 10
Reports earnings within 10 days
amcEnglish → ruleDoes the stock report after the close next time?
big_moveruleabs(last_earnings_move) > 5
Last earnings move bigger than 5%
streakrulebeat_streak >= 4
Beat four quarters in a row
big5forecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days

Answers

QuestionAnswerReading
soon
Reports earnings within 10 days
0.0537false
amc
Does the stock report after the close next time
compiled to next_report_amc > 0.5
0.8591true
big_move
Last earnings move bigger than 5%
0.0537false
streak
Beat four quarters in a row
0.9463true
big5
A big move either way in 5 days
0.39740% · unlikely

Actions

Rules on the answers decide what to send.

soon >= 0.6→Slackadvisor-team
else→Slackadvisor-team
What each action would send 1 of 2 fired · dry run, nothing sent
heads_uprule false: skipped
not_yetwould send (dry run)Slack → advisor-team
{
  "text": "MSFT (2026-10-30): no report in the next 10 days."
}

What it means

For MSFT on the session of 2026-10-30: True now: Does the stock report after the close next time; Beat four quarters in a row. Not true: Reports earnings within 10 days; Last earnings move bigger than 5%. Forecasts: A big move either way in 5 days 40%. Fired: not_yet (Slack → advisor-team).

The team hears about the report before clients do; the else branch keeps the channel honest when nothing is close.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MSFT"
  },
  "questions": {
    "soon": {
      "type": "yes_no",
      "ask": "days_to_earnings <= 10"
    },
    "amc": {
      "type": "yes_no",
      "instructions": "Does the stock report after the close next time?"
    },
    "big_move": {
      "type": "yes_no",
      "ask": "abs(last_earnings_move) > 5"
    },
    "streak": {
      "type": "yes_no",
      "ask": "beat_streak >= 4"
    },
    "big5": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  },
  "actions": [
    {
      "id": "heads_up",
      "when": "soon >= 0.6",
      "do": "slack",
      "connection": "advisor-team",
      "message": "{{symbol}} reports within 10 days (after the close: {{amc|pct}}). Last reaction over 5%: {{big_move|pct}}. Big move in 5 days: {{big5|pct}}. Expect client calls."
    },
    {
      "id": "not_yet",
      "when": "else",
      "do": "slack",
      "connection": "advisor-team",
      "message": "{{symbol}} ({{as_of}}): no report in the next 10 days."
    }
  ],
  "dry_run": true
}
Response JSON (MSFT, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "soon": {
      "yes_no": 0.0537,
      "rule": "days_to_earnings <= 10",
      "basis": "rule"
    },
    "amc": {
      "yes_no": 0.8591,
      "rule": "next_report_amc > 0.5",
      "basis": "pattern"
    },
    "big_move": {
      "yes_no": 0.0537,
      "rule": "abs(last_earnings_move) > 5",
      "basis": "rule"
    },
    "streak": {
      "yes_no": 0.9463,
      "rule": "beat_streak >= 4",
      "basis": "rule"
    },
    "big5": {
      "yes_no": 0.397
    }
  },
  "context": {
    "symbol": "MSFT",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "heads_up",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "not_yet",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "advisor-team",
      "preview": {
        "text": "MSFT (2026-10-30): no report in the next 10 days."
      }
    }
  ]
}

abs beat_streak days_to_earnings last_earnings_move next_report_amc

Financial advisor / RIA · example 7

Should we send a client letter? SPY drawdown and volatility check

Decide whether market conditions justify a reassurance note to clients: drawdown depth, volatility and trend.

ora-fin-0.1.1SPY5 questions1 action
  1. StateSPY
  2. Questions5 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

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

Questions

pullbackEnglish → ruleHas the stock pulled back at least 5% from its 20-day high?
bearEnglish → ruleIs the stock in bear-market territory, more than 20% below its 52-week high?
hvEnglish → ruleIs 20-day historical volatility above 25%?
trendEnglish → ruleIs the stock above its 200-day moving average?
vol_upforecastWill volatility be higher over the next month?
Higher volatility next 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.0647false
bear
Is the stock in bear-market territory, more than 20% below its 52-week high
compiled to C < 0.8 * max(H, 252)
0.0537false
hv
Is 20-day historical volatility above 25%
compiled to std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) > 0.25
0.0537false
trend
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.9451true
vol_up
Higher volatility next month
0.6969% · likely

Actions

Rules on the answers decide what to send.

pullback >= 0.6 or hv >= 0.6→Emailcompliance-review
What each action would send 0 of 1 fired · dry run, nothing sent
draft_letterrule false: skipped

What it means

For SPY 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; Is the stock in bear-market territory, more than 20% below its 52-week high; Is 20-day historical volatility above 25%. Forecasts: Higher volatility next month 69%. No action fired: every rule was false.

The letter goes to compliance for review only when the market has actually pulled back or turned volatile; otherwise no outreach is needed.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "pullback": {
      "type": "yes_no",
      "instructions": "Has the stock pulled back at least 5% from its 20-day high?"
    },
    "bear": {
      "type": "yes_no",
      "instructions": "Is the stock in bear-market territory, more than 20% below its 52-week high?"
    },
    "hv": {
      "type": "yes_no",
      "instructions": "Is 20-day historical volatility above 25%?"
    },
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will volatility be higher over the next month?"
    }
  },
  "actions": [
    {
      "id": "draft_letter",
      "when": "pullback >= 0.6 or hv >= 0.6",
      "do": "email",
      "connection": "compliance-review",
      "subject": "Draft client letter: market pullback ({{as_of}})",
      "message": "SPY is 5% off its 20-day high ({{pullback|pct}}) or volatility is elevated ({{hv|pct}}). Trend above the 200-day: {{trend|pct}}. Please review a reassurance letter for distribution."
    }
  ],
  "dry_run": true
}
Response JSON (SPY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "pullback": {
      "yes_no": 0.0647,
      "rule": "C <= max(H, 20) * 0.95",
      "basis": "pattern"
    },
    "bear": {
      "yes_no": 0.0537,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "pattern"
    },
    "hv": {
      "yes_no": 0.0537,
      "rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) > 0.25",
      "basis": "pattern"
    },
    "trend": {
      "yes_no": 0.9451,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "vol_up": {
      "yes_no": 0.69
    }
  },
  "context": {
    "symbol": "SPY",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "draft_letter",
      "fired": false,
      "status": "skipped"
    }
  ]
}

log max offset sma sqrt std

Financial advisor / RIA · example 8

Onboarding a new client: screen their legacy holdings

Run the same quality and trend questions on each stock a new client transfers in, to prioritize what to review first.

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

State

{"symbol":"T"} then VZ, INTC, DIS, BA, one request each. The server fills in the latest completed session.

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
cutEnglish → ruleDid the stock cut its dividend last time?
missEnglish → ruleHas the stock missed EPS estimates in any of the last 4 quarters?
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

Symboltrendruledrawdownrulecutrulemissruledrop10forecast
T0.06740.8450.14090.14090.463
VZ0.34480.08790.14090.14090.421
INTC0.08610.94630.14090.14090.836
DIS0.94350.05370.14090.14090.328
BA0.05540.92960.14090.85910.426

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

What it means

Session of 2026-10-30, 5 symbols: Is the stock above its 200-day moving average: true for DIS of 5. More than 20% off the 52-week high: true for T, INTC, BA of 5. Did the stock cut its dividend last time: true for none of 5. Has the stock missed EPS estimates in any of the last 4 quarters: true for BA of 5. Highest odds for “A 10% drawdown within a month”: INTC at 84%.

Holdings in a drawdown with a recent dividend cut or earnings misses go to the top of the review list; the rest can wait for the regular cycle.

Request JSON (T; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "T"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "cut": {
      "type": "yes_no",
      "instructions": "Did the stock cut its dividend last time?"
    },
    "miss": {
      "type": "yes_no",
      "instructions": "Has the stock missed EPS estimates in any of the last 4 quarters?"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  }
}
Response JSON (T, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.0674,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "drawdown": {
      "yes_no": 0.845,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "cut": {
      "yes_no": 0.1409,
      "rule": "cut_last > 0.5",
      "basis": "pattern"
    },
    "miss": {
      "yes_no": 0.1409,
      "rule": "misses_last4 >= 1",
      "basis": "pattern"
    },
    "drop10": {
      "yes_no": 0.463
    }
  },
  "context": {
    "symbol": "T",
    "as_of": "2026-10-30"
  }
}

cut_last max misses_last4 sma

Financial advisor / RIA · example 9

Is TLT still falling? Duration check for conservative models

Before adding duration for a conservative client, check the long-bond ETF's trend, momentum and recent volatility.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
sma50_fallingEnglish → ruleIs the 50-day moving average falling, lower than 5 sessions ago?
macdEnglish → ruleIs MACD above zero?
hv_lowEnglish → ruleIs 20-day historical volatility below 20%?
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
trend
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.1127false
sma50_falling
Is the 50-day moving average falling, lower than 5 sessions ago
compiled to sma(C, 50) < ref(sma(C, 50), -5)
0.7064true
macd
Is MACD above zero
compiled to macd(C) > 0
0.8818true
hv_low
Is 20-day historical volatility below 20%
compiled to std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2
0.9463true
up_week
Higher in a week
0.56156% · close to even

What it means

For TLT on the session of 2026-10-30: True now: Is the 50-day moving average falling, lower than 5 sessions ago; Is MACD above zero; Is 20-day historical volatility below 20%. Not true: Is the stock above its 200-day moving average. Forecasts: Higher in a week 56%.

A falling 50-day and a price below the 200-day argue for staging any duration add; the forecast adds the near-term odds.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TLT"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "sma50_falling": {
      "type": "yes_no",
      "instructions": "Is the 50-day moving average falling, lower than 5 sessions ago?"
    },
    "macd": {
      "type": "yes_no",
      "instructions": "Is MACD above zero?"
    },
    "hv_low": {
      "type": "yes_no",
      "instructions": "Is 20-day historical volatility below 20%?"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (TLT, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.1127,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "sma50_falling": {
      "yes_no": 0.7064,
      "rule": "sma(C, 50) < ref(sma(C, 50), -5)",
      "basis": "pattern"
    },
    "macd": {
      "yes_no": 0.8818,
      "rule": "macd(C) > 0",
      "basis": "pattern"
    },
    "hv_low": {
      "yes_no": 0.9463,
      "rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2",
      "basis": "pattern"
    },
    "up_week": {
      "yes_no": 0.561
    }
  },
  "context": {
    "symbol": "TLT",
    "as_of": "2026-10-30"
  }
}

log macd offset ref sma sqrt std

Financial advisor / RIA · example 10

A client asks about HD's big drop: was it unusual?

When a client calls about a down day, check if the move was large for the stock and whether there was an event behind it.

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

State

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

Questions

big_atrruleabs(C - C[-1]) > 1.5 * atr(14)
Today's move was bigger than 1.5 ATR
down_volruleC < C[-1] and V > 1.5 * ref(avg(V, 20), -1)
Down on heavy volume
earn_recentEnglish → ruleDid the stock report earnings in the last 7 days?
below_50dEnglish → ruleIs the stock more than 5% below its 50-day moving average?
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

QuestionAnswerReading
big_atr
Today's move was bigger than 1.5 ATR
0.0537false
down_vol
Down on heavy volume
0.0692false
earn_recent
Did the stock report earnings in the last 7 days
compiled to days_since_earnings <= 7
0.0537false
below_50d
Is the stock more than 5% below its 50-day moving average
compiled to C < sma(C, 50) * 0.95
0.0677false
drop5
A 5% drawdown within a month
0.45746% · close to even

What it means

For HD on the session of 2026-10-30: Not true: Today's move was bigger than 1.5 ATR; Down on heavy volume; Did the stock report earnings in the last 7 days; Is the stock more than 5% below its 50-day moving average. Forecasts: A 5% drawdown within a month 46%.

If the move was within its normal ATR range and not around earnings, the advisor can explain it as ordinary volatility.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "HD"
  },
  "questions": {
    "big_atr": {
      "type": "yes_no",
      "ask": "abs(C - C[-1]) > 1.5 * atr(14)"
    },
    "down_vol": {
      "type": "yes_no",
      "ask": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)"
    },
    "earn_recent": {
      "type": "yes_no",
      "instructions": "Did the stock report earnings in the last 7 days?"
    },
    "below_50d": {
      "type": "yes_no",
      "instructions": "Is the stock more than 5% below its 50-day moving average?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}
Response JSON (HD, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "big_atr": {
      "yes_no": 0.0537,
      "rule": "abs(C - C[-1]) > 1.5 * atr(14)",
      "basis": "rule"
    },
    "down_vol": {
      "yes_no": 0.0692,
      "rule": "C < C[-1] and V > 1.5 * ref(avg(V, 20), -1)",
      "basis": "rule"
    },
    "earn_recent": {
      "yes_no": 0.0537,
      "rule": "days_since_earnings <= 7",
      "basis": "pattern"
    },
    "below_50d": {
      "yes_no": 0.0677,
      "rule": "C < sma(C, 50) * 0.95",
      "basis": "comparison"
    },
    "drop5": {
      "yes_no": 0.457
    }
  },
  "context": {
    "symbol": "HD",
    "as_of": "2026-10-30"
  }
}

abs atr avg days_since_earnings offset ref 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 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.