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

Index provider: 20 ways to use Ora

Rules-based selection screens, rebalance checks and corporate-action flags. Each example is a complete, runnable request with the real answers it returned (35 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 (62)

sma 6max 4offset 3roc 3avg 2cut_last 2pays_dividend 2reverse_split_last 2abs 2atr 2ref 2years_of_growth 1div_ttm 1div_yield_ttm 1days_since_split 1days_to_split 1splits_5y 1days_since_earnings 1days_to_earnings 1last_earnings_move 1next_report_bmo 1log 1sqrt 1std 1crossdown 1crossup 1mean 1rsi 1median 1beats_last4 1eps_growth_yoy 1last_eps 1misses_last4 1revenue_growth_yoy 1days_since_reverse_split 1highest 1inside_bar 1outside_bar 1tr 1lowestbars 1min 1dragonfly_doji 1gravestone_doji 1hammer 1inverted_hammer 1marubozu 1tweezer_top 1days_since_ex_div 1days_to_ex_div 1last_div_amount 1next_div_amount 1adx 1diminus 1diplus 1stochd 1stochk 1hlc3 1ohlc4 1rec 1rma 1swinghigh 1swinglow 1

Examples 11–20 of 20 · page 2 of 2

Index provider · example 11

Reverse-split screen: should AAL be excluded?

Some methodologies exclude names after a reverse split. Check a candidate for one in the past year.

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

State

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

Questions

rev1yEnglish → ruleHas the stock done a reverse split in the past year?
rev_lastEnglish → ruleWas the last split a reverse split?
bearEnglish → ruleIs the stock in bear-market territory, more than 20% below its 52-week high?
drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high

Answers

QuestionAnswerReading
rev1y
Has the stock done a reverse split in the past year
compiled to days_since_reverse_split <= 365
0.0537false
rev_last
Was the last split a reverse split
compiled to reverse_split_last > 0.5
0.50not known
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.9447true
drawdown
More than 20% off the 52-week high
0.9447true

Actions

Rules on the answers decide what to send.

rev1y >= 0.6→Webhookmethodology-queue
What each action would send 0 of 1 fired · dry run, nothing sent
excluderule false: skipped

What it means

For AAL on the session of 2026-10-30: True now: Is the stock in bear-market territory, more than 20% below its 52-week high; More than 20% off the 52-week high. Not true: Has the stock done a reverse split in the past year. Not known (no data on record): Was the last split a reverse split. No action fired: every rule was false.

A reverse split in the past year is proposed for exclusion at the next review; the committee confirms.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AAL"
  },
  "questions": {
    "rev1y": {
      "type": "yes_no",
      "instructions": "Has the stock done a reverse split in the past year?"
    },
    "rev_last": {
      "type": "yes_no",
      "instructions": "Was the last split a reverse split?"
    },
    "bear": {
      "type": "yes_no",
      "instructions": "Is the stock in bear-market territory, more than 20% below its 52-week high?"
    },
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    }
  },
  "actions": [
    {
      "id": "exclude",
      "when": "rev1y >= 0.6",
      "do": "webhook",
      "connection": "methodology-queue",
      "body": {
        "symbol": "{{symbol}}",
        "as_of": "{{as_of}}",
        "rule": "reverse_split_12m",
        "p": "{{rev1y}}",
        "proposed": "exclude_at_next_review"
      }
    }
  ],
  "dry_run": true
}
Response JSON (AAL, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "rev1y": {
      "yes_no": 0.0537,
      "rule": "days_since_reverse_split <= 365",
      "basis": "pattern"
    },
    "rev_last": {
      "yes_no": 0.5,
      "rule": "reverse_split_last > 0.5",
      "basis": "pattern"
    },
    "bear": {
      "yes_no": 0.9447,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "pattern"
    },
    "drawdown": {
      "yes_no": 0.9447,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "AAL",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "exclude",
      "fired": false,
      "status": "skipped"
    }
  ]
}

days_since_reverse_split max reverse_split_last

Index provider · example 12

Daily sector breadth for the index newsletter

After every close, check each sector fund against its 50-day and post the count to the newsletter tool.

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

State

{"symbol":"XLK"} then XLF, XLE, one request each. The server fills in the latest completed session.

Questions

above_50druleC > sma(C, 50)
Above the 50-day average
above_200dEnglish → ruleIs the stock above its 200-day moving average?
new_highEnglish → ruleDid the stock make a new 20-day high today?

Answers

Symbolabove_50druleabove_200drulenew_highruleFired
XLK0.07760.920.0537row
XLF0.66920.9190.4864row
XLE0.94320.94630.6226row

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.

above_50d >= 0→Webhooknewsletter-zapier
XLK 1 of 1 fired · dry run, nothing sent
rowwould send (dry run)Webhook → newsletter-zapier
{
  "sector": "XLK",
  "as_of": "2026-10-30",
  "above_50d": 0.0776,
  "above_200d": 0.92,
  "new_20d_high": 0.0537
}
XLF 1 of 1 fired · dry run, nothing sent
rowwould send (dry run)Webhook → newsletter-zapier
{
  "sector": "XLF",
  "as_of": "2026-10-30",
  "above_50d": 0.6692,
  "above_200d": 0.919,
  "new_20d_high": 0.4864
}
XLE 1 of 1 fired · dry run, nothing sent
rowwould send (dry run)Webhook → newsletter-zapier
{
  "sector": "XLE",
  "as_of": "2026-10-30",
  "above_50d": 0.9432,
  "above_200d": 0.9463,
  "new_20d_high": 0.6226
}

What it means

Session of 2026-10-30, 3 symbols: Above the 50-day average: true for XLF, XLE of 3. Is the stock above its 200-day moving average: true for XLK, XLF, XLE of 3. Did the stock make a new 20-day high today: true for XLE of 3. row fired for XLK, XLF, XLE.

Each sector posts a row, and the newsletter counts how many are above their averages; the rows are facts only.

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": "Daily sector breadth for the index newsletter",
  "symbols": "XLK XLF XLE",
  "days": [
    1,
    2,
    3,
    4,
    5
  ],
  "at_time": "17:00",
  "model": "ora-fin-0.1.1",
  "questions": {
    "above_50d": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "above_200d": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "new_high": {
      "type": "yes_no",
      "instructions": "Did the stock make a new 20-day high today?"
    }
  },
  "actions": [
    {
      "id": "row",
      "when": "above_50d >= 0",
      "do": "webhook",
      "connection": "newsletter-zapier",
      "body": {
        "sector": "{{symbol}}",
        "as_of": "{{as_of}}",
        "above_50d": "{{above_50d}}",
        "above_200d": "{{above_200d}}",
        "new_20d_high": "{{new_high}}"
      }
    }
  ]
}
Request JSON (XLK; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "XLK"
  },
  "questions": {
    "above_50d": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "above_200d": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "new_high": {
      "type": "yes_no",
      "instructions": "Did the stock make a new 20-day high today?"
    }
  },
  "actions": [
    {
      "id": "row",
      "when": "above_50d >= 0",
      "do": "webhook",
      "connection": "newsletter-zapier",
      "body": {
        "sector": "{{symbol}}",
        "as_of": "{{as_of}}",
        "above_50d": "{{above_50d}}",
        "above_200d": "{{above_200d}}",
        "new_20d_high": "{{new_high}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (XLK, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "above_50d": {
      "yes_no": 0.0776,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "above_200d": {
      "yes_no": 0.92,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "new_high": {
      "yes_no": 0.0537,
      "rule": "H > highest(H, 20)",
      "basis": "pattern"
    }
  },
  "context": {
    "symbol": "XLK",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "row",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "newsletter-zapier",
      "preview": {
        "body": {
          "sector": "XLK",
          "as_of": "2026-10-30",
          "above_50d": 0.0776,
          "above_200d": 0.92,
          "new_20d_high": 0.0537
        }
      }
    }
  ]
}

highest sma

Index provider · example 13

QQQ: gap and outside-day review for index calculators

Big gap or outside days stress index-tracking products. Flag them for the calculation team's daily review.

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

State

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

Questions

outsideruleoutside_bar()
outside bar candle: Today's high above yesterday's and low below it.
insideruleinside_bar()
inside bar candle: Today's high and low are inside yesterday's (equal counts).
gapruleabs(O - C[-1]) > 0.5 * ref(atr(14), -1)
Gap bigger than half an ATR
trruletr() > 1.5 * ref(atr(14), -1)
True range 1.5× yesterday's ATR
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
outside
outside bar candle: Today's high above yesterday's and low below it.
0.0537false
inside
inside bar candle: Today's high and low are inside yesterday's (equal counts).
0.0537false
gap
Gap bigger than half an ATR
0.9463true
tr
True range 1.5× yesterday's ATR
0.9434true
big_move
A big move either way in 5 days
0.35536% · unlikely

What it means

For QQQ on the session of 2026-10-30: True now: Gap bigger than half an ATR; True range 1.5× yesterday's ATR. Not true: outside bar candle: Today's high above yesterday's and low below it.; inside bar candle: Today's high and low are inside yesterday's (equal counts).. Forecasts: A big move either way in 5 days 36%.

An outside day with a wide true range is the day tracking differences tend to appear; the review checks those first.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "QQQ"
  },
  "questions": {
    "outside": {
      "type": "yes_no",
      "ask": "outside_bar()"
    },
    "inside": {
      "type": "yes_no",
      "ask": "inside_bar()"
    },
    "gap": {
      "type": "yes_no",
      "ask": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)"
    },
    "tr": {
      "type": "yes_no",
      "ask": "tr() > 1.5 * ref(atr(14), -1)"
    },
    "big_move": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  }
}
Response JSON (QQQ, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "outside": {
      "yes_no": 0.0537,
      "rule": "outside_bar()",
      "basis": "rule"
    },
    "inside": {
      "yes_no": 0.0537,
      "rule": "inside_bar()",
      "basis": "rule"
    },
    "gap": {
      "yes_no": 0.9463,
      "rule": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)",
      "basis": "rule"
    },
    "tr": {
      "yes_no": 0.9434,
      "rule": "tr() > 1.5 * ref(atr(14), -1)",
      "basis": "rule"
    },
    "big_move": {
      "yes_no": 0.355
    }
  },
  "context": {
    "symbol": "QQQ",
    "as_of": "2026-10-30"
  }
}

abs atr inside_bar offset outside_bar ref tr

Index provider · example 14

Value factor index: is INTC basing after its drawdown?

A value-tilt index wants beaten-down names that have stopped falling. Check whether a name off its highs is forming a base.

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

State

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

Questions

off_highruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
baserule(max(H, 10) - min(L, 10)) / C < 0.05
A tight 10-day base (under 5% of price)
low_barsrulelowestbars(L, 20) >= 10
The 20-day low is at least ten sessions old
higher_lowrulemin(L, 5) > ref(min(L, 5), -5)
This week's low is above last week's
rally5forecastWill it rally at least 5% at some point in the next month?
A 5% rally within a month

Answers

QuestionAnswerReading
off_high
More than 20% off the 52-week high
0.9463true
base
A tight 10-day base (under 5% of price)
0.0537false
low_bars
The 20-day low is at least ten sessions old
0.0946false
higher_low
This week's low is above last week's
0.0598false
rally5
A 5% rally within a month
0.87187% · likely

What it means

For INTC on the session of 2026-10-30: True now: More than 20% off the 52-week high. Not true: A tight 10-day base (under 5% of price); The 20-day low is at least ten sessions old; This week's low is above last week's. Forecasts: A 5% rally within a month 87%.

A deep drawdown plus an old low and a higher weekly low describes a base; that makes it a candidate for the research sleeve, not an index rule change.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "INTC"
  },
  "questions": {
    "off_high": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "base": {
      "type": "yes_no",
      "ask": "(max(H, 10) - min(L, 10)) / C < 0.05"
    },
    "low_bars": {
      "type": "yes_no",
      "ask": "lowestbars(L, 20) >= 10"
    },
    "higher_low": {
      "type": "yes_no",
      "ask": "min(L, 5) > ref(min(L, 5), -5)"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  }
}
Response JSON (INTC, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "off_high": {
      "yes_no": 0.9463,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "base": {
      "yes_no": 0.0537,
      "rule": "(max(H, 10) - min(L, 10)) / C < 0.05",
      "basis": "rule"
    },
    "low_bars": {
      "yes_no": 0.0946,
      "rule": "lowestbars(L, 20) >= 10",
      "basis": "rule"
    },
    "higher_low": {
      "yes_no": 0.0598,
      "rule": "min(L, 5) > ref(min(L, 5), -5)",
      "basis": "rule"
    },
    "rally5": {
      "yes_no": 0.871
    }
  },
  "context": {
    "symbol": "INTC",
    "as_of": "2026-10-30"
  }
}

lowestbars max min ref

Index provider · example 15

Rebalance bands: has IWM drifted far from SPY?

A blended index rebalances when small caps drift from large caps. Check the relative move between rebalances.

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

State

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

Questions

roc63ruleroc(C, 63) > 5
Up more than 5% over three months
roc63_dnruleroc(C, 63) < -5
Down more than 5% over three months
trendruleC > sma(C, 50)
Above the 50-day average
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symbolroc63ruleroc63_dnruletrendrulebeat_spyforecast
IWM0.06880.58460.21760.459
SPY0.05370.05370.11280.514

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 three months: true for none of 2. Down more than 5% over three months: true for none of 2. Above the 50-day average: true for none of 2. Highest odds for “Beating SPY over a month”: SPY at 51%.

If one leg rose more than the band and the other did not, the quarterly rebalance will be larger; the team pre-announces it.

Request JSON (IWM; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "IWM"
  },
  "questions": {
    "roc63": {
      "type": "yes_no",
      "ask": "roc(C, 63) > 5"
    },
    "roc63_dn": {
      "type": "yes_no",
      "ask": "roc(C, 63) < -5"
    },
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  }
}
Response JSON (IWM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "roc63": {
      "yes_no": 0.0688,
      "rule": "roc(C, 63) > 5",
      "basis": "rule"
    },
    "roc63_dn": {
      "yes_no": 0.5846,
      "rule": "roc(C, 63) < -5",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.2176,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.459
    }
  },
  "context": {
    "symbol": "IWM",
    "as_of": "2026-10-30"
  }
}

roc sma

Index provider · example 16

Research index: which reversal candles is XOM printing today?

Researching a candlestick-signal index: test which reversal patterns are present today on a liquid name.

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

State

{"symbol":"XOM"} 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.
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.
gravestonerulegravestone_doji()
gravestone doji candle: Doji with a long upper wick and almost no lower wick.
marubozurulemarubozu()
marubozu candle: Body at least 90% of the range: almost no wicks.
tweezer_topruletweezer_top()
tweezer top candle: Green then red, with highs within 0.1%.

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.0971false
inv_hammer
inverted hammer candle: Shooting-star shape after a five-bar decline.
0.1089false
dragonfly
dragonfly doji candle: Doji with a long lower wick (60%+ of the range) and almost no upper wick.
0.0971false
gravestone
gravestone doji candle: Doji with a long upper wick and almost no lower wick.
0.1089false
marubozu
marubozu candle: Body at least 90% of the range: almost no wicks.
0.057false
tweezer_top
tweezer top candle: Green then red, with highs within 0.1%.
0.0537false

What it means

For XOM 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.; inverted hammer candle: Shooting-star shape after a five-bar decline.; dragonfly doji candle: Doji with a long lower wick (60%+ of the range) and almost no upper wick.; gravestone doji candle: Doji with a long upper wick and almost no lower wick.; marubozu candle: Body at least 90% of the range: almost no wicks.; tweezer top candle: Green then red, with highs within 0.1%..

Each pattern is an exact definition, so the research team can count signals over time and test them before any index uses one.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "XOM"
  },
  "questions": {
    "hammer": {
      "type": "yes_no",
      "ask": "hammer()"
    },
    "inv_hammer": {
      "type": "yes_no",
      "ask": "inverted_hammer()"
    },
    "dragonfly": {
      "type": "yes_no",
      "ask": "dragonfly_doji()"
    },
    "gravestone": {
      "type": "yes_no",
      "ask": "gravestone_doji()"
    },
    "marubozu": {
      "type": "yes_no",
      "ask": "marubozu()"
    },
    "tweezer_top": {
      "type": "yes_no",
      "ask": "tweezer_top()"
    }
  }
}
Response JSON (XOM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "hammer": {
      "yes_no": 0.0971,
      "rule": "hammer()",
      "basis": "rule"
    },
    "inv_hammer": {
      "yes_no": 0.1089,
      "rule": "inverted_hammer()",
      "basis": "rule"
    },
    "dragonfly": {
      "yes_no": 0.0971,
      "rule": "dragonfly_doji()",
      "basis": "rule"
    },
    "gravestone": {
      "yes_no": 0.1089,
      "rule": "gravestone_doji()",
      "basis": "rule"
    },
    "marubozu": {
      "yes_no": 0.057,
      "rule": "marubozu()",
      "basis": "rule"
    },
    "tweezer_top": {
      "yes_no": 0.0537,
      "rule": "tweezer_top()",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "XOM",
    "as_of": "2026-10-30"
  }
}

dragonfly_doji gravestone_doji hammer inverted_hammer marubozu tweezer_top

Index provider · example 17

Dividend ex-dates for total-return index calculation

Total-return indexes reinvest on ex-dates. Flag constituents going ex in the next 30 days so the calculation team is ready.

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

State

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

Questions

ex_soonruledays_to_ex_div <= 30
Goes ex-dividend within 30 days
ex_recentEnglish → ruleDid the stock go ex-dividend in the last 30 days?
next_upEnglish → ruleIs the next declared dividend larger than the last one?
paysrulepays_dividend > 0.5
Pays a dividend

Answers

Symbolex_soonruleex_recentrulenext_uprulepaysruleFired
AAPL0.05370.05370.500.8591none
JPM0.05370.93170.500.8591none
XOM0.05370.05370.500.8591none

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.

ex_soon >= 0.6→Webhookindex-calc
AAPL 0 of 1 fired · dry run, nothing sent
JPM 0 of 1 fired · dry run, nothing sent
XOM 0 of 1 fired · dry run, nothing sent

What it means

Session of 2026-10-30, 3 symbols: Goes ex-dividend within 30 days: true for none of 3. Did the stock go ex-dividend in the last 30 days: true for JPM of 3. Is the next declared dividend larger than the last one: true for none of 3. Pays a dividend: true for AAPL, JPM, XOM of 3. tr_calc fired for none.

Only declared ex-dates count, so a name with nothing declared answers no and is checked again next week.

Request JSON (AAPL; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "AAPL"
  },
  "questions": {
    "ex_soon": {
      "type": "yes_no",
      "ask": "days_to_ex_div <= 30"
    },
    "ex_recent": {
      "type": "yes_no",
      "instructions": "Did the stock go ex-dividend in the last 30 days?"
    },
    "next_up": {
      "type": "yes_no",
      "instructions": "Is the next declared dividend larger than the last one?"
    },
    "pays": {
      "type": "yes_no",
      "ask": "pays_dividend > 0.5"
    }
  },
  "actions": [
    {
      "id": "tr_calc",
      "when": "ex_soon >= 0.6",
      "do": "webhook",
      "connection": "index-calc",
      "body": {
        "symbol": "{{symbol}}",
        "as_of": "{{as_of}}",
        "event": "ex_dividend_within_30d",
        "p": "{{ex_soon}}",
        "next_div_higher": "{{next_up}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (AAPL, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "ex_soon": {
      "yes_no": 0.0537,
      "rule": "days_to_ex_div <= 30",
      "basis": "rule"
    },
    "ex_recent": {
      "yes_no": 0.0537,
      "rule": "days_since_ex_div <= 30",
      "basis": "pattern"
    },
    "next_up": {
      "yes_no": 0.5,
      "rule": "next_div_amount > last_div_amount",
      "basis": "pattern"
    },
    "pays": {
      "yes_no": 0.8591,
      "rule": "pays_dividend > 0.5",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "AAPL",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "tr_calc",
      "fired": false,
      "status": "skipped"
    }
  ]
}

days_since_ex_div days_to_ex_div last_div_amount next_div_amount pays_dividend

Index provider · example 18

Trend-strength index rule: ADX and directional movement on TSLA

A trend-strength index includes names whose ADX shows a strong directional move. Test the rule and its components on one name.

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

State

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

Questions

adx25ruleadx(14) > 25
Trending (ADX above 25)
uptrendruleadx(14) > 20 and diplus(14) > diminus(14)
Trending up (ADX over 20 and +DI over −DI)
di_downrulediminus(14) > diplus(14)
-DI above +DI (directional pressure down)
stochrulestochk(14) > stochd(14)
Stochastic %K above %D
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
adx25
Trending (ADX above 25)
0.0632false
uptrend
Trending up (ADX over 20 and +DI over −DI)
0.1291false
di_down
-DI above +DI (directional pressure down)
0.153false
stoch
Stochastic %K above %D
0.2868false
up_week
Higher in a week
0.48749% · close to even

What it means

For TSLA on the session of 2026-10-30: Not true: Trending (ADX above 25); Trending up (ADX over 20 and +DI over −DI); -DI above +DI (directional pressure down); Stochastic %K above %D. Forecasts: Higher in a week 49%.

ADX says how strong a trend is, the DI lines say which way; the index needs both before admitting a name.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "TSLA"
  },
  "questions": {
    "adx25": {
      "type": "yes_no",
      "ask": "adx(14) > 25"
    },
    "uptrend": {
      "type": "yes_no",
      "ask": "adx(14) > 20 and diplus(14) > diminus(14)"
    },
    "di_down": {
      "type": "yes_no",
      "ask": "diminus(14) > diplus(14)"
    },
    "stoch": {
      "type": "yes_no",
      "ask": "stochk(14) > stochd(14)"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (TSLA, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "adx25": {
      "yes_no": 0.0632,
      "rule": "adx(14) > 25",
      "basis": "rule"
    },
    "uptrend": {
      "yes_no": 0.1291,
      "rule": "adx(14) > 20 and diplus(14) > diminus(14)",
      "basis": "rule"
    },
    "di_down": {
      "yes_no": 0.153,
      "rule": "diminus(14) > diplus(14)",
      "basis": "rule"
    },
    "stoch": {
      "yes_no": 0.2868,
      "rule": "stochk(14) > stochd(14)",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.487
    }
  },
  "context": {
    "symbol": "TSLA",
    "as_of": "2026-10-30"
  }
}

adx diminus diplus stochd stochk

Index provider · example 19

Weekly methodology check: smoothed trend on the S&P 500

Every Friday, recompute a smoothed-trend rule the index uses, and email the methodology owner if it changes state.

ora-fin-0.1.1SPY5 questions2 actionsworkflow · Fri at 17:15 ET
  1. ScheduleFri at 17:15 ET
  2. StateSPY
  3. Questions5 asked
  4. Answersreal, captured
  5. Actions2 rules · dry run

State

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

Questions

recruleC > rec(C, self + 0.1 * (C - self))
Above a recursive exponential smoother (alpha 0.1)
rmaruleC > rma(C, 50)
Above its 50-day Wilder average
hlc3rulehlc3() > sma(hlc3(), 20)
Typical price above its 20-day average
ohlc4ruleohlc4() > sma(C, 10)
Average price of the day above the 10-day close average
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

QuestionAnswerReading
rec
Above a recursive exponential smoother (alpha 0.1)
0.0786false
rma
Above its 50-day Wilder average
0.496on the line (false)
hlc3
Typical price above its 20-day average
0.0824false
ohlc4
Average price of the day above the 10-day close average
0.0939false
drop5
A 5% drawdown within a month
0.20320% · unlikely

Actions

Rules on the answers decide what to send.

rec >= 0.6 and rma >= 0.6→Emailmethodology-owner
else→Emailmethodology-owner
What each action would send 1 of 2 fired · dry run, nothing sent
staterule false: skipped
state_downwould send (dry run)Email → methodology-owner
{
  "subject": "SPY smoothed trend: not up (2026-10-30)",
  "text": "Recursive smoother 8%, Wilder 50-day 50%. State: not up."
}

What it means

For SPY on the session of 2026-10-30: Not true: Above a recursive exponential smoother (alpha 0.1); Typical price above its 20-day average; Average price of the day above the 10-day close average. On the line: Above its 50-day Wilder average. Forecasts: A 5% drawdown within a month 20%. Fired: state_down (Email → methodology-owner).

The rec() rule is the smoother written as a recursion; the email documents its state every week whatever it is.

As a scheduled workflow (Fri at 17:15 ET)

Create it under Workflows in the console: it runs these questions for every symbol on the schedule and fires the actions per symbol. The answers above are what one run returned.

{
  "name": "Weekly methodology check: smoothed trend on the S&P 500",
  "symbols": "SPY",
  "days": [
    5
  ],
  "at_time": "17:15",
  "model": "ora-fin-0.1.1",
  "questions": {
    "rec": {
      "type": "yes_no",
      "ask": "C > rec(C, self + 0.1 * (C - self))"
    },
    "rma": {
      "type": "yes_no",
      "ask": "C > rma(C, 50)"
    },
    "hlc3": {
      "type": "yes_no",
      "ask": "hlc3() > sma(hlc3(), 20)"
    },
    "ohlc4": {
      "type": "yes_no",
      "ask": "ohlc4() > sma(C, 10)"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "state",
      "when": "rec >= 0.6 and rma >= 0.6",
      "do": "email",
      "connection": "methodology-owner",
      "subject": "{{symbol}} smoothed trend: up ({{as_of}})",
      "message": "Recursive smoother {{rec|pct}}, Wilder 50-day {{rma|pct}}, typical price {{hlc3|pct}}. State: up."
    },
    {
      "id": "state_down",
      "when": "else",
      "do": "email",
      "connection": "methodology-owner",
      "subject": "{{symbol}} smoothed trend: not up ({{as_of}})",
      "message": "Recursive smoother {{rec|pct}}, Wilder 50-day {{rma|pct}}. State: not up."
    }
  ]
}
Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SPY"
  },
  "questions": {
    "rec": {
      "type": "yes_no",
      "ask": "C > rec(C, self + 0.1 * (C - self))"
    },
    "rma": {
      "type": "yes_no",
      "ask": "C > rma(C, 50)"
    },
    "hlc3": {
      "type": "yes_no",
      "ask": "hlc3() > sma(hlc3(), 20)"
    },
    "ohlc4": {
      "type": "yes_no",
      "ask": "ohlc4() > sma(C, 10)"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "state",
      "when": "rec >= 0.6 and rma >= 0.6",
      "do": "email",
      "connection": "methodology-owner",
      "subject": "{{symbol}} smoothed trend: up ({{as_of}})",
      "message": "Recursive smoother {{rec|pct}}, Wilder 50-day {{rma|pct}}, typical price {{hlc3|pct}}. State: up."
    },
    {
      "id": "state_down",
      "when": "else",
      "do": "email",
      "connection": "methodology-owner",
      "subject": "{{symbol}} smoothed trend: not up ({{as_of}})",
      "message": "Recursive smoother {{rec|pct}}, Wilder 50-day {{rma|pct}}. State: not up."
    }
  ],
  "dry_run": true
}
Response JSON (SPY, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "rec": {
      "yes_no": 0.0786,
      "rule": "C > rec(C, self + 0.1 * (C - self))",
      "basis": "rule"
    },
    "rma": {
      "yes_no": 0.496,
      "rule": "C > rma(C, 50)",
      "basis": "rule"
    },
    "hlc3": {
      "yes_no": 0.0824,
      "rule": "hlc3() > sma(hlc3(), 20)",
      "basis": "rule"
    },
    "ohlc4": {
      "yes_no": 0.0939,
      "rule": "ohlc4() > sma(C, 10)",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.203
    }
  },
  "context": {
    "symbol": "SPY",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "state",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "state_down",
      "fired": true,
      "status": "dry_run",
      "do": "email",
      "connection": "methodology-owner",
      "preview": {
        "subject": "SPY smoothed trend: not up (2026-10-30)",
        "text": "Recursive smoother 8%, Wilder 50-day 50%. State: not up."
      }
    }
  ]
}

hlc3 ohlc4 rec rma sma

Index provider · example 20

Swing-structure screen: is XLK making higher lows?

A structural-trend index qualifies funds that keep making higher swing lows. Check the last three confirmed swing lows and the last two highs.

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

hlruleswinglow(5, 1) > swinglow(5, 2)
Latest swing low above the one before
hhruleswinghigh(5, 1) > swinghigh(5, 2)
Latest swing high above the one before
hl3ruleswinglow(5, 2) > swinglow(5, 3)
The previous swing low above the one before it
above_shruleC > swinghigh(5)
Above its last confirmed swing high
new_highforecastWill it make a new 20-day high in the next week?
A new 20-day high next week

Answers

QuestionAnswerReading
hl
Latest swing low above the one before
0.4372on the line (false)
hh
Latest swing high above the one before
0.9351true
hl3
The previous swing low above the one before it
0.705true
above_sh
Above its last confirmed swing high
0.0575false
new_high
A new 20-day high next week
0.044% · unlikely

What it means

For XLK on the session of 2026-10-30: True now: Latest swing high above the one before; The previous swing low above the one before it. Not true: Above its last confirmed swing high. On the line: Latest swing low above the one before. Forecasts: A new 20-day high next week 4%.

Swing pivots are confirmed only bars later, so the rule never looks ahead; three rising lows in a row qualifies.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "XLK"
  },
  "questions": {
    "hl": {
      "type": "yes_no",
      "ask": "swinglow(5, 1) > swinglow(5, 2)"
    },
    "hh": {
      "type": "yes_no",
      "ask": "swinghigh(5, 1) > swinghigh(5, 2)"
    },
    "hl3": {
      "type": "yes_no",
      "ask": "swinglow(5, 2) > swinglow(5, 3)"
    },
    "above_sh": {
      "type": "yes_no",
      "ask": "C > swinghigh(5)"
    },
    "new_high": {
      "type": "yes_no",
      "instructions": "Will it make a new 20-day high in the next week?"
    }
  }
}
Response JSON (XLK, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "hl": {
      "yes_no": 0.4372,
      "rule": "swinglow(5, 1) > swinglow(5, 2)",
      "basis": "rule"
    },
    "hh": {
      "yes_no": 0.9351,
      "rule": "swinghigh(5, 1) > swinghigh(5, 2)",
      "basis": "rule"
    },
    "hl3": {
      "yes_no": 0.705,
      "rule": "swinglow(5, 2) > swinglow(5, 3)",
      "basis": "rule"
    },
    "above_sh": {
      "yes_no": 0.0575,
      "rule": "C > swinghigh(5)",
      "basis": "rule"
    },
    "new_high": {
      "yes_no": 0.04
    }
  },
  "context": {
    "symbol": "XLK",
    "as_of": "2026-10-30"
  }
}

swinghigh swinglow

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, Insurance investment office, Pension fund, Endowment, Sovereign wealth fund.

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