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 · Institutions

Endowment: 20 ways to use Ora

Spending-rule portfolios: regime reads across equities, real assets and bonds. 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 (39)

sma 12offset 10max 4std 4log 3sqrt 3roc 3atr 3abs 3adx 2avg 2highestbars 2ref 2rsi 2highest 1ema 1lowestbars 1inside_bar 1outside_bar 1pays_dividend 1dragonfly_doji 1hammer 1inverted_hammer 1shooting_star 1cum 1days_to_ex_div 1div_yield_ttm 1raised_last 1lowest 1days_to_earnings 1last_earnings_move 1sum 1engulfing_bear 1morning_star 1tweezer_bottom 1tweezer_top 1zscore 1greatest 1least 1

Examples 11–20 of 20 · page 2 of 2

Endowment · example 11

Oil reversal watch: USO candles after big moves

Oil exposure in the real-assets sleeve swings sharply. Look for reversal patterns after big moves.

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

State

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

Questions

hammerrulehammer()
hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back.
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.
inv_hammerruleinverted_hammer()
inverted hammer candle: Shooting-star shape after a five-bar decline.
dragonflyruledragonfly_doji()
dragonfly doji candle: Doji with a long lower wick (60%+ of the range) and almost no upper wick.
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
hammer
hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back.
0.0631false
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.4372on the line (false)
inv_hammer
inverted hammer candle: Shooting-star shape after a five-bar decline.
0.5017on the line (true)
dragonfly
dragonfly doji candle: Doji with a long lower wick (60%+ of the range) and almost no upper wick.
0.0631false
big_move
A big move either way in 5 days
0.40340% · close to even

What it means

For USO on the session of 2026-10-30: Not true: hammer candle: Lower wick at least twice the body, upper wick at most 10% of the range, closing below the close five bars back.; dragonfly doji candle: Doji with a long lower wick (60%+ of the range) and almost no upper wick.. On the line: shooting star candle: Upper wick at least twice the body, lower wick at most 10% of the range, after a five-bar rise.; inverted hammer candle: Shooting-star shape after a five-bar decline.. Forecasts: A big move either way in 5 days 40%.

Patterns are one-day facts; the big-move forecast says whether more volatility is likely, which matters more for sizing.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "USO"
  },
  "questions": {
    "hammer": {
      "type": "yes_no",
      "ask": "hammer()"
    },
    "shooting": {
      "type": "yes_no",
      "ask": "shooting_star()"
    },
    "inv_hammer": {
      "type": "yes_no",
      "ask": "inverted_hammer()"
    },
    "dragonfly": {
      "type": "yes_no",
      "ask": "dragonfly_doji()"
    },
    "big_move": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  }
}
Response JSON (USO, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "hammer": {
      "yes_no": 0.0631,
      "rule": "hammer()",
      "basis": "rule"
    },
    "shooting": {
      "yes_no": 0.4372,
      "rule": "shooting_star()",
      "basis": "rule"
    },
    "inv_hammer": {
      "yes_no": 0.5017,
      "rule": "inverted_hammer()",
      "basis": "rule"
    },
    "dragonfly": {
      "yes_no": 0.0631,
      "rule": "dragonfly_doji()",
      "basis": "rule"
    },
    "big_move": {
      "yes_no": 0.403
    }
  },
  "context": {
    "symbol": "USO",
    "as_of": "2026-10-30"
  }
}

dragonfly_doji hammer inverted_hammer shooting_star

Endowment · example 12

Developed markets: VGK momentum vs the US

Track whether Europe is outperforming to inform the non-US equity weight discussion.

ora-fin-0.1.1VGK4 questions
  1. StateVGK
  2. Questions4 asked
  3. Answersreal, captured
  4. Actionsnone

State

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

Questions

rocruleroc(C, 20) > 5
Up more than 5% in 20 sessions
trendruleC > sma(C, 50)
Above the 50-day average
cumrulecum(C > C[-1]) > cum(C < C[-1])
More up days than down days over the fund's whole history
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

QuestionAnswerReading
roc
Up more than 5% in 20 sessions
0.1318false
trend
Above the 50-day average
0.3016false
cum
More up days than down days over the fund's whole history
0.9463true
beat_spy
Beating SPY over a month
0.40741% · close to even

What it means

For VGK on the session of 2026-10-30: True now: More up days than down days over the fund's whole history. Not true: Up more than 5% in 20 sessions; Above the 50-day average. Forecasts: Beating SPY over a month 41%.

Short-term momentum and the odds of beating SPY frame the discussion; the long-run up-day count is context, not a signal.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VGK"
  },
  "questions": {
    "roc": {
      "type": "yes_no",
      "ask": "roc(C, 20) > 5"
    },
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "cum": {
      "type": "yes_no",
      "ask": "cum(C > C[-1]) > cum(C < C[-1])"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  }
}
Response JSON (VGK, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "roc": {
      "yes_no": 0.1318,
      "rule": "roc(C, 20) > 5",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.3016,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "cum": {
      "yes_no": 0.9463,
      "rule": "cum(C > C[-1]) > cum(C < C[-1])",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.407
    }
  },
  "context": {
    "symbol": "VGK",
    "as_of": "2026-10-30"
  }
}

cum offset roc sma

Endowment · example 13

Income for spending: VIG dividend growth

Part of annual spending comes from portfolio income. Check payout growth and yield of the dividend-growth fund.

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

State

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

Questions

yieldEnglish → ruleIs the dividend yield above 2%?
raisedruleraised_last > 0.5
Raised its last dividend
ex_soonruledays_to_ex_div <= 30
Goes ex-dividend within 30 days
trendruleC > sma(C, 50)
Above the 50-day average
raise_nextforecastWill the company raise its dividend next year?
Raising the dividend next year

Answers

QuestionAnswerReading
yield
Is the dividend yield above 2%
compiled to div_yield_ttm > 2
0.0537false
raised
Raised its last dividend
0.1409false
ex_soon
Goes ex-dividend within 30 days
0.0537false
trend
Above the 50-day average
0.9219true
raise_next
Raising the dividend next year
0.50551% · close to even

What it means

For VIG on the session of 2026-10-30: True now: Above the 50-day average. Not true: Is the dividend yield above 2%; Raised its last dividend; Goes ex-dividend within 30 days. Forecasts: Raising the dividend next year 51%.

Rising payouts help the spending budget; the forecast on next year's raise is probability, so the budget uses the facts.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VIG"
  },
  "questions": {
    "yield": {
      "type": "yes_no",
      "instructions": "Is the dividend yield above 2%?"
    },
    "raised": {
      "type": "yes_no",
      "ask": "raised_last > 0.5"
    },
    "ex_soon": {
      "type": "yes_no",
      "ask": "days_to_ex_div <= 30"
    },
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "raise_next": {
      "type": "yes_no",
      "instructions": "Will the company raise its dividend next year?"
    }
  }
}
Response JSON (VIG, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "yield": {
      "yes_no": 0.0537,
      "rule": "div_yield_ttm > 2",
      "basis": "pattern"
    },
    "raised": {
      "yes_no": 0.1409,
      "rule": "raised_last > 0.5",
      "basis": "rule"
    },
    "ex_soon": {
      "yes_no": 0.0537,
      "rule": "days_to_ex_div <= 30",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.9219,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "raise_next": {
      "yes_no": 0.505
    }
  },
  "context": {
    "symbol": "VIG",
    "as_of": "2026-10-30"
  }
}

days_to_ex_div div_yield_ttm raised_last sma

Endowment · example 14

Daily risk escalation for the CIO: equity sleeves

After each close, any core equity sleeve that falls more than 3% or makes a 20-day low is escalated.

ora-fin-0.1.13 symbols, one request each4 questions2 actionsworkflow · Mon–Fri at 16:45 ET
  1. ScheduleMon–Fri at 16:45 ET
  2. State3 symbols
  3. Questions4 asked
  4. Answersreal, captured
  5. Actions2 rules · dry run

State

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

Questions

down3English → ruleDid the stock fall more than 3% today?
low20English → ruleDid the stock make a new 20-day low today?
big_atrruleabs(C - C[-1]) > 1.5 * atr(14)
Today's move was bigger than 1.5 ATR
gap_downforecastWill it gap down tomorrow?
A gap down tomorrow

Answers

Symboldown3rulelow20rulebig_atrrulegap_downforecastFired
VTI0.07170.72960.7930.029desk
VEA0.07160.37580.28610.029none
VWO0.11020.77850.61660.049desk

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.

down3 >= 0.6→Emailcio
low20 >= 0.6→Slackendowment-office
VTI 1 of 2 fired · dry run, nothing sent
ciorule false: skipped
deskwould send (dry run)Slack → endowment-office
{
  "text": "VTI (2026-10-30) made a new 20-day low."
}
VEA 0 of 2 fired · dry run, nothing sent
VWO 1 of 2 fired · dry run, nothing sent
ciorule false: skipped
deskwould send (dry run)Slack → endowment-office
{
  "text": "VWO (2026-10-30) made a new 20-day low."
}

What it means

Session of 2026-10-30, 3 symbols: Did the stock fall more than 3% today: true for none of 3. Did the stock make a new 20-day low today: true for VTI, VWO of 3. Today's move was bigger than 1.5 ATR: true for VTI, VWO of 3. Highest odds for “A gap down tomorrow”: VWO at 5%. cio fired for none. desk fired for VTI, VWO.

Quiet days send nothing; the CIO email needs a 3% loss, a new low only goes to the team channel.

As a scheduled workflow (Mon–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": "Daily risk escalation for the CIO: equity sleeves",
  "symbols": "VTI VEA VWO",
  "days": [
    1,
    2,
    3,
    4,
    5
  ],
  "at_time": "16:45",
  "model": "ora-fin-0.1.1",
  "questions": {
    "down3": {
      "type": "yes_no",
      "instructions": "Did the stock fall more than 3% today?"
    },
    "low20": {
      "type": "yes_no",
      "instructions": "Did the stock make a new 20-day low today?"
    },
    "big_atr": {
      "type": "yes_no",
      "ask": "abs(C - C[-1]) > 1.5 * atr(14)"
    },
    "gap_down": {
      "type": "yes_no",
      "instructions": "Will it gap down tomorrow?"
    }
  },
  "actions": [
    {
      "id": "cio",
      "when": "down3 >= 0.6",
      "do": "email",
      "connection": "cio",
      "subject": "{{symbol}} fell more than 3% ({{as_of}})",
      "message": "{{symbol}} fell more than 3% today; move bigger than 1.5 ATR {{big_atr|pct}}; gap-down odds tomorrow {{gap_down|pct}}."
    },
    {
      "id": "desk",
      "when": "low20 >= 0.6",
      "do": "slack",
      "connection": "endowment-office",
      "message": "{{symbol}} ({{as_of}}) made a new 20-day low."
    }
  ]
}
Request JSON (VTI; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VTI"
  },
  "questions": {
    "down3": {
      "type": "yes_no",
      "instructions": "Did the stock fall more than 3% today?"
    },
    "low20": {
      "type": "yes_no",
      "instructions": "Did the stock make a new 20-day low today?"
    },
    "big_atr": {
      "type": "yes_no",
      "ask": "abs(C - C[-1]) > 1.5 * atr(14)"
    },
    "gap_down": {
      "type": "yes_no",
      "instructions": "Will it gap down tomorrow?"
    }
  },
  "actions": [
    {
      "id": "cio",
      "when": "down3 >= 0.6",
      "do": "email",
      "connection": "cio",
      "subject": "{{symbol}} fell more than 3% ({{as_of}})",
      "message": "{{symbol}} fell more than 3% today; move bigger than 1.5 ATR {{big_atr|pct}}; gap-down odds tomorrow {{gap_down|pct}}."
    },
    {
      "id": "desk",
      "when": "low20 >= 0.6",
      "do": "slack",
      "connection": "endowment-office",
      "message": "{{symbol}} ({{as_of}}) made a new 20-day low."
    }
  ],
  "dry_run": true
}
Response JSON (VTI, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "down3": {
      "yes_no": 0.0717,
      "rule": "C / C[-1] - 1 < -0.03",
      "basis": "pattern"
    },
    "low20": {
      "yes_no": 0.7296,
      "rule": "L < lowest(L, 20)",
      "basis": "pattern"
    },
    "big_atr": {
      "yes_no": 0.793,
      "rule": "abs(C - C[-1]) > 1.5 * atr(14)",
      "basis": "rule"
    },
    "gap_down": {
      "yes_no": 0.029
    }
  },
  "context": {
    "symbol": "VTI",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "cio",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "desk",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "endowment-office",
      "preview": {
        "text": "VTI (2026-10-30) made a new 20-day low."
      }
    }
  ]
}

abs atr lowest offset

Endowment · example 15

A gifted stock position: LLY concentration review

A donor gifted a large block of shares. Decide when to sell down by checking trend, extension and the earnings calendar.

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

State

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

Questions

extEnglish → 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
earn14English → ruleIs earnings in the next 14 days?
big_reactruleabs(last_earnings_move) > 5
Last earnings move bigger than 5%
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

QuestionAnswerReading
ext
Is the stock more than 10% above its 200-day moving average
compiled to C > sma(C, 200) * 1.1
0.9463true
stretched
Stretched: more than 2 ATR above the 20-day
0.919true
earn14
Is earnings in the next 14 days
compiled to days_to_earnings <= 14
0.0537false
big_react
Last earnings move bigger than 5%
0.8277true
drop10
A 10% drawdown within a month
0.58358% · close to even

Actions

Rules on the answers decide what to send.

stretched >= 0.6 and earn14 < 0.4→Emailinvestment-committee
else→Slackendowment-office
What each action would send 1 of 2 fired · dry run, nothing sent
sell_slicewould send (dry run)Email → investment-committee
{
  "subject": "LLY gift: stretched, no report soon (2026-10-30)",
  "text": "LLY is 2 ATR above its 20-day with no report in 14 days. Consider selling the next slice under the gift policy. 10% drawdown odds: 58%."
}
waitrule false: skipped

What it means

For LLY on the session of 2026-10-30: True now: Is the stock more than 10% above its 200-day moving average; Stretched: more than 2 ATR above the 20-day; Last earnings move bigger than 5%. Not true: Is earnings in the next 14 days. Forecasts: A 10% drawdown within a month 58%. Fired: sell_slice (Email → investment-committee).

The gift policy sells in slices; the email only proposes a slice when the stock is stretched and no report is close.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "LLY"
  },
  "questions": {
    "ext": {
      "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)"
    },
    "earn14": {
      "type": "yes_no",
      "instructions": "Is earnings in the next 14 days?"
    },
    "big_react": {
      "type": "yes_no",
      "ask": "abs(last_earnings_move) > 5"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "sell_slice",
      "when": "stretched >= 0.6 and earn14 < 0.4",
      "do": "email",
      "connection": "investment-committee",
      "subject": "{{symbol}} gift: stretched, no report soon ({{as_of}})",
      "message": "{{symbol}} is 2 ATR above its 20-day with no report in 14 days. Consider selling the next slice under the gift policy. 10% drawdown odds: {{drop10|pct}}."
    },
    {
      "id": "wait",
      "when": "else",
      "do": "slack",
      "connection": "endowment-office",
      "message": "{{symbol}} ({{as_of}}): no sell-down trigger (stretched {{stretched|pct}}, report within 14 days {{earn14|pct}})."
    }
  ],
  "dry_run": true
}
Response JSON (LLY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "ext": {
      "yes_no": 0.9463,
      "rule": "C > sma(C, 200) * 1.1",
      "basis": "comparison"
    },
    "stretched": {
      "yes_no": 0.919,
      "rule": "C > sma(C, 20) + 2 * atr(14)",
      "basis": "rule"
    },
    "earn14": {
      "yes_no": 0.0537,
      "rule": "days_to_earnings <= 14",
      "basis": "pattern"
    },
    "big_react": {
      "yes_no": 0.8277,
      "rule": "abs(last_earnings_move) > 5",
      "basis": "rule"
    },
    "drop10": {
      "yes_no": 0.583
    }
  },
  "context": {
    "symbol": "LLY",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "sell_slice",
      "fired": true,
      "status": "dry_run",
      "do": "email",
      "connection": "investment-committee",
      "preview": {
        "subject": "LLY gift: stretched, no report soon (2026-10-30)",
        "text": "LLY is 2 ATR above its 20-day with no report in 14 days. Consider selling the next slice under the gift policy. 10% drawdown odds: 58%."
      }
    },
    {
      "id": "wait",
      "fired": false,
      "status": "skipped"
    }
  ]
}

abs atr days_to_earnings last_earnings_move sma

Endowment · example 16

Small-cap breadth: IJR and MDY vs IWM

Check whether small and mid caps are participating in the market move, as context for the small-buyout program.

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

State

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

Questions

trendruleC > sma(C, 50)
Above the 50-day average
goldenrulesma(C, 50) > sma(C, 200)
50-day above the 200-day
mostlyrulesum(C > C[-1], 10) >= 6
Up on at least six of the last ten days
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symboltrendrulegoldenrulemostlyrulebeat_spyforecast
IJR0.53790.86440.8580.46
MDY0.35080.80320.83320.446
IWM0.21760.83180.91740.459

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: Above the 50-day average: true for none of 3. 50-day above the 200-day: true for IJR, MDY, IWM of 3. Up on at least six of the last ten days: true for IJR, MDY, IWM of 3. Highest odds for “Beating SPY over a month”: IJR at 46%.

Small and mid caps in uptrends support exit conditions for buyout managers; weak breadth points the other way.

Request JSON (IJR; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "IJR"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "golden": {
      "type": "yes_no",
      "ask": "sma(C, 50) > sma(C, 200)"
    },
    "mostly": {
      "type": "yes_no",
      "ask": "sum(C > C[-1], 10) >= 6"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  }
}
Response JSON (IJR, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.5379,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "golden": {
      "yes_no": 0.8644,
      "rule": "sma(C, 50) > sma(C, 200)",
      "basis": "rule"
    },
    "mostly": {
      "yes_no": 0.858,
      "rule": "sum(C > C[-1], 10) >= 6",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.46
    }
  },
  "context": {
    "symbol": "IJR",
    "as_of": "2026-10-30"
  }
}

offset sma sum

Endowment · example 17

TLT turning point: tweezers, stars and engulfing candles

Look for reversal candles in long bonds that often mark turns in rates, for the duration discussion.

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

tweezer_bruletweezer_bottom()
tweezer bottom candle: Red then green, with lows within 0.1% of each other.
tweezer_truletweezer_top()
tweezer top candle: Green then red, with highs within 0.1%.
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.
engulf_bearruleengulfing_bear()
engulfing bear candle: A red body that engulfs yesterday's green body.
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
tweezer_b
tweezer bottom candle: Red then green, with lows within 0.1% of each other.
0.2166false
tweezer_t
tweezer top candle: Green then red, with highs within 0.1%.
0.3493false
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.1346false
engulf_bear
engulfing bear candle: A red body that engulfs yesterday's green body.
0.2201false
up_week
Higher in a week
0.56156% · close to even

What it means

For TLT on the session of 2026-10-30: Not true: tweezer bottom candle: Red then green, with lows within 0.1% of each other.; tweezer top candle: Green then red, with highs within 0.1%.; 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.; engulfing bear candle: A red body that engulfs yesterday's green body.. Forecasts: Higher in a week 56%.

A reversal candle in long bonds is a timing note for the duration discussion; the policy duration does not change on a candle.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TLT"
  },
  "questions": {
    "tweezer_b": {
      "type": "yes_no",
      "ask": "tweezer_bottom()"
    },
    "tweezer_t": {
      "type": "yes_no",
      "ask": "tweezer_top()"
    },
    "morning": {
      "type": "yes_no",
      "ask": "morning_star()"
    },
    "engulf_bear": {
      "type": "yes_no",
      "ask": "engulfing_bear()"
    },
    "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": {
    "tweezer_b": {
      "yes_no": 0.2166,
      "rule": "tweezer_bottom()",
      "basis": "rule"
    },
    "tweezer_t": {
      "yes_no": 0.3493,
      "rule": "tweezer_top()",
      "basis": "rule"
    },
    "morning": {
      "yes_no": 0.1346,
      "rule": "morning_star()",
      "basis": "rule"
    },
    "engulf_bear": {
      "yes_no": 0.2201,
      "rule": "engulfing_bear()",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.561
    }
  },
  "context": {
    "symbol": "TLT",
    "as_of": "2026-10-30"
  }
}

engulfing_bear morning_star tweezer_bottom tweezer_top

Endowment · example 18

Risk budget: realized volatility of the equity core

The endowment targets a volatility budget. Check realized volatility of SPY against thresholds and the forecast.

ora-fin-0.1.1SPY4 questions2 actions
  1. StateSPY
  2. Questions4 asked
  3. Answersreal, captured
  4. Actions2 rules · dry run

State

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

Questions

hv20rulestd(log(C / C[-1]), 20) * sqrt(252) > 0.2
20-day realized volatility above 20%
hv60rulestd(log(C / C[-1]), 60) * sqrt(252) > 0.18
60-day realized volatility above 18%
vol5English → ruleIs 5-day volatility higher than 20-day volatility?
hv30forecastWill annualized volatility over the next 21 sessions exceed 30%?
Next-month volatility above 30%

Answers

QuestionAnswerReading
hv20
20-day realized volatility above 20%
0.0537false
hv60
60-day realized volatility above 18%
0.0537false
vol5
Is 5-day volatility higher than 20-day volatility
compiled to std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19)
0.8872true
hv30
Next-month volatility above 30%
0.56456% · close to even

Actions

Rules on the answers decide what to send.

hv20 >= 0.6 and hv30 >= 0.55→Emailinvestment-committee
else→Slackendowment-office
What each action would send 1 of 2 fired · dry run, nothing sent
over_budgetrule false: skipped
withinwould send (dry run)Slack → endowment-office
{
  "text": "SPY (2026-10-30): volatility within budget (20-day 5%, 60-day 5%)."
}

What it means

For SPY on the session of 2026-10-30: True now: Is 5-day volatility higher than 20-day volatility. Not true: 20-day realized volatility above 20%; 60-day realized volatility above 18%. Forecasts: Next-month volatility above 30% 56%. Fired: within (Slack → endowment-office).

Realized volatility above budget thresholds is the trigger to discuss de-risking; the forecast tells the committee whether it is expected to persist.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "hv20": {
      "type": "yes_no",
      "ask": "std(log(C / C[-1]), 20) * sqrt(252) > 0.2"
    },
    "hv60": {
      "type": "yes_no",
      "ask": "std(log(C / C[-1]), 60) * sqrt(252) > 0.18"
    },
    "vol5": {
      "type": "yes_no",
      "instructions": "Is 5-day volatility higher than 20-day volatility?"
    },
    "hv30": {
      "type": "yes_no",
      "instructions": "Will annualized volatility over the next 21 sessions exceed 30%?"
    }
  },
  "actions": [
    {
      "id": "over_budget",
      "when": "hv20 >= 0.6 and hv30 >= 0.55",
      "do": "email",
      "connection": "investment-committee",
      "subject": "Volatility over budget ({{as_of}})",
      "message": "{{symbol}} 20-day realized volatility is above 20% and next-month volatility above 30% has odds of {{hv30|pct}}. De-risking discussion requested."
    },
    {
      "id": "within",
      "when": "else",
      "do": "slack",
      "connection": "endowment-office",
      "message": "{{symbol}} ({{as_of}}): volatility within budget (20-day {{hv20|pct}}, 60-day {{hv60|pct}})."
    }
  ],
  "dry_run": true
}
Response JSON (SPY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "hv20": {
      "yes_no": 0.0537,
      "rule": "std(log(C / C[-1]), 20) * sqrt(252) > 0.2",
      "basis": "rule"
    },
    "hv60": {
      "yes_no": 0.0537,
      "rule": "std(log(C / C[-1]), 60) * sqrt(252) > 0.18",
      "basis": "rule"
    },
    "vol5": {
      "yes_no": 0.8872,
      "rule": "std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19)",
      "basis": "pattern"
    },
    "hv30": {
      "yes_no": 0.564
    }
  },
  "context": {
    "symbol": "SPY",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "over_budget",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "within",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "endowment-office",
      "preview": {
        "text": "SPY (2026-10-30): volatility within budget (20-day 5%, 60-day 5%)."
      }
    }
  ]
}

log offset sqrt std

Endowment · example 19

Gold and silver: which metal is leading?

Compare GLD and SLV on momentum and extension as a simple read of the metals market for the real-assets manager meeting.

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

State

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

Questions

rocruleroc(C, 20) > 5
Up more than 5% over 20 sessions
zsrulezscore(C, 20) > 2
Close more than two standard deviations above its 20-day mean
highestbarsrulehighestbars(H, 50) <= 5
The 50-day high was set within the last five sessions
rsi70rulersi(C, 14) > 70
RSI above 70
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symbolrocrulezsrulehighestbarsrulersi70ruledrop5forecast
GLD0.08390.05370.05690.05370.435
SLV0.06560.05370.05830.05370.612

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: Up more than 5% over 20 sessions: true for none of 2. Close more than two standard deviations above its 20-day mean: true for none of 2. The 50-day high was set within the last five sessions: true for none of 2. RSI above 70: true for none of 2. Highest odds for “A 5% drawdown within a month”: SLV at 61%.

The metal with fresher highs and stronger momentum is leading; stretch rules remind the manager how far the move has run.

Request JSON (GLD; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "GLD"
  },
  "questions": {
    "roc": {
      "type": "yes_no",
      "ask": "roc(C, 20) > 5"
    },
    "zs": {
      "type": "yes_no",
      "ask": "zscore(C, 20) > 2"
    },
    "highestbars": {
      "type": "yes_no",
      "ask": "highestbars(H, 50) <= 5"
    },
    "rsi70": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 70"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}
Response JSON (GLD, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "roc": {
      "yes_no": 0.0839,
      "rule": "roc(C, 20) > 5",
      "basis": "rule"
    },
    "zs": {
      "yes_no": 0.0537,
      "rule": "zscore(C, 20) > 2",
      "basis": "rule"
    },
    "highestbars": {
      "yes_no": 0.0569,
      "rule": "highestbars(H, 50) <= 5",
      "basis": "rule"
    },
    "rsi70": {
      "yes_no": 0.0537,
      "rule": "rsi(C, 14) > 70",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.435
    }
  },
  "context": {
    "symbol": "GLD",
    "as_of": "2026-10-30"
  }
}

highestbars roc rsi zscore

Endowment · example 20

Technology concentration: how extended is XLK?

Index funds are heavy in technology. Check how extended the technology sector fund is for the concentration-risk paper.

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

State

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

Questions

extruleC > sma(C, 200) * 1.10
More than 10% above the 200-day
near_highruleC >= 0.98 * max(H, 252)
Within 2% of the 52-week high
greatestruleH - greatest(O, C) > 2 * abs(C - O)
Upper wick more than twice the body (selling into strength)
leastruleleast(O, C) - L > 2 * abs(C - O)
Lower wick more than twice the body (buying into weakness)
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

QuestionAnswerReading
ext
More than 10% above the 200-day
0.1261false
near_high
Within 2% of the 52-week high
0.0537false
greatest
Upper wick more than twice the body (selling into strength)
0.0601false
least
Lower wick more than twice the body (buying into weakness)
0.1085false
drop10
A 10% drawdown within a month
0.47447% · close to even

What it means

For XLK on the session of 2026-10-30: Not true: More than 10% above the 200-day; Within 2% of the 52-week high; Upper wick more than twice the body (selling into strength); Lower wick more than twice the body (buying into weakness). Forecasts: A 10% drawdown within a month 47%.

Extension near highs with long upper wicks is the exhaustion picture; the paper reports it next to the drawdown odds.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "XLK"
  },
  "questions": {
    "ext": {
      "type": "yes_no",
      "ask": "C > sma(C, 200) * 1.10"
    },
    "near_high": {
      "type": "yes_no",
      "ask": "C >= 0.98 * max(H, 252)"
    },
    "greatest": {
      "type": "yes_no",
      "ask": "H - greatest(O, C) > 2 * abs(C - O)"
    },
    "least": {
      "type": "yes_no",
      "ask": "least(O, C) - L > 2 * abs(C - O)"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  }
}
Response JSON (XLK, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "ext": {
      "yes_no": 0.1261,
      "rule": "C > sma(C, 200) * 1.10",
      "basis": "rule"
    },
    "near_high": {
      "yes_no": 0.0537,
      "rule": "C >= 0.98 * max(H, 252)",
      "basis": "rule"
    },
    "greatest": {
      "yes_no": 0.0601,
      "rule": "H - greatest(O, C) > 2 * abs(C - O)",
      "basis": "rule"
    },
    "least": {
      "yes_no": 0.1085,
      "rule": "least(O, C) - L > 2 * abs(C - O)",
      "basis": "rule"
    },
    "drop10": {
      "yes_no": 0.474
    }
  },
  "context": {
    "symbol": "XLK",
    "as_of": "2026-10-30"
  }
}

abs greatest least max 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 Institutions: ETF issuer, Index provider, Insurance investment office, Pension fund, Sovereign wealth fund.

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