В первой части я написал, что сканер находит на 10–60 минутах идеи с результатом «+0,2–0,5% за сделку после комиссий». Это была ошибка. Здесь проверка одного вопроса: несёт ли отбор сканера хоть какую-то информацию о будущем.
Данные: 11 монет, спот и фьючерсы Bybit, Binance, MEXC, снимки каждые 0,1 с, 5–19 октября. Исполнение: задержка 800 мс, худшая цена, комиссия тейкера (на фьючерсах 0,10–0,11% за круг). Интервалы — 95%, кластерный бутстреп (сделки одной монеты в одном окне времени зависимы).
Проверка 1. Неделя на бумаге
761 сделка автопилота, 12–19 октября. Сканер обещал в среднем +0,22% на сделку. Получилось −0,054% [−0,126; +0,018], итог −46,6 $.
Убыток по одной неделе не доказан: ноль внутри интервала. А вот обещание опровергнуто.
Откуда был плюс до комиссий: корреляция результата сделки с движением остальных 10 монет за то же время — 0,875 (R² = 0,77). Неделя падала, шорты дали +0,16% [+0,02; +0,30], лонги около нуля. Остаток после вычета рынка: −0,044% [−0,083; −0,008]. То есть автопилот на деле ставил на направление рынка, а 10–20 одновременных позиций по коррелированным монетам были одной ставкой.
Проверка 2. Нулевой тест
Ту же историю режу на минутные блоки и перемешиваю. Внутри минуты всё реальное, зависимостей между минутами нет. Затем гоняю тот же сканер: 11 монет × 4 таймфрейма × 5 перемешиваний.
«Подтверждено» по старому правилу: на реальной истории 3 на 44 прогона, на перемешанной 19 на 220. Разница не значима (p ≈ 0,5). Фильтр «прибыль на подборе, на проверке и в каждой её половине, уверенность ≥ 90%» пропускает шум так же, как рынок.
Проверка 3. Walk-forward
9 срезов, раз в сутки. Сканер видит историю только до среза, его выбор торгуется следующие 24 часа.
• Связь «обещано → получено»: Спирмен −0,045 [−0,13; +0,03] по 1299 идеям. • Отобранные идеи: −0,068% [−0,14; +0,01]. Отвергнутые: −0,118% [−0,14; −0,10]. • Портфель как у автопилота: до комиссий +0,002% [−0,08; +0,08], после −0,098% [−0,18; −0,02]. • Торговать наоборот не помогает: −70 $ против −67 $. Отбор не вредный, он пустой.
Что изменил
Подтверждение теперь требует значимости по всему скану (FDR 10%). На тех же данных: реальная история — 0 подтверждений из 298 проверенных идей, шум — 0, 0 и 0 (было 1, 7 и 2). Плюс лимит в три позиции в одну сторону и разложение итога каждой сделки на «рынок» и «отбор».
Важная оговорка: при ~300 тестах и 20–40 сделках на идею тест видит только эффекты от ~0,5% на сделку. Ноль подтверждений означает, что сильных эффектов нет. Слабые этим тестом не опровергнуты.
Что осталось
Одно место, где реальные данные отличаются от шума: импульс на 10 минутах. Кандидаты нашлись на 6 монетах из 11 против 9 из 55 на шуме, p ≈ 0,02 с поправкой на число таймфреймов. Вперёд он пока не доказан: +0,06% [−0,17; +0,30] по 84 сделкам.
Ограничения: одна неделя живых данных на падающем рынке; срезы walk-forward перекрываются; перемешивание разрушает кластеризацию волатильности, поэтому ноль не идеальный; глубина стакана не учитывалась.
Вывод, который я бы применил к любой системе: прогоните свой отбор на перемешанной истории. Если «грааль» находится там так же часто, как на рынке, его нет.
Полигон, на котором всё это считается, с открытыми результатами автопилота (убытки тоже): spreadlab.tech/?utm_source=smartlab&utm_medium=post&utm_campaign=part2
Вопрос к тем, кто делает нулевые тесты для внутридневных систем: как вы сохраняете кластеризацию волатильности в нулевом ряде?
*Не инвестиционная рекомендация. Торговля криптовалютой связана с риском потери средств.*Еще по теме:
Подпишитесь на нашу рассылку, чтобы получать уведомления о новых обновлениях, информации, скидках и т. д.