Cortana Probability Score - Feature Taxonomy
The Cortana Probability Score (CPS) is the meta-label classifier’s output, blended with the impulse + signal engine score, that decides “take this trade.” Differentiator status depends on completeness of its input feature set across the dimensions the 0DTE literature identifies as predictive. This page is the canonical inventory of what’s captured, what’s missing, and what’s planned.
Categories
The literature (López de Prado AFML, SqueezeMetrics, Volland, Cem Karsan, Sinclair, Hudson & Thames, Cboe research) clusters predictive features into eight categories. CPS feature completeness rated by category.
1. Dealer Greek state (mechanically grounded, regime-stable)
Why it matters: Dealer hedging mechanics determine intraday volatility behavior more than any single technical pattern. SqueezeMetrics GEX paper: “the lion’s share of intraday realized volatility is explained by dealer gamma exposure.” Karsan’s Kai framework adds charm and vanna decay layers on top.
| Feature | Coverage | Notes |
|---|---|---|
dp_charm_magnitude | ✓ shipped #65 | per-min hedge $ demand |
dp_vanna_magnitude | ✓ shipped #65 | per-VIX-pt hedge $ |
dp_gex_magnitude | ✗ missing (#67) | literature ranks #1 |
dp_spot_gamma_magnitude | ✗ missing (#67) | dealer position at-the-money |
dp_delta_magnitude | ✗ missing (#67) | live delta exposure $ |
gamma_flip_price | ✗ 0% coverage (#67) | structural inflection |
dp_gex_dir (1-bit) | partial (15%) | should be replaced by magnitude |
dp_charm_dir (1-bit) | partial (15%) | retain as fallback |
dp_vanna_dir (1-bit) | partial (15%) | retain as fallback |
2. Technical indicators (price-derived)
Why it matters: These are the price-pattern primitives every practitioner uses; the model can learn which combinations matter for 0DTE specifically. Chris Lori, Linda Raschke patterns.
| Feature | Coverage | Notes |
|---|---|---|
bb_extension_pct | ✓ shipped #66 | Bollinger position |
vwap_distance_sigma | ✓ shipped #66 | VWAP in σ-units |
pre_entry_momentum_5m_pct | ✓ shipped #66 | 5-min impulse |
pre_entry_momentum_15m_pct | ✓ shipped #66 | 15-min impulse |
time_since_last_pullback_sec | ✓ shipped #66 | extension age |
rsi_14_5min | planned | classic momentum oscillator |
atr_14_5min | planned | average true range, vol scaling |
macd_signal_5min | planned | trend-trigger indicator |
adx_14 | planned | trend strength |
pivot_distance_classic | planned | distance from R1/S1 levels |
realized_vol_30m_pct | partial (used in #66) | should be its own column |
3. Microstructure / order book
Why it matters: “Early and right” lives here. NBBO width, depth asymmetry, and quote churn predict execution quality and very-short- term direction. Briola/Zohren LOB literature. Optiver public talks.
| Feature | Coverage | Notes |
|---|---|---|
nbbo_spread_pct | ✗ - Task #51 | option contract spread |
nbbo_spread_widening_10s | ✗ - Task #51 | dealer pulling away |
quote_churn_rate | ✗ - Task #51 | quote updates per second |
top_of_book_depth_ratio | ✗ - Task #51 | bid size / ask size |
signed_volume_imbalance_60s | ✗ - Task #51 | aggressive buy vs sell |
sweep_velocity | ✗ - Task #51 | large block detection |
4. Session / time-of-day context
Why it matters: Power hour ≠ midday ≠ open. Distinct microstructure
regimes. Project memory project_eod_power_hour.
| Feature | Coverage | Notes |
|---|---|---|
time_of_day_bucket | ✓ | open/mid/lunch/power |
time_of_day_sin/cos | ✓ in featurize() | continuous encoding |
vwap / vwap_distance_pct | ✓ #41 | session-relative |
day_high / day_low / day_range_position_pct | ✓ #41 | range placement |
session_cumul_call_premium / _put_premium | ✓ #41 | flow direction |
recent_rejection_count | ✓ #41 | recent failed setups |
recent_rejection_density_60s | ✓ #66 | finer granularity |
minutes_to_market_close | planned | EOD power-hour proxy |
is_within_5min_of_open | planned | open-auction tape distortion |
is_within_15min_of_close | planned | MOC imbalance window |
5. Cross-asset / breadth
Why it matters: SPY doesn’t trade in isolation. Divergence between SPY and QQQ/IWM/XLF or front-month ES is a leading reversal signal.
| Feature | Coverage | Notes |
|---|---|---|
cax_spy_last, cax_qqq_last, cax_iwm_last | partial coverage | absolute levels only |
qqq_spy_divergence_1m | ✗ planned | computed delta of % returns |
iwm_spy_divergence_1m | ✗ planned | small-cap vs large-cap |
xlf_spy_divergence_1m | ✗ planned | financial sector |
es_spy_basis | ✗ planned | front-month future minus SPY |
vix_term_roll_1d | ✗ planned | VX1-VX2 spread direction |
vix9d_vix_ratio | ✗ planned | overnight risk pricing |
vvix_level | ✗ planned | vol of vol |
move_index | ✗ planned | bond vol; macro stress proxy |
6. Options-chain-on-suggested-contract (counterfactual + microstructure)
Why it matters: Per-contract microstructure on the option we’d buy/sell is execution-quality reality. Also enables counterfactual “would this skip have been a winner.”
| Feature | Coverage | Notes |
|---|---|---|
option_premium | ✓ at decision time | the entry mid |
option_iv (at strike) | ✗ planned | implied vol at the strike |
option_volume_intraday | ✗ planned | current-day contract volume |
option_open_interest | ✗ planned | OI snapshot |
option_theta_per_min | ✗ planned | decay rate |
option_delta (live, not implied dir) | ✗ planned | per-contract greek |
option_gamma | ✗ planned | per-contract greek |
option_vega | ✗ planned | vol exposure |
option_bid_ask_spread_pct | ✗ - Task #51 | execution friction |
entry_option_mid | ✓ #63 (skips) | counterfactual seed |
option_mid_5m/15m/30m | partial #63 | needs UW historical or same-strike polling |
7. Trader / position context
Why it matters: The 5th trade of a losing day is statistically different from the 1st trade of a fresh day. Implicit psychology and risk-adjusted-edge erosion.
| Feature | Coverage | Notes |
|---|---|---|
trader_trade_number_today | ✓ #51 MVP | sequence count |
trader_open_positions_count | ✓ #51 MVP | concurrent risk |
trader_loss_streak | ✓ #51 MVP | consecutive losers today |
trader_pnl_day_to_date | ✓ #51 MVP | cumulative $ |
trader_seconds_since_last_exit | ✓ #51 MVP | recovery interval |
8. Macro / news / event-proximity
Why it matters: Trades 8 minutes before FOMC are not the same as trades 6 hours before. Macro proximity dominates other features when present.
| Feature | Coverage | Notes |
|---|---|---|
is_macro_day | ✓ binary | FOMC/CPI/NFP day |
minutes_to_fomc | ✗ planned | continuous proximity |
minutes_to_cpi | ✗ planned | continuous proximity |
minutes_to_opex | ✗ planned | quarterly OpEx |
headline_velocity_5m | future | requires news API |
CPS architecture
Primary signal (impulse engine + signal engine + scoring)
↓
Score (0-100 integer)
↓
← Feature snapshot at decision time →
Meta-label classifier (L1 logistic, sklearn)
↓
meta_win_prob (0-1)
↓
CPS = meta_win_prob × score-confidence-adjustment
↓
Entry decision (currently primary-score gated; phase 2: meta-veto on
bottom decile of CPS)
Coverage scorecard (2026-05-05)
- Categories complete: 1 (Dealer Greeks: charm/vanna only - 2 of 6 features), 4 (Session), 7 (Trader)
- Categories partial: 2 (Technical indicators), 5 (Cross-asset), 6 (Options chain)
- Categories not started: 3 (Microstructure), 8 (Macro proximity)
Plan: each category gets a dedicated implementation task. Tonight’s queue is #67 (extend Greeks coverage to GEX/delta/gamma/gamma_flip). Microstructure (#51) is the biggest remaining lift; proximity features are quick wins.
See Also
Timeline
2026-05-05 | derived - Cody framed CPS as “the differentiator between Cortana and a coinflip.” Filed this taxonomy as the canonical inventory so feature work has structure instead of accumulating ad-hoc.