Use cases · Individuals
Long-term passive investor: 20 ways to use Ora
Index funds and a few core holdings: rebalancing triggers, drawdowns and staying the course. Each example is a complete, runnable request with the real answers it returned (43 requests, captured 2026-10-31), what they mean and, where it fits, the action it would send.
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 (15)
sma 17offset 12max 11log 4sqrt 4std 4ref 3rsi 3roc 2atr 2bblower 1bbupper 1ema 1highest 1linreg 1
Examples 1–10 of 20 · page 1 of 2
Long-term passive investor · example 1
Three-fund portfolio health: VTI, VXUS, BND
Once a month, check that each fund in a three-fund portfolio is in its normal range.
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"VTI"} then VXUS, BND, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
drawdown | rule | C < 0.8 * max(H, 252)More than 20% off the 52-week high |
down_month | English → rule | Is the stock down more than 5% over the last month? |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | trendrule | drawdownrule | down_monthrule | drop5forecast |
|---|---|---|---|---|
VTI | 0.9415 | 0.0537 | 0.0662 | 0.187 |
VXUS | 0.3255 | 0.0537 | 0.1665 | 0.233 |
BND | 0.2013 | 0.0537 | 0.0537 | 0.007 |
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 VTI of 3. More than 20% off the 52-week high: true for none of 3. Is the stock down more than 5% over the last month: true for none of 3. Highest odds for “A 5% drawdown within a month”: VXUS at 23%.
If no fund is in a drawdown, nothing is done; a drawdown in one fund is the cue to rebalance into it.
Request JSON (VTI; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VTI"
},
"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)"
},
"down_month": {
"type": "yes_no",
"instructions": "Is the stock down more than 5% over the last month?"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
}
}Response JSON (VTI, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.9415,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"drawdown": {
"yes_no": 0.0537,
"rule": "C < 0.8 * max(H, 252)",
"basis": "rule"
},
"down_month": {
"yes_no": 0.0662,
"rule": "C / C[-21] - 1 < -0.05",
"basis": "pattern"
},
"drop5": {
"yes_no": 0.187
}
},
"context": {
"symbol": "VTI",
"as_of": "2026-10-30"
}
}Long-term passive investor · example 2
Rebalance band alert: email when VOO falls 10% from its high
Buy-and-hold with rules: rebalance only when stocks move outside a band.
- ScheduleMon–Fri at 17:00 ET
- StateVOO
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"VOO"} The server fills in the latest completed session.
Questions
off10 | rule | C < 0.9 * max(H, 252)More than 10% below the 52-week high |
off20 | rule | C < 0.8 * max(H, 252)More than 20% off the 52-week high |
trend | English → rule | Is the stock above its 200-day moving average? |
drop10 | forecast | Will it drop at least 10% at some point in the next month? A 10% drawdown within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
off10More than 10% below the 52-week high | 0.0537 | false |
off20More than 20% off the 52-week high | 0.0537 | false |
trendIs the stock above its 200-day moving average compiled to C > sma(C, 200) | 0.9463 | true |
drop10A 10% drawdown within a month | 0.196 | 20% · unlikely |
Actions
Rules on the answers decide what to send.
off10 >= 0.6→EmailmeWhat it means
For VOO on the session of 2026-10-30: True now: Is the stock above its 200-day moving average. Not true: More than 10% below the 52-week high; More than 20% off the 52-week high. Forecasts: A 10% drawdown within a month 20%. No action fired: every rule was false.
An email means stocks have fallen enough to buy back to target; otherwise the portfolio is left alone.
As a scheduled workflow (Mon–Fri at 17:00 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": "Rebalance band alert: email when VOO falls 10% from its high",
"symbols": "VOO",
"days": [
1,
2,
3,
4,
5
],
"at_time": "17:00",
"model": "ora-fin-0.1.1",
"questions": {
"off10": {
"type": "yes_no",
"ask": "C < 0.9 * max(H, 252)"
},
"off20": {
"type": "yes_no",
"ask": "C < 0.8 * max(H, 252)"
},
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
}
},
"actions": [
{
"id": "rebalance",
"when": "off10 >= 0.6",
"do": "email",
"connection": "me",
"subject": "Rebalance: {{symbol}} is 10% off its high",
"message": "{{symbol}} ({{as_of}}) is more than 10% below its 52-week high (rule {{off10|pct}}). Rebalance back to target weights."
}
]
}Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VOO"
},
"questions": {
"off10": {
"type": "yes_no",
"ask": "C < 0.9 * max(H, 252)"
},
"off20": {
"type": "yes_no",
"ask": "C < 0.8 * max(H, 252)"
},
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
}
},
"actions": [
{
"id": "rebalance",
"when": "off10 >= 0.6",
"do": "email",
"connection": "me",
"subject": "Rebalance: {{symbol}} is 10% off its high",
"message": "{{symbol}} ({{as_of}}) is more than 10% below its 52-week high (rule {{off10|pct}}). Rebalance back to target weights."
}
],
"dry_run": true
}Response JSON (VOO, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"off10": {
"yes_no": 0.0537,
"rule": "C < 0.9 * max(H, 252)",
"basis": "rule"
},
"off20": {
"yes_no": 0.0537,
"rule": "C < 0.8 * max(H, 252)",
"basis": "rule"
},
"trend": {
"yes_no": 0.9463,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"drop10": {
"yes_no": 0.196
}
},
"context": {
"symbol": "VOO",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "rebalance",
"fired": false,
"status": "skipped"
}
]
}Long-term passive investor · example 3
Is the S&P 500 in a bear market
Know when the market is in bear territory so a plan, not a headline, drives behaviour.
- StateSPY
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"SPY"} The server fills in the latest completed session.
Questions
bear | English → rule | Is the stock in bear-market territory, more than 20% below its 52-week high? |
below200 | English → rule | Is the stock below its 200-day moving average? |
death | English → rule | Did a death cross happen today? |
drop10 | forecast | Will it drop at least 10% at some point in the next month? A 10% drawdown within a month |
Answers
| Question | Answer | Reading |
|---|---|---|
bearIs the stock in bear-market territory, more than 20% below its 52-week high compiled to C < 0.8 * max(H, 252) | 0.0537 | false |
below200Is the stock below its 200-day moving average compiled to C < sma(C, 200) | 0.0549 | false |
deathDid a death cross happen today compiled to (sma(C, 50) < sma(C, 200)) and (ref(sma(C, 50), -1) >= ref(sma(C, 200), -1)) | 0.0537 | false |
drop10A 10% drawdown within a month | 0.205 | 21% · unlikely |
Actions
Rules on the answers decide what to send.
bear >= 0.6 or below200 >= 0.6→EmailmeWhat it means
For SPY on the session of 2026-10-30: Not true: Is the stock in bear-market territory, more than 20% below its 52-week high; Is the stock below its 200-day moving average; Did a death cross happen today. Forecasts: A 10% drawdown within a month 21%. No action fired: every rule was false.
A passive investor keeps contributing either way; a bear-market flag is the time to check the stock/bond mix, not to sell.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"bear": {
"type": "yes_no",
"instructions": "Is the stock in bear-market territory, more than 20% below its 52-week high?"
},
"below200": {
"type": "yes_no",
"instructions": "Is the stock below its 200-day moving average?"
},
"death": {
"type": "yes_no",
"instructions": "Did a death cross happen today?"
},
"drop10": {
"type": "yes_no",
"instructions": "Will it drop at least 10% at some point in the next month?"
}
},
"actions": [
{
"id": "bear",
"when": "bear >= 0.6 or below200 >= 0.6",
"do": "email",
"connection": "me",
"subject": "Market check: {{symbol}} below trend",
"message": "{{symbol}} ({{as_of}}): bear-market territory {{bear|pct}}, below the 200-day {{below200|pct}}. Review your stock/bond mix; keep contributing."
}
],
"dry_run": true
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"bear": {
"yes_no": 0.0537,
"rule": "C < 0.8 * max(H, 252)",
"basis": "pattern"
},
"below200": {
"yes_no": 0.0549,
"rule": "C < sma(C, 200)",
"basis": "comparison"
},
"death": {
"yes_no": 0.0537,
"rule": "(sma(C, 50) < sma(C, 200)) and (ref(sma(C, 50), -1) >= ref(sma(C, 200), -1))",
"basis": "pattern"
},
"drop10": {
"yes_no": 0.205
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "bear",
"fired": false,
"status": "skipped"
}
]
}Long-term passive investor · example 4
Buy more on dips: dollar-cost averaging boost for VTI
Add extra to the monthly purchase when the market is oversold.
- ScheduleMon at 10:00 ET
- StateVTI
- Questions4 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"VTI"} The server fills in the latest completed session.
Questions
rsi40 | English → rule | Is RSI below 40? |
pctb | English → rule | Is Bollinger %B below 0.2? |
below50 | rule | C < sma(C, 50)Below the 50-day |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
rsi40Is RSI below 40 compiled to rsi(C, 14) < 40 | 0.3777 | false |
pctbIs Bollinger %B below 0.2 compiled to (C - bblower(C, 20)) / (bbupper(C, 20) - bblower(C, 20)) < 0.2 | 0.8226 | true |
below50Below the 50-day | 0.8758 | true |
up_weekHigher in a week | 0.57 | 57% · close to even |
Actions
Rules on the answers decide what to send.
rsi40 >= 0.6 or pctb >= 0.6→Webhookbroker-apielse→Webhookbroker-api{
"account": "ira",
"symbol": "VTI",
"contribution": "double",
"reason": "oversold",
"as_of": "2026-10-30"
}What it means
For VTI on the session of 2026-10-30: True now: Is Bollinger %B below 0.2; Below the 50-day. Not true: Is RSI below 40. Forecasts: Higher in a week 57%. Fired: boost (Webhook → broker-api).
Oversold readings double the month's contribution; otherwise the normal amount goes in.
As a scheduled workflow (Mon at 10:00 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": "Buy more on dips: dollar-cost averaging boost for VTI",
"symbols": "VTI",
"days": [
1
],
"at_time": "10:00",
"model": "ora-fin-0.1.1",
"questions": {
"rsi40": {
"type": "yes_no",
"instructions": "Is RSI below 40?"
},
"pctb": {
"type": "yes_no",
"instructions": "Is Bollinger %B below 0.2?"
},
"below50": {
"type": "yes_no",
"ask": "C < sma(C, 50)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "boost",
"when": "rsi40 >= 0.6 or pctb >= 0.6",
"do": "webhook",
"connection": "broker-api",
"body": {
"account": "ira",
"symbol": "{{symbol}}",
"contribution": "double",
"reason": "oversold",
"as_of": "{{as_of}}"
}
},
{
"id": "normal",
"when": "else",
"do": "webhook",
"connection": "broker-api",
"body": {
"account": "ira",
"symbol": "{{symbol}}",
"contribution": "normal",
"as_of": "{{as_of}}"
}
}
]
}Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VTI"
},
"questions": {
"rsi40": {
"type": "yes_no",
"instructions": "Is RSI below 40?"
},
"pctb": {
"type": "yes_no",
"instructions": "Is Bollinger %B below 0.2?"
},
"below50": {
"type": "yes_no",
"ask": "C < sma(C, 50)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "boost",
"when": "rsi40 >= 0.6 or pctb >= 0.6",
"do": "webhook",
"connection": "broker-api",
"body": {
"account": "ira",
"symbol": "{{symbol}}",
"contribution": "double",
"reason": "oversold",
"as_of": "{{as_of}}"
}
},
{
"id": "normal",
"when": "else",
"do": "webhook",
"connection": "broker-api",
"body": {
"account": "ira",
"symbol": "{{symbol}}",
"contribution": "normal",
"as_of": "{{as_of}}"
}
}
],
"dry_run": true
}Response JSON (VTI, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"rsi40": {
"yes_no": 0.3777,
"rule": "rsi(C, 14) < 40",
"basis": "comparison"
},
"pctb": {
"yes_no": 0.8226,
"rule": "(C - bblower(C, 20)) / (bbupper(C, 20) - bblower(C, 20)) < 0.2",
"basis": "pattern"
},
"below50": {
"yes_no": 0.8758,
"rule": "C < sma(C, 50)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.57
}
},
"context": {
"symbol": "VTI",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "boost",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "broker-api",
"preview": {
"body": {
"account": "ira",
"symbol": "VTI",
"contribution": "double",
"reason": "oversold",
"as_of": "2026-10-30"
}
}
},
{
"id": "normal",
"fired": false,
"status": "skipped"
}
]
}Long-term passive investor · example 5
Bond funds and rates: TLT, IEF, SHY
Long, medium and short Treasuries tell the rate story behind the bond sleeve.
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"TLT"} then IEF, SHY, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
hv | English → rule | Is 20-day historical volatility below 20%? |
drawdown | rule | C < 0.8 * max(H, 252)More than 20% off the 52-week high |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Symbol | trendrule | hvrule | drawdownrule | up_weekforecast |
|---|---|---|---|---|
TLT | 0.8482 | 0.9463 | 0.0537 | 0.561 |
IEF | 0.8514 | 0.9463 | 0.0537 | 0.483 |
SHY | 0.8971 | 0.9463 | 0.0537 | 0.594 |
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 TLT, IEF, SHY of 3. Is 20-day historical volatility below 20%: true for TLT, IEF, SHY of 3. More than 20% off the 52-week high: true for none of 3. Highest odds for “Higher in a week”: SHY at 59%.
Long bonds in a drawdown with short bonds calm means rates rose; the passive investor rebalances, not reacts.
Request JSON (TLT; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "TLT"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"hv": {
"type": "yes_no",
"instructions": "Is 20-day historical volatility below 20%?"
},
"drawdown": {
"type": "yes_no",
"ask": "C < 0.8 * max(H, 252)"
},
"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.8482,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"hv": {
"yes_no": 0.9463,
"rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2",
"basis": "pattern"
},
"drawdown": {
"yes_no": 0.0537,
"rule": "C < 0.8 * max(H, 252)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.561
}
},
"context": {
"symbol": "TLT",
"as_of": "2026-10-30"
}
}Long-term passive investor · example 6
International or US: VEA, VWO, VTI momentum
Compare markets over three months without chasing.
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"VEA"} then VWO, VTI, one request each. The server fills in the latest completed session.
Questions
three_m | rule | C > C[-63]Higher than three months ago |
roc | rule | roc(C, 20) > 5Up more than 5% in 20 sessions |
trend | English → rule | Is the stock above its 200-day moving average? |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | three_mrule | rocrule | trendrule | beat_spyforecast |
|---|---|---|---|---|
VEA | 0.1666 | 0.0602 | 0.5877 | 0.472 |
VWO | 0.055 | 0.0537 | 0.0887 | 0.478 |
VTI | 0.3524 | 0.0537 | 0.9415 | 0.493 |
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: Higher than three months ago: true for none of 3. Up more than 5% in 20 sessions: true for none of 3. Is the stock above its 200-day moving average: true for VTI of 3. Highest odds for “Beating SPY over a month”: VTI at 49%.
The comparison is for awareness; the passive plan keeps its fixed international share.
Request JSON (VEA; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VEA"
},
"questions": {
"three_m": {
"type": "yes_no",
"ask": "C > C[-63]"
},
"roc": {
"type": "yes_no",
"ask": "roc(C, 20) > 5"
},
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
}
}Response JSON (VEA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"three_m": {
"yes_no": 0.1666,
"rule": "C > C[-63]",
"basis": "rule"
},
"roc": {
"yes_no": 0.0602,
"rule": "roc(C, 20) > 5",
"basis": "rule"
},
"trend": {
"yes_no": 0.5877,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"beat_spy": {
"yes_no": 0.472
}
},
"context": {
"symbol": "VEA",
"as_of": "2026-10-30"
}
}Long-term passive investor · example 7
Glide-path check for a target-date mix: VTI and BND
Is the stock side up enough this year to shift some gains into bonds on schedule?
- State2 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"VTI"} then BND, one request each. The server fills in the latest completed session.
Questions
year | rule | C > C[-252]Higher than a year ago |
up10 | rule | C / C[-252] - 1 > 0.1Up more than 10% over a year |
trend | rule | sma(C, 200) > ref(sma(C, 200), -20)The 200-day average is rising |
drop5 | forecast | Will it drop at least 5% at some point in the next month? A 5% drawdown within a month |
Answers
| Symbol | yearrule | up10rule | trendrule | drop5forecast |
|---|---|---|---|---|
VTI | 0.9463 | 0.7255 | 0.9463 | 0.187 |
BND | 0.2986 | 0.0537 | 0.0674 | 0.007 |
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: Higher than a year ago: true for VTI of 2. Up more than 10% over a year: true for VTI of 2. The 200-day average is rising: true for VTI of 2. Highest odds for “A 5% drawdown within a month”: VTI at 19%.
A good stock year makes the scheduled glide-path move cheaper; a down year delays it.
Request JSON (VTI; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VTI"
},
"questions": {
"year": {
"type": "yes_no",
"ask": "C > C[-252]"
},
"up10": {
"type": "yes_no",
"ask": "C / C[-252] - 1 > 0.1"
},
"trend": {
"type": "yes_no",
"ask": "sma(C, 200) > ref(sma(C, 200), -20)"
},
"drop5": {
"type": "yes_no",
"instructions": "Will it drop at least 5% at some point in the next month?"
}
}
}Response JSON (VTI, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"year": {
"yes_no": 0.9463,
"rule": "C > C[-252]",
"basis": "rule"
},
"up10": {
"yes_no": 0.7255,
"rule": "C / C[-252] - 1 > 0.1",
"basis": "rule"
},
"trend": {
"yes_no": 0.9463,
"rule": "sma(C, 200) > ref(sma(C, 200), -20)",
"basis": "rule"
},
"drop5": {
"yes_no": 0.187
}
},
"context": {
"symbol": "VTI",
"as_of": "2026-10-30"
}
}Long-term passive investor · example 8
Tax-loss harvesting candidates: VEA, VWO, EEM, EFA
Find funds trading below a year ago, which can be swapped for a similar fund to realise a loss.
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"VEA"} then VWO, EEM, EFA, one request each. The server fills in the latest completed session.
Questions
below_year | rule | C < C[-252]Lower than a year ago |
down_3m | rule | C < C[-63]Lower than three months ago |
drawdown | rule | C < 0.8 * max(H, 252)More than 20% off the 52-week high |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Symbol | below_yearrule | down_3mrule | drawdownrule | up_weekforecast | Fired |
|---|---|---|---|---|---|
VEA | 0.0537 | 0.8334 | 0.0537 | 0.559 | none |
VWO | 0.2991 | 0.945 | 0.0537 | 0.516 | none |
EEM | 0.0757 | 0.922 | 0.0718 | 0.55 | none |
EFA | 0.0537 | 0.835 | 0.0537 | 0.55 | none |
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.
below_year >= 0.6→EmailmeWhat it means
Session of 2026-10-30, 4 symbols: Lower than a year ago: true for none of 4. Lower than three months ago: true for VEA, VWO, EEM, EFA of 4. More than 20% off the 52-week high: true for none of 4. Highest odds for “Higher in a week”: VEA at 56%. harvest fired for none.
Funds below their level of a year ago are candidates to swap; the investor still checks their own cost basis.
Request JSON (VEA; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "VEA"
},
"questions": {
"below_year": {
"type": "yes_no",
"ask": "C < C[-252]"
},
"down_3m": {
"type": "yes_no",
"ask": "C < C[-63]"
},
"drawdown": {
"type": "yes_no",
"ask": "C < 0.8 * max(H, 252)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
},
"actions": [
{
"id": "harvest",
"when": "below_year >= 0.6",
"do": "email",
"connection": "me",
"subject": "Tax-loss candidate: {{symbol}}",
"message": "{{symbol}} ({{as_of}}) is below where it was a year ago. Check your lots for a harvestable loss."
}
],
"dry_run": true
}Response JSON (VEA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"below_year": {
"yes_no": 0.0537,
"rule": "C < C[-252]",
"basis": "rule"
},
"down_3m": {
"yes_no": 0.8334,
"rule": "C < C[-63]",
"basis": "rule"
},
"drawdown": {
"yes_no": 0.0537,
"rule": "C < 0.8 * max(H, 252)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.559
}
},
"context": {
"symbol": "VEA",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "harvest",
"fired": false,
"status": "skipped"
}
]
}Long-term passive investor · example 9
Equal weight vs cap weight: RSP or VOO
Is the average stock keeping up with the big ones?
- State2 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"RSP"} then VOO, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
ema | rule | C > ema(C, 50) |
three_m | rule | C > C[-63]Higher than three months ago |
beat_spy | forecast | Will it beat SPY over the next month? Beating SPY over a month |
Answers
| Symbol | trendrule | emarule | three_mrule | beat_spyforecast |
|---|---|---|---|---|
RSP | 0.9274 | 0.8238 | 0.5971 | 0.446 |
VOO | 0.9463 | 0.1276 | 0.5147 | 0.512 |
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: Is the stock above its 200-day moving average: true for RSP, VOO of 2. C > ema(C, 50): true for RSP of 2. Higher than three months ago: true for none of 2. Highest odds for “Beating SPY over a month”: VOO at 51%.
Both in trend is a healthy market; only VOO up means a few large stocks carry the index.
Request JSON (RSP; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "RSP"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"ema": {
"type": "yes_no",
"ask": "C > ema(C, 50)"
},
"three_m": {
"type": "yes_no",
"ask": "C > C[-63]"
},
"beat_spy": {
"type": "yes_no",
"instructions": "Will it beat SPY over the next month?"
}
}
}Response JSON (RSP, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.9274,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"ema": {
"yes_no": 0.8238,
"rule": "C > ema(C, 50)",
"basis": "rule"
},
"three_m": {
"yes_no": 0.5971,
"rule": "C > C[-63]",
"basis": "rule"
},
"beat_spy": {
"yes_no": 0.446
}
},
"context": {
"symbol": "RSP",
"as_of": "2026-10-30"
}
}Long-term passive investor · example 10
Is the market calm this month
A low-stress monthly read: realized volatility and the odds it rises.
- StateSPY
- Questions4 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"SPY"} The server fills in the latest completed session.
Questions
hv_low | English → rule | Is 20-day historical volatility below 20%? |
atr_low | English → rule | Is the 14-day ATR less than 2% of the price? |
vol_up | forecast | Will volatility be higher over the next month? Higher volatility next month |
big5 | forecast | Will there be a big move in either direction in the next 5 days? A big move either way in 5 days |
Answers
| Question | Answer | Reading |
|---|---|---|
hv_lowIs 20-day historical volatility below 20% compiled to std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2 | 0.9463 | true |
atr_lowIs the 14-day ATR less than 2% of the price compiled to atr(14) / C < 0.02 | 0.9463 | true |
vol_upHigher volatility next month | 0.69 | 69% · likely |
big5A big move either way in 5 days | 0.425 | 43% · close to even |
Actions
Rules on the answers decide what to send.
vol_up >= 0.6→Webhookpush-service{
"title": "Markets may get bumpier",
"body": "SPY (2026-10-30): higher volatility next month 69%. Drops are normal; the plan stays.",
"channel": "long_term"
}What it means
For SPY on the session of 2026-10-30: True now: Is 20-day historical volatility below 20%; Is the 14-day ATR less than 2% of the price. Forecasts: Higher volatility next month 69%; A big move either way in 5 days 43%. Fired: push (Webhook → push-service).
A calm reading needs no action; rising volatility odds are a reminder that a drop is normal, not a reason to sell.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "SPY"
},
"questions": {
"hv_low": {
"type": "yes_no",
"instructions": "Is 20-day historical volatility below 20%?"
},
"atr_low": {
"type": "yes_no",
"instructions": "Is the 14-day ATR less than 2% of the price?"
},
"vol_up": {
"type": "yes_no",
"instructions": "Will volatility be higher over the next month?"
},
"big5": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
},
"actions": [
{
"id": "push",
"when": "vol_up >= 0.6",
"do": "webhook",
"connection": "push-service",
"body": {
"title": "Markets may get bumpier",
"body": "{{symbol}} ({{as_of}}): higher volatility next month {{vol_up|pct}}. Drops are normal; the plan stays.",
"channel": "long_term"
}
}
],
"dry_run": true
}Response JSON (SPY, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"hv_low": {
"yes_no": 0.9463,
"rule": "std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2",
"basis": "pattern"
},
"atr_low": {
"yes_no": 0.9463,
"rule": "atr(14) / C < 0.02",
"basis": "pattern"
},
"vol_up": {
"yes_no": 0.69
},
"big5": {
"yes_no": 0.425
}
},
"context": {
"symbol": "SPY",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "push",
"fired": true,
"status": "dry_run",
"do": "webhook",
"connection": "push-service",
"preview": {
"body": {
"title": "Markets may get bumpier",
"body": "SPY (2026-10-30): higher volatility next month 69%. Drops are normal; the plan stays.",
"channel": "long_term"
}
}
}
]
}Information, not investment advice. Rules answer from the latest completed daily session; forecasts are probabilities. Actions ran as dry runs: nothing was sent. More in Individuals: Retail investor, Active day trader, Swing trader, Options trader, Dividend investor, Crypto trader, FX trader, Commodities trader, Social trading community, Students and universities.