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

CFO office: 20 ways to use Ora

Board-ready market context: own stock vs peers, guidance reactions and capital-return timing. 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 (53)

sma 10offset 7max 4ref 4days_to_earnings 4roc 3abs 3avg 3swinglow 3ema 2days_since_earnings 2last_earnings_move 2div_yield_ttm 2years_of_growth 2beat_eps_last 2log 2sqrt 2std 2rsi 2last_earnings_gap 1pre_earnings_close 1beats_last4 1eps_year_ago 1last_eps 1revenue_growth_yoy 1days_since_split 1days_to_split 1last_split_ratio 1splits_5y 1outside_bar 1atr_pct 1bblower 1bbmid 1bbupper 1min 1div_change_pct 1raised_last 1macdhist 1morning_star 1tweezer_bottom 1beat_revenue_last 1next_report_bmo 1atr 1crossdown 1lowestbars 1swinghigh 1dark_cloud 1gravestone_doji 1hanging_man 1harami_bear 1highest 1rec 1next_report_amc 1

Examples 11–20 of 20 · page 2 of 2

CFO office · example 11

CFO office at PEP: dividend growth vs KO and PG

Benchmark the company's dividend record against peers before recommending this year's raise to the board.

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

State

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

Questions

yearsruleyears_of_growth >= 10
Ten years of dividend growth
y25English → ruleHas the stock grown its dividend for 25 years in a row?
raisedruleraised_last > 0.5
Raised its last dividend
raise5English → ruleWas the last dividend raised by more than 5%?
yieldrulediv_yield_ttm > 3
Yield above 3%

Answers

Symbolyearsruley25ruleraisedruleraise5ruleyieldrule
PEP0.94630.94630.14090.14090.9463
KO0.94630.06830.14090.14090.0537
PG0.94630.94630.14090.14090.2091

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: Ten years of dividend growth: true for PEP, KO, PG of 3. Has the stock grown its dividend for 25 years in a row: true for PEP, PG of 3. Raised its last dividend: true for none of 3. Was the last dividend raised by more than 5%: true for none of 3.

Peers' growth streaks and the size of their last raises define what investors expect; the recommendation sits within that range or explains why not.

Request JSON (PEP; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "PEP"
  },
  "questions": {
    "years": {
      "type": "yes_no",
      "ask": "years_of_growth >= 10"
    },
    "y25": {
      "type": "yes_no",
      "instructions": "Has the stock grown its dividend for 25 years in a row?"
    },
    "raised": {
      "type": "yes_no",
      "ask": "raised_last > 0.5"
    },
    "raise5": {
      "type": "yes_no",
      "instructions": "Was the last dividend raised by more than 5%?"
    },
    "yield": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 3"
    }
  }
}
Response JSON (PEP, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "years": {
      "yes_no": 0.9463,
      "rule": "years_of_growth >= 10",
      "basis": "rule"
    },
    "y25": {
      "yes_no": 0.9463,
      "rule": "years_of_growth >= 25",
      "basis": "pattern"
    },
    "raised": {
      "yes_no": 0.1409,
      "rule": "raised_last > 0.5",
      "basis": "rule"
    },
    "raise5": {
      "yes_no": 0.1409,
      "rule": "div_change_pct > 5",
      "basis": "pattern"
    },
    "yield": {
      "yes_no": 0.9463,
      "rule": "div_yield_ttm > 3",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "PEP",
    "as_of": "2026-10-30"
  }
}

div_change_pct div_yield_ttm raised_last years_of_growth

CFO office · example 12

CFO office at BA: is the selling pressure easing?

After a long decline, check for reversal patterns and improving momentum before the next financing discussion.

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

State

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

Questions

morningrulemorning_star()
morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first.
tweezerruletweezer_bottom()
tweezer bottom candle: Red then green, with lows within 0.1% of each other.
macd_uprulemacdhist(C) > ref(macdhist(C), -1)
MACD histogram rising
rsi_xEnglish → ruleDid RSI cross above 30 today?
higher_lowruleswinglow(3) > swinglow(3, 2)
Higher swing lows
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
morning
morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first.
0.057false
tweezer
tweezer bottom candle: Red then green, with lows within 0.1% of each other.
0.1092false
macd_up
MACD histogram rising
0.5193on the line (true)
rsi_x
Did RSI cross above 30 today
compiled to (rsi(C, 14) > 30) and (ref(rsi(C, 14), -1) <= 30)
0.2901false
higher_low
Higher swing lows
0.3991false
up_week
Higher in a week
0.35235% · unlikely

What it means

For BA on the session of 2026-10-30: Not true: morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first.; tweezer bottom candle: Red then green, with lows within 0.1% of each other.; Did RSI cross above 30 today; Higher swing lows. On the line: MACD histogram rising. Forecasts: Higher in a week 35%.

One reversal candle is weak evidence; rising MACD momentum and higher swing lows together are a better sign that pressure is easing.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "BA"
  },
  "questions": {
    "morning": {
      "type": "yes_no",
      "ask": "morning_star()"
    },
    "tweezer": {
      "type": "yes_no",
      "ask": "tweezer_bottom()"
    },
    "macd_up": {
      "type": "yes_no",
      "ask": "macdhist(C) > ref(macdhist(C), -1)"
    },
    "rsi_x": {
      "type": "yes_no",
      "instructions": "Did RSI cross above 30 today?"
    },
    "higher_low": {
      "type": "yes_no",
      "ask": "swinglow(3) > swinglow(3, 2)"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (BA, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "morning": {
      "yes_no": 0.057,
      "rule": "morning_star()",
      "basis": "rule"
    },
    "tweezer": {
      "yes_no": 0.1092,
      "rule": "tweezer_bottom()",
      "basis": "rule"
    },
    "macd_up": {
      "yes_no": 0.5193,
      "rule": "macdhist(C) > ref(macdhist(C), -1)",
      "basis": "rule"
    },
    "rsi_x": {
      "yes_no": 0.2901,
      "rule": "(rsi(C, 14) > 30) and (ref(rsi(C, 14), -1) <= 30)",
      "basis": "comparison"
    },
    "higher_low": {
      "yes_no": 0.3991,
      "rule": "swinglow(3) > swinglow(3, 2)",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.352
    }
  },
  "context": {
    "symbol": "BA",
    "as_of": "2026-10-30"
  }
}

macdhist morning_star ref rsi swinglow tweezer_bottom

CFO office · example 13

CFO office: which peers report before us?

Plan the earnings call script by knowing which peers report in the next two weeks and how they reacted last time.

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

State

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

Questions

soonEnglish → ruleIs earnings in the next 14 days?
bmoEnglish → ruleDoes the stock report before the market opens next time?
bigruleabs(last_earnings_move) > 5
Last earnings move bigger than 5%
beatrulebeat_eps_last > 0.5 and beat_revenue_last > 0.5
Beat on EPS and revenue last quarter

Answers

Symbolsoonrulebmorulebigrulebeatrule
JPM0.05370.85910.06640.1409
BAC0.05370.85910.42220.1409
WFC0.05370.85910.05370.1409
C0.05370.85910.94630.8591

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 earnings in the next 14 days: true for none of 4. Does the stock report before the market opens next time: true for JPM, BAC, WFC, C of 4. Last earnings move bigger than 5%: true for C of 4. Beat on EPS and revenue last quarter: true for C of 4.

Peers that report first set the tone; the CFO's script anticipates questions their results will raise.

Request JSON (JPM; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "JPM"
  },
  "questions": {
    "soon": {
      "type": "yes_no",
      "instructions": "Is earnings in the next 14 days?"
    },
    "bmo": {
      "type": "yes_no",
      "instructions": "Does the stock report before the market opens next time?"
    },
    "big": {
      "type": "yes_no",
      "ask": "abs(last_earnings_move) > 5"
    },
    "beat": {
      "type": "yes_no",
      "ask": "beat_eps_last > 0.5 and beat_revenue_last > 0.5"
    }
  }
}
Response JSON (JPM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "soon": {
      "yes_no": 0.0537,
      "rule": "days_to_earnings <= 14",
      "basis": "pattern"
    },
    "bmo": {
      "yes_no": 0.8591,
      "rule": "next_report_bmo > 0.5",
      "basis": "pattern"
    },
    "big": {
      "yes_no": 0.0664,
      "rule": "abs(last_earnings_move) > 5",
      "basis": "rule"
    },
    "beat": {
      "yes_no": 0.1409,
      "rule": "beat_eps_last > 0.5 and beat_revenue_last > 0.5",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "JPM",
    "as_of": "2026-10-30"
  }
}

abs beat_eps_last beat_revenue_last days_to_earnings last_earnings_move next_report_bmo

CFO office · example 14

CFO office at MMM: alert the CFO on a large one-day move

Email the CFO whenever the company's stock moves more than two ATR in a day, with context on volume and gaps.

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

State

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

Questions

bigruleabs(C - C[-1]) > 2 * atr(14)
Moved more than two ATR today
gapruleabs(O - C[-1]) > 0.5 * ref(atr(14), -1)
Gap bigger than half an ATR
volEnglish → ruleWas today's volume twice its 20-day average?
upEnglish → ruleDid the stock close higher than yesterday?
big5forecastWill there be a big move in either direction in the next 5 days?
A big move either way in 5 days

Answers

QuestionAnswerReading
big
Moved more than two ATR today
0.0537false
gap
Gap bigger than half an ATR
0.0661false
vol
Was today's volume twice its 20-day average
compiled to V > 2 * ref(avg(V, 20), -1)
0.0539false
up
Did the stock close higher than yesterday
compiled to C > C[-1]
0.1075false
big5
A big move either way in 5 days
0.2323% · unlikely

Actions

Rules on the answers decide what to send.

big >= 0.6→Emailcfo
What each action would send 0 of 1 fired · dry run, nothing sent
cfo_alertrule false: skipped

What it means

For MMM on the session of 2026-10-30: Not true: Moved more than two ATR today; Gap bigger than half an ATR; Was today's volume twice its 20-day average; Did the stock close higher than yesterday. Forecasts: A big move either way in 5 days 23%. No action fired: every rule was false.

The email fires on outsized days only; IR confirms the cause before the CFO comments to anyone.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "MMM"
  },
  "questions": {
    "big": {
      "type": "yes_no",
      "ask": "abs(C - C[-1]) > 2 * atr(14)"
    },
    "gap": {
      "type": "yes_no",
      "ask": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)"
    },
    "vol": {
      "type": "yes_no",
      "instructions": "Was today's volume twice its 20-day average?"
    },
    "up": {
      "type": "yes_no",
      "instructions": "Did the stock close higher than yesterday?"
    },
    "big5": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  },
  "actions": [
    {
      "id": "cfo_alert",
      "when": "big >= 0.6",
      "do": "email",
      "connection": "cfo",
      "subject": "{{symbol}}: large move today ({{as_of}})",
      "message": "{{symbol}} moved more than 2 ATR (up day {{up|pct}}). Gap vs ATR {{gap|pct}}, volume twice average {{vol|pct}}. IR is checking for news."
    }
  ],
  "dry_run": true
}
Response JSON (MMM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "big": {
      "yes_no": 0.0537,
      "rule": "abs(C - C[-1]) > 2 * atr(14)",
      "basis": "rule"
    },
    "gap": {
      "yes_no": 0.0661,
      "rule": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)",
      "basis": "rule"
    },
    "vol": {
      "yes_no": 0.0539,
      "rule": "V > 2 * ref(avg(V, 20), -1)",
      "basis": "pattern"
    },
    "up": {
      "yes_no": 0.1075,
      "rule": "C > C[-1]",
      "basis": "comparison"
    },
    "big5": {
      "yes_no": 0.23
    }
  },
  "context": {
    "symbol": "MMM",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "cfo_alert",
      "fired": false,
      "status": "skipped"
    }
  ]
}

abs atr avg offset ref

CFO office · example 15

CFO office: are rates (IEF) and credit (LQD) moving against us?

A quick read on the instruments that drive the company's cost of debt before the refinancing review.

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

State

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

Questions

trendruleC > sma(C, 50)
Above the 50-day average
dcrulecrossdown(sma(C, 20), sma(C, 50))
20-day average crossed below the 50-day today
lowestrulelowestbars(C, 20) <= 2
The 20-day closing low is at most 2 sessions old
rally5forecastWill it rally at least 5% at some point in the next month?
A 5% rally within a month
down_weekforecastWill the stock be lower in a week?
Lower in a week

Answers

Symboltrendruledcrulelowestrulerally5forecastdown_weekforecast
IEF0.85140.050.05960.020.413
LQD0.65520.050.05370.0210.476

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: Above the 50-day average: true for IEF, LQD of 2. 20-day average crossed below the 50-day today: true for none of 2. The 20-day closing low is at most 2 sessions old: true for none of 2. Highest odds for “A 5% rally within a month”: LQD at 2%.

Bond ETFs falling means yields rising; a fresh low in both pushes the refinancing discussion forward.

Request JSON (IEF; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "IEF"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "dc": {
      "type": "yes_no",
      "ask": "crossdown(sma(C, 20), sma(C, 50))"
    },
    "lowest": {
      "type": "yes_no",
      "ask": "lowestbars(C, 20) <= 2"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    },
    "down_week": {
      "type": "yes_no",
      "instructions": "Will the stock be lower in a week?"
    }
  }
}
Response JSON (IEF, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.8514,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "dc": {
      "yes_no": 0.05,
      "rule": "crossdown(sma(C, 20), sma(C, 50))",
      "basis": "rule"
    },
    "lowest": {
      "yes_no": 0.0596,
      "rule": "lowestbars(C, 20) <= 2",
      "basis": "rule"
    },
    "rally5": {
      "yes_no": 0.02
    },
    "down_week": {
      "yes_no": 0.413
    }
  },
  "context": {
    "symbol": "IEF",
    "as_of": "2026-10-30"
  }
}

crossdown lowestbars sma

CFO office · example 16

CFO office: a quarter-end mark check for listed holdings

Before closing the books, the finance team confirms the trend of listed strategic stakes for the impairment discussion.

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

State

{"symbol":"INTC"} then BABA, SNAP, one request each. 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?
down3mruleC / C[-63] - 1 < -0.2
Down more than 20% over three months
lh_llEnglish → ruleIs the stock making lower swing highs and lower swing lows?

Answers

Symbolbearrulebelow200ruledown3mrulelh_llrule
INTC0.94630.91390.81930.1552
BABA0.94630.94630.68760.5982
SNAP0.94630.61420.09270.52

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 in bear-market territory, more than 20% below its 52-week high: true for INTC, BABA, SNAP of 3. Is the stock below its 200-day moving average: true for INTC, BABA, SNAP of 3. Down more than 20% over three months: true for INTC, BABA of 3. Is the stock making lower swing highs and lower swing lows: true for none of 3.

A bear-market stake that is also down sharply over the quarter goes on the impairment-review list; accounting policy decides the outcome.

Request JSON (INTC; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "INTC"
  },
  "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?"
    },
    "down3m": {
      "type": "yes_no",
      "ask": "C / C[-63] - 1 < -0.2"
    },
    "lh_ll": {
      "type": "yes_no",
      "instructions": "Is the stock making lower swing highs and lower swing lows?"
    }
  }
}
Response JSON (INTC, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "bear": {
      "yes_no": 0.9463,
      "rule": "C < 0.8 * max(H, 252)",
      "basis": "pattern"
    },
    "below200": {
      "yes_no": 0.9139,
      "rule": "C < sma(C, 200)",
      "basis": "comparison"
    },
    "down3m": {
      "yes_no": 0.8193,
      "rule": "C / C[-63] - 1 < -0.2",
      "basis": "rule"
    },
    "lh_ll": {
      "yes_no": 0.1552,
      "rule": "(swinghigh(5, 1) < swinghigh(5, 2)) and (swinglow(5, 1) < swinglow(5, 2))",
      "basis": "pattern"
    }
  },
  "context": {
    "symbol": "INTC",
    "as_of": "2026-10-30"
  }
}

max offset sma swinghigh swinglow

CFO office · example 17

CFO office at ORCL: how did the stock close into the call?

Read the candle on the day before the earnings call: gravestone, hanging man, harami or a strong close.

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

State

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

Questions

gravestonerulegravestone_doji()
gravestone doji candle: Doji with a long upper wick and almost no lower wick.
hangingrulehanging_man()
hanging man candle: Hammer shape, closing above the close five bars back.
harami_bearruleharami_bear()
harami bear candle: A small red body inside yesterday's green body.
darkruledark_cloud()
dark cloud candle: After a green day, opens above its close and closes below the middle of its body (but above its open).
strongrule(C - L) / (H - L) > 0.75
Closed in the top quarter of the day's range
up_tomorrowforecastWill the stock be up tomorrow?
Up tomorrow

Answers

QuestionAnswerReading
gravestone
gravestone doji candle: Doji with a long upper wick and almost no lower wick.
0.13false
hanging
hanging man candle: Hammer shape, closing above the close five bars back.
0.1594false
harami_bear
harami bear candle: A small red body inside yesterday's green body.
0.0652false
dark
dark cloud candle: After a green day, opens above its close and closes below the middle of its body (but above its open).
0.0652false
strong
Closed in the top quarter of the day's range
0.0741false
up_tomorrow
Up tomorrow
0.40941% · close to even

What it means

For ORCL on the session of 2026-10-30: Not true: gravestone doji candle: Doji with a long upper wick and almost no lower wick.; hanging man candle: Hammer shape, closing above the close five bars back.; harami bear candle: A small red body inside yesterday's green body.; dark cloud candle: After a green day, opens above its close and closes below the middle of its body (but above its open).; Closed in the top quarter of the day's range. Forecasts: Up tomorrow 41%.

Bearish candles into the call suggest nervous holders; management prepares to address the main concerns early in the script.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "ORCL"
  },
  "questions": {
    "gravestone": {
      "type": "yes_no",
      "ask": "gravestone_doji()"
    },
    "hanging": {
      "type": "yes_no",
      "ask": "hanging_man()"
    },
    "harami_bear": {
      "type": "yes_no",
      "ask": "harami_bear()"
    },
    "dark": {
      "type": "yes_no",
      "ask": "dark_cloud()"
    },
    "strong": {
      "type": "yes_no",
      "ask": "(C - L) / (H - L) > 0.75"
    },
    "up_tomorrow": {
      "type": "yes_no",
      "instructions": "Will the stock be up tomorrow?"
    }
  }
}
Response JSON (ORCL, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "gravestone": {
      "yes_no": 0.13,
      "rule": "gravestone_doji()",
      "basis": "rule"
    },
    "hanging": {
      "yes_no": 0.1594,
      "rule": "hanging_man()",
      "basis": "rule"
    },
    "harami_bear": {
      "yes_no": 0.0652,
      "rule": "harami_bear()",
      "basis": "rule"
    },
    "dark": {
      "yes_no": 0.0652,
      "rule": "dark_cloud()",
      "basis": "rule"
    },
    "strong": {
      "yes_no": 0.0741,
      "rule": "(C - L) / (H - L) > 0.75",
      "basis": "rule"
    },
    "up_tomorrow": {
      "yes_no": 0.409
    }
  },
  "context": {
    "symbol": "ORCL",
    "as_of": "2026-10-30"
  }
}

dark_cloud gravestone_doji hanging_man harami_bear

CFO office · example 18

A Friday peer digest for the CFO of a software company

Every Friday afternoon, one Slack line per software peer: trend and earnings timing.

ora-fin-0.1.15 symbols, one request each3 questions1 actionworkflow · Fri at 15:30 ET
  1. ScheduleFri at 15:30 ET
  2. State5 symbols
  3. Questions3 asked
  4. Answersreal, captured
  5. Actions1 rule · dry run

State

{"symbol":"CRM"} then ADBE, NOW, INTU, WDAY, one request each. The server fills in the latest completed session.

Questions

trendruleC > sma(C, 50)
Above the 50-day average
earnEnglish → ruleIs earnings in the next 14 days?
momruleroc(C, 20) > 5
Up more than 5% in 20 sessions

Answers

SymboltrendruleearnrulemomruleFired
CRM0.27540.05370.2635peer_line
ADBE0.39450.05370.5158peer_line
NOW0.05370.05370.064peer_line
INTU0.78790.06830.8651peer_line
WDAY0.62630.05370.5535peer_line

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.

trend >= 0→Slackcfo-office
CRM 1 of 1 fired · dry run, nothing sent
peer_linewould send (dry run)Slack → cfo-office
{
  "text": "CRM (2026-10-30): above 50-day 28%, 20-day momentum over 5% 26%, reports within 14 days 5%."
}
ADBE 1 of 1 fired · dry run, nothing sent
peer_linewould send (dry run)Slack → cfo-office
{
  "text": "ADBE (2026-10-30): above 50-day 39%, 20-day momentum over 5% 52%, reports within 14 days 5%."
}
NOW 1 of 1 fired · dry run, nothing sent
peer_linewould send (dry run)Slack → cfo-office
{
  "text": "NOW (2026-10-30): above 50-day 5%, 20-day momentum over 5% 6%, reports within 14 days 5%."
}
INTU 1 of 1 fired · dry run, nothing sent
peer_linewould send (dry run)Slack → cfo-office
{
  "text": "INTU (2026-10-30): above 50-day 79%, 20-day momentum over 5% 87%, reports within 14 days 7%."
}
WDAY 1 of 1 fired · dry run, nothing sent
peer_linewould send (dry run)Slack → cfo-office
{
  "text": "WDAY (2026-10-30): above 50-day 63%, 20-day momentum over 5% 55%, reports within 14 days 5%."
}

What it means

Session of 2026-10-30, 5 symbols: Above the 50-day average: true for INTU, WDAY of 5. Is earnings in the next 14 days: true for none of 5. Up more than 5% in 20 sessions: true for INTU of 5. peer_line fired for CRM, ADBE, NOW, INTU, WDAY.

A standing digest gives the CFO a weekly view of peers without asking analysts for it.

As a scheduled workflow (Fri at 15:30 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": "A Friday peer digest for the CFO of a software company",
  "symbols": "CRM ADBE NOW INTU WDAY",
  "days": [
    5
  ],
  "at_time": "15:30",
  "model": "ora-fin-0.1.1",
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "earn": {
      "type": "yes_no",
      "instructions": "Is earnings in the next 14 days?"
    },
    "mom": {
      "type": "yes_no",
      "ask": "roc(C, 20) > 5"
    }
  },
  "actions": [
    {
      "id": "peer_line",
      "when": "trend >= 0",
      "do": "slack",
      "connection": "cfo-office",
      "message": "{{symbol}} ({{as_of}}): above 50-day {{trend|pct}}, 20-day momentum over 5% {{mom|pct}}, reports within 14 days {{earn|pct}}."
    }
  ]
}
Request JSON (CRM; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "CRM"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "earn": {
      "type": "yes_no",
      "instructions": "Is earnings in the next 14 days?"
    },
    "mom": {
      "type": "yes_no",
      "ask": "roc(C, 20) > 5"
    }
  },
  "actions": [
    {
      "id": "peer_line",
      "when": "trend >= 0",
      "do": "slack",
      "connection": "cfo-office",
      "message": "{{symbol}} ({{as_of}}): above 50-day {{trend|pct}}, 20-day momentum over 5% {{mom|pct}}, reports within 14 days {{earn|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (CRM, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.2754,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "earn": {
      "yes_no": 0.0537,
      "rule": "days_to_earnings <= 14",
      "basis": "pattern"
    },
    "mom": {
      "yes_no": 0.2635,
      "rule": "roc(C, 20) > 5",
      "basis": "rule"
    }
  },
  "context": {
    "symbol": "CRM",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "peer_line",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "cfo-office",
      "preview": {
        "text": "CRM (2026-10-30): above 50-day 28%, 20-day momentum over 5% 26%, reports within 14 days 5%."
      }
    }
  ]
}

days_to_earnings roc sma

CFO office · example 19

CFO office at GIS: input costs through commodity ETFs

A food company CFO watches agriculture and broad commodities to anticipate margin pressure.

ora-fin-0.1.12 symbols, one request each5 questions1 action
  1. State2 symbols
  2. Questions5 asked
  3. Answersreal, captured
  4. Actions1 rule · dry run

State

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

Questions

trendEnglish → ruleIs the stock above its 200-day moving average?
breakoutruleC > highest(C, 20)
20-day closing breakout
rallyEnglish → ruleIs the stock up more than 10% over the last three months?
recruleC > rec(C, self + 0.1 * (C - self))
Above its own exponential smoothing (10% step)
rally5forecastWill it rally at least 5% at some point in the next month?
A 5% rally within a month

Answers

Symboltrendrulebreakoutrulerallyrulerecrulerally5forecastFired
DBA0.19790.05370.05370.06480.161none
DBC0.94630.15570.80890.69630.392margin_watch

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.

trend >= 0.6 and rally >= 0.6→Webhookfpna-zapier
DBA 0 of 1 fired · dry run, nothing sent
DBC 1 of 1 fired · dry run, nothing sent
margin_watchwould send (dry run)Webhook → fpna-zapier
{
  "event": "input_cost_pressure",
  "proxy": "DBC",
  "as_of": "2026-10-30",
  "p_uptrend": 0.9463,
  "p_up10_3m": 0.8089,
  "p_rally5": 0.392
}

What it means

Session of 2026-10-30, 2 symbols: Is the stock above its 200-day moving average: true for DBC of 2. 20-day closing breakout: true for none of 2. Is the stock up more than 10% over the last three months: true for DBC of 2. Above its own exponential smoothing (10% step): true for DBC of 2. Highest odds for “A 5% rally within a month”: DBC at 39%. margin_watch fired for DBC.

A sustained commodity uptrend feeds the FP&A margin model; the forecast is context for the next month only.

Request JSON (DBA; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "DBA"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "breakout": {
      "type": "yes_no",
      "ask": "C > highest(C, 20)"
    },
    "rally": {
      "type": "yes_no",
      "instructions": "Is the stock up more than 10% over the last three months?"
    },
    "rec": {
      "type": "yes_no",
      "ask": "C > rec(C, self + 0.1 * (C - self))"
    },
    "rally5": {
      "type": "yes_no",
      "instructions": "Will it rally at least 5% at some point in the next month?"
    }
  },
  "actions": [
    {
      "id": "margin_watch",
      "when": "trend >= 0.6 and rally >= 0.6",
      "do": "webhook",
      "connection": "fpna-zapier",
      "body": {
        "event": "input_cost_pressure",
        "proxy": "{{symbol}}",
        "as_of": "{{as_of}}",
        "p_uptrend": "{{trend}}",
        "p_up10_3m": "{{rally}}",
        "p_rally5": "{{rally5}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (DBA, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.1979,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "breakout": {
      "yes_no": 0.0537,
      "rule": "C > highest(C, 20)",
      "basis": "rule"
    },
    "rally": {
      "yes_no": 0.0537,
      "rule": "C / C[-63] - 1 > 0.1",
      "basis": "pattern"
    },
    "rec": {
      "yes_no": 0.0648,
      "rule": "C > rec(C, self + 0.1 * (C - self))",
      "basis": "rule"
    },
    "rally5": {
      "yes_no": 0.161
    }
  },
  "context": {
    "symbol": "DBA",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "margin_watch",
      "fired": false,
      "status": "skipped"
    }
  ]
}

highest offset rec sma

CFO office · example 20

CFO office at UNH: is the trading window about to close?

Remind executives when the earnings blackout is near, using the calendar facts.

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

State

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

Questions

soonEnglish → ruleIs earnings in the next 14 days?
recentEnglish → ruleDid the stock report earnings in the last 7 days?
sinceruledays_since_earnings > 3
More than three days since the last report
amcEnglish → ruleDoes the stock report after the close next time?

Answers

QuestionAnswerReading
soon
Is earnings in the next 14 days
compiled to days_to_earnings <= 14
0.0537false
recent
Did the stock report earnings in the last 7 days
compiled to days_since_earnings <= 7
0.0537false
since
More than three days since the last report
0.9463true
amc
Does the stock report after the close next time
compiled to next_report_amc > 0.5
0.1409false

Actions

Rules on the answers decide what to send.

soon >= 0.6→Emaillegal-exec
since >= 0.6→Slackcfo-office
What each action would send 1 of 2 fired · dry run, nothing sent
closingrule false: skipped
openwould send (dry run)Slack → cfo-office
{
  "text": "UNH (2026-10-30): more than three days since the last report; window open per policy."
}

What it means

For UNH on the session of 2026-10-30: True now: More than three days since the last report. Not true: Is earnings in the next 14 days; Did the stock report earnings in the last 7 days; Does the stock report after the close next time. Fired: open (Slack → cfo-office).

Calendar facts drive the reminder; the general counsel's office still owns the window policy.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "UNH"
  },
  "questions": {
    "soon": {
      "type": "yes_no",
      "instructions": "Is earnings in the next 14 days?"
    },
    "recent": {
      "type": "yes_no",
      "instructions": "Did the stock report earnings in the last 7 days?"
    },
    "since": {
      "type": "yes_no",
      "ask": "days_since_earnings > 3"
    },
    "amc": {
      "type": "yes_no",
      "instructions": "Does the stock report after the close next time?"
    }
  },
  "actions": [
    {
      "id": "closing",
      "when": "soon >= 0.6",
      "do": "email",
      "connection": "legal-exec",
      "subject": "{{symbol}}: trading window closing soon",
      "message": "{{symbol}} ({{as_of}}): next report within 14 days ({{soon|pct}}). Pre-clearance requests should be filed now."
    },
    {
      "id": "open",
      "when": "since >= 0.6",
      "do": "slack",
      "connection": "cfo-office",
      "message": "{{symbol}} ({{as_of}}): more than three days since the last report; window open per policy."
    }
  ],
  "dry_run": true
}
Response JSON (UNH, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "soon": {
      "yes_no": 0.0537,
      "rule": "days_to_earnings <= 14",
      "basis": "pattern"
    },
    "recent": {
      "yes_no": 0.0537,
      "rule": "days_since_earnings <= 7",
      "basis": "pattern"
    },
    "since": {
      "yes_no": 0.9463,
      "rule": "days_since_earnings > 3",
      "basis": "rule"
    },
    "amc": {
      "yes_no": 0.1409,
      "rule": "next_report_amc > 0.5",
      "basis": "pattern"
    }
  },
  "context": {
    "symbol": "UNH",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "closing",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "open",
      "fired": true,
      "status": "dry_run",
      "do": "slack",
      "connection": "cfo-office",
      "preview": {
        "text": "UNH (2026-10-30): more than three days since the last report; window open per policy."
      }
    }
  ]
}

days_since_earnings days_to_earnings next_report_amc

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 Corporates: Investor relations team, Corporate treasury, Bank credit analyst, Financial journalist / media.

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