Asym Pump Engine v2

Plugin-based pump/dump trading framework для окна 09:30 → 11:00 ET. Развитие существующего moo_1100_asym/.

✓ 23/23 tasks done ✓ 87/87 tests pass 23 commits 2026-04-27 ⚠ paper phase

В двух абзацах — что это и зачем

Это торговый движок, который каждое утро в 09:25 ET сканирует ~2,500 ликвидных тикеров (ADV ≥1M акций), ищет пампы (резкие гэпы вверх) и дампы (резкие гэпы вниз) на пре-маркете, и выставляет MOO ордера на открытие в 09:30. Каждая позиция держится максимум до 11:00 ET с тремя возможными выходами: −1% стоп-лосс, +7% тейк-профит, или force-exit в 11:00 по MOC.

Ключевое отличие от старой v1 версии — plugin-архитектура: старый монолитный сканер заменён на 4 независимых "плагина", каждый из которых ищет свой тип сетапа (пампы с новостями vs органические; SHORT-фейды vs LONG-баунсы). Каждый плагин можно включать/выключать независимо, проводить research отдельно, и масштабировать BP по-разному. Сейчас 1 плагин в production (organic_pump = миграция Tier 1 SHORT с PF 2.17), остальные 3 в paper-режиме до прохождения аудита.

Параметры выхода (одинаковые для всех плагинов)

−1%
Stop Loss (hard)
+7%
Take Profit
11:00
Time Stop ET
7:1
Reward / Risk
12.5%
Breakeven WR (мат.)
35-40%
Целевой WR (фактич.)

Математика: при ratio 7:1 безубыток на WR ≥ 12.5%. С учётом time-exit (большинство сделок выходят в 11:00 со средним результатом близким к 0), реалистичный целевой WR = 35-40% "победы" (TP-hit + favorable time-exits) → ожидаемый daily Sharpe 2.5-4.0.

Как это работает (flow в 6 шагов)

09:25 ET Загрузка PM snapshot (gap, vol, news, earnings) для всех 2,500 тикеров
Plugins detect Каждый из 4 плагинов независимо ищет свой сетап → список candidate signals
Dedup Если 2 плагина дали один тикер — берём с высшим score
Risk gates 6 слоёв фильтров: календарь, концентрация, sector cap, side balance, DD halts
Sizer Распределение $10K BP пропорционально score, с min/max caps
09:30 ET MOO ордера → exit_manager следит SL/TP/Time до 11:00

4 плагина — что каждый ищет

LIVE
organic_pump
SHORT • органический памп без катализатора

Ищем акции до $10, которые на пре-маркете без новостей прыгнули +10% и выше на аномальном объёме (≥3σ от 60-дневной нормы). Это классический pump-and-dump паттерн — мелкая капитализация, retail FOMO. Шортим на открытии в надежде что памп выдохнется и цена откатится к среднему.

Это миграция v1 Tier 1 стратегии — единственный сетап который прошёл 3-летний pre-period audit с Profit Factor 2.17.

prev_close < $10 AND gap ≥ +10% AND no_news AND pm_dvol_z ≥ 3σ
PAPER
organic_dump
LONG • capitulation flush

Зеркало предыдущего: акция падает ≥10% на открытии без новостей, на огромном PM объёме — это часто принудительная распродажа (margin call, fund liquidation), а не реальная переоценка. Лонгуем на открытии ожидая отскок к 11:00.

Гипотеза не проверена на 3y данных — в paper-режиме до audit pass.

gap ≤ −10% AND no_news AND pm_dvol_z ≥ 3σ AND not pre-announce
PAPER
reports_pump
SHORT • новостной/earnings памп

Ищем компании с earnings AMC накануне или свежими новостями (06:00-09:25 ET), которые прыгнули вверх ≥+5%. Гипотеза: после новостей наступает IV crush (опционная волатильность падает), retail FOMO peaks at open, дальше mean-reversion.

Skip если short interest >30% (squeeze risk) или float <10M (illiquid).

gap ≥ +5% AND (earnings_AMC OR news ≥1) AND SI <30% AND float ≥10M
PAPER
reports_dump
LONG • earnings miss bounce

Earnings miss / guidance cut → акция падает ≥5%. Если уже oversold (RSI <30) или серия из ≥3 down-дней — это часто capitulation, дальше отскок. Лонгуем на открытии до 11:00.

Skip если есть fraud-флаги или Chapter 11 risk — там бизнес реально умер.

gap ≤ −5% AND earnings_window AND (RSI<30 OR consec_down ≥3)

Risk Gates — 6 слоёв защиты

1. Pre-trade ticker filters

Universe ADV ≥1M acquisitions, price ≥$2, исключение leveraged ETFs (TQQQ/SOXL/etc.), сплитов за 5d, IPO <30d.

2. Calendar skips

FOMC/CPI/NFP — skip всё. PPI — skip только SHORT (LONG OK). OPEX Friday — max 1 позиция. Праздники ±1d — размер ×0.5.

3. Per-ticker constraints

Один тикер — одна сделка в день. Если 2 плагина дали сигнал — берём с высшим score. Earnings ±1d — organic плагины skip (передают reports плагинам).

4. Portfolio-level

Max concurrent = 3 позиции. Max $2,000 на позицию (20% от $10K BP). Sector concentration ≤2 позиции одного сектора. Side balance ≤70% gross на одной стороне.

5. Adaptive DD halts

Daily DD ≤−5% от BP → engine halt до next day. Weekly DD ≤−8% → halt до понедельника. Shared с M14 (один счёт).

6. Cross-engine + kill switches

Shared $10K BP с MOO_955 (приоритет M14). Manual kill switches: engine.enabled: false или per-plugin. Auto-halt: 5 убыточных дней подряд → плагин отключается до ручного re-enable.

Research pipeline — как валидируем перед live

5-check audit (жёсткий)

  1. Walk-forward 5-fold OOS — 75/25 expanding window
  2. Bootstrap 1000-iter CI на Sharpe и $/yr
  3. Permutation test sign-flip, p<0.05
  4. Lookahead audit — каждая фича .shift(1) safe
  5. Slippage stress — Sh выживает на 30 bps SL slippage?

Audit pass criteria (per plugin)

Sharpe daily≥ 1.5
$/yr≥ $2,000
WF positive folds≥ 4 / 5
t-statistic≥ 3
Permutation p< 0.05
DIRTY features0

Capital ramp — путь от paper к live

Phase 0 Audit pass per plugin → пишется READY_FOR_PAPER.md
Phase 1 Paper-trade 2 недели, daily reconcile vs backtest
Phase 2 $1K BP, 1 неделя — validate routing/slippage matches
Phase 3 $5K BP, 2 недели — scale, monitor weekly Sharpe
Phase 4 $10K BP shared с MOO_955 — full deploy

Halt condition на любой фазе: просадка −3% от старта фазы → плагин halted, root-cause review обязателен.

Что собрано (модули)

МодульНазначениеTests
core/signal.pyPumpSignal dataclass — основной тип данных3
core/plugin_base.pyPumpPlugin ABC — контракт для плагинов2
core/plugin_registry.pyDiscovery + filter по enabled3
core/blacklists.pyLeveraged ETFs, IPO/split filters3
core/universe.pyADV 1M+ universe builder2
core/exit_manager.py1%SL / 7%TP / 11:00 — bar-level + tick-level8
core/risk_gates.py6 слоёв фильтров (calendar/portfolio/sector/etc.)6
core/sizer.pyScore-proportional sizer с BP budget4
core/pump_engine.pyOrchestrator: plugins → dedup → gates → sizer3
core/factory.pybuild_engine() из strategy.yaml1
core/config.pyYAML loader2
plugins/organic_pump.pySHORT pump fade (LIVE)9
plugins/organic_dump.pyLONG capitulation bounce (paper)4
plugins/reports_pump.pySHORT earnings/news fade (paper)6
plugins/reports_dump.pyLONG earnings miss bounce (paper)4
research/backtest.pyPlugin-aware historical replay2
research/audit_5checks.pyWF + bootstrap + permutation4
research/slippage_stress.pyRerun на 15/30/50 bps SL slip1
research/run_audit_organic_pump.pyDriver script (нужен pm_history parquet)
dry_run.pyPre-market 09:25 dump candidates → JSON

Open issues — что нужно сделать дальше

P0 — pm_history parquet не существует

Audit driver run_audit_organic_pump.py готов, но требует enrichment_data/pm_history_2022_2026.parquet. Этот файл нужно собрать через существующий pipeline (_build_features.py, _collect_*.py) до того как можно будет запустить audit на реальных данных.

P0 — Broker hook = paper-log only

Hook в moc_moo.py сейчас только логирует кандидатов (orders НЕ сабмитятся). Full wiring требует M14 OPG-routing fix (отдельный P0 dependency — по логам TradingApp все MOO/MOC сабмитились как session=EXT вместо OPG).

✓ Готово к paper-phase для organic_pump

После сборки pm_history parquet и прохождения audit — можно запускать Phase 1 (paper 2 недели) для organic_pump. Остальные 3 плагина ждут аналогичного аудита.

✓ Backlog plugins (для v3)

sympathy_pump (peer ticker memes), sector_rotation_dump (XLE/XLF flush → top member SHORT), post_halt_resume (halted T1 → resume → fade), low_float_runner (float <5M extreme squeeze fades).

Команды для запуска

py -3.12 -m moo_1100_asym.dry_run Pre-market 09:25 ET — дамп кандидатов в JSON
py -3.12 -m pytest moo_1100_asym/tests/ -v Полный test suite (87 тестов)
py -3.12 -m moo_1100_asym.research.run_audit_organic_pump Запуск 5-check аудита (нужен pm_history parquet)
py -3.12 -c "from moo_1100_asym.core.factory import build_engine; print(build_engine())" Проверка factory + список enabled plugins

Документы