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

FX trader: 20 ways to use Ora

Reads currencies through the dollar ETF, country funds and ADRs that move with exchange rates. Each example is a complete, runnable request with the real answers it returned (40 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 (43)

sma 14ref 5rsi 4offset 4ema 3roc 3highest 3max 3atr 3adx 2avg 2log 2sqrt 2std 2beat_eps_last 2macd 1lowest 1stochk 1atr_pct 1swinghigh 1swinglow 1engulfing_bear 1evening_star 1harami_bear 1tweezer_top 1days_to_earnings 1eps_year_ago 1last_eps 1between 1cci 1zscore 1abs 1diminus 1diplus 1obv 1pays_dividend 1revenue_growth_yoy 1crossdown 1linreg 1rec 1wma 1cut_last 1div_yield_ttm 1

Examples 11–20 of 20 · page 2 of 2

FX trader · example 11

Is the dollar stretched far from its average?

Mean reversion in a slow-moving asset: z-score, distance from the 20-day in ATR, and CCI extremes in UUP.

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

State

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

Questions

z_hirulezscore(C, 20) > 2
Close more than 2 standard deviations above its 20-day mean
z_lorulezscore(C, 20) < -2
Two deviations under the 20-day mean
cci_hirulecci(20) > 100
CCI above 100
stretchedruleC > sma(C, 20) + 2 * atr(14)
Stretched: more than 2 ATR above the 20-day
vol_calmforecastWill volatility calm down over the next 5 days?
Volatility calming over 5 days

Answers

QuestionAnswerReading
z_hi
Close more than 2 standard deviations above its 20-day mean
0.0791false
z_lo
Two deviations under the 20-day mean
0.0809false
cci_hi
CCI above 100
0.1506false
stretched
Stretched: more than 2 ATR above the 20-day
0.1464false
vol_calm
Volatility calming over 5 days
0.52152% · close to even

What it means

For UUP on the session of 2026-10-30: Not true: Close more than 2 standard deviations above its 20-day mean; Two deviations under the 20-day mean; CCI above 100; Stretched: more than 2 ATR above the 20-day. Forecasts: Volatility calming over 5 days 52%.

Extremes are rare in the dollar; when a z-score or CCI rule is true, a fade toward the mean is the trade to consider.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "UUP"
  },
  "questions": {
    "z_hi": {
      "type": "yes_no",
      "ask": "zscore(C, 20) > 2"
    },
    "z_lo": {
      "type": "yes_no",
      "ask": "zscore(C, 20) < -2"
    },
    "cci_hi": {
      "type": "yes_no",
      "ask": "cci(20) > 100"
    },
    "stretched": {
      "type": "yes_no",
      "ask": "C > sma(C, 20) + 2 * atr(14)"
    },
    "vol_calm": {
      "type": "yes_no",
      "instructions": "Will volatility calm down over the next 5 days?"
    }
  }
}
Response JSON (UUP, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "z_hi": {
      "yes_no": 0.0791,
      "rule": "zscore(C, 20) > 2",
      "basis": "rule"
    },
    "z_lo": {
      "yes_no": 0.0809,
      "rule": "zscore(C, 20) < -2",
      "basis": "rule"
    },
    "cci_hi": {
      "yes_no": 0.1506,
      "rule": "cci(20) > 100",
      "basis": "rule"
    },
    "stretched": {
      "yes_no": 0.1464,
      "rule": "C > sma(C, 20) + 2 * atr(14)",
      "basis": "rule"
    },
    "vol_calm": {
      "yes_no": 0.521
    }
  },
  "context": {
    "symbol": "UUP",
    "as_of": "2026-10-30"
  }
}

atr cci sma zscore

FX trader · example 12

Risk-off signal: strong dollar and weak emerging markets

When UUP is in an uptrend, send a signed webhook to the risk system so it can cut EM exposure; else send an all-clear.

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

State

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

Questions

trendruleC > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)
Stacked averages: close > 20 EMA > 50 > 200
momentumruleroc(C, 20) > 5
Up more than 5% in 20 sessions
breakoutruleC > highest(C, 55)
55-day closing breakout
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
trend
Stacked averages: close > 20 EMA > 50 > 200
0.6713true
momentum
Up more than 5% in 20 sessions
0.0556false
breakout
55-day closing breakout
0.2455false
up_week
Higher in a week
0.56156% · close to even

Actions

Rules on the answers decide what to send.

trend >= 0.6 and (momentum >= 0.6 or breakout >= 0.6)→Webhookrisk-system
else→Webhookrisk-system
What each action would send 1 of 2 fired · dry run, nothing sent
risk_offrule false: skipped
clearwould send (dry run)Webhook → risk-system
{
  "signal": "usd_neutral",
  "action": "none",
  "p_trend": 0.6713,
  "as_of": "2026-10-30"
}

What it means

For UUP on the session of 2026-10-30: True now: Stacked averages: close > 20 EMA > 50 > 200. Not true: Up more than 5% in 20 sessions; 55-day closing breakout. Forecasts: Higher in a week 56%. Fired: clear (Webhook → risk-system).

The risk system gets a decision either way, so its log shows the check ran even on quiet days.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "UUP"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)"
    },
    "momentum": {
      "type": "yes_no",
      "ask": "roc(C, 20) > 5"
    },
    "breakout": {
      "type": "yes_no",
      "ask": "C > highest(C, 55)"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  },
  "actions": [
    {
      "id": "risk_off",
      "when": "trend >= 0.6 and (momentum >= 0.6 or breakout >= 0.6)",
      "do": "webhook",
      "connection": "risk-system",
      "body": {
        "signal": "usd_strength",
        "action": "reduce_em_exposure",
        "p_trend": "{{trend}}",
        "p_momentum": "{{momentum}}",
        "p_breakout": "{{breakout}}",
        "as_of": "{{as_of}}"
      }
    },
    {
      "id": "clear",
      "when": "else",
      "do": "webhook",
      "connection": "risk-system",
      "body": {
        "signal": "usd_neutral",
        "action": "none",
        "p_trend": "{{trend}}",
        "as_of": "{{as_of}}"
      }
    }
  ],
  "dry_run": true
}
Response JSON (UUP, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.6713,
      "rule": "C > ema(C, 20) and ema(C, 20) > sma(C, 50) and sma(C, 50) > sma(C, 200)",
      "basis": "rule"
    },
    "momentum": {
      "yes_no": 0.0556,
      "rule": "roc(C, 20) > 5",
      "basis": "rule"
    },
    "breakout": {
      "yes_no": 0.2455,
      "rule": "C > highest(C, 55)",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.561
    }
  },
  "context": {
    "symbol": "UUP",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "risk_off",
      "fired": false,
      "status": "skipped"
    },
    {
      "id": "clear",
      "fired": true,
      "status": "dry_run",
      "do": "webhook",
      "connection": "risk-system",
      "preview": {
        "body": {
          "signal": "usd_neutral",
          "action": "none",
          "p_trend": 0.6713,
          "as_of": "2026-10-30"
        }
      }
    }
  ]
}

ema highest roc sma

FX trader · example 13

Monday FX digest: dollar and five regions

Each Monday before the open, the same questions for the dollar ETF and five regional funds, emailed per symbol in an uptrend.

ora-fin-0.1.16 symbols, one request each3 questions1 actionworkflow · Mon at 08:30 ET
  1. ScheduleMon at 08:30 ET
  2. State6 symbols
  3. Questions3 asked
  4. Answersreal, captured
  5. Actions1 rule · dry run

State

{"symbol":"UUP"} then VGK, EWJ, EEM, EWZ, EWC, one request each. The server fills in the latest completed session.

Questions

trendruleC > sma(C, 50)
Above the 50-day average
rsi50rulersi(C, 14) > 50
RSI above 50
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

Symboltrendrulersi50ruleup_weekforecastFired
UUP0.87250.76350.561trend_mail
VGK0.30160.58680.538none
EWJ0.07880.06810.636none
EEM0.06110.0720.55none
EWZ0.06710.08340.41none
EWC0.57270.61440.545none

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→Emailfx-team
UUP 1 of 1 fired · dry run, nothing sent
trend_mailwould send (dry run)Email → fx-team
{
  "subject": "FX digest: UUP in an uptrend",
  "text": "UUP (2026-10-30) is above its 50-day. RSI over 50 76%, higher in a week 56%."
}
VGK 0 of 1 fired · dry run, nothing sent
EWJ 0 of 1 fired · dry run, nothing sent
EEM 0 of 1 fired · dry run, nothing sent
EWZ 0 of 1 fired · dry run, nothing sent
EWC 0 of 1 fired · dry run, nothing sent

What it means

Session of 2026-10-30, 6 symbols: Above the 50-day average: true for UUP of 6. RSI above 50: true for UUP, EWC of 6. Highest odds for “Higher in a week”: EWJ at 64%. trend_mail fired for UUP.

One workflow, six symbols; the team only gets mail for the regions in an uptrend that week.

As a scheduled workflow (Mon at 08: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": "Monday FX digest: dollar and five regions",
  "symbols": "UUP VGK EWJ EEM EWZ EWC",
  "days": [
    1
  ],
  "at_time": "08:30",
  "model": "ora-fin-0.1.1",
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "rsi50": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 50"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  },
  "actions": [
    {
      "id": "trend_mail",
      "when": "trend >= 0.6",
      "do": "email",
      "connection": "fx-team",
      "subject": "FX digest: {{symbol}} in an uptrend",
      "message": "{{symbol}} ({{as_of}}) is above its 50-day. RSI over 50 {{rsi50|pct}}, higher in a week {{up_week|pct}}."
    }
  ]
}
Request JSON (UUP; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "UUP"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "rsi50": {
      "type": "yes_no",
      "ask": "rsi(C, 14) > 50"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  },
  "actions": [
    {
      "id": "trend_mail",
      "when": "trend >= 0.6",
      "do": "email",
      "connection": "fx-team",
      "subject": "FX digest: {{symbol}} in an uptrend",
      "message": "{{symbol}} ({{as_of}}) is above its 50-day. RSI over 50 {{rsi50|pct}}, higher in a week {{up_week|pct}}."
    }
  ],
  "dry_run": true
}
Response JSON (UUP, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.8725,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "rsi50": {
      "yes_no": 0.7635,
      "rule": "rsi(C, 14) > 50",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.561
    }
  },
  "context": {
    "symbol": "UUP",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "trend_mail",
      "fired": true,
      "status": "dry_run",
      "do": "email",
      "connection": "fx-team",
      "preview": {
        "subject": "FX digest: UUP in an uptrend",
        "text": "UUP (2026-10-30) is above its 50-day. RSI over 50 76%, higher in a week 56%."
      }
    }
  ]
}

rsi sma

FX trader · example 14

Mexico (EWW): did today's gap hold?

Peso news often gaps EWW at the open. Check whether the gap held, filled, and how big it was against ATR.

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

State

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

Questions

gap_heldrule(O > C[-1]) and (L > C[-1])
Gapped up and never traded back to yesterday's close
gap_filledEnglish → ruleDid today's gap up fill?
gap_atrruleabs(O - C[-1]) > 0.5 * ref(atr(14), -1)
Gap bigger than half an ATR
gap_down_reclaimruleO < L[-1] and C > C[-1]
Opened under yesterday's low, closed up on the day
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
gap_held
Gapped up and never traded back to yesterday's close
0.0745false
gap_filled
Did today's gap up fill
compiled to (O > C[-1] * 1) and (L <= C[-1])
0.0911false
gap_atr
Gap bigger than half an ATR
0.764true
gap_down_reclaim
Opened under yesterday's low, closed up on the day
0.45on the line (false)
big_move
A big move either way in 5 days
0.39840% · unlikely

What it means

For EWW on the session of 2026-10-30: True now: Gap bigger than half an ATR. Not true: Gapped up and never traded back to yesterday's close; Did today's gap up fill. On the line: Opened under yesterday's low, closed up on the day. Forecasts: A big move either way in 5 days 40%.

A gap that held all day shows conviction; a filled gap says the news was faded by the close.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "EWW"
  },
  "questions": {
    "gap_held": {
      "type": "yes_no",
      "ask": "(O > C[-1]) and (L > C[-1])"
    },
    "gap_filled": {
      "type": "yes_no",
      "instructions": "Did today's gap up fill?"
    },
    "gap_atr": {
      "type": "yes_no",
      "ask": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)"
    },
    "gap_down_reclaim": {
      "type": "yes_no",
      "ask": "O < L[-1] and C > C[-1]"
    },
    "big_move": {
      "type": "yes_no",
      "instructions": "Will there be a big move in either direction in the next 5 days?"
    }
  }
}
Response JSON (EWW, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "gap_held": {
      "yes_no": 0.0745,
      "rule": "(O > C[-1]) and (L > C[-1])",
      "basis": "rule"
    },
    "gap_filled": {
      "yes_no": 0.0911,
      "rule": "(O > C[-1] * 1) and (L <= C[-1])",
      "basis": "pattern"
    },
    "gap_atr": {
      "yes_no": 0.764,
      "rule": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)",
      "basis": "rule"
    },
    "gap_down_reclaim": {
      "yes_no": 0.45,
      "rule": "O < L[-1] and C > C[-1]",
      "basis": "rule"
    },
    "big_move": {
      "yes_no": 0.398
    }
  },
  "context": {
    "symbol": "EWW",
    "as_of": "2026-10-30"
  }
}

abs atr offset ref

FX trader · example 15

India (INDA): trend strength with ADX and DI

Measure trend strength and direction in INDA before adding to a rupee-exposed position.

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

State

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

Questions

adxruleadx(14) > 25
ADX(14) above 25 (trending)
plusrulediplus(14) > diminus(14)
+DI above -DI
minus_strongrulediminus(14) > 25
-DI above 25 (strong selling)
sma200_uprulesma(C, 200) > ref(sma(C, 200), -20)
The 200-day average is rising
up_weekforecastWill the stock be higher in a week?
Higher in a week

Answers

QuestionAnswerReading
adx
ADX(14) above 25 (trending)
0.1436false
plus
+DI above -DI
0.7523true
minus_strong
-DI above 25 (strong selling)
0.7896true
sma200_up
The 200-day average is rising
0.0537false
up_week
Higher in a week
0.45546% · close to even

What it means

For INDA on the session of 2026-10-30: True now: +DI above -DI; -DI above 25 (strong selling). Not true: ADX(14) above 25 (trending); The 200-day average is rising. Forecasts: Higher in a week 46%.

ADX tells you whether to use trend tools at all; the DI lines say whether the trend favours buyers or sellers.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "INDA"
  },
  "questions": {
    "adx": {
      "type": "yes_no",
      "ask": "adx(14) > 25"
    },
    "plus": {
      "type": "yes_no",
      "ask": "diplus(14) > diminus(14)"
    },
    "minus_strong": {
      "type": "yes_no",
      "ask": "diminus(14) > 25"
    },
    "sma200_up": {
      "type": "yes_no",
      "ask": "sma(C, 200) > ref(sma(C, 200), -20)"
    },
    "up_week": {
      "type": "yes_no",
      "instructions": "Will the stock be higher in a week?"
    }
  }
}
Response JSON (INDA, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "adx": {
      "yes_no": 0.1436,
      "rule": "adx(14) > 25",
      "basis": "rule"
    },
    "plus": {
      "yes_no": 0.7523,
      "rule": "diplus(14) > diminus(14)",
      "basis": "rule"
    },
    "minus_strong": {
      "yes_no": 0.7896,
      "rule": "diminus(14) > 25",
      "basis": "rule"
    },
    "sma200_up": {
      "yes_no": 0.0537,
      "rule": "sma(C, 200) > ref(sma(C, 200), -20)",
      "basis": "rule"
    },
    "up_week": {
      "yes_no": 0.455
    }
  },
  "context": {
    "symbol": "INDA",
    "as_of": "2026-10-30"
  }
}

adx diminus diplus ref sma

FX trader · example 16

Developed vs emerging (EFA vs EEM): which leads?

Allocate between developed and emerging markets abroad using identical momentum and trend questions.

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

State

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

Questions

momentumruleroc(C, 63) > 10 and C >= 0.95 * max(H, 63)
Up more than 10% in a quarter, near the high
trendEnglish → ruleIs the stock above its 200-day moving average?
obvruleobv() > sma(obv(), 20)
On-balance volume above its 20-day average
beat_spyforecastWill it beat SPY over the next month?
Beating SPY over a month

Answers

Symbolmomentumruletrendruleobvrulebeat_spyforecast
EFA0.05370.67090.53440.447
EEM0.05370.14490.11160.501

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 10% in a quarter, near the high: true for none of 2. Is the stock above its 200-day moving average: true for EFA of 2. On-balance volume above its 20-day average: true for none of 2. Highest odds for “Beating SPY over a month”: EEM at 50%.

The leader on momentum and volume trend gets the tilt; both weak with a strong dollar is the classic risk-off picture.

Request JSON (EFA; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "EFA"
  },
  "questions": {
    "momentum": {
      "type": "yes_no",
      "ask": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)"
    },
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "obv": {
      "type": "yes_no",
      "ask": "obv() > sma(obv(), 20)"
    },
    "beat_spy": {
      "type": "yes_no",
      "instructions": "Will it beat SPY over the next month?"
    }
  }
}
Response JSON (EFA, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "momentum": {
      "yes_no": 0.0537,
      "rule": "roc(C, 63) > 10 and C >= 0.95 * max(H, 63)",
      "basis": "rule"
    },
    "trend": {
      "yes_no": 0.6709,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "obv": {
      "yes_no": 0.5344,
      "rule": "obv() > sma(obv(), 20)",
      "basis": "rule"
    },
    "beat_spy": {
      "yes_no": 0.447
    }
  },
  "context": {
    "symbol": "EFA",
    "as_of": "2026-10-30"
  }
}

max obv roc sma

FX trader · example 17

European ADRs NVO and ASML: earnings and trend

Two large European companies listed in the US: last quarter's results, dividend record and trend.

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

State

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

Questions

beatEnglish → ruleDid the stock beat EPS estimates last quarter?
rev_gEnglish → ruleDid revenue grow more than 5% year over year?
paysEnglish → ruleDoes the stock pay a dividend?
trendruleC > sma(C, 50)
Above the 50-day average
drop10forecastWill it drop at least 10% at some point in the next month?
A 10% drawdown within a month

Answers

Symbolbeatrulerev_grulepaysruletrendruledrop10forecast
NVO0.85910.05370.85910.25430.502
ASML0.85910.500.85910.07640.624

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: Did the stock beat EPS estimates last quarter: true for NVO, ASML of 2. Did revenue grow more than 5% year over year: true for none of 2. Does the stock pay a dividend: true for NVO, ASML of 2. Above the 50-day average: true for none of 2. Highest odds for “A 10% drawdown within a month”: ASML at 62%.

Facts from earnings and dividends sit next to the trend rule; a strong report with a broken trend is worth a closer look.

Request JSON (NVO; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "NVO"
  },
  "questions": {
    "beat": {
      "type": "yes_no",
      "instructions": "Did the stock beat EPS estimates last quarter?"
    },
    "rev_g": {
      "type": "yes_no",
      "instructions": "Did revenue grow more than 5% year over year?"
    },
    "pays": {
      "type": "yes_no",
      "instructions": "Does the stock pay a dividend?"
    },
    "trend": {
      "type": "yes_no",
      "ask": "C > sma(C, 50)"
    },
    "drop10": {
      "type": "yes_no",
      "instructions": "Will it drop at least 10% at some point in the next month?"
    }
  }
}
Response JSON (NVO, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "beat": {
      "yes_no": 0.8591,
      "rule": "beat_eps_last > 0.5",
      "basis": "pattern"
    },
    "rev_g": {
      "yes_no": 0.0537,
      "rule": "revenue_growth_yoy > 5",
      "basis": "pattern"
    },
    "pays": {
      "yes_no": 0.8591,
      "rule": "pays_dividend > 0.5",
      "basis": "pattern"
    },
    "trend": {
      "yes_no": 0.2543,
      "rule": "C > sma(C, 50)",
      "basis": "rule"
    },
    "drop10": {
      "yes_no": 0.502
    }
  },
  "context": {
    "symbol": "NVO",
    "as_of": "2026-10-30"
  }
}

beat_eps_last pays_dividend revenue_growth_yoy sma

FX trader · example 18

Is the dollar's slope turning?

Use a regression line, a weighted average and an exponential smoothing on UUP to spot a turn before the averages cross.

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

State

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

Questions

sloperulelinreg(C, 20) > ref(linreg(C, 20), -5)
20-day regression line higher than a week ago
wmarulewma(C, 10) > wma(C, 30)
10-day WMA above the 30-day WMA
smoothruleC > rec(C, self + 0.2 * (C - self))
Close above its own smoothing (alpha 0.2)
crossrulecrossdown(ema(C, 10), ema(C, 30))
10-day EMA crossed below the 30-day EMA today
down_weekforecastWill the stock be lower in a week?
Lower in a week

Answers

QuestionAnswerReading
slope
20-day regression line higher than a week ago
0.4493on the line (false)
wma
10-day WMA above the 30-day WMA
0.6416true
smooth
Close above its own smoothing (alpha 0.2)
0.4375on the line (false)
cross
10-day EMA crossed below the 30-day EMA today
0.05false
down_week
Lower in a week
0.47948% · close to even

What it means

For UUP on the session of 2026-10-30: True now: 10-day WMA above the 30-day WMA. Not true: 10-day EMA crossed below the 30-day EMA today. On the line: 20-day regression line higher than a week ago; Close above its own smoothing (alpha 0.2). Forecasts: Lower in a week 48%.

Slope rules turn before slow averages do; a falling regression line with a fresh EMA cross-down is an early sign the dollar trend is fading.

Request JSON
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "UUP"
  },
  "questions": {
    "slope": {
      "type": "yes_no",
      "ask": "linreg(C, 20) > ref(linreg(C, 20), -5)"
    },
    "wma": {
      "type": "yes_no",
      "ask": "wma(C, 10) > wma(C, 30)"
    },
    "smooth": {
      "type": "yes_no",
      "ask": "C > rec(C, self + 0.2 * (C - self))"
    },
    "cross": {
      "type": "yes_no",
      "ask": "crossdown(ema(C, 10), ema(C, 30))"
    },
    "down_week": {
      "type": "yes_no",
      "instructions": "Will the stock be lower in a week?"
    }
  }
}
Response JSON (UUP, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "slope": {
      "yes_no": 0.4493,
      "rule": "linreg(C, 20) > ref(linreg(C, 20), -5)",
      "basis": "rule"
    },
    "wma": {
      "yes_no": 0.6416,
      "rule": "wma(C, 10) > wma(C, 30)",
      "basis": "rule"
    },
    "smooth": {
      "yes_no": 0.4375,
      "rule": "C > rec(C, self + 0.2 * (C - self))",
      "basis": "rule"
    },
    "cross": {
      "yes_no": 0.05,
      "rule": "crossdown(ema(C, 10), ema(C, 30))",
      "basis": "rule"
    },
    "down_week": {
      "yes_no": 0.479
    }
  },
  "context": {
    "symbol": "UUP",
    "as_of": "2026-10-30"
  }
}

crossdown ema linreg rec ref wma

FX trader · example 19

RIO and VALE: miners as a read on AUD and BRL

Australia's and Brazil's currencies track iron ore; so do RIO and VALE. Check trend, dividends and drawdown odds.

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

State

{"symbol":"RIO"} then VALE, 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%
cutEnglish → ruleDid the stock cut its dividend last time?
pullbackEnglish → ruleHas the stock pulled back at least 5% from its 20-day high?
drop5forecastWill it drop at least 5% at some point in the next month?
A 5% drawdown within a month

Answers

Symboltrendruleyield3rulecutrulepullbackruledrop5forecast
RIO0.08360.94630.85910.93790.538
VALE0.0540.94630.85910.94510.589

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

What it means

Session of 2026-10-30, 2 symbols: Is the stock above its 200-day moving average: true for none of 2. Yield above 3%: true for RIO, VALE of 2. Did the stock cut its dividend last time: true for RIO, VALE of 2. Has the stock pulled back at least 5% from its 20-day high: true for RIO, VALE of 2. Highest odds for “A 5% drawdown within a month”: VALE at 59%.

Miner dividends follow commodity prices, so a cut is also a signal about the cycle behind the currency.

Request JSON (RIO; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "RIO"
  },
  "questions": {
    "trend": {
      "type": "yes_no",
      "instructions": "Is the stock above its 200-day moving average?"
    },
    "yield3": {
      "type": "yes_no",
      "ask": "div_yield_ttm > 3"
    },
    "cut": {
      "type": "yes_no",
      "instructions": "Did the stock cut its dividend last time?"
    },
    "pullback": {
      "type": "yes_no",
      "instructions": "Has the stock pulled back at least 5% from its 20-day high?"
    },
    "drop5": {
      "type": "yes_no",
      "instructions": "Will it drop at least 5% at some point in the next month?"
    }
  }
}
Response JSON (RIO, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "trend": {
      "yes_no": 0.0836,
      "rule": "C > sma(C, 200)",
      "basis": "comparison"
    },
    "yield3": {
      "yes_no": 0.9463,
      "rule": "div_yield_ttm > 3",
      "basis": "rule"
    },
    "cut": {
      "yes_no": 0.8591,
      "rule": "cut_last > 0.5",
      "basis": "pattern"
    },
    "pullback": {
      "yes_no": 0.9379,
      "rule": "C <= max(H, 20) * 0.95",
      "basis": "pattern"
    },
    "drop5": {
      "yes_no": 0.538
    }
  },
  "context": {
    "symbol": "RIO",
    "as_of": "2026-10-30"
  }
}

cut_last div_yield_ttm max sma

FX trader · example 20

Is volatility rising across currencies?

When volatility rises in the dollar and EM at the same time, carry trades unwind. Check UUP and EEM together.

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

State

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

Questions

vol5_20English → ruleIs 5-day volatility higher than 20-day volatility?
atr_upruleatr(14) > 1.2 * ref(atr(14), -10)
ATR up 20% in two weeks
widerule(H - L) > 2 * avg(H - L, 20)
Range more than twice the 20-day average range
vol_upforecastWill volatility be higher over the next month?
Higher volatility next month

Answers

Symbolvol5_20ruleatr_uprulewiderulevol_upforecastFired
UUP0.21480.05370.0640.538none
EEM0.86160.13070.08990.527none

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.

vol5_20 >= 0.6 and atr_up >= 0.6→Slackfx-desk
UUP 0 of 1 fired · dry run, nothing sent
EEM 0 of 1 fired · dry run, nothing sent

What it means

Session of 2026-10-30, 2 symbols: Is 5-day volatility higher than 20-day volatility: true for EEM of 2. ATR up 20% in two weeks: true for none of 2. Range more than twice the 20-day average range: true for none of 2. Highest odds for “Higher volatility next month”: UUP at 54%. vol_alert fired for none.

Volatility rules firing in both the dollar and EM at once is the carry-unwind picture; one alone is usually local.

Request JSON (UUP; the others differ only in the symbol)
{
  "model": "ora-fin-0.1.1",
  "state": {
    "symbol": "UUP"
  },
  "questions": {
    "vol5_20": {
      "type": "yes_no",
      "instructions": "Is 5-day volatility higher than 20-day volatility?"
    },
    "atr_up": {
      "type": "yes_no",
      "ask": "atr(14) > 1.2 * ref(atr(14), -10)"
    },
    "wide": {
      "type": "yes_no",
      "ask": "(H - L) > 2 * avg(H - L, 20)"
    },
    "vol_up": {
      "type": "yes_no",
      "instructions": "Will volatility be higher over the next month?"
    }
  },
  "actions": [
    {
      "id": "vol_alert",
      "when": "vol5_20 >= 0.6 and atr_up >= 0.6",
      "do": "slack",
      "connection": "fx-desk",
      "message": "{{symbol}} ({{as_of}}): short-term volatility above 20-day and ATR expanding. Higher volatility next month {{vol_up|pct}}. Review carry positions."
    }
  ],
  "dry_run": true
}
Response JSON (UUP, real)
{
  "model": "ora-fin-0.1.1",
  "answers": {
    "vol5_20": {
      "yes_no": 0.2148,
      "rule": "std(log(C / C[-1]), 5) * sqrt(5 / 4) > std(log(C / C[-1]), 20) * sqrt(20 / 19)",
      "basis": "pattern"
    },
    "atr_up": {
      "yes_no": 0.0537,
      "rule": "atr(14) > 1.2 * ref(atr(14), -10)",
      "basis": "rule"
    },
    "wide": {
      "yes_no": 0.064,
      "rule": "(H - L) > 2 * avg(H - L, 20)",
      "basis": "rule"
    },
    "vol_up": {
      "yes_no": 0.538
    }
  },
  "context": {
    "symbol": "UUP",
    "as_of": "2026-10-30"
  },
  "actions": [
    {
      "id": "vol_alert",
      "fired": false,
      "status": "skipped"
    }
  ]
}

atr avg log offset ref sqrt std

Information, not investment advice. Rules answer from the latest completed daily session; forecasts are probabilities. Actions ran as dry runs: nothing was sent. More in Individuals: Retail investor, Active day trader, Swing trader, Options trader, Dividend investor, Long-term passive investor, Crypto 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.