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

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 (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.

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

State

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

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
down_monthEnglish → ruleIs the stock down more than 5% over the last month?
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symboltrendruledrawdownruledown_monthruledrop5forecast
VTI0.94150.05370.06620.187
VXUS0.32550.05370.16650.233
BND0.20130.05370.05370.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"
  }
}

max offset sma

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.

ora-fin-0.1.1VOO4 questions1 actionworkflow · Mon–Fri at 17:00 ET
  1. ScheduleMon–Fri at 17:00 ET
  2. StateVOO
  3. Questions4 asked
  4. Answersreal, captured
  5. Actions1 rule · dry run

State

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

Questions

off10ruleC < 0.9 * max(H, 252)
More than 10% below the 52-week high
off20ruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
trendEnglish → ruleIs the stock above its 200-day moving average?
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

QuestionAnswerReading
off10
More than 10% below the 52-week high
0.0537false
off20
More than 20% off the 52-week high
0.0537false
trend
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.9463true
drop10
A 10% drawdown within a month
0.19620% · unlikely

Actions

Rules on the answers decide what to send.

off10 >= 0.6→Emailme
What each action would send 0 of 1 fired · dry run, nothing sent
rebalancerule false: skipped

What it means

For VOO on the session of 2026-10-30: True now: Is the stock above its 200-day moving average. Not true: 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"
    }
  ]
}

max sma

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.

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

State

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

Questions

bearEnglish → ruleIs the stock in bear-market territory, more than 20% below its 52-week high?
below200English → ruleIs the stock below its 200-day moving average?
deathEnglish → ruleDid a death cross happen today?
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

QuestionAnswerReading
bear
Is the stock in bear-market territory, more than 20% below its 52-week high
compiled to C < 0.8 * max(H, 252)
0.0537false
below200
Is the stock below its 200-day moving average
compiled to C < sma(C, 200)
0.0549false
death
Did 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.0537false
drop10
A 10% drawdown within a month
0.20521% · unlikely

Actions

Rules on the answers decide what to send.

bear >= 0.6 or below200 >= 0.6→Emailme
What each action would send 0 of 1 fired · dry run, nothing sent
bearrule false: skipped

What 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"
    }
  ]
}

max ref sma

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.

ora-fin-0.1.1VTI4 questions2 actionsworkflow · Mon at 10:00 ET
  1. ScheduleMon at 10:00 ET
  2. StateVTI
  3. Questions4 asked
  4. Answersreal, captured
  5. Actions2 rules · dry run

State

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

Questions

rsi40English → ruleIs RSI below 40?
pctbEnglish → ruleIs Bollinger %B below 0.2?
below50ruleC < sma(C, 50)
Below the 50-day
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
rsi40
Is RSI below 40
compiled to rsi(C, 14) < 40
0.3777false
pctb
Is Bollinger %B below 0.2
compiled to (C - bblower(C, 20)) / (bbupper(C, 20) - bblower(C, 20)) < 0.2
0.8226true
below50
Below the 50-day
0.8758true
up_week
Higher in a week
0.5757% · close to even

Actions

Rules on the answers decide what to send.

rsi40 >= 0.6 or pctb >= 0.6→Webhookbroker-api
else→Webhookbroker-api
What each action would send 1 of 2 fired · dry run, nothing sent
boostwould send (dry run)Webhook → broker-api
{
  "account": "ira",
  "symbol": "VTI",
  "contribution": "double",
  "reason": "oversold",
  "as_of": "2026-10-30"
}
normalrule false: skipped

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"
    }
  ]
}

bblower bbupper rsi sma

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.

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

State

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

Questions

trendruleC > sma(C, 50)
Above the 50-day average
hvEnglish → ruleIs 20-day historical volatility below 20%?
drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

Symboltrendrulehvruledrawdownruleup_weekforecast
TLT0.84820.94630.05370.561
IEF0.85140.94630.05370.483
SHY0.89710.94630.05370.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"
  }
}

log max offset sma sqrt std

Long-term passive investor · example 6

International or US: VEA, VWO, VTI momentum

Compare markets over three months without chasing.

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

State

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

Questions

three_mruleC > C[-63]
Higher than three months ago
rocruleroc(C, 20) > 5
Up more than 5% in 20 sessions
trendEnglish → ruleIs the stock above its 200-day moving average?
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symbolthree_mrulerocruletrendrulebeat_spyforecast
VEA0.16660.06020.58770.472
VWO0.0550.05370.08870.478
VTI0.35240.05370.94150.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"
  }
}

offset roc sma

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?

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

State

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

Questions

yearruleC > C[-252]
Higher than a year ago
up10ruleC / C[-252] - 1 > 0.1
Up more than 10% over a year
trendrulesma(C, 200) > ref(sma(C, 200), -20)
The 200-day average is rising
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symbolyearruleup10ruletrendruledrop5forecast
VTI0.94630.72550.94630.187
BND0.29860.05370.06740.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"
  }
}

offset ref sma

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.

ora-fin-0.1.14 symbols, one request each4 questions1 action
  1. State4 symbols
  2. Questions4 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

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

Questions

below_yearruleC < C[-252]
Lower than a year ago
down_3mruleC < C[-63]
Lower than three months ago
drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

Symbolbelow_yearruledown_3mruledrawdownruleup_weekforecastFired
VEA0.05370.83340.05370.559none
VWO0.29910.9450.05370.516none
EEM0.07570.9220.07180.55none
EFA0.05370.8350.05370.55none

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→Emailme
VEA 0 of 1 fired · dry run, nothing sent
VWO 0 of 1 fired · dry run, nothing sent
EEM 0 of 1 fired · dry run, nothing sent
EFA 0 of 1 fired · dry run, nothing sent

What 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"
    }
  ]
}

max offset

Long-term passive investor · example 9

Equal weight vs cap weight: RSP or VOO

Is the average stock keeping up with the big ones?

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

State

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

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
emaruleC > ema(C, 50)
three_mruleC > C[-63]
Higher than three months ago
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symboltrendruleemarulethree_mrulebeat_spyforecast
RSP0.92740.82380.59710.446
VOO0.94630.12760.51470.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"
  }
}

ema offset sma

Long-term passive investor · example 10

Is the market calm this month

A low-stress monthly read: realized volatility and the odds it rises.

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

State

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

Questions

hv_lowEnglish → ruleIs 20-day historical volatility below 20%?
atr_lowEnglish → ruleIs the 14-day ATR less than 2% of the price?
vol_upforecastWill volatility be higher over the next month?
Higher volatility next month
big5forecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days

Answers

QuestionAnswerReading
hv_low
Is 20-day historical volatility below 20%
compiled to std(log(C / C[-1]), 20) * sqrt(20 / 19) * sqrt(252) < 0.2
0.9463true
atr_low
Is the 14-day ATR less than 2% of the price
compiled to atr(14) / C < 0.02
0.9463true
vol_up
Higher volatility next month
0.6969% · likely
big5
A big move either way in 5 days
0.42543% · close to even

Actions

Rules on the answers decide what to send.

vol_up >= 0.6→Webhookpush-service
What each action would send 1 of 1 fired · dry run, nothing sent
pushwould send (dry run)Webhook → push-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"
        }
      }
    }
  ]
}

atr log offset sqrt std

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.

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