Мы прошли по 14 находкам. Все критичные и важные — закрыты. Оставили только то, что требует новых данных (например, SPY 5-day return — его пока нет в датасете).
Было: в скоринге объявили «минимум 5000 акций в PM», но проверку забыли. Тонкие тикеры с десятком акций проходили.
Стало: фильтр реально применяется. Плюс подняли порог до 20 000 — как в RT-движке, чтобы не было расхождений.
Было: RT считал бар каждый раз, когда между опросами вырастал объём. При опросе раз в 30 сек за полчаса набегало 60+ «баров» вместо 30. Скор завышался.
Стало: считаем уникальные минуты с активностью. Теперь одна минута = один бар, как в истории.
Было: если в скоринг приходил тикер без PM high/low (раннее утро), система всё равно назначала направление по одному лишь gap — без проверки «где цена в диапазоне». Это противоречит всей идее конвергенции.
Стало: нет данных о диапазоне → возвращаем SKIP. Лучше пропустить, чем войти вслепую.
Было: код обещал «BUY A+ = 96.6%, SELL A+ = 97.9%». При полном пересчёте на 5 годах оказалось 71.8% и 83.1% — разница 15-25 процентных пунктов. Мы думали, что торгуем почти без проигрышей, а реально проигрывали каждые 4-5 сделок.
Стало: таблица ZAPAS_WR переписана с честных цифр реального бэктеста (48 391 строк, 10 084 трейда).
Было: если импорт scoring_zapas_v2 падал, RT использовал свою встроенную формулу, чуть другую. Мы могли торговать на одной модели, а бэктестить на другой — и не знать об этом.
Стало: запасной путь убран. Если основной скоринг не загрузился — это фатальная ошибка, движок падает. Два разных источника истины = багов не избежать.
Было: RT подставлял ATR=1.0 как заглушку. В формуле gap/ATR это значило, что любой гэп ≥2% автоматически получал +1 к score. Много сделок получали лишний балл.
Стало: при ATR ≤ 1.01 фактор пропускается. Никаких фантомных очков.
earnings_distДефолт был 99, а проверка if earnings_dist is not None никогда не срабатывала как False. Убрали мёртвую ветку.
Было: при переворотe позиции (BUY → SELL) мы учитывали комиссию старой ноги, но забывали про вход в новую. Результат — P&L был чуть лучше реальности.
Стало: комиссия за вход flip_in теперь записывается сразу. Баланс сходится копейка в копейку.
null, а не фейковый ноль.Trap «SPY 5-day crash < -3%» ждёт spy_5d_ret, но в датасете только 1-day gap. Пятидневный drawdown редко попадает ниже -3% в 1-day gap, поэтому trap почти никогда не срабатывает.
Нужно пополнить enrichment пятидневным ретёрном SPY. Задача на уровне данных, не кода.
Если A+ кандидат не помещается в available BP, цикл делает break и даже B+, который мог поместиться, пропускается. Это осознанное решение — не дробить позиции, — но лучше добавить комментарий, чтобы через полгода не удивляться.
Только документация, поведение корректное.
Раньше константы в двух файлах расходились. Теперь всё выровнено. Если что-то меняешь — меняй в обоих местах.
| Параметр | scoring | RT engine | Статус |
|---|---|---|---|
| Минимальная цена | $5 | $5 | ✓ совпадает |
| Минимальный |gap| | 0.5% | 0.5% | ✓ совпадает |
| Минимальный mcap | $2B | $2B | ✓ после фикса |
| Минимальный PM volume | 20 000 | 20 000 | ✓ после фикса |
| Минимум PM баров | 5 | — | RT фильтрует по объёму, не по барам |
| Depth BUY | ≤ 0.30 | ≤ 0.30 | ✓ совпадает |
| Depth SELL | ≥ 0.70 | ≥ 0.70 | ✓ совпадает |
| Логика направления | gap + pct_in_range | gap + pct_in_range | ✓ совпадает |
| Fallback при ошибке скоринга | — | нет (raise) | ✓ после фикса HIGH-3 |
| Grade | Dir | N | WR% | Avg% | Комментарий |
|---|---|---|---|---|---|
| A+ | BUY | 273 | 71.8 | 1.99 | стабильно выше рынка |
| A+ | SELL | 260 | 83.1 | 3.33 | лучший сегмент |
| A | BUY | 1 432 | 74.9 | 2.40 | рабочая зона |
| A | SELL | 1 394 | 78.1 | 3.18 | очень хорошо |
| B+ | BUY | 2 319 | 72.7 | 1.51 | основной объём |
| B+ | SELL | 2 053 | 77.8 | 2.60 | основной объём |
| B | BUY | 980 | 63.7 | 0.23 | граница окупаемости |
| B | SELL | 772 | 74.1 | 2.09 | sell работает лучше |
| C | BUY | 355 | 55.5 | -0.77 | минусовая зона, отсекать |
| C | SELL | 242 | 65.3 | 1.50 | только SELL живёт |
Выбери день в Feb-Apr 2026 и настрой фильтры — увидишь, что ZAPAS советовал торговать в этот день и как эти советы отработали.