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

Family office: 20 ways to use Ora

A concentrated, multi-asset book with a small team: watch everything, act on exceptions. Each example is a complete, runnable request with the real answers it returned (48 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 13offset 5max 5atr 5log 4sqrt 4std 4roc 4beat_eps_last 3lowest 3avg 3highest 3beat_revenue_last 2doji 2min 2rsi 2outside_bar 2swinghigh 2swinglow 2ref 2raised_last 1years_of_growth 1adx 1diminus 1diplus 1macd 1macdsignal 1revenue_growth_yoy 1mean 1median 1crossup 1eps_growth_yoy 1last_earnings_gap 1pre_earnings_close 1gravestone_doji 1inside_bar 1marubozu 1spinning_top 1ema 1bblower 1bbmid 1bbupper 1cut_last 1days_to_ex_div 1div_ttm 1div_yield_ttm 1pays_dividend 1atr_pct 1cci 1abs 1

Examples 1–10 of 20 · page 1 of 2

Family office · example 1

Monitoring a legacy JNJ stake for the family

The family holds a large, low-basis JNJ position; watch trend, dividend and earnings so the principals hear about changes first.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
growruleyears_of_growth >= 10
Ten years of dividend growth
raisedruleraised_last > 0.5
Raised its last dividend
beatEnglish → ruleDid the stock beat EPS estimates last quarter?
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

QuestionAnswerReading
trend
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.9454true
grow
Ten years of dividend growth
0.9463true
raised
Raised its last dividend
0.1409false
beat
Did the stock beat EPS estimates last quarter
compiled to beat_eps_last > 0.5
0.8591true
drop10
A 10% drawdown within a month
0.46146% · close to even

Actions

Rules on the answers decide what to send.

trend < 0.4 or raised < 0.4→Emailprincipals
What each action would send 1 of 1 fired · dry run, nothing sent
principal_notewould send (dry run)Email → principals
{
  "subject": "Legacy stake update: JNJ",
  "text": "JNJ (2026-10-30): above the 200-day 95%, raised last dividend 14%, beat last quarter 86%. 10% drawdown odds 46%."
}

What it means

For JNJ on the session of 2026-10-30: True now: Is the stock above its 200-day moving average; Ten years of dividend growth; Did the stock beat EPS estimates last quarter. Not true: Raised its last dividend. Forecasts: A 10% drawdown within a month 46%. Fired: principal_note (Email → principals).

The principals get a note only when the trend or the dividend raise breaks; a low-basis stake is not traded on noise.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "JNJ"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "grow": {
      "type": "yes_no",
      "ask": "years_of_growth >= 10"
    },
    "raised": {
      "type": "yes_no",
      "ask": "raised_last > 0.5"
    },
    "beat": {
      "type": "yes_no",
      "instructions": "Did the stock beat EPS estimates last quarter?"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "principal_note",
      "when": "trend < 0.4 or raised < 0.4",
      "do": "email",
      "connection": "principals",
      "subject": "Legacy stake update: {{symbol}}",
      "message": "{{symbol}} ({{as_of}}): above the 200-day {{trend|pct}}, raised last dividend {{raised|pct}}, beat last quarter {{beat|pct}}. 10% drawdown odds {{drop10|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (JNJ, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.9454,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "grow": {
      "yes_no": 0.9463,
      "rule": "years_of_growth >= 10",
      "basis": "rule"
    },
    "raised": {
      "yes_no": 0.1409,
      "rule": "raised_last > 0.5",
      "basis": "rule"
    },
    "beat": {
      "yes_no": 0.8591,
      "rule": "beat_eps_last > 0.5",
      "basis": "pattern"
    },
    "drop10": {
      "yes_no": 0.461
    }
  },
  "context": {
    "symbol": "JNJ",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "principal_note",
      "fired": true,
      "status": "dry_run",
      "do": "email",
      "connection": "principals",
      "preview": {
        "subject": "Legacy stake update: JNJ",
        "text": "JNJ (2026-10-30): above the 200-day 95%, raised last dividend 14%, beat last quarter 86%. 10% drawdown odds 46%."
      }
    }
  ]
}

beat_eps_last raised_last sma years_of_growth

Family office · example 2

One morning read across the family's whole book

Before the open each weekday, run the same three checks on every liquid holding and post exceptions to the team channel.

ora-fin-0.1.16 symbols, one request each3 questions1 actionworkflow · Mon–Fri at 08:45 ET
  1. ScheduleMon–Fri at 08:45 ET
  2. State6 symbols
  3. Questions3 asked
  4. Answersreal, captured
  5. Actions1 rule · dry run

State

{"symbol":"SPY"} then TLT, GLD, VNQ, EEM, IBIT, one request each. The server fills in the latest completed session.

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
breakdownruleC < lowest(L, 20)
Closed under the 20-day low
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symboltrendrulebreakdownruledrop5forecastFired
SPY0.94510.62710.203exception
TLT0.11270.05370.164none
GLD0.05370.72860.435exception
VNQ0.62850.05370.218none
EEM0.14490.56780.422none
IBIT0.72340.73420.566exception

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.

breakdown >= 0.6 or drop5 >= 0.55→Slackfo-investments
SPY 1 of 1 fired · dry run, nothing sent
exceptionwould send (dry run)Slack → fo-investments
{
  "text": "SPY (2026-10-30): exception. 20-day breakdown 63%, 5% drawdown odds 20%, above 200-day 95%."
}
TLT 0 of 1 fired · dry run, nothing sent
GLD 1 of 1 fired · dry run, nothing sent
exceptionwould send (dry run)Slack → fo-investments
{
  "text": "GLD (2026-10-30): exception. 20-day breakdown 73%, 5% drawdown odds 44%, above 200-day 5%."
}
VNQ 0 of 1 fired · dry run, nothing sent
EEM 0 of 1 fired · dry run, nothing sent
IBIT 1 of 1 fired · dry run, nothing sent
exceptionwould send (dry run)Slack → fo-investments
{
  "text": "IBIT (2026-10-30): exception. 20-day breakdown 73%, 5% drawdown odds 57%, above 200-day 72%."
}

What it means

Session of 2026-10-30, 6 symbols: Is the stock above its 200-day moving average: true for SPY, VNQ, IBIT of 6. Closed under the 20-day low: true for SPY, GLD, IBIT of 6. Highest odds for “A 5% drawdown within a month”: IBIT at 57%. exception fired for SPY, GLD, IBIT.

A small team cannot watch six asset classes all day; the workflow posts only the exceptions, so a quiet channel means nothing broke.

As a scheduled workflow (Mon–Fri at 08: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": "One morning read across the family's whole book",
  "symbols": "SPY TLT GLD VNQ EEM IBIT",
  "days": [
    1,
    2,
    3,
    4,
    5
  ],
  "at_time": "08:45",
  "model": "ora-fin-0.1.1",
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "breakdown": {
      "type": "yes_no",
      "ask": "C < lowest(L, 20)"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "exception",
      "when": "breakdown >= 0.6 or drop5 >= 0.55",
      "do": "slack",
      "connection": "fo-investments",
      "message": "{{symbol}} ({{as_of}}): exception. 20-day breakdown {{breakdown|pct}}, 5% drawdown odds {{drop5|pct}}, above 200-day {{trend|pct}}."
    }
  ]
}
Request JSON (SPY; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "breakdown": {
      "type": "yes_no",
      "ask": "C < lowest(L, 20)"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "exception",
      "when": "breakdown >= 0.6 or drop5 >= 0.55",
      "do": "slack",
      "connection": "fo-investments",
      "message": "{{symbol}} ({{as_of}}): exception. 20-day breakdown {{breakdown|pct}}, 5% drawdown odds {{drop5|pct}}, above 200-day {{trend|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (SPY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.9451,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "breakdown": {
      "yes_no": 0.6271,
      "rule": "C < lowest(L, 20)",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.203
    }
  },
  "context": {
    "symbol": "SPY",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "exception",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "fo-investments",
      "preview": {
        "text": "SPY (2026-10-30): exception. 20-day breakdown 63%, 5% drawdown odds 20%, above 200-day 95%."
      }
    }
  ]
}

lowest sma

Family office · example 3

Bitcoin allocation through IBIT: volatility and trend

The family keeps a small bitcoin sleeve via the spot ETF; check trend and volatility before topping it up.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 50-day moving average?
hvrulestd(log(C / C[-1]), 20) * sqrt(252) > 0.4
Annualized 20-day volatility above 40%
adxruleadx(14) > 20 and diplus(14) > diminus(14)
Trending up (ADX over 20 and +DI over −DI)
macdEnglish → ruleIs the MACD line above its signal line?
rally10forecastWill it rally at least 10% at some point in the next month?
A 10% rally within a month
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

QuestionAnswerReading
trend
Is the stock above its 50-day moving average
compiled to C > sma(C, 50)
0.1649false
hv
Annualized 20-day volatility above 40%
0.1239false
adx
Trending up (ADX over 20 and +DI over −DI)
0.1265false
macd
Is the MACD line above its signal line
compiled to macd(C) > macdsignal(C)
0.1377false
rally10
A 10% rally within a month
0.6464% · likely
drop10
A 10% drawdown within a month
0.56657% · close to even

What it means

For IBIT on the session of 2026-10-30: Not true: Is the stock above its 50-day moving average; Annualized 20-day volatility above 40%; Trending up (ADX over 20 and +DI over −DI); Is the MACD line above its signal line. Forecasts: A 10% rally within a month 64%; A 10% drawdown within a month 57%.

Bitcoin's volatility makes both ten-percent forecasts meaningful; the trend rules decide whether a top-up chases a falling sleeve.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "IBIT"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 50-day moving average?"
    },
    "hv": {
      "type": "yes_no",
      "ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4"
    },
    "adx": {
      "type": "yes_no",
      "ask": "adx(14) > 20 and diplus(14) > diminus(14)"
    },
    "macd": {
      "type": "yes_no",
      "instructions": "Is the MACD line above its signal line?"
    },
    "rally10": {
      "type": "yes_no",
      "instructions": "Will it rally at least 10% at some point in the next month?"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  }
}
Response JSON (IBIT, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.1649,
      "rule": "C > sma(C, 50)",
      "basis": "comparison"
    },
    "hv": {
      "yes_no": 0.1239,
      "rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.4",
      "basis": "rule"
    },
    "adx": {
      "yes_no": 0.1265,
      "rule": "adx(14) > 20 and diplus(14) > diminus(14)",
      "basis": "rule"
    },
    "macd": {
      "yes_no": 0.1377,
      "rule": "macd(C) > macdsignal(C)",
      "basis": "comparison"
    },
    "rally10": {
      "yes_no": 0.64
    },
    "drop10": {
      "yes_no": 0.566
    }
  },
  "context": {
    "symbol": "IBIT",
    "as_of": "2026-10-30"
  }
}

adx diminus diplus log macd macdsignal offset sma sqrt std

Family office · example 4

Public comps for a private software stake: CRM, ADBE, NOW, INTU

Mark a direct private software investment against public peers: are they trending and beating estimates?

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

State

{"symbol":"CRM"} then ADBE, NOW, INTU, one request each. The server fills in the latest completed session.

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
beatrulebeat_eps_last > 0.5 and beat_revenue_last > 0.5
Beat on EPS and revenue last quarter
rev_gEnglish → ruleDid revenue grow more than 5% year over year?
drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symboltrendrulebeatrulerev_gruledrawdownrulebeat_spyforecast
CRM0.91070.85910.94630.18620.551
ADBE0.48940.85910.94630.94450.519
NOW0.17280.14090.94630.94630.355
INTU0.24530.85910.94630.94630.508

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: Is the stock above its 200-day moving average: true for CRM of 4. Beat on EPS and revenue last quarter: true for CRM, ADBE, INTU of 4. Did revenue grow more than 5% year over year: true for CRM, ADBE, NOW, INTU of 4. More than 20% off the 52-week high: true for ADBE, NOW, INTU of 4. Highest odds for “Beating SPY over a month”: CRM at 55%.

If public peers are in drawdowns and missing, the private mark deserves a closer look; healthy comps support the current valuation.

Request JSON (CRM; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "CRM"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "beat": {
      "type": "yes_no",
      "ask": "beat_eps_last > 0.5 and beat_revenue_last > 0.5"
    },
    "rev_g": {
      "type": "yes_no",
      "instructions": "Did revenue grow more than 5% year over year?"
    },
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  }
}
Response JSON (CRM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.9107,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "beat": {
      "yes_no": 0.8591,
      "rule": "beat_eps_last > 0.5 and beat_revenue_last > 0.5",
      "basis": "rule"
    },
    "rev_g": {
      "yes_no": 0.9463,
      "rule": "revenue_growth_yoy > 5",
      "basis": "pattern"
    },
    "drawdown": {
      "yes_no": 0.1862,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.551
    }
  },
  "context": {
    "symbol": "CRM",
    "as_of": "2026-10-30"
  }
}

beat_eps_last beat_revenue_last max revenue_growth_yoy sma

Family office · example 5

Gift appreciated NVDA shares to the foundation now?

Donating appreciated shares near a high maximizes the gift; check whether the stock sits near its high and is stretched.

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

State

{"symbol":"NVDA"} 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?
stretchedruleC > sma(C, 20) + 2 * atr(14)
Stretched: more than 2 ATR above the 20-day
doji_runruledoji() and roc(C, 20) > 10
Doji after a 10% month
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

QuestionAnswerReading
near_high
Within 2% of the 52-week high
0.0537false
range_top
Is the stock in the top 10% of its 20-day range
compiled to (C - min(L, 20)) / (max(H, 20) - min(L, 20)) >= 0.9
0.0553false
stretched
Stretched: more than 2 ATR above the 20-day
0.0537false
doji_run
Doji after a 10% month
0.0537false
drop5
A 5% drawdown within a month
0.52352% · close to even

Actions

Rules on the answers decide what to send.

near_high >= 0.6→Emailfoundation-counsel
What each action would send 0 of 1 fired · dry run, nothing sent
gift_windowrule false: skipped

What it means

For NVDA on the session of 2026-10-30: Not true: Within 2% of the 52-week high; Is the stock in the top 10% of its 20-day range; Stretched: more than 2 ATR above the 20-day; Doji after a 10% month. Forecasts: A 5% drawdown within a month 52%. No action fired: every rule was false.

Counsel is told when the shares are near their high; the gift decision itself stays with the family and its advisers.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVDA"
  },
  "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?"
    },
    "stretched": {
      "type": "yes_no",
      "ask": "C > sma(C, 20) + 2 * atr(14)"
    },
    "doji_run": {
      "type": "yes_no",
      "ask": "doji() and roc(C, 20) > 10"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "gift_window",
      "when": "near_high >= 0.6",
      "do": "email",
      "connection": "foundation-counsel",
      "subject": "Gift window: {{symbol}} near its high",
      "message": "{{symbol}} ({{as_of}}) is within 2% of its 52-week high ({{near_high|pct}}). Stretched {{stretched|pct}}. Consider transferring the planned gift lot this week."
    }
  ],
  "dry_run": true
}
Response JSON (NVDA, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "near_high": {
      "yes_no": 0.0537,
      "rule": "C >= 0.98 * max(H, 252)",
      "basis": "rule"
    },
    "range_top": {
      "yes_no": 0.0553,
      "rule": "(C - min(L, 20)) / (max(H, 20) - min(L, 20)) >= 0.9",
      "basis": "pattern"
    },
    "stretched": {
      "yes_no": 0.0537,
      "rule": "C > sma(C, 20) + 2 * atr(14)",
      "basis": "rule"
    },
    "doji_run": {
      "yes_no": 0.0537,
      "rule": "doji() and roc(C, 20) > 10",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.523
    }
  },
  "context": {
    "symbol": "NVDA",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "gift_window",
      "fired": false,
      "status": "skipped"
    }
  ]
}

atr doji max min roc sma

Family office · example 6

Real assets sleeve: gold, silver and oil ETFs

Check the trend and momentum of the real-asset hedges the family holds against inflation.

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

State

{"symbol":"GLD"} then SLV, USO, one request each. 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
rocruleroc(C, 20) > 5
Up more than 5% in 20 sessions
meanruleC > mean(C, 100)
Above the 100-day mean
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

Symboltrendrulegoldenrulerocrulemeanruleup_weekforecast
GLD0.05370.05370.08390.05620.566
SLV0.05370.05370.06560.05370.484
USO0.94630.94630.87270.94620.568

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: Is the stock above its 200-day moving average: true for USO of 3. 50-day above the 200-day: true for USO of 3. Up more than 5% in 20 sessions: true for USO of 3. Above the 100-day mean: true for USO of 3. Highest odds for “Higher in a week”: USO at 57%.

Hedges that trend with the inflation story keep their weight; a sleeve below every average is the one to review.

Request JSON (GLD; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "GLD"
  },
  "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)"
    },
    "roc": {
      "type": "yes_no",
      "ask": "roc(C, 20) > 5"
    },
    "mean": {
      "type": "yes_no",
      "ask": "C > mean(C, 100)"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (GLD, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.0537,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "golden": {
      "yes_no": 0.0537,
      "rule": "sma(C, 50) > sma(C, 200)",
      "basis": "rule"
    },
    "roc": {
      "yes_no": 0.0839,
      "rule": "roc(C, 20) > 5",
      "basis": "rule"
    },
    "mean": {
      "yes_no": 0.0562,
      "rule": "C > mean(C, 100)",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.566
    }
  },
  "context": {
    "symbol": "GLD",
    "as_of": "2026-10-30"
  }
}

mean roc sma

Family office · example 7

Can we sell a large XOM block without moving the price?

Before a large sale for an estate payment, check daily dollar volume and volatility to plan how many days to spread it over.

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

State

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

Questions

liquidruleavg(C * V, 20) > 100000000
Trades more than $100 million a day
vol_dryruleV < 0.6 * avg(V, 20)
Volume under 60% of normal
atrEnglish → ruleIs the 14-day ATR less than 2% of the price?
median_volruleV > median(V, 20)
Today's volume above its 20-day median
big_moveforecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days

Answers

QuestionAnswerReading
liquid
Trades more than $100 million a day
0.9463true
vol_dry
Volume under 60% of normal
0.0537false
atr
Is the 14-day ATR less than 2% of the price
compiled to atr(14) / C < 0.02
0.1526false
median_vol
Today's volume above its 20-day median
0.9417true
big_move
A big move either way in 5 days
0.39439% · unlikely

Actions

Rules on the answers decide what to send.

liquid >= 0.6→Webhookbroker-oms
else→Emailme
What each action would send 1 of 2 fired · dry run, nothing sent
work_orderwould send (dry run)Webhook → broker-oms
{
  "side": "sell",
  "symbol": "XOM",
  "algo": "vwap",
  "days": 3,
  "max_pct_volume": 0.1,
  "p_liquid": 0.9463,
  "p_dry_volume": 0.0537,
  "as_of": "2026-10-30"
}
slow_downrule false: skipped

What it means

For XOM on the session of 2026-10-30: True now: Trades more than $100 million a day; Today's volume above its 20-day median. Not true: Volume under 60% of normal; Is the 14-day ATR less than 2% of the price. Forecasts: A big move either way in 5 days 39%. Fired: work_order (Webhook → broker-oms).

Deep liquidity sends a three-day VWAP order to the broker; thinner trading means the sale is stretched out instead.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "XOM"
  },
  "questions": {
    "liquid": {
      "type": "yes_no",
      "ask": "avg(C * V, 20) > 100000000"
    },
    "vol_dry": {
      "type": "yes_no",
      "ask": "V < 0.6 * avg(V, 20)"
    },
    "atr": {
      "type": "yes_no",
      "instructions": "Is the 14-day ATR less than 2% of the price?"
    },
    "median_vol": {
      "type": "yes_no",
      "ask": "V > median(V, 20)"
    },
    "big_move": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  },
  "actions": [
    {
      "id": "work_order",
      "when": "liquid >= 0.6",
      "do": "webhook",
      "connection": "broker-oms",
      "body": {
        "side": "sell",
        "symbol": "{{symbol}}",
        "algo": "vwap",
        "days": 3,
        "max_pct_volume": 0.1,
        "p_liquid": "{{liquid}}",
        "p_dry_volume": "{{vol_dry}}",
        "as_of": "{{as_of}}"
      }
    },
    {
      "id": "slow_down",
      "when": "else",
      "do": "email",
      "connection": "me",
      "subject": "{{symbol}}: thin liquidity, stretch the sale",
      "message": "{{symbol}} ({{as_of}}) trades under $100M a day on average. Spread the block over more sessions."
    }
  ],
  "dry_run": true
}
Response JSON (XOM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "liquid": {
      "yes_no": 0.9463,
      "rule": "avg(C * V, 20) > 100000000",
      "basis": "rule"
    },
    "vol_dry": {
      "yes_no": 0.0537,
      "rule": "V < 0.6 * avg(V, 20)",
      "basis": "rule"
    },
    "atr": {
      "yes_no": 0.1526,
      "rule": "atr(14) / C < 0.02",
      "basis": "pattern"
    },
    "median_vol": {
      "yes_no": 0.9417,
      "rule": "V > median(V, 20)",
      "basis": "rule"
    },
    "big_move": {
      "yes_no": 0.394
    }
  },
  "context": {
    "symbol": "XOM",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "work_order",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "broker-oms",
      "preview": {
        "body": {
          "side": "sell",
          "symbol": "XOM",
          "algo": "vwap",
          "days": 3,
          "max_pct_volume": 0.1,
          "p_liquid": 0.9463,
          "p_dry_volume": 0.0537,
          "as_of": "2026-10-30"
        }
      }
    },
    {
      "id": "slow_down",
      "fired": false,
      "status": "skipped"
    }
  ]
}

atr avg median

Family office · example 8

Rates watch for a family real-estate refinance: TLT and IEF

Bond prices rise when yields fall; watch long and intermediate Treasury ETFs for a breakout that could mean a refinance window.

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":"TLT"} then IEF, one request each. The server fills in the latest completed session.

Questions

breakoutruleC > highest(C, 20)
20-day closing breakout
cross50rulecrossup(C, sma(C, 50))
Crossed above the 50-day today
rsi50rulersi(C, 14) > 50
RSI above 50
trendEnglish → ruleIs the stock above its 200-day moving average?
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

Symbolbreakoutrulecross50rulersi50ruletrendruleup_weekforecastFired
TLT0.54620.050.87620.11270.561none
IEF0.73310.050.9080.15760.483refi_window

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.

breakout >= 0.6 or cross50 >= 0.6→Emailreal-estate-team
TLT 0 of 1 fired · dry run, nothing sent
IEF 1 of 1 fired · dry run, nothing sent
refi_windowwould send (dry run)Email → real-estate-team
{
  "subject": "Possible refinance window: IEF breaking out",
  "text": "IEF (2026-10-30) made a 20-day closing high (73%) or crossed its 50-day (5%): yields are falling. Ask lenders for updated quotes."
}

What it means

Session of 2026-10-30, 2 symbols: 20-day closing breakout: true for IEF of 2. Crossed above the 50-day today: true for none of 2. RSI above 50: true for TLT, IEF of 2. Is the stock above its 200-day moving average: true for none of 2. Highest odds for “Higher in a week”: TLT at 56%. refi_window fired for IEF.

A bond-ETF breakout is a reason to call lenders, not to lock; the real-estate team acts on the quotes they get.

Request JSON (TLT; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TLT"
  },
  "questions": {
    "breakout": {
      "type": "yes_no",
      "ask": "C > highest(C, 20)"
    },
    "cross50": {
      "type": "yes_no",
      "ask": "crossup(C, sma(C, 50))"
    },
    "rsi50": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 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": "refi_window",
      "when": "breakout >= 0.6 or cross50 >= 0.6",
      "do": "email",
      "connection": "real-estate-team",
      "subject": "Possible refinance window: {{symbol}} breaking out",
      "message": "{{symbol}} ({{as_of}}) made a 20-day closing high ({{breakout|pct}}) or crossed its 50-day ({{cross50|pct}}): yields are falling. Ask lenders for updated quotes."
    }
  ],
  "dry_run": true
}
Response JSON (TLT, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "breakout": {
      "yes_no": 0.5462,
      "rule": "C > highest(C, 20)",
      "basis": "rule"
    },
    "cross50": {
      "yes_no": 0.05,
      "rule": "crossup(C, sma(C, 50))",
      "basis": "rule"
    },
    "rsi50": {
      "yes_no": 0.8762,
      "rule": "rsi(C, 14) > 50",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.1127,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "up_week": {
      "yes_no": 0.561
    }
  },
  "context": {
    "symbol": "TLT",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "refi_window",
      "fired": false,
      "status": "skipped"
    }
  ]
}

crossup highest rsi sma

Family office · example 9

Earnings review for the family's direct holdings

After earnings season, check which direct stock holdings beat, grew and held their post-report price.

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

State

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

Questions

beatrulebeat_eps_last > 0.5 and beat_revenue_last > 0.5
Beat on EPS and revenue last quarter
eps_gEnglish → ruleDid EPS grow more than 10% year over year?
above_preruleC > pre_earnings_close
Holding above the pre-earnings close
gap_uprulelast_earnings_gap > 0
Gapped up after the last report
beat_nextforecastWill the stock beat earnings next quarter?
Beating earnings next quarter

Answers

Symbolbeatruleeps_gruleabove_prerulegap_uprulebeat_nextforecast
AAPL0.85910.94630.8310.05370.545
MSFT0.85910.83270.24820.83740.528
COST0.14090.94630.94630.05370.481
HD0.85910.25640.31920.05370.507
JPM0.14090.68930.65050.94630.506

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: Beat on EPS and revenue last quarter: true for AAPL, MSFT, HD of 5. Did EPS grow more than 10% year over year: true for AAPL, MSFT, COST, JPM of 5. Holding above the pre-earnings close: true for AAPL, COST, JPM of 5. Gapped up after the last report: true for MSFT, JPM of 5. Highest odds for “Beating earnings next quarter”: AAPL at 55%.

Holdings that beat, grew and held above their pre-report price are working; the others are discussed at the next investment meeting.

Request JSON (AAPL; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AAPL"
  },
  "questions": {
    "beat": {
      "type": "yes_no",
      "ask": "beat_eps_last > 0.5 and beat_revenue_last > 0.5"
    },
    "eps_g": {
      "type": "yes_no",
      "instructions": "Did EPS grow more than 10% year over year?"
    },
    "above_pre": {
      "type": "yes_no",
      "ask": "C > pre_earnings_close"
    },
    "gap_up": {
      "type": "yes_no",
      "ask": "last_earnings_gap > 0"
    },
    "beat_next": {
      "type": "yes_no",
      "instructions": "Will the stock beat earnings next quarter?"
    }
  }
}
Response JSON (AAPL, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "beat": {
      "yes_no": 0.8591,
      "rule": "beat_eps_last > 0.5 and beat_revenue_last > 0.5",
      "basis": "rule"
    },
    "eps_g": {
      "yes_no": 0.9463,
      "rule": "eps_growth_yoy > 10",
      "basis": "pattern"
    },
    "above_pre": {
      "yes_no": 0.831,
      "rule": "C > pre_earnings_close",
      "basis": "rule"
    },
    "gap_up": {
      "yes_no": 0.0537,
      "rule": "last_earnings_gap > 0",
      "basis": "rule"
    },
    "beat_next": {
      "yes_no": 0.545
    }
  },
  "context": {
    "symbol": "AAPL",
    "as_of": "2026-10-30"
  }
}

beat_eps_last beat_revenue_last eps_growth_yoy last_earnings_gap pre_earnings_close

Family office · example 10

Teaching the next generation: a candle lesson on DIS

The family runs a learning portfolio for younger members; show how candlestick patterns read on a real chart.

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

State

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

Questions

dojiruledoji()
doji candle: Body at most 10% of the day's range.
spinningrulespinning_top()
spinning top candle: Small body (10–30% of range) with wicks of at least a quarter of the range on both sides.
marubozurulemarubozu()
marubozu candle: Body at least 90% of the range: almost no wicks.
gravestonerulegravestone_doji()
gravestone doji candle: Doji with a long upper wick and almost no lower wick.
insideruleinside_bar()
inside bar candle: Today's high and low are inside yesterday's (equal counts).
outsideruleoutside_bar()
outside bar candle: Today's high above yesterday's and low below it.

Answers

QuestionAnswerReading
doji
doji candle: Body at most 10% of the day's range.
0.1442false
spinning
spinning top candle: Small body (10–30% of range) with wicks of at least a quarter of the range on both sides.
0.2107false
marubozu
marubozu candle: Body at least 90% of the range: almost no wicks.
0.0998false
gravestone
gravestone doji candle: Doji with a long upper wick and almost no lower wick.
0.1442false
inside
inside bar candle: Today's high and low are inside yesterday's (equal counts).
0.134false
outside
outside bar candle: Today's high above yesterday's and low below it.
0.1507false

What it means

For DIS on the session of 2026-10-30: Not true: doji candle: Body at most 10% of the day's range.; spinning top candle: Small body (10–30% of range) with wicks of at least a quarter of the range on both sides.; marubozu candle: Body at least 90% of the range: almost no wicks.; gravestone doji candle: Doji with a long upper wick and almost no lower wick.; inside bar candle: Today's high and low are inside yesterday's (equal counts).; outside bar candle: Today's high above yesterday's and low below it..

Each pattern answers yes or no from today's bar; the lesson is that most patterns are absent on most days, which is why context matters.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "DIS"
  },
  "questions": {
    "doji": {
      "type": "yes_no",
      "ask": "doji()"
    },
    "spinning": {
      "type": "yes_no",
      "ask": "spinning_top()"
    },
    "marubozu": {
      "type": "yes_no",
      "ask": "marubozu()"
    },
    "gravestone": {
      "type": "yes_no",
      "ask": "gravestone_doji()"
    },
    "inside": {
      "type": "yes_no",
      "ask": "inside_bar()"
    },
    "outside": {
      "type": "yes_no",
      "ask": "outside_bar()"
    }
  }
}
Response JSON (DIS, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "doji": {
      "yes_no": 0.1442,
      "rule": "doji()",
      "basis": "rule"
    },
    "spinning": {
      "yes_no": 0.2107,
      "rule": "spinning_top()",
      "basis": "rule"
    },
    "marubozu": {
      "yes_no": 0.0998,
      "rule": "marubozu()",
      "basis": "rule"
    },
    "gravestone": {
      "yes_no": 0.1442,
      "rule": "gravestone_doji()",
      "basis": "rule"
    },
    "inside": {
      "yes_no": 0.134,
      "rule": "inside_bar()",
      "basis": "rule"
    },
    "outside": {
      "yes_no": 0.1507,
      "rule": "outside_bar()",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "DIS",
    "as_of": "2026-10-30"
  }
}

doji gravestone_doji inside_bar marubozu outside_bar spinning_top

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: Financial advisor / RIA, Wealth manager, 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.