Archived
ЧТО: code/ (стенд и методы), results/ (сводки), charts/ (3 графика), reports/ (издержки, плацебо, по годам), docs/REJECTED.md. ПОЧЕМУ: цель — найти кандидатов на 5м или доказать с цифрами их отсутствие. КАК ПРОВЕРЕНО: движок сверен с прод-движком TON-бота 1:1; плацебо и рандом-контроль в отчёте; бутстрап по дням.
77 lines
9.0 KiB
Markdown
77 lines
9.0 KiB
Markdown
# GOAL: стратегии на 5-минутных свечах — готовые тексты для Павла
|
||
|
||
Всё подготовлено 28.09.2026. План и разведка — в `PLAN.md` рядом. Гейты проверены в обе стороны
|
||
(пустая папка → падают с перечислением этапов; макет → «Ф1/Ф2/Ф3 OK»), макет удалён.
|
||
|
||
## 1. Цель — вставить ОДНИМ сообщением (текст в goal_text.txt, 3400 знаков)
|
||
|
||
```
|
||
/goal Стратегии на 5-минутных свечах Bybit: найти кандидатов с положительным матожиданием после комиссий или доказать с цифрами, что их нет
|
||
verify: 1) Данные 5м (data/5m/<SYM>_5m.csv без шапки: ts,open,high,low,close,volume; контракты — PLAN.md п.6) по >=100 USDT-перпам: >=15 млн баров, >=40 пар с историей >=12 мес, плюс манифест и reports/validate_5m.json (dup=0, медиана coverage >=0.95); вывод валидатора вставь в ответ.
|
||
2) reports/stand_reconcile.json: движок стенда сверен с прод-движком TON-бота на 30м барах из ресемпла 5м (>=4 пары), расхождение PF <=5%; вывод в ответ.
|
||
3) reports/costs.json + reports/COSTS.md: средние |r5м| и |r1ч|, комиссии 0,055% и 0,02% на ногу, >=5 сценариев p*; вывод в ответ.
|
||
4) Проверено >=12 методов из банка PLAN.md п.4, правила каждого зафиксированы ДО прогона: results/methods/ + сводка results/summary_5m.csv (EV всей выборки и OOS, t, плацебо, рандом, Sharpe, просадка, по годам).
|
||
5) Контроль честности: плацебо-сдвиг, рандом-вход, альфа против «купил и держу», издержки тейкер и мейкер, block-bootstrap, поправка Бонферрони (reports/count_tests.json), разбивка по годам.
|
||
6) Кандидат принят только при EV>0 после тейкерской комиссии на OOS, плацебо ~0 (|медиана| <3 б.п.), |t| >= порога Бонферрони и плюсе в >=2 из 3 лет; иначе метод идёт в docs/REJECTED.md (>=12 строк таблицы с цифрами).
|
||
7) reports/VERDICT.md: первая строка «ВЕРДИКТ: проверено N, положительное матожидание у K» либо «ОТРИЦАТЕЛЬНЫЙ РЕЗУЛЬТАТ», далее цифры.
|
||
8) Есть кандидат — strategies/<name>/rules.md, bot/paper_5m.py ($1000 демо, комиссия и funding внутри), сухой прогон reports/paper_dry_run.json, первый отчёт бота, план форварда с чекпоинтами 4 и 12 недель. Нет кандидата — reports/NO_CANDIDATE.md (>=12 строк).
|
||
9) Публикация: репозиторий anatoly/crypto-screener-5m и вики >=7 страниц (reports/PUBLISH.md со ссылкой), README.md >=3000 Б, >=3 графика в charts/.
|
||
10) В ответ: вердикт, таблица «метод -> EV полная/OOS -> t -> плацебо», путь к results/summary_5m.csv, ссылка на репо.
|
||
constraints: Гейты /opt/data/scripts/screener5m_gate_f1..f3.sh только запускать (правка = провал этапа). Приёмка — облачная модель. Запрещено: подгонка на OOS, отбор пар по результату, EV без издержек, смена правил метода после просмотра цифр. Издержки от нотионала: тейкер 0,055% на ногу + слиппедж 1 б.п. (3 б.п. вне топ-30 по обороту), мейкер 0,02% на ногу, funding при удержании через 00/08/16 UTC. Отсутствие кандидата — валидный результат: сдать таблицу опровергнутого, «рабочий» метод не выдумывать. Прогоны дольше 10 мин — background с notify. screener_research и csm — только читать. Ключи и токены в репозиторий и логи не писать.
|
||
boundaries: /opt/data/work/screener5m + venv .venv (uv: pandas,numpy,matplotlib,scipy,statsmodels,pyarrow); данные — публичный REST api.bybit.com без ключей (пагинация kline назад через end=oldest-1, 1000 баров на запрос, retCode 10016 пропускать), до 5 ГБ; репозиторий anatoly/crypto-screener-5m.
|
||
stop when: нет доступа к Bybit или Gitea; нужно выбирать между двумя равными кандидатами; вселенная или правила подбирались после просмотра OOS; по итогам Ф1 ни один класс методов не даёт EV>0 — доложить и ждать решения Павла.
|
||
```
|
||
|
||
## 2. Гейты — добавлять ТРЕМЯ отдельными сообщениями (по одному за раз, порядок важен)
|
||
|
||
```
|
||
/goal gate add bash /opt/data/scripts/screener5m_gate_f1.sh
|
||
/goal gate add bash /opt/data/scripts/screener5m_gate_f2.sh
|
||
/goal gate add bash /opt/data/scripts/screener5m_gate_f3.sh
|
||
```
|
||
|
||
Что проверяет каждый (136 проверок, все читают диск напрямую):
|
||
|
||
| Гейт | Этапы | Смысл |
|
||
|---|---|---|
|
||
| f1 | Э0–Э3 | файлы 5м (≥100, 6 полей, время вверх), манифест (≥15 млн баров, ≥40 пар ≥12 мес), валидатор (dup=0, медиана coverage ≥0,95), сверка движка с прод-движком (≥4 пары, PF ≤5%), планка издержек (комиссии 0,055/0,02, ≥5 сценариев p*) |
|
||
| f2 | Э4–Э6 | ≥12 файлов методов (≥100 сделок), сводка с EV/EV-OOS/t/плацебо/рандом (нет пустых полей), по годам (≥12×≥3), Бонферрони (n_tests ≥12, порог ≥2,9), плацебо ≥800 Б, ≥12 строк опровергнутого, ≥3 PNG |
|
||
| f3 | Э7–Э9 | вердикт первой строкой + явный итог, ветка кандидата (rules.md, paper_5m.py, сухой прогон ≥100 сделок с комиссиями, форвард-план 4 и 12 недель) ИЛИ ветка «нет кандидата» (≥12 строк), публикация репо и вики ≥7 страниц, README ≥3000 Б |
|
||
|
||
Контрольные суммы (сверять перед запуском цели; я не менял их после теста):
|
||
|
||
```
|
||
40d7d99349509f6828376eb29f98233743447a0b295a8d1964f7a3f3b5ed0d7a screener5m_gate_f1.sh
|
||
7e1e36e2d1531d37253fbb2eb3e2b76a46ac2179fc2b8cf5f13f721be160e438 screener5m_gate_f2.sh
|
||
18d34dc86945d0c61980bf27893781c656ac8d57580d2bbab1eb921bf0c9f171 screener5m_gate_f3.sh
|
||
```
|
||
|
||
## 3. После постановки — проверить
|
||
|
||
```
|
||
/goal show # поля не улетели в заголовок
|
||
/goal gate list # все три гейта на месте
|
||
/goal # состояние цикла и остаток бюджета (max_turns = 60)
|
||
```
|
||
|
||
Разбор состояния цели в БД (на чтение):
|
||
|
||
```bash
|
||
/opt/hermes/.venv/bin/python3 -c "
|
||
import sqlite3, json
|
||
c = sqlite3.connect('file:/opt/data/state.db?mode=ro', uri=True)
|
||
k, = c.execute(\"select key from state_meta where key like 'goal:%' order by rowid desc limit 1\").fetchone()
|
||
d = json.loads(c.execute('select value from state_meta where key=?', (k,)).fetchone()[0])
|
||
print(k, d.get('turns_used'), '/', d.get('max_turns'), '| gates:', len(d.get('gates') or []))
|
||
print('outcome:', ((d.get('contract') or {}).get('outcome') or '')[:150])"
|
||
```
|
||
|
||
## 4. Что уже проверено руками (не переоткрывать)
|
||
|
||
- 5м история Bybit доступна глубоко назад при явном `start`/`end` (проверено на 2020, 2021, 2022) —
|
||
прежняя заметка «только 3,5 дня» верна лишь для запроса без `start`.
|
||
- Скорость: 2,7 запроса/с одиночными вызовами; 1000 баров на запрос; `retCode 10016` пропускать.
|
||
- Планка: средний модуль 5м-дохода 22,8 б.п. (BTC 6,2), 1ч — 78,0 б.п.; тейкер на круг 0,11% →
|
||
цель/стоп 0,2%/0,2% требуют точности 77,5% (мёртвая зона для скальпинга по одному бару).
|
||
- Диск: 29 ГБ свободно; оценка выгрузки 100 пар × 18 мес ≈ 15,5 млн баров ≈ 400 МБ, ≈ 11 000 запросов.
|