Bitcoin
Обучение

Бэктесты и подгонка

Ранее подобного не писал, и подобное не редко спрашивают. В этом вопросе полно нюансов и всё описать в одной статье не получится - не влезет :) Поэтому решил описать только самое важное и самое рабочее. Что такое подгонка (оверфиттинг), как оно ведёт к сливу, и как можно с этим бороться. Сначала определимся с проблемой.

Переобученность

Называют эту проблему разными словами. Увы, ссылки на любые ресурсы не позволяют давать правила поведения TradingView, поэтому будет опять Википедия (которую почему-то можно). На русском:

ru.wikipedia.org/wiki/Переобучение

Называют это словами:
- переобученность
- переобучение
- (излишняя) подгонка
- переподгонка
- оверфиттинг (англицизм)

Это всё как бы синонимы.

Суть проблемы

Допустим мы ищем закономерности движения цены (и верим что они есть, потому что мы наивные дураки) на паре биткойн/доллар на дневном таймфрейме (или на любой другой паре и таймфрейме). Легко можно разбить каждую дневную свечку по дням недели, например. Тогда в любом случае свечи понедельника по доходности будут отличаться от свечек других дней недели. По чисто случайным причинам. То есть цена чаще или больше будет расти в какой-то день недели. Допустим, в понедельник.

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

Кроме дней недели может быть то угодно. Например, пересечение двух скользящих средних. Для любой пары и таймфрейма всегда можно подобрать прибыльную комбинацию длин двух скользящих средних. Но это будет скорее всего лишь случайным совпадением опять. Теперь о том как с этой бедой бороться вообще. А методов несколько.

Способ 1: понятная причина

К примеру, мы подобрали бэктестом что очень прибыльно торговать пересечение скользящих средних с длинной 17 и 88. А почему? И у нас никакого ответа почему так. Почему цена должна расти при пересечении 17 и 88? - И не малейшей идеи почему так. Это плохой вариант тогда.

Причина почему цена изменит направление должна быть понятно. Да даже если неверно понято, то это уже лучше чем ничего. Вот хороший пример: "Если цена на 10% от цены открытия дня, то это слишком много и вероятность что цена будет корректироваться вверх, ближе к средней больше чем 50%". Ну или можно даже так сказать: "трейдеры увидят что цена упала слишком уж резко и сильно и будут откупать". То есть хорошо если хоть какое-то объяснение есть. Даже если неверное оно, хорошо если есть :) Ведь если торгуется стратегия без понимания причин - то Вы лудоманией занимаетесь.

Способ 2: стандартные параметры

Есть некие стандартные параметры, и хорошо бы использовать их. Например, для скользящих средних это обычно:
- 5
- 10
- 20
- 50
- 100
- 200
- 500
- 1000

То есть, хорошо бы пробовать только их. То есть непробуем длину 40 или 55 вообще. Пофиг если бэктест дает хорошие результаты на длине 55, игнорируем.

Исключение тут составит дневной таймфрейм, где хорошо и часто работают 7-кратные периоды, делимые на 7 без остатка. То есть 7, 14, 21, 28 - из-за того что в неделе 7 дней. Только для круглосуточных рынков (то есть для акций не годится). Так же для дневного ТФ есть смысл ставить 30 тоже исходя из логике в месяце около 30 дней - и это тоже только для круглосуточных рынков.

Способ 3: близкие параметры

К примеру, в стратегии если какой-то параметр, назовем его "длина канала", например :) Если мы ставим 5, то видим отличный результат на бэктесте, ставим 4 и результат чуть похуже, но хороший весьма. Ставим 6 - результат тоже чуть похуже чем 5, но тоже хороший. Вот это отличный вариант. То есть 5 является некой "золотой серединой", а близкие похожие параметры дают результат чуть хуже. А не гораздо хуже и не слив.

А вот плохой пример: та же стратегия с длиной в 15 даёт отличный результат, но с длиной в 14 уже полный слив и быстро, а с длиной в 16 очень низкая доходность, в разы меньше чем с 15. Это уже признак того что хорошие результаты с длиной 15 это лишь случайное совпадение. Так как результаты с близкими похожими параметрами гораздо хуже и сильно отличаются.

К примеру, более практичный пример: для MultiMA длина средней 3 хороший выбор, так как почти всегда с длиной 2 и 4 результаты обычно не сильно хуже и тоже плюсовые. А вот если поставить длину 20 и найти пару где это профитно, то с длиной 18 или 22 очень часто будет просто слив :) Так что 20 тут просто совпадение будет.

Способ 4: близкие пары

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

Тогда возникает вопрос с какими парами сравнивать. Не нужно надеяться что рабочая на акциях Газпрома стратегия будет так же хорошо работать на пар Доге/биткойн. А почему? А потому что цены двигают люди (роботов тоже создают люди, и люди двигают цены в том числе и роботами). А люди разные, и причины их поведения и решений разные. То есть люди, которые торгуют акции Газпрома отличаются от людей, которые торгуют доге.

Как это можно представить? Допустим трейдер закрыл позицию по доге, и открыл позицию на другой паре. Какова вероятность что он откроет новую позицию на эфире? И какого вероятность что он откроет новую позицию по гос.облигациях Гондураса? :) То есть более вероятно человек откроет следующую позицию на какой-то похожей паре. Тот же класс активов, та же примерно капитализация (и чаще всего та же биржа).

Проще говоря, торговая стратегия в прогнозировании пытается вычислить некое среднее поведение среднего лудомана :) А лудоманы на акциях Газпрома и лудоманы на доге - отличаются. И среднее поведение у этих двух групп лудоманов будут сильно отличаться. Вот почему профитная стратегия на паре Газпром/доллар скорее всего будет убыточной на паре доге/биткойн. Верно и обратное.

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

Вот почему, прибыльная в будущем стратегии должна быть менее профитной на близких параметрах и на близких парах. Менее профитная, но профитная.

Способ 5: шорты

Если Вы не хотите шортить вообще (часто это тоже разумное решение), то Вы зря не обращаете внимание насколько хорошо шортит стратегия. Это тоже полезная подсказка. Если Вы хотите торговать только в длинную, то всё равно выгоднее брать такую стратегию, которая профитно шортит тоже. Даже если Вы шортить не будете. То есть если стратегия сильно теряет на шорте и хорошо плюсует на лонге, то остается большая вероятность что стратегия просто тестируется на хорошо растущем рынке, а это опять совпадение.

Шорт чаще всего менее выгоден вообще. Поэтому не надо искать стратегию где профит с шорта большой и сопоставимый с профитом от лонга. Вполне достаточно если профит от шорта вообще есть, пусть он и в 10 раз меньше - это уже хорошо.

Резюме

Очень маловероятно что такая стратегия окажется нерабочей в будущем, если она удовлетворяет сразу всем следующим критериями:

1) На похожих близких парах она тоже прибыльна, пусть и хуже работает
2) На похожих близких параметрах тоже прибыльно, хоть и хуже работает
3) Используются стандартные или хотя бы логичные параметры (хотя бы круглые числа, типа длина 50 это лучше чем длина 58)
4) Имеется понимание почему цена должна расти или падать после события-сигнала
5) У стратегии шорт тоже прибыльный

Эти меры позволят исключить большую часть просто подогнанных стратегий, которые в будущем окажутся не рабочими.
Technical Indicators

Мои профили:

Отказ от ответственности