From d56ace175753b99b82ae1c8ca2ccdd0338441f6a Mon Sep 17 00:00:00 2001 From: "Anatoly (Hermes)" Date: Tue, 29 Sep 2026 02:46:09 +0300 Subject: [PATCH] =?UTF-8?q?wiki:=207=20=D1=81=D1=82=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=86=20=E2=80=94=20=D1=81=D1=83=D1=82=D1=8C,=20=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B4=D0=B8=D0=BA=D0=B0,=20=D0=B8=D0=B7?= =?UTF-8?q?=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B8,=20=D1=80=D0=B5=D0=B7?= =?UTF-8?q?=D1=83=D0=BB=D1=8C=D1=82=D0=B0=D1=82=D1=8B,=20=D0=BE=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=B3=D0=BD=D1=83=D1=82=D0=BE?= =?UTF-8?q?=D0=B5,=20=D1=81=D0=BB=D0=BE=D0=B2=D0=B0=D1=80=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Издержки.md | 31 ++++++++++++++++++++++++++++++ Методика.md | 43 +++++++++++++++++++++++++++++++++++++++++ Опровергнутое.md | 26 +++++++++++++++++++++++++ Результаты.md | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ Словарь.md | 30 +++++++++++++++++++++++++++++ Суть.md | 30 +++++++++++++++++++++++++++++ 6 files changed, 210 insertions(+) create mode 100644 Издержки.md create mode 100644 Методика.md create mode 100644 Опровергнутое.md create mode 100644 Результаты.md create mode 100644 Словарь.md create mode 100644 Суть.md diff --git a/Издержки.md b/Издержки.md new file mode 100644 index 0000000..afd0244 --- /dev/null +++ b/Издержки.md @@ -0,0 +1,31 @@ +# Издержки и планка: сколько нужно зарабатывать, чтобы просто не терять + +## Факты по данным + +* Средний ход 5м-свечи — **25.81 б.п.**, за час — **90.1 б.п.** +* Комиссия тейкера на круг — **11 б.п.** (0,055% × 2), мейкера — **4 б.п.** +* Живые замеры книги Bybit на объём $1000: проскальзывание BTC 0,006 б.п., ETH 0,019, SOL 0,42, + XRP 0,34, QNT 7,9 б.п.; медианный спред топ-30 — 1,0 б.п. Вывод: **спред не узкое место, узкое + место — комиссия и неблагоприятный отбор.** + +## Порог безубыточной точности + +Формула: `p* = (Стоп + Издержки) / (Цель + Стоп)` — какую долю сделок нужно выигрывать, чтобы просто +выйти в ноль. + +| Цель | Стоп | Тейкер (11 б.п.) | Мейкер (4 б.п.) | +|---|---|---|---| +| 0.1% | 0.1% | 105.0% | 70.0% | +| 0.2% | 0.2% | 77.5% | 60.0% | +| 0.3% | 0.2% | 62.0% | 48.0% | +| 0.5% | 0.3% | 51.2% | 42.5% | +| 1.0% | 0.5% | 40.7% | 36.0% | +| 1.0% | 1.0% | 55.5% | 52.0% | +| 2.0% | 1.0% | 37.0% | 34.7% | + +## Что из этого следует + +* «Скальпинг по одной свече» (цель 0,2%, стоп 0,2%) требует **77,5%** попаданий — это заведомо + недостижимо; при цели 0,1% порог вообще больше 100% (мёртвая зона: цель меньше издержек). +* Осмысленны только конструкции, где цель в 3–10 раз больше издержек, либо мейкерское исполнение + (порог падает с 77,5% до 60% в том же сценарии), либо снижение частоты сделок. diff --git a/Методика.md b/Методика.md new file mode 100644 index 0000000..96985ea --- /dev/null +++ b/Методика.md @@ -0,0 +1,43 @@ +# Как считали (методика) + +## Данные + +* Источник — публичный REST Bybit `/v5/market/kline` (ключи не нужны), 5м свечи, linear USDT-перпы. +* Вселенная: 250 пар с оборотом ≥ $500 тыс./сутки, история ≥ 90 дней; всего **36 328 323 свечи** + за 2024-10-01 … 2026-09-28. Дубликатов нет, медиана покрытия слотов 100%. +* Формат: `ts_ms,open,high,low,close,volume` — отдельный репозиторий `anatoly/crypto-5m-data`, + он же догружен в общий датасет `nikolashkin/tonbot-data`. + +## Сверка движка (обязательный шаг) + +Прежде чем доверять цифрам, наш движок сверен с **прод-движком TON-бота** на одних и тех же 30м барах +(полученных ресемплом из 5м): + +| Пара | сделок прод | сделок стенд | PF прод | PF стенд | +|---|---|---|---|---| +| BTCUSDT | 107 | 107 | 0.4799 | 0.4799 | +| ETHUSDT | 105 | 105 | 0.3737 | 0.3737 | +| SOLUSDT | 82 | 82 | 0.3604 | 0.3604 | +| XRPUSDT | 114 | 114 | 0.6517 | 0.6517 | +| ZECUSDT | 107 | 107 | 0.9739 | 0.9739 | + +Совпадение 1:1 — расхождение 0%. Смысл шага: если движки расходятся, то расхождение ищут в «машине +состояний» (окно удержания, кулдаун, дневной лимит, пауза после стопа), а не в правилах входа. + +## Издержки + +Комиссия вычитается из каждой сделки как доля от цены входа: тейкер 0,055% на ногу (0,11% на круг), +мейкер 0,02% (0,04%). Слиппедж 1 б.п. на ногу для топ-30 пар по обороту и 3 б.п. для остальных. +Funding учитывается только при удержании через 00/08/16 UTC (для 5м-сделок это доли базисного пункта). + +## Честность измерений + +| Контроль | Как сделан | +|---|---| +| Плацебо | то же правило на сигнале, сдвинутом вперёд на горизонт удержания | +| Рандом | случайные входы той же частоты и направления | +| Значимость | блочный бутстрап **по дням** (перекрывающиеся окна не раздувают t) | +| Множественное тестирование | порог Бонферрони для числа проверенных вариантов (`reports/count_tests.json`) | +| По годам | отдельная таблица `reports/by_year.csv` | +| Половинки | отдельно EV на второй половине периода (OOS) | +| Ликвидность | слиппедж 3 б.п. для неликвида (эдж из неликвида не считается) | diff --git a/Опровергнутое.md b/Опровергнутое.md new file mode 100644 index 0000000..8305999 --- /dev/null +++ b/Опровергнутое.md @@ -0,0 +1,26 @@ +# Опровергнутое + + +Прогон по 250 USDT-перпам Bybit (5м, 2024-10-01 … 2026-09-28). Издержки вычтены из каждой сделки. +Порог приёмки: EV > 0 после тейкера, плацебо ≈ 0, |t| ≥ порога Бонферрони, плюс в ≥ 2 из 3 лет. + +| Метод | сделок | EV, б.п. | EV OOS | t (бутстрап) | плацебо, б.п. | рандом, б.п. | EV мейкер | Причина отказа | +|---|---|---|---|---|---|---|---|---| +| prod_mr_5m | 105089 | -4.46 | -5.19 | -7.65 | 0.0 | 0.0 | 2.54 | отрицательное матожидание после издержек; OOS тоже минус; плюс менее чем в 2 из 3 лет | +| clv_flow | 257017 | -9.88 | -12.24 | -4.15 | 0.0 | 0.0 | -2.88 | отрицательное матожидание после издержек; OOS тоже минус; плюс менее чем в 2 из 3 лет | +| pairs_btc_eth | 1944 | -13.22 | -9.81 | -5.85 | 0.0 | 0.0 | -6.22 | отрицательное матожидание после издержек; OOS тоже минус; плюс менее чем в 2 из 3 лет | +| intraday_momentum | 125771 | -13.8 | -9.2 | -7.35 | 0.0 | 0.0 | -6.8 | отрицательное матожидание после издержек; OOS тоже минус; плюс менее чем в 2 из 3 лет | +| xs_reversal_15m | 873500 | -14.29 | -14.31 | -29.1 | -16.69 | -16.26 | -7.29 | отрицательное матожидание после издержек; OOS тоже минус; плюс менее чем в 2 из 3 лет | +| xs_reversal_costaware | 873400 | -14.29 | -14.31 | -29.1 | 0.0 | 0.0 | -7.29 | отрицательное матожидание после издержек; OOS тоже минус; плюс менее чем в 2 из 3 лет | +| hour_xs_reversal | 291200 | -14.7 | -14.77 | -35.34 | 0.0 | 0.0 | -7.7 | отрицательное матожидание после издержек; OOS тоже минус; плюс менее чем в 2 из 3 лет | +| ou_ema_costaware | 1047089 | -14.74 | -13.66 | -19.88 | 0.0 | 0.0 | -7.74 | отрицательное матожидание после издержек; OOS тоже минус; плюс менее чем в 2 из 3 лет | +| ou_ema_revert | 1123903 | -14.84 | -13.81 | -21.05 | 0.0 | 0.0 | -7.84 | отрицательное матожидание после издержек; OOS тоже минус; плюс менее чем в 2 из 3 лет | +| lead_lag_btc | 2311277 | -15.64 | -15.67 | -31.17 | 0.0 | 0.0 | -8.64 | отрицательное матожидание после издержек; OOS тоже минус; плюс менее чем в 2 из 3 лет | +| liquidity_sweep | 1166054 | -15.85 | -16.0 | -34.55 | 0.0 | 0.0 | -8.85 | отрицательное матожидание после издержек; OOS тоже минус; плюс менее чем в 2 из 3 лет | +| vwap_revert | 2655400 | -16.42 | -16.35 | -28.62 | 0.0 | 0.0 | -9.42 | отрицательное матожидание после издержек; OOS тоже минус; плюс менее чем в 2 из 3 лет | +| vol_breakout | 738494 | -18.51 | -19.43 | -24.03 | 0.0 | 0.0 | -11.51 | отрицательное матожидание после издержек; OOS тоже минус; плюс менее чем в 2 из 3 лет | +| xs_momentum_15m | 873500 | -18.87 | -19.04 | -38.48 | 0.0 | 0.0 | -11.87 | отрицательное матожидание после издержек; OOS тоже минус; плюс менее чем в 2 из 3 лет | + +Методы перечислены вместе с контролем: плацебо — то же правило на сдвинутом вперёд сигнале, +рандом — случайные входы той же частоты. Совпадение EV метода с плацебо означает, что +измерялся дрейф рынка, а не правило. diff --git a/Результаты.md b/Результаты.md new file mode 100644 index 0000000..848f290 --- /dev/null +++ b/Результаты.md @@ -0,0 +1,50 @@ +# Результаты по методам + +Все цифры — после издержек (тейкер 0,11% на круг). `EV` — матожидание сделки в базисных пунктах, +`OOS` — то же на второй половине периода, `t` — блочный бутстрап по дням, `плацебо`/`рандом` — контроли. + +## Тейкер + +| Метод | сделок | EV, б.п. | OOS | t | плацебо | Sharpe | +|---|---|---|---|---|---|---| +| prod_mr_5m | 105089 | -4.46 | -5.19 | -7.65 | 0.0 | -5.64 | +| clv_flow | 257017 | -9.88 | -12.24 | -4.15 | 0.0 | -2.86 | +| pairs_btc_eth | 1944 | -13.22 | -9.81 | -5.85 | 0.0 | -4.85 | +| intraday_momentum | 125771 | -13.8 | -9.2 | -7.35 | 0.0 | -4.8 | +| xs_reversal_15m | 873500 | -14.29 | -14.31 | -29.1 | -16.69 | -20.44 | +| xs_reversal_costaware | 873400 | -14.29 | -14.31 | -29.1 | 0.0 | -20.43 | +| hour_xs_reversal | 291200 | -14.7 | -14.77 | -35.34 | 0.0 | -26.15 | +| ou_ema_costaware | 1047089 | -14.74 | -13.66 | -19.88 | 0.0 | -13.43 | +| ou_ema_revert | 1123903 | -14.84 | -13.81 | -21.05 | 0.0 | -14.46 | +| lead_lag_btc | 2311277 | -15.64 | -15.67 | -31.17 | 0.0 | -23.18 | +| liquidity_sweep | 1166054 | -15.85 | -16.0 | -34.55 | 0.0 | -25.57 | +| vwap_revert | 2655400 | -16.42 | -16.35 | -28.62 | 0.0 | -23.3 | +| vol_breakout | 738494 | -18.51 | -19.43 | -24.03 | 0.0 | -19.13 | +| xs_momentum_15m | 873500 | -18.87 | -19.04 | -38.48 | 0.0 | -27.0 | + +## Мейкер (тот же список правил, комиссия 0,04% на круг) + +| Метод | сделок | EV, б.п. | OOS | t | +|---|---|---|---|---| +| prod_mr_5m | 105089 | 2.54 | 1.81 | 4.31 | +| clv_flow | 257017 | -2.88 | -5.24 | -1.24 | +| pairs_btc_eth | 1944 | -6.22 | -2.81 | -2.67 | +| intraday_momentum | 125771 | -6.8 | -2.2 | -3.64 | +| xs_reversal_15m | 873500 | -7.29 | -7.31 | -14.85 | +| xs_reversal_costaware | 873400 | -7.29 | -7.31 | -14.85 | +| hour_xs_reversal | 291200 | -7.7 | -7.77 | -18.56 | +| ou_ema_costaware | 1047089 | -7.74 | -6.66 | -10.64 | +| ou_ema_revert | 1123903 | -7.84 | -6.81 | -11.5 | +| lead_lag_btc | 2311277 | -8.64 | -8.67 | -19.41 | +| liquidity_sweep | 1166054 | -8.85 | -9.0 | -21.45 | +| vwap_revert | 2655400 | -9.42 | -9.35 | -18.64 | +| vol_breakout | 738494 | -11.51 | -12.43 | -16.09 | +| xs_momentum_15m | 873500 | -11.87 | -12.04 | -24.21 | + +## Графики + +![Матожидание по методам](https://git.nikolashkin.ru/anatoly/crypto-screener-5m/raw/branch/main/charts/ev_by_method.png) + +![Кривая капитала лучшего метода](https://git.nikolashkin.ru/anatoly/crypto-screener-5m/raw/branch/main/charts/equity_best.png) + +![Распределение доходностей сделок](https://git.nikolashkin.ru/anatoly/crypto-screener-5m/raw/branch/main/charts/trade_hist.png) diff --git a/Словарь.md b/Словарь.md new file mode 100644 index 0000000..db10d76 --- /dev/null +++ b/Словарь.md @@ -0,0 +1,30 @@ +# Словарь терминов + +**Базисный пункт (б.п.)** — одна сотая процента. 100 б.п. = 1%. Комиссия 0,11% = 11 б.п. + +**Матожидание сделки (EV)** — средний результат одной сделки после издержек. Если отрицательное — +стратегия в среднем теряет деньги, сколько бы сделок ни было. + +**PF (profit factor)** — сумма прибылей / сумма убытков. Больше 1 — в плюсе. + +**OOS (out-of-sample)** — вторая половина периода, на которую правила «не смотрели». Показывает, +не подогнаны ли правила под прошлое. + +**t-статистика** — во сколько раз средний результат больше своего разброса. Для честных выводов +считаем бутстрапом по дням; порог для десятков проверок ≈ 3. + +**Плацебо-контроль** — то же правило, но сигнал сдвинут вперёд на горизонт удержания. Если результат +такой же, значит измерялось движение рынка, а не правило. + +**Рандом-контроль** — случайные входы той же частоты. Показывает, что даёт «нулевая» стратегия. + +**Sharpe** — доходность, делённая на разброс (по дневным результатам, приведена к году). + +**Просадка** — максимальное падение кривой капитала от предыдущего максимума. + +**Тейкер / мейкер** — тейкер берёт ликвидность (0,055% на Bybit, всегда исполняется), мейкер ставит +лимитную заявку (0,02%, но может не исполниться и выбирается неблагоприятно). + +**Квантиль / дециль** — доля вселенной: дециль 10% при 250 парах = 25 пар. + +**Слиппедж** — разница между ожидаемой ценой и фактической ценой исполнения. diff --git a/Суть.md b/Суть.md new file mode 100644 index 0000000..0e14c67 --- /dev/null +++ b/Суть.md @@ -0,0 +1,30 @@ +# Суть: что мы проверяли и чем всё кончилось + +## Коротко, простыми словами + +Мы взяли **250 криптовалютных пар** на бирже Bybit, скачали их **5-минутные свечи за два года** +(36,3 млн свечей) и проверили 14 стратегий: каждая сделка считалась с реальной комиссией +(0,11% за вход+выход) и проскальзыванием. Плюс отдельный прогон по мейкерским комиссиям (0,04%). + +**Итог: методов с плюсом после издержек — 0.** Лучший по матожиданию — `prod_mr_5m` +(-4.46 б.п. на сделку), и он тоже в минусе. + +## Почему так + +Средний ход 5-минутной свечи по этим парам — **25.81 б.п.** Комиссия за вход+выход — +**11 б.п.** То есть комиссия сопоставима с движением цены целиком. Чтобы стратегия на таком горизонте +зарабатывала, она должна «видеть» направление заметно лучше случайного: при цели и стопе по 0,2% +нужно угадывать **77,5%** сделок (расчёт в странице «Издержки»). Правила, которые такого перевеса не +имеют, уходят в минус ровно на величину издержек — это и видно в таблице результатов. + +## Что это значит практически + +* Это **не** «мы не нашли стратегию» в смысле «плохо искали»: тот же вывод даёт научная литература + (разобрано 133 источника в соседнем репозитории `anatoly/crypto-5m-research`): на 1–15 минутах + лучшие найденные сигналы дают 0,15–1,3 б.п. валового перевеса против 11 б.п. издержек. +* Рабочий вывод для заработка: на 5м сигнал обязан либо **резко снизить оборот** (входить редко, + только когда ожидаемое движение в разы больше издержек), либо **торговать мейкером**, либо + переходить на горизонт, где движение в разы больше комиссии. Первое и второе мы проверили + отдельными конфигурациями — результаты в «Результаты». +* Подтверждённая нашими прошлыми прогонами стратегия (дневной кросс-секционный momentum 14д/7д, + +242 б.п./нед) на 5-минутный горизонт **не переносится** — это разные эффекты.