Как мы проверяли сами себя

Эта страница — не про очередную версию бота. Она про то, как мы поймали себя на том, что сам способ отбирать версии был устроен неправильно, и что мы с этим сделали.

Инверсия, которая всё запустила

Лестница версий строилась привычным способом: берём идею, проверяем на истории, если на двух независимых половинах истории она выглядит лучше предыдущей версии — принимаем и двигаемся дальше. Так родились восемь версий подряд, каждая якобы лучше прошлой.

Тревогу забило простое наблюдение: чем больше слоёв правил накапливалось в конструкции, тем красивее становилась картина на истории — и тем хуже результат на по-настоящему новых, ранее не считанных данных. Самой плюсовой на форварде осталась не самая продвинутая версия, а первая и самая простая. Получалась инверсия: обучение делало конструкцию лучше на экзамене, для которого она готовилась, и хуже везде за его пределами.

Диагноз: гейт пропускал шум

Первым делом мы перестали доверять самому правилу отбора и проверили его напрямую. Взяли тысячу случайных, ничего не значащих правил — придуманных условий входа и выхода, которые заведомо не несут смысла — и прогнали их через тот же гейт «лучше предыдущей версии на обеих половинах истории». Результат неприятный: такой гейт пропускает случайное правило в четверти-трети случаев, даже если проверяешь единственного кандидата. А если, как это и происходило на практике, перебирать несколько идей и публиковать только ту, что прошла проверку, — пропускает почти всегда, в 94–98% случаев. Формальное «прошло на обеих половинах» само по себе почти ничего не доказывало: при таком переборе шум почти гарантированно найдёт способ выглядеть как эдж.

Слепая матрица: разобрать лестницу на детали

Раз гейт не годится как единственная защита, решили проверять иначе — вслепую и по частям. Всю лестницу версий разложили на восемь независимых смысловых компонентов: форма якоря входа, правило тейка, несколько вето (по ширине стартовой свечи, по тренду, по пятнице, по перегретому фандингу), срез окна входа и правило продления позиции. Каждый компонент прогнали отдельно, не в связке с остальными — чтобы понять, что реально работает, а что просто едет рядом с работающим соседом и получает часть чужой славы.

Историю разбили на три отрезка: обучающий и первый проверочный были открыты сразу, а второй проверочный отрезок запечатали. Перед тем как его вскрыть, по каждому компоненту записали предсказание — будет вклад плюсовым, минусовым или нулевым, и примерно какой величины — и зафиксировали эти предсказания в системе контроля версий, чтобы вскрытие нельзя было тихо подогнать под то, что хочется увидеть. Заодно в матрицу добавили один заведомо бессмысленный компонент — отрицательный контроль — просто чтобы проверить, не находит ли процедура эффект даже там, где его точно нет. Не нашла: контроль дал шум, как и должен был, это подтвердило, что порог чувствительности матрицы разумный.

Когда отрезок вскрыли, картина оказалась куда менее лестной, чем хотелось: из восьми частей лестницы чисто и однозначно выжила всего одна — правило тейка. Ещё одна часть выжила условно. Три оказались мёртвыми. Одна — ядро версии, которая в тот момент реально торговала реальными деньгами, — получила отрицательный результат. Две части оказались балластом: не помогали и не вредили, а числились полезными только потому, что ехали рядом с чем-то, что действительно работало.

Возражение про ось монет

Здесь в дело вступило важное возражение. До этого момента «независимой проверкой» правила считалось: прогнать его на монетах, которые не участвовали в первоначальном выводе правила. Логика на первый взгляд разумная — не подглядывай в тест, готовясь к тесту. Но было указано на изъян: монета, которая вообще не откликается на открытие нью-йоркской сессии, — не честный тест механизма, построенного на нью-йоркском потоке. Это не «непройденный экзамен», это экзамен по другому предмету. Если правило умирает именно там, где ему нечем работать по смыслу самой идеи, это не опровержение идеи.

Чтобы проверить это возражение, а не просто согласиться с ним на слово, построили отдельную, независимую ось. Взяли все проверенные монеты и разложили их по тому, насколько сильно они откликаются на открытие Нью-Йорка — чисто по поведению цены: насколько сильнее обычного часа двигается монета именно в этот час, насколько её движение в этот час похоже на движение биткоина, какая доля дневного объёма приходится на нью-йоркские часы. Всё это посчитано только по свечам, без единого взгляда на результаты какой-либо сделки — так, чтобы классификация не могла подогнаться под то, что мы уже знаем о выигрышах и проигрышах.

Результат разошёлся с интуицией. Монеты, на которых изначально выводили правила, сами оказались смешанной группой — часть из них слабо связана с нью-йоркским потоком. А часть монет, которые формально никогда не участвовали в выводе правил, оказались одними из самых связанных с Нью-Йорком во всей выборке — связаны сильнее, чем половина «родных» монет. Ось «видел ли алгоритм эту монету при калибровке» и ось «влияет ли на эту монету нью-йоркское открытие» — это оказались две разные оси, и вторая, как и утверждало возражение, точнее объясняет, где правило должно работать, а где нет.

Пересмотр

Когда лестницу компонентов перепроверили именно по оси связанности с Нью-Йорком, а не по оси «видел/не видел», два вывода перевернулись.

Компонент, который выглядел мёртвым — эдж монотонно затухал в ноль по мере проверки, — оказался живым везде, где вообще есть смысл его проверять: всё затухание создавали монеты без связи с нью-йоркским потоком, а на связанных монетах компонент держит устойчивый плюс без всякого падения. Хоронить его за то, что он не работает там, где ему нечем работать, было ошибкой самой процедуры проверки, а не честным приговором самой идее.

Обратный случай — компонент, который раньше выглядел рабочим (в том числе на смешанной группе монет, где он и торговал реальными деньгами), на связанных с Нью-Йорком монетах оказался устойчиво убыточным. Хуже того: плюс он показывал ровно на несвязанных монетах — там, где, по собственной логике этого правила, никакого эффекта быть не должно. Знак оказался развёрнут в точности наоборот от механизма, который правило якобы использовало. Прежний плюс был артефактом смешанного состава группы монет, на которой его когда-то заметили, а не свойством самого механизма.

Отдельно, той же честной лестничной проверкой — по очереди вырезая каждую минуту окна входа, а не только ту одну, которую когда-то сочли особенной, — закрыли ещё одну находку. На обучающей половине истории она и правда выглядела особенной. На независимой половине эффект падал точно до нуля, а самой заметной оказывалась совсем другая, ничем не примечательная минута. Это тоже был выбор самой крайней ступеньки лестницы на обучающей выборке, а не устойчивое свойство.

Предсказания и промах

Весь этот пересмотр велся с тем же правилом, что и первая слепая матрица: предсказание — до вскрытия, письменно, зафиксировано так, чтобы его нельзя было незаметно поправить задним числом. Из четырёх предсказаний по знаку эффекта на запечатанном отрезке все четыре совпали с фактом. Но был и честно зафиксированный промах: первая попытка собрать несколько выживших частей в одну сборку и предсказать её совместный результат — не сработала, факт оказался заметно слабее предсказанного, части не сложились аддитивно так, как ожидалось. Этот промах не спрятан — именно из-за него вторая, более осторожная попытка сборки делала предсказание куда скромнее, а не повторяла оптимизм первой.

Итог: кандидат, а не победа

Из этого пересмотра собрали новую версию — не потому что она «побеждает» в привычном смысле, а потому что она собрана только из частей, прошедших слепую проверку, на вселенной монет, для которой у механизма вообще есть физический смысл. Её результат на запечатанном отрезке — плюс, но тонкий, на грани, а не с запасом. На новых, по-настоящему форвардных данных за первые недели — тоже плюс, тоже скромный. Это не повод сразу переключать реальные деньги: слишком мало сделок, слишком тонкий запас, чтобы быть уверенными, что это не очередная версия шума, которая просто ещё не успела развернуться. Подробный разбор этой версии — в лестнице стратегии.

Реальный счёт сейчас продолжает работать на прежней, боевой версии — она собрана в основном из компонентов, которые эта же проверка признала мёртвыми, вредными или балластом. Это неприятное сочетание фактов: у живой версии, которая торгует деньгами прямо сейчас, за спиной больше отвергнутых частей, чем у новой кандидатской сборки. Но и доказанного превосходства новой сборки нет — её плюс слишком тонкий и слишком свежий, чтобы служить основанием для переключения реальных денег. Решение о переключении остаётся открытым и осознанно не принимается на основании одного тонкого плюса.

Тот же вопрос, заданный фильтрам

Слепую проверку компонентов лестницы довели до конца и задали тот же вопрос не только новым идеям, но и фильтрам, которые годами стояли в самой боевой конструкции и должны были отсеивать слабые сделки. Проверка была прямой: сравнить, что фильтр реально вычёркивает, со случайным отсевом такой же доли сделок на данных, ни разу не участвовавших в выводе его порога. Оказалось, что каждый проверенный фильтр систематически находил и убирал сделки лучше среднего, а не хуже — они не защищали конструкцию, а вредили ей. Это не решение по красивой кривой и не выбор между двумя оценками: фильтры сняли сразу, как только вред подтвердился. Подробности — в карточке V16 в лестнице стратегии.