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

Dividend investor: 20 ways to use Ora

Builds income: yield, growth streaks, ex-dates, cuts and the price trend under the payout. Each example is a complete, runnable request with the real answers it returned (47 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 (35)

div_yield_ttm 14sma 11raised_last 8years_of_growth 5cut_last 5max 5div_count_ttm 3div_change_pct 3days_to_ex_div 2rsi 2beat_eps_last 2miss_eps_last 1last_div_amount 1next_div_amount 1days_since_ex_div 1zscore 1ref 1eps_year_ago 1last_eps 1revenue_growth_yoy 1adx 1div_ttm 1pays_dividend 1roc 1atr 1bbmid 1log 1offset 1sqrt 1std 1hammer 1inverted_hammer 1lowest 1tweezer_bottom 1median 1

Examples 1–10 of 20 · page 1 of 2

Dividend investor · example 1

Is JNJ still a dividend grower worth holding

Check the growth streak, the last raise, the yield and the trend under the payout.

ora-fin-0.1.1JNJ6 questions2 actions
  1. StateJNJ
  2. Questions6 asked
  3. Answersreal, captured
  4. Actions2 rules · dry run

State

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

Questions

grow25English → ruleHas the stock grown its dividend for 25 years in a row?
grow10ruleyears_of_growth >= 10
Ten years of dividend growth
raisedruleraised_last > 0.5
Raised its last dividend
yield3rulediv_yield_ttm > 3
Yield above 3%
trendEnglish → ruleIs the stock above its 200-day moving average?
raise_nextforecastWill the company raise its dividend next year?
Raising the dividend next year

Answers

QuestionAnswerReading
grow25
Has the stock grown its dividend for 25 years in a row
compiled to years_of_growth >= 25
0.9463true
grow10
Ten years of dividend growth
0.9463true
raised
Raised its last dividend
0.1409false
yield3
Yield above 3%
0.0648false
trend
Is the stock above its 200-day moving average
compiled to C > sma(C, 200)
0.9454true
raise_next
Raising the dividend next year
0.49550% · close to even

Actions

Rules on the answers decide what to send.

raised < 0.4 or trend < 0.4→Emailme
else→Emailme
What each action would send 1 of 2 fired · dry run, nothing sent
reviewwould send (dry run)Email → me
{
  "subject": "JNJ: dividend holding review",
  "text": "JNJ (2026-10-30): raised last time 14%, above the 200-day 95%. Review the position."
}
okrule false: skipped

What it means

For JNJ on the session of 2026-10-30: True now: Has the stock grown its dividend for 25 years in a row; Ten years of dividend growth; Is the stock above its 200-day moving average. Not true: Raised its last dividend; Yield above 3%. Forecasts: Raising the dividend next year 50%. Fired: review (Email → me).

A long streak and a recent raise keep it in the income core; a cut or a broken trend triggers a review.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "JNJ"
  },
  "questions": {
    "grow25": {
      "type": "yes_no",
      "instructions": "Has the stock grown its dividend for 25 years in a row?"
    },
    "grow10": {
      "type": "yes_no",
      "ask": "years_of_growth >= 10"
    },
    "raised": {
      "type": "yes_no",
      "ask": "raised_last > 0.5"
    },
    "yield3": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 3"
    },
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "raise_next": {
      "type": "yes_no",
      "instructions": "Will the company raise its dividend next year?"
    }
  },
  "actions": [
    {
      "id": "review",
      "when": "raised < 0.4 or trend < 0.4",
      "do": "email",
      "connection": "me",
      "subject": "{{symbol}}: dividend holding review",
      "message": "{{symbol}} ({{as_of}}): raised last time {{raised|pct}}, above the 200-day {{trend|pct}}. Review the position."
    },
    {
      "id": "ok",
      "when": "else",
      "do": "email",
      "connection": "me",
      "subject": "{{symbol}}: dividend record intact",
      "message": "{{symbol}} ({{as_of}}): 25-year grower {{grow25|pct}}, raised {{raised|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (JNJ, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "grow25": {
      "yes_no": 0.9463,
      "rule": "years_of_growth >= 25",
      "basis": "pattern"
    },
    "grow10": {
      "yes_no": 0.9463,
      "rule": "years_of_growth >= 10",
      "basis": "rule"
    },
    "raised": {
      "yes_no": 0.1409,
      "rule": "raised_last > 0.5",
      "basis": "rule"
    },
    "yield3": {
      "yes_no": 0.0648,
      "rule": "div_yield_ttm > 3",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.9454,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "raise_next": {
      "yes_no": 0.495
    }
  },
  "context": {
    "symbol": "JNJ",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "review",
      "fired": true,
      "status": "dry_run",
      "do": "email",
      "connection": "me",
      "preview": {
        "subject": "JNJ: dividend holding review",
        "text": "JNJ (2026-10-30): raised last time 14%, above the 200-day 95%. Review the position."
      }
    },
    {
      "id": "ok",
      "fired": false,
      "status": "skipped"
    }
  ]
}

div_yield_ttm raised_last sma years_of_growth

Dividend investor · example 2

Yield-trap screen: T, VZ, MO, PFE

High yields can be a sign of trouble: check for cuts, falling prices and missed earnings.

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

State

{"symbol":"T"} then VZ, MO, PFE, one request each. The server fills in the latest completed session.

Questions

yield3English → ruleIs the dividend yield above 3%?
cutEnglish → ruleDid the stock cut its dividend last time?
drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
missEnglish → ruleDid the stock miss EPS estimates last quarter?
below200English → ruleIs the stock below its 200-day moving average?
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symbolyield3rulecutruledrawdownrulemissrulebelow200ruledrop5forecastFired
T0.94630.14090.8450.14090.93260.463trap
VZ0.94630.14090.08790.14090.65520.421none
MO0.94630.14090.05370.14090.05370.543none
PFE0.94630.14090.05370.14090.05370.418none

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.

yield3 >= 0.6 and (cut >= 0.6 or drawdown >= 0.6)→Slackincome-book
T 1 of 1 fired · dry run, nothing sent
trapwould send (dry run)Slack → income-book
{
  "text": "T (2026-10-30): possible yield trap. Cut 14%, 20% drawdown 84%."
}
VZ 0 of 1 fired · dry run, nothing sent
MO 0 of 1 fired · dry run, nothing sent
PFE 0 of 1 fired · dry run, nothing sent

What it means

Session of 2026-10-30, 4 symbols: Is the dividend yield above 3%: true for T, VZ, MO, PFE of 4. Did the stock cut its dividend last time: true for none of 4. More than 20% off the 52-week high: true for T of 4. Did the stock miss EPS estimates last quarter: true for none of 4. Highest odds for “A 5% drawdown within a month”: MO at 54%. trap fired for T.

A high yield with a cut or a deep drawdown is a possible trap; a high yield with an intact trend is income.

Request JSON (T; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "T"
  },
  "questions": {
    "yield3": {
      "type": "yes_no",
      "instructions": "Is the dividend yield above 3%?"
    },
    "cut": {
      "type": "yes_no",
      "instructions": "Did the stock cut its dividend last time?"
    },
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "miss": {
      "type": "yes_no",
      "instructions": "Did the stock miss EPS estimates last quarter?"
    },
    "below200": {
      "type": "yes_no",
      "instructions": "Is the stock below its 200-day moving average?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "trap",
      "when": "yield3 >= 0.6 and (cut >= 0.6 or drawdown >= 0.6)",
      "do": "slack",
      "connection": "income-book",
      "message": "{{symbol}} ({{as_of}}): possible yield trap. Cut {{cut|pct}}, 20% drawdown {{drawdown|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (T, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "yield3": {
      "yes_no": 0.9463,
      "rule": "div_yield_ttm > 3",
      "basis": "pattern"
    },
    "cut": {
      "yes_no": 0.1409,
      "rule": "cut_last > 0.5",
      "basis": "pattern"
    },
    "drawdown": {
      "yes_no": 0.845,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "miss": {
      "yes_no": 0.1409,
      "rule": "miss_eps_last > 0.5",
      "basis": "pattern"
    },
    "below200": {
      "yes_no": 0.9326,
      "rule": "C < sma(C, 200)",
      "basis": "comparison"
    },
    "drop5": {
      "yes_no": 0.463
    }
  },
  "context": {
    "symbol": "T",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "trap",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "income-book",
      "preview": {
        "text": "T (2026-10-30): possible yield trap. Cut 14%, 20% drawdown 84%."
      }
    }
  ]
}

cut_last div_yield_ttm max miss_eps_last sma

Dividend investor · example 3

Ex-dividend calendar: my income holdings every Monday

Each Monday, list which holdings go ex-dividend within 30 days, with the amount change.

ora-fin-0.1.14 symbols, one request each4 questions1 actionworkflow · Mon at 08:00 ET
  1. ScheduleMon at 08:00 ET
  2. State4 symbols
  3. Questions4 asked
  4. Answersreal, captured
  5. Actions1 rule · dry run

State

{"symbol":"KO"} then PEP, PG, JNJ, one request each. The server fills in the latest completed session.

Questions

ex_soonruledays_to_ex_div <= 30
Goes ex-dividend within 30 days
next_upEnglish → ruleIs the next declared dividend larger than the last one?
raisedruleraised_last > 0.5
Raised its last dividend
yield3rulediv_yield_ttm > 3
Yield above 3%

Answers

Symbolex_soonrulenext_upruleraisedruleyield3ruleFired
KO0.20490.450.14090.0537none
PEP0.05370.500.14090.9463none
PG0.05370.500.14090.2091none
JNJ0.91870.450.14090.0648ex_list

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→Emailme
KO 0 of 1 fired · dry run, nothing sent
PEP 0 of 1 fired · dry run, nothing sent
PG 0 of 1 fired · dry run, nothing sent
JNJ 1 of 1 fired · dry run, nothing sent
ex_listwould send (dry run)Email → me
{
  "subject": "JNJ goes ex-dividend within 30 days",
  "text": "JNJ (2026-10-30): declared ex-date within 30 days. Next payment larger than the last: 45%. Raised last time: 14%."
}

What it means

Session of 2026-10-30, 4 symbols: Goes ex-dividend within 30 days: true for JNJ of 4. Is the next declared dividend larger than the last one: true for none of 4. Raised its last dividend: true for none of 4. Yield above 3%: true for PEP of 4. ex_list fired for JNJ.

The email is the week's dividend calendar; names without a declared ex-date stay off it.

As a scheduled workflow (Mon at 08: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": "Ex-dividend calendar: my income holdings every Monday",
  "symbols": "KO PEP PG JNJ",
  "days": [
    1
  ],
  "at_time": "08:00",
  "model": "ora-fin-0.1.1",
  "questions": {
    "ex_soon": {
      "type": "yes_no",
      "ask": "days_to_ex_div <= 30"
    },
    "next_up": {
      "type": "yes_no",
      "instructions": "Is the next declared dividend larger than the last one?"
    },
    "raised": {
      "type": "yes_no",
      "ask": "raised_last > 0.5"
    },
    "yield3": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 3"
    }
  },
  "actions": [
    {
      "id": "ex_list",
      "when": "ex_soon >= 0.6",
      "do": "email",
      "connection": "me",
      "subject": "{{symbol}} goes ex-dividend within 30 days",
      "message": "{{symbol}} ({{as_of}}): declared ex-date within 30 days. Next payment larger than the last: {{next_up|pct}}. Raised last time: {{raised|pct}}."
    }
  ]
}
Request JSON (KO; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "KO"
  },
  "questions": {
    "ex_soon": {
      "type": "yes_no",
      "ask": "days_to_ex_div <= 30"
    },
    "next_up": {
      "type": "yes_no",
      "instructions": "Is the next declared dividend larger than the last one?"
    },
    "raised": {
      "type": "yes_no",
      "ask": "raised_last > 0.5"
    },
    "yield3": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 3"
    }
  },
  "actions": [
    {
      "id": "ex_list",
      "when": "ex_soon >= 0.6",
      "do": "email",
      "connection": "me",
      "subject": "{{symbol}} goes ex-dividend within 30 days",
      "message": "{{symbol}} ({{as_of}}): declared ex-date within 30 days. Next payment larger than the last: {{next_up|pct}}. Raised last time: {{raised|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (KO, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "ex_soon": {
      "yes_no": 0.2049,
      "rule": "days_to_ex_div <= 30",
      "basis": "rule"
    },
    "next_up": {
      "yes_no": 0.45,
      "rule": "next_div_amount > last_div_amount",
      "basis": "pattern"
    },
    "raised": {
      "yes_no": 0.1409,
      "rule": "raised_last > 0.5",
      "basis": "rule"
    },
    "yield3": {
      "yes_no": 0.0537,
      "rule": "div_yield_ttm > 3",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "KO",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "ex_list",
      "fired": false,
      "status": "skipped"
    }
  ]
}

days_to_ex_div div_yield_ttm last_div_amount next_div_amount raised_last

Dividend investor · example 4

Monthly income: does O still pay monthly

Realty Income is bought for monthly payments; confirm the count and the record.

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

State

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

Questions

monthlyEnglish → ruleDoes the stock pay a monthly dividend?
raisedruleraised_last > 0.5
Raised its last dividend
no_cutrulecut_last < 0.5
Did not cut its last dividend
yield3rulediv_yield_ttm > 3
Yield above 3%
trendrulediv_yield_ttm > 2 and C > sma(C, 200)
Yield above 2% and above the 200-day

Answers

QuestionAnswerReading
monthly
Does the stock pay a monthly dividend
compiled to div_count_ttm >= 11
0.9317true
raised
Raised its last dividend
0.1409false
no_cut
Did not cut its last dividend
0.8591true
yield3
Yield above 3%
0.9463true
trend
Yield above 2% and above the 200-day
0.1427false

What it means

For O on the session of 2026-10-30: True now: Does the stock pay a monthly dividend; Did not cut its last dividend; Yield above 3%. Not true: Raised its last dividend; Yield above 2% and above the 200-day.

Twelve payments a year, no cut and a yield above three percent is what the position is for.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "O"
  },
  "questions": {
    "monthly": {
      "type": "yes_no",
      "instructions": "Does the stock pay a monthly dividend?"
    },
    "raised": {
      "type": "yes_no",
      "ask": "raised_last > 0.5"
    },
    "no_cut": {
      "type": "yes_no",
      "ask": "cut_last < 0.5"
    },
    "yield3": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 3"
    },
    "trend": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 2 and C > sma(C, 200)"
    }
  }
}
Response JSON (O, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "monthly": {
      "yes_no": 0.9317,
      "rule": "div_count_ttm >= 11",
      "basis": "pattern"
    },
    "raised": {
      "yes_no": 0.1409,
      "rule": "raised_last > 0.5",
      "basis": "rule"
    },
    "no_cut": {
      "yes_no": 0.8591,
      "rule": "cut_last < 0.5",
      "basis": "rule"
    },
    "yield3": {
      "yes_no": 0.9463,
      "rule": "div_yield_ttm > 3",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.1427,
      "rule": "div_yield_ttm > 2 and C > sma(C, 200)",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "O",
    "as_of": "2026-10-30"
  }
}

cut_last div_count_ttm div_yield_ttm raised_last sma

Dividend investor · example 5

Dividend cut alert for the whole income book (Slack)

Post to the household channel the moment any holding's last payment is below the one before.

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

State

{"symbol":"T"} then VZ, MO, O, one request each. The server fills in the latest completed session.

Questions

cutEnglish → ruleDid the stock cut its dividend last time?
changerulediv_change_pct < -10
Last payment more than 10% below the previous
days_exruledays_since_ex_div <= 45
Went ex-dividend within 45 days
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

Symbolcutrulechangeruledays_exruledrop10forecastFired
T0.14090.06830.94630.463none
VZ0.14090.06830.94630.421none
MO0.14090.05370.550.543none
O0.14090.06830.94630.314none

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.

cut >= 0.6→Slackincome-book
T 0 of 1 fired · dry run, nothing sent
VZ 0 of 1 fired · dry run, nothing sent
MO 0 of 1 fired · dry run, nothing sent
O 0 of 1 fired · dry run, nothing sent

What it means

Session of 2026-10-30, 4 symbols: Did the stock cut its dividend last time: true for none of 4. Last payment more than 10% below the previous: true for none of 4. Went ex-dividend within 45 days: true for T, VZ, O of 4. Highest odds for “A 10% drawdown within a month”: MO at 54%. cut fired for none.

A cut message means re-underwriting the position; no message means every payout held.

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": "Dividend cut alert for the whole income book (Slack)",
  "symbols": "T VZ MO O",
  "days": [
    1,
    2,
    3,
    4,
    5
  ],
  "at_time": "17:00",
  "model": "ora-fin-0.1.1",
  "questions": {
    "cut": {
      "type": "yes_no",
      "instructions": "Did the stock cut its dividend last time?"
    },
    "change": {
      "type": "yes_no",
      "ask": "div_change_pct < -10"
    },
    "days_ex": {
      "type": "yes_no",
      "ask": "days_since_ex_div <= 45"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "cut",
      "when": "cut >= 0.6",
      "do": "slack",
      "connection": "income-book",
      "message": "{{symbol}} ({{as_of}}): last dividend lower than the previous one (cut {{cut|pct}}, over 10% {{change|pct}}). 10% drawdown odds {{drop10|pct}}."
    }
  ]
}
Request JSON (T; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "T"
  },
  "questions": {
    "cut": {
      "type": "yes_no",
      "instructions": "Did the stock cut its dividend last time?"
    },
    "change": {
      "type": "yes_no",
      "ask": "div_change_pct < -10"
    },
    "days_ex": {
      "type": "yes_no",
      "ask": "days_since_ex_div <= 45"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "cut",
      "when": "cut >= 0.6",
      "do": "slack",
      "connection": "income-book",
      "message": "{{symbol}} ({{as_of}}): last dividend lower than the previous one (cut {{cut|pct}}, over 10% {{change|pct}}). 10% drawdown odds {{drop10|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (T, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "cut": {
      "yes_no": 0.1409,
      "rule": "cut_last > 0.5",
      "basis": "pattern"
    },
    "change": {
      "yes_no": 0.0683,
      "rule": "div_change_pct < -10",
      "basis": "rule"
    },
    "days_ex": {
      "yes_no": 0.9463,
      "rule": "days_since_ex_div <= 45",
      "basis": "rule"
    },
    "drop10": {
      "yes_no": 0.463
    }
  },
  "context": {
    "symbol": "T",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "cut",
      "fired": false,
      "status": "skipped"
    }
  ]
}

cut_last days_since_ex_div div_change_pct

Dividend investor · example 6

Add to PEP when the yield is high and the price dips

Income investors add when the price dips inside a long uptrend, which raises the yield on new money.

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

State

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

Questions

rsi40English → ruleIs RSI below 40?
zlowrulezscore(C, 20) < -2
Two deviations under the 20-day mean
yield3rulediv_yield_ttm > 3
Yield above 3%
growerruleyears_of_growth >= 10
Ten years of dividend growth
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.0755false
zlow
Two deviations under the 20-day mean
0.0585false
yield3
Yield above 3%
0.9463true
grower
Ten years of dividend growth
0.9463true
up_week
Higher in a week
0.50551% · close to even

Actions

Rules on the answers decide what to send.

rsi40 >= 0.6 and grower >= 0.6→Webhookadvisor-crm
What each action would send 0 of 1 fired · dry run, nothing sent
crmrule false: skipped

What it means

For PEP on the session of 2026-10-30: True now: Yield above 3%; Ten years of dividend growth. Not true: Is RSI below 40; Two deviations under the 20-day mean. Forecasts: Higher in a week 51%. No action fired: every rule was false.

Oversold plus a higher yield on a long grower is the add signal; the forecast says how patient to be.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "PEP"
  },
  "questions": {
    "rsi40": {
      "type": "yes_no",
      "instructions": "Is RSI below 40?"
    },
    "zlow": {
      "type": "yes_no",
      "ask": "zscore(C, 20) < -2"
    },
    "yield3": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 3"
    },
    "grower": {
      "type": "yes_no",
      "ask": "years_of_growth >= 10"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  },
  "actions": [
    {
      "id": "crm",
      "when": "rsi40 >= 0.6 and grower >= 0.6",
      "do": "webhook",
      "connection": "advisor-crm",
      "body": {
        "symbol": "{{symbol}}",
        "task": "add_on_dip",
        "p_rsi_under_40": "{{rsi40}}",
        "as_of": "{{as_of}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (PEP, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "rsi40": {
      "yes_no": 0.0755,
      "rule": "rsi(C, 14) < 40",
      "basis": "comparison"
    },
    "zlow": {
      "yes_no": 0.0585,
      "rule": "zscore(C, 20) < -2",
      "basis": "rule"
    },
    "yield3": {
      "yes_no": 0.9463,
      "rule": "div_yield_ttm > 3",
      "basis": "rule"
    },
    "grower": {
      "yes_no": 0.9463,
      "rule": "years_of_growth >= 10",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.505
    }
  },
  "context": {
    "symbol": "PEP",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "crm",
      "fired": false,
      "status": "skipped"
    }
  ]
}

div_yield_ttm rsi years_of_growth zscore

Dividend investor · example 7

Dividend ETF comparison: SCHD, VIG, VYM, NOBL

Same questions for four dividend ETFs: trend, yield, drawdown and next-month odds.

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

State

{"symbol":"SCHD"} then VIG, VYM, NOBL, one request each. The server fills in the latest completed session.

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
yield3rulediv_yield_ttm > 3
Yield above 3%
drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
sma_uprulesma(C, 200) > ref(sma(C, 200), -20)
The 200-day average is rising
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symboltrendruleyield3ruledrawdownrulesma_uprulebeat_spyforecast
SCHD0.94630.42870.05370.94630.523
VIG0.94630.05370.05370.94630.427
VYM0.92740.09010.05370.94630.44
NOBL0.93350.06740.05370.9430.49

true false not known for rules; forecasts are odds. Hover a column for its question.

What it means

Session of 2026-10-30, 4 symbols: Is the stock above its 200-day moving average: true for SCHD, VIG, VYM, NOBL of 4. Yield above 3%: true for none of 4. More than 20% off the 52-week high: true for none of 4. The 200-day average is rising: true for SCHD, VIG, VYM, NOBL of 4. Highest odds for “Beating SPY over a month”: SCHD at 52%.

The fund with the best trend and a yield that fits the income target gets new money this month.

Request JSON (SCHD; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "SCHD"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "yield3": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 3"
    },
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "sma_up": {
      "type": "yes_no",
      "ask": "sma(C, 200) > ref(sma(C, 200), -20)"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  }
}
Response JSON (SCHD, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.9463,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "yield3": {
      "yes_no": 0.4287,
      "rule": "div_yield_ttm > 3",
      "basis": "rule"
    },
    "drawdown": {
      "yes_no": 0.0537,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "sma_up": {
      "yes_no": 0.9463,
      "rule": "sma(C, 200) > ref(sma(C, 200), -20)",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.523
    }
  },
  "context": {
    "symbol": "SCHD",
    "as_of": "2026-10-30"
  }
}

div_yield_ttm max ref sma

Dividend investor · example 8

Did KO's earnings back the dividend

A dividend is paid from earnings: check the last report beat, EPS growth and positivity.

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

State

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

Questions

beatEnglish → ruleDid the stock beat EPS estimates last quarter?
eps_posEnglish → ruleWas EPS positive last quarter?
eps_upEnglish → ruleIs EPS up year over year?
revEnglish → ruleDid revenue grow more than 5% year over year?
raise_nextforecastWill the company raise its dividend next year?
Raising the dividend next year

Answers

QuestionAnswerReading
beat
Did the stock beat EPS estimates last quarter
compiled to beat_eps_last > 0.5
0.8591true
eps_pos
Was EPS positive last quarter
compiled to last_eps > 0
0.9463true
eps_up
Is EPS up year over year
compiled to last_eps > eps_year_ago
0.9463true
rev
Did revenue grow more than 5% year over year
compiled to revenue_growth_yoy > 5
0.9463true
raise_next
Raising the dividend next year
0.51752% · close to even

What it means

For KO on the session of 2026-10-30: True now: Did the stock beat EPS estimates last quarter; Was EPS positive last quarter; Is EPS up year over year; Did revenue grow more than 5% year over year. Forecasts: Raising the dividend next year 52%.

Positive, growing EPS after a beat means the payout has support; a miss and falling EPS is a reason to watch the next declaration.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "KO"
  },
  "questions": {
    "beat": {
      "type": "yes_no",
      "instructions": "Did the stock beat EPS estimates last quarter?"
    },
    "eps_pos": {
      "type": "yes_no",
      "instructions": "Was EPS positive last quarter?"
    },
    "eps_up": {
      "type": "yes_no",
      "instructions": "Is EPS up year over year?"
    },
    "rev": {
      "type": "yes_no",
      "instructions": "Did revenue grow more than 5% year over year?"
    },
    "raise_next": {
      "type": "yes_no",
      "instructions": "Will the company raise its dividend next year?"
    }
  }
}
Response JSON (KO, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "beat": {
      "yes_no": 0.8591,
      "rule": "beat_eps_last > 0.5",
      "basis": "pattern"
    },
    "eps_pos": {
      "yes_no": 0.9463,
      "rule": "last_eps > 0",
      "basis": "pattern"
    },
    "eps_up": {
      "yes_no": 0.9463,
      "rule": "last_eps > eps_year_ago",
      "basis": "pattern"
    },
    "rev": {
      "yes_no": 0.9463,
      "rule": "revenue_growth_yoy > 5",
      "basis": "pattern"
    },
    "raise_next": {
      "yes_no": 0.517
    }
  },
  "context": {
    "symbol": "KO",
    "as_of": "2026-10-30"
  }
}

beat_eps_last eps_year_ago last_eps revenue_growth_yoy

Dividend investor · example 9

REIT health check: VNQ, O and PLD

Rate-sensitive income: trend, drawdown and yield in one batch.

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

State

{"symbol":"VNQ"} then O, PLD, one request each. The server fills in the latest completed session.

Questions

trendruleC > sma(C, 50)
Above the 50-day average
drawdownruleC < 0.8 * max(H, 252)
More than 20% off the 52-week high
yield3rulediv_yield_ttm > 3
Yield above 3%
raisedruleraised_last > 0.5
Raised its last dividend
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symboltrendruledrawdownruleyield3ruleraisedruledrop5forecast
VNQ0.74330.05370.88930.14090.218
O0.46610.10050.94630.14090.313
PLD0.08120.1160.77630.14090.342

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 VNQ of 3. More than 20% off the 52-week high: true for none of 3. Yield above 3%: true for VNQ, O, PLD of 3. Raised its last dividend: true for none of 3. Highest odds for “A 5% drawdown within a month”: PLD at 34%.

REITs above their 50-day with no deep drawdown keep their weight; the rest wait for rates to settle.

Request JSON (VNQ; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "VNQ"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "drawdown": {
      "type": "yes_no",
      "ask": "C < 0.8 * max(H, 252)"
    },
    "yield3": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 3"
    },
    "raised": {
      "type": "yes_no",
      "ask": "raised_last > 0.5"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}
Response JSON (VNQ, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.7433,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "drawdown": {
      "yes_no": 0.0537,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "rule"
    },
    "yield3": {
      "yes_no": 0.8893,
      "rule": "div_yield_ttm > 3",
      "basis": "rule"
    },
    "raised": {
      "yes_no": 0.1409,
      "rule": "raised_last > 0.5",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.218
    }
  },
  "context": {
    "symbol": "VNQ",
    "as_of": "2026-10-30"
  }
}

div_yield_ttm max raised_last sma

Dividend investor · example 10

Energy income: XOM and CVX dividend and trend

Oil majors pay well but swing with crude; check both together.

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

State

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

Questions

yield3rulediv_yield_ttm > 3
Yield above 3%
growerruleyears_of_growth >= 10
Ten years of dividend growth
trendrulesma(C, 50) > sma(C, 200)
50-day above the 200-day
adxruleadx(14) > 25
Trending (ADX above 25)
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symbolyield3rulegrowerruletrendruleadxruledrop5forecast
XOM0.05370.05370.94630.88590.506
CVX0.49060.14090.94630.91020.496

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: Yield above 3%: true for none of 2. Ten years of dividend growth: true for none of 2. 50-day above the 200-day: true for XOM, CVX of 2. Trending (ADX above 25): true for XOM, CVX of 2. Highest odds for “A 5% drawdown within a month”: XOM at 51%.

Both growing and in trend means income plus price; a broken trend means the yield is the only return for now.

Request JSON (XOM; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "XOM"
  },
  "questions": {
    "yield3": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 3"
    },
    "grower": {
      "type": "yes_no",
      "ask": "years_of_growth >= 10"
    },
    "trend": {
      "type": "yes_no",
      "ask": "sma(C, 50) > sma(C, 200)"
    },
    "adx": {
      "type": "yes_no",
      "ask": "adx(14) > 25"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}
Response JSON (XOM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "yield3": {
      "yes_no": 0.0537,
      "rule": "div_yield_ttm > 3",
      "basis": "rule"
    },
    "grower": {
      "yes_no": 0.0537,
      "rule": "years_of_growth >= 10",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.9463,
      "rule": "sma(C, 50) > sma(C, 200)",
      "basis": "rule"
    },
    "adx": {
      "yes_no": 0.8859,
      "rule": "adx(14) > 25",
      "basis": "rule"
    },
    "drop5": {
      "yes_no": 0.506
    }
  },
  "context": {
    "symbol": "XOM",
    "as_of": "2026-10-30"
  }
}

adx div_yield_ttm sma years_of_growth

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, Long-term passive 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.