Эта статья — разбор нашей собственной ошибки. Она прожила в поиске аналогов несколько месяцев, её нашли, измерили и починили. Ниже — как она выглядела, почему возникла и какими числами мы её закрыли.
Симптом
Совпадение с похожестью 88 процентов. Общий рисунок движения повторяет образец. А последние десять свечей идут в противоположную сторону: у образца концовка вверх, у найденного окна — вниз.
Формально алгоритм прав: похожесть действительно высокая. По существу такое совпадение вредно. Если смотреть на аналог, чтобы понять текущую ситуацию, то именно концовка — то место, где ситуация сейчас и находится.
Почему так получается
Причина арифметическая и довольно скучная.
Расстояние DTW — это сумма расхождений вдоль всего пути, поделённая на длину образца. Каждая свеча вносит одинаковый вклад. Образец из пятидесяти свечей, расхождение на последних десяти — это пятая часть суммы, и она усредняется с сорока свечами, где всё совпадает.
Мы это измерили напрямую. Если взять кандидата и подменить его хвост на идеально совпадающий с образцом, общая похожесть вырастет всего на 0.3–5.3 пункта в зависимости от случая. То есть полностью противоположная концовка стоит кандидату около полутора пунктов из ста.
Полтора пункта не отсекаются ничем. Кандидат с похожестью 88 и вывернутым хвостом проходит любой порог, который пропускает кандидата с похожестью 90 и правильным хвостом.
Почему прежние фильтры не ловили
В конвейере уже был фильтр по амплитуде: общее движение окна должно отличаться от общего движения образца не больше чем на десять процентов относительно.
Он не помогает. Фильтр смотрит на размах от первой свечи к последней, то есть на итог. Окно может прийти к тому же итогу другим путём — например, вырасти сильнее образца в середине и отдать часть роста в конце. Итог совпал, концовка противоположная, фильтр пропустил.
Ни один из остальных фильтров не смотрит на форму финала отдельно. Это и была дыра.
Как измеряли
Чтобы не чинить на ощупь, собрали выборку: 24 окна на трёх инструментах — двенадцать на BTC/USDT 4H, шесть на EUR/USD 4H, шесть на AAPL 1D. Метод сравнения по ценам, порог похожести 80, длина образца 50 свечей, горизонт будущего 10 свечей.
Прогон дал 624 совпадения. Дальше для каждого считали изменение последних десяти свечей — отдельно у образца и у кандидата.
| Показатель | Значение |
|---|---|
| Совпадений всего | 624 |
| Знаки концовок противоположны | 115 |
| Из них обе концовки выраженные | 82 |
| Из них разрыв больше 5 п.п. | 5 |
Сто пятнадцать случаев из шестисот двадцати четырёх — это восемнадцать процентов выдачи, где концовка кандидата смотрит не туда. Пять случаев — грубые, там расхождение концовок превышает пять процентных пунктов.
Правило
Отбрасывать всё, где знаки концовок разошлись, нельзя: на форексе движение за десять свечей часто меньше половины процента, и знак там определяется шумом. Поэтому правило требует совпадения трёх условий сразу.
Первое. Знаки изменения последних десяти свечей у образца и у кандидата противоположны.
Второе. Обе концовки выраженные. «Выраженная» определяется через тот же порог значимого движения, который сайт использует для оценки исходов, пересчитанный на длину концовки: десять свечей из пятидесяти — пятая часть порога.
Третье. Разрыв между концовками больше трёх процентных пунктов.
Есть и четвёртое, отдельное: если у самого образца концовка невыраженная, правило вообще не применяется. Судить кандидатов по направлению, которого у образца нет, — способ отрезать половину выдачи ни за что.
Почему именно три пункта
Порог выбирали не на глаз. Развёртка по той же выборке:
| Порог, п.п. | Режет из 82 | Грубых из 5 |
|---|---|---|
| 1.0 | 27 | 5 |
| 2.0 | 21 | 5 |
| 3.0 | 16 | 5 |
| 4.0 | 9 | 5 |
| 5.0 | 5 | 5 |
Все пять грубых случаев ловятся при любом пороге до пяти включительно. Дальше вопрос в том, сколько средних случаев забирать вместе с ними. Три пункта добавляют к пяти грубым одиннадцать средних и оставляют в покое шестьдесят шесть пограничных, где расхождение уже сопоставимо с шумом концовки. Значения 1.0 и 2.0 начинают резать то, что на глаз похоже.
Что изменилось
| До | После | |
|---|---|---|
| Совпадений | 624 | 608 |
| Пустых окон | 3 из 24 | 3 из 24 |
Отсеклось шестнадцать совпадений из восьмисот двадцати подпадающих под проверку — меньше трёх процентов выдачи. Все пять грубых случаев внутри. Ни одно окно не осталось без результата из-за нового правила: как было три пустых из двадцати четырёх, так и осталось.
По инструментам картина разная:
| Инструмент | Совпадений | Отсечено |
|---|---|---|
| BTC/USDT 4H | 144 | 9 |
| AAPL 1D | 20 | 7 |
| EUR/USD 4H | 460 | 0 |
На форексе правило не сработало ни разу, и это ожидаемо. Движение за десять четырёхчасовых свечей по EUR/USD редко доходит до половины процента, а порог значимости там соответственно низкий — разрыв в три процентных пункта на таком инструменте почти не встречается. Подгонять пороги под форекс мы не стали: правило и не должно там срабатывать.
Чего правило не делает
Оно смотрит только на направление концовки, но не на её форму. Кандидат, у которого концовка идёт в ту же сторону, но вдвое круче, проходит.
Это осознанное ограничение. Форма концовки — отдельная задача, и браться за неё без такого же замера мы не будем.
Зачем мы это публикуем
Потому что цифры про собственные промахи полезнее обещаний точности. Метод, у которого нет известных слабых мест, — это метод, который плохо измеряли.
Полный протокол замера с константами и способом отката лежит в репозитории проекта. Здесь — его содержательная часть.