PM→MOO System — Scoring Consolidation + 100 Endpoints Research Plan

Generated 2026-04-17 | ZAPAS / CSE Bridge / MOO→9:55

1. Scoring Engines — Canonical Mapping

FileStrategyEntry pointScaleLast touchStatusAction
scoring_pm_moo_v1.pyZAPAS + CSE BridgePmMooScorer().score_zapas() / score_cse()0-25 (min_B+=13)Apr 15 auditCANONICAL — productionKeep. Build CSE backtest on top.
scoring_v7.pyMOO→9:55score_dataframe()combo sum (unbounded)Apr 14CANONICAL — productionKeep. Used by backtest_moo_955_v8.
scoring_v8_overlay.pyMOO→9:55 overlayapply_v8_overlay(stocks_list)±5 adj on v7Apr 17CANONICAL — add-onKeep. Apply after v7.
scoring_pm_moo_v1_beta_overlay.pyZAPAS β-overlay±2 adj on v1Apr 16EXPERIMENTALEvaluate: integrate into v1 or deprecate.
scoring_zapas_v2.pyZAPAS (old)0-25Apr 15DEPRECATEDDelete after confirming pm_moo_v1 covers all factors.
scoring_v5.py / v6.py / v6_auto.pyMOO→9:45 (old)0-25Apr 12DEPRECATEDv7 replaces. Move to archive/.
scoring_pm_moo_v1_backup.pyBACKUPDelete.

Known scoring bugs (from Apr 17 audit)

2. Data Pipeline Canonical Files

RoleCanonical fileRebuilt byUsed by
Primary trades (1y)trades_enriched_v6.csvupdate_all.py + refill_v6_*.pyscoring_v7, v8_overlay
Backfill (2y)all_trades_backfill_2023-04-15_2025-04-14.csvmanual (old)research_v8_3y_expanded (missing vix_level)
PM snapshotspm_timing_all_cache.pkl_fetch_pm_timing_all.py + pull_fresh_daily.pybuild_zapas_dataset
ZAPAS datasetzapas_directional_full.parquetbuild_zapas_dataset.pybacktest_apr17_full.py
CSE signals (static)zapas_87k_scored.parquet— (frozen)backtest_zapas_cse_apr17.py
Intraday 1mintraday_1m_gap_days_v2.parquetpull_fresh_daily.py / pyarrow concatbacktest_moo_955_v8.py
Daily OHLCV + RSIcache_daily/daily_bars_cache.parquet(daily_refresh)scoring_v7, refill_v6_technicals
Daily regime (SPY/QQQ etc)daily_regime.parquet(daily_refresh)refill_v6_technicals (breadth proxy)
Sector ETF gapssector_etf_gaps.csvrefresh_etf_gaps.pyscoring_v7
Foreign ETF gapsforeign_etf_gaps.csvrefresh_etf_gaps.pyscoring_v7
Beta profilesbeta_profiles_v3.jsonnightly_beta_refresh.pyscoring_v8_overlay
intraday_1m_gap_days.parquetLEGACY (Apr 5)— (archive)

3. Datum API — 100 Endpoints Research Plan

Currently used: /daily, /intraday, /intraday/v3 partial, /calculations/volatility_20d/90d/260d, /calculations/avg_true_range_14d, /calculations/high_low_52w, /calculations/corr_beta/v2, /calculations/profiler_top_correlation, /auctions/gaps, /imbalance/imb_09_25, /tickers/etf.

UNUSED или недоиспользуемые (приоритеты по потенциальному edge):

Priority 1 — высокий edge потенциал

EndpointHypothesisEstimated edgeEffort
/calculations/profiler_volumeVolume concentration per ticker — подсветит squeeze candidates (низкий обычно vol + высокий обычный = squeeze trap)+3-5% WR на squeeze-fade day detection (решает Apr 8 баг)1 day
/calculations/median_opg_volume_20dTypical opening auction volume → detect abnormal open (если opg_vol > 3× median = fade сигнал)+2-4% WR на MOO→9:551 day
/auctions, /auctions/gapsFull auction data (not just gap) — imbalance+size+print_price → predict open drift+2-3% WR на MOO direction2 days
/imbalance/imb_09_25MOC/MOO imbalance @ 09:25 — signed directional pressure+3-5% WR (Factor: imbalance aligned with direction)1 day
/intraday/extended_high_low + extended_high_low_postmarket52w high/low hit в PM = PM breakout detection+2-4% WR на ZAPAS (HIGH + 52wHi confluence)1 day
/corporate_actions/listings + ticker_changesIPO/spinoff detection — flag untradeable; ticker rename = avoidAvoid -10% disasters (-2 traps/year)0.5 day

Priority 2 — средний edge

EndpointHypothesisNotes
/calculations/avg_premarket_value_traded_ex_finr_20d/3m$-value PM volume vs shares — captures large-cap PM activity better than raw volReplace pre_vol threshold
/calculations/avg_postmarket_volume_ex_finr_90dPM→AH continuation (AH vol prev day predicts PM next day)ZAPAS entry timing
/intraday/v3/benchmarkRelative performance vs sector/SPY in real-timeReplaces manual SPY_gap calc
/intraday/money_traded_segments, volume_segmentsIntraday money flow by time segment → confirm momentum legitimacyExit timing refinement
/intraday/ticker_count_at_openBreadth at open — how many tickers gapping → detect squeeze daysApr 8 bug fix candidate
/ratings, /ratings/gradesAnalyst ratings — upgrade/downgrade edgeAlready partial in v6, unify
/dvd/cash_dividends, stock_dividends, splitsAvoid ex-div trades (price drop ≠ trade signal)Trap filter
/snapshots/yesterday_valuesPrev-day snapshot (close, high, low, vol) in one callSimplifies enrichment pipeline
/opg_and_clo, /opg_and_clo/adjusted_closesOpening+closing auction prints, split-adjustedImprove MOO price accuracy

Priority 3 — low/niche

4. Research Hypothesis Queue (ordered by ROI)

  1. Apr 8 squeeze-fade fix/intraday/ticker_count_at_open + /calculations/profiler_volume
    Proxy for "mass gap day" → add trap-combo to scoring_v7/v8. Immediate priority.
  2. Imbalance 9:25/imbalance/imb_09_25 already partial.
    Full research: direction-aligned imbalance predicts MOO→9:55 WR boost.
  3. Auction edge/auctions full data (print price vs imbalance).
    Hypothesis: when auction print differs from 9:25 bid-ask mid, direction predicts 9:55.
  4. 52-week high/low confluence/intraday/extended_high_low.
    ZAPAS entry at PM HIGH confluent with 52wHi → higher conviction.
  5. Money traded segments/intraday/money_traded_segments.
    Detect: if PM drive money-weighted vs volume-weighted differ → trap.
  6. PM value-traded vs shares/calculations/avg_premarket_value_traded_ex_finr_20d.
    Mega-cap with $50M+ PM volume but 30K shares ≠ retail squeeze; discriminates.
  7. Adjusted closes/opg_and_clo/adjusted_closes.
    Fix split/div distortions in historical backtests.
  8. Ticker changes / listings/corporate_actions/*.
    Filter new listings (first 5 days) and renames.
  9. Futures active contracts/futures/active_contracts.
    Ensure futures PM ret pulled correctly across contract rolls.
  10. 3-year MOO→9:55 backfill → pull 9:55 bars for 347K backfill trades via /intraday.
    Blocker for v8 3y research. ~8 hours pull.

5. Nightly Cron (current: nightly_full.bat, 6 steps)

[1/6] daily_refresh.bat           — enrichment/v6/finviz/screen/briefing
[2/6] pull_fresh_daily.py         — PM snapshots + intraday 1m (Datum)
[3/6] refresh_etf_gaps.py         — sector+foreign ETF gaps from Datum /daily
[4/6] refill_v6_etf_gaps.py       — fill SPY/QQQ/ARKK/VXX in v6 for missing rows
[5/6] refill_v6_technicals.py     — rsi14/atr14/pre_vol/breadth/prev_day_ret
[6/6] refresh_pm_moo_dashboard.py — rebuild 3 backtests + regen HTML

User action: schtasks /change /tn "DailyRefreshNY1AM" /tr "C:\datum-api-examples-main\nightly_full.bat"

6. Next Sprint — Concrete Tasks

#TaskEffortOwner
1Delete deprecated scoring files (v5, v6, v6_auto, zapas_v2, pm_moo_v1_backup)15 mineasy
2Build Apr 8 trap-combo into scoring_v7 (SPY_gap>2% & LONG & mcap<2B → skip)2 hrsscoring team
3Integrate 6 Priority-1 endpoints into refresh pipeline3 daysbackend
4Research hypothesis #1-6 (one per day)6 daysresearch
53y MOO→9:55 ret_955 pull (347K trades, ~8 hrs Datum)1 daydata
6Consolidate backtest runners (3 scripts → 1)4 hrsrefactor