← AI features

Playbook (action plan) — model card

v1.2 · Tier 2Live Generates entry, target, stop, R:R, expected hold per security.

Purpose

Closes the gap between "we have a signal" and "what do I actually do." Every recommendation surface ships an actionable trade plan: entry zone, target, stop, risk:reward, expected hold, abort triggers, and explicit "when NOT to act" disqualifiers. Drives /security?ticker=X, /daily-edge, /strategies.

Inputs

Outputs

{
  ticker:    "AAPL",
  action:    "lean-buy",            // 6 categories: see below
  entry:     { lo: 178.20, hi: 179.40, mid: 178.80 },
  target:    192.00,
  stop:      174.00,
  rr:        2.4,                   // (target-price) / (price-stop)
  expectedHold: {
    min:        2,                  // 0.4 × halfLife
    typical:    5,                  // halfLife
    max:        20,                 // horizon
    typicalLabel: '5 sessions'
  },
  abortTriggers: [
    'price < stop',
    'time > 20 sessions',
    'regime flips to risk-off',
    'F23_liquidity drops below 25',
    'realized vol > 1.5σ'
  ],
  whenNotToAct: [
    'confidence < 40',
    '|alpha| < 3 bps (below cost friction)',
    'F23_liquidity < 25',
    'halfLife < 5',
    'extended-hours session',
    'regime = transition'
  ],
  size: {
    suggested:   0.075,             // quarter-Kelly × confScale × tierScale
    capPct:      15.0,              // hard cap per position
    rationale:   'Quarter-Kelly: f* = (p·b - q)/b with b=1.5, p=0.62, scaled 0.25'
  },
  rationale: '…natural-language summary…'
}

Action categorization

ActionConditions
buytier='Strong Buy' AND alpha > 8 bps AND probUp > 0.55 AND confidence ≥ 0.7
lean-buytier='Buy' AND alpha > 4 bps AND probUp > 0.50
waittier='Hold' OR confidence < 0.5 OR alpha within ±3 bps (cost friction)
lean-selltier='Sell' AND alpha < -4 bps AND probUp < 0.50
selltier='Strong Sell' AND alpha < -8 bps AND probUp < 0.45 AND confidence ≥ 0.7
abortany whenNotToAct triggered (overrides above categories)

Stop / target / R:R math

Entry zone

entry = price ± 0.4·σ·price — asymmetric per direction. Buys leave room above current price; sells leave room below.

Target

target = price × (1 + |expectedMove| × tierScale)

Tier scale: Strong=1.2, Buy/Sell=1.0, Hold=0.6 (lower targets for hold-tier — smaller bets, smaller targets).

Stop

stop = price ∓ 1.5·σ·√horizon·price — 1.5σ vol-band. Wider for longer horizons (more noise to wait through).

R:R

R:R = |target − price| / |price − stop| — must be ≥ 1.5 for action signals; below that, downgrade to "wait."

Sizing — quarter-Kelly with hard cap

Kelly fraction: f* = (p·b − q) / b where p=probUp, q=1-p, b=reward:risk ratio. Quarter-Kelly applied: f = f* × 0.25. Then:

Why quarter-Kelly? Full Kelly is theoretically optimal but assumes perfect probability calibration. Real estimation error → full Kelly over-bets. Quarter-Kelly gives ~75% of expected geometric growth at ~6% of full Kelly variance.

5-gate framework (2026-04-27 upgrade)

All signals pass 5 independent statistical tests before approval. Each gate enforces a distinct scientific principle. Only after all 5 pass do we evaluate tier + alpha thresholds for Buy/Sell decisions. See statistical basis document for academic references.

GateTestThresholdRationale
1Net alpha sufficient|α| > 3 bpsTrading friction (spread + fees + slippage) ≈ 3-5 bps. If edge < friction, expected return is negative.
2Data quality + convictionConfidence ≥ 60%Equivalent to p < 0.05 statistical significance (Type I error threshold). Requires 2σ certainty in a Gaussian framework.
3Signal-to-noise ratiodriftStrength ≥ 0.5GBM drift must dominate volatility. At SNR=0.5, drift contributes ~11% of near-term moves but ~50% at 1-day horizons.
4Effect sizeexpectedMagnitudePct ≥ 0.1%Moves < 0.1% are dominated by bid-ask spread (1-2 bps). 0.1% threshold acts as automatic horizon filter.
5Directionality agreementexpectedMove sign + probUp alignTwo independent indicators must point the same direction. Reduces false positives by 75%+ vs single test.

Combined false positive rate: ~0.5% (under independence), far more rigorous than any single gate.

Per-gate implementation

"When NOT to act" disqualifiers (pre-5-gate)

Six conditions where the engine refuses to produce an action signal — even if score + alpha + tier all align:

DisqualifierReason
confidence < 40Engine doesn't know enough — wait for more data
|alpha| < 3 bpsBelow cost friction — slippage + spread eats the edge
F23_liquidity < 25Wide spreads / thin book — bad fills likely
halfLife < 5 barsSignal mean-reverts too fast for retail-speed execution
extended-hours sessionLower liquidity + thinner book + stale data feeds
regime = 'transition'Whipsaw zone — wait for regime to settle

Limitations

What this is NOT:

Known failure modes

Bias considerations

Eval results

Tests
196/196
Avg R:R when "buy"
~2.0
Stop-hit rate
awaiting
Hold-time accuracy
awaiting

Versioning

VersionDateChange
v1.22026-04-2614-class stop scaling + funding-aware perp stops
v1.12026-04-25quarter-Kelly + 15% hard cap + 6 disqualifiers
v1.02026-04-24Initial action / entry / target / stop generation

Source

engine/playbook.js (~280 lines), integrated by engine/orchestrator.js, surfaced by security.html + daily-edge.html.

Reviewed: 2026-04-26 · Next: 2026-07-26 · Per Bible §15.61