Торговый робот должен (условно) удовлетворять следующим условиям:
Безусловно, эти требования ничего не гарантируют, хоть и несколько увеличивают доверие к потенциальным возможностям робота.
По поводу важности количества сделок можно наблюдать единодушие. Вроде, чем больше, тем лучше (одна из причин, почему алготрейдинг и скальпинг ходят рядом).
Поэтому при настройке ТС стараются задавать либо абсолютное минимальное количество сделок, либо удельное (на единицу времени). Это позволяет сразу выкидывать из рассмотрения пусть и неплохие на неискушенный взгляд, но менее стат. значимые результаты. Заодно уводя эвристические алгоритмы оптимизации в нужном направлении.
Казалось бы, много сделок — неплохо. Проходит OOS — хорошо. Запускать на реал? Большинство так и поступает.
Однако, можно наделить сделки некими свойствами (числовые значения) и посмотреть, сколь близки они друг к другу. Если окажется, что несущественная часть сделок сильно отличается по свойствам от остальных, то на такие сделки налагается ярлык неблагонадежности. И несмотря на их хороший положительный вклад в общий результат, ищется фильтр для их отсева.
Что же может служить свойством сделки? Это могут быть любые числовые показатели на момент открытия сделки. Любые — все, что можете придумать и посчитать. Да, это странно звучит, но при наличии только сделок другой подход исключен. Может быть заранее подготовленный набор таких свойств для создания на их основе проверки гипотезы стат. значимости.
Правда, авторам роботов, как правило, значительно легче, если робот основывается не на машинному обучении. Т.е. тогда, когда робот не представляет из себя BlackBox.
Сигнал на совершение сделки — это некая алгоритмическая комбинация значений индикаторов. Индикаторы — более общее понятие, чем нарисованные на графике линии. Главное, что автор торгового алгоритма в курсе, какие индикаторы он использует и какова логика их комбинирования для конечного решения.
Поэтому свойствами сделок могут выступать значения (с или без нормализации) самих этих индикаторов.
Каждая сделка обладает набором свойств, что геометрически представимо в виде точки многомерного пространства. Представьте сферу минимального радиуса, которая включает в себя все такие точки. Так вот сделки-изгои — это такие точки, при выбросе которых радиус такой сферы значительно уменьшается.
500 сделок. Общая картина великолепна. Зададим каждой сделке свойство в виде значения средней — EMA. Получаем, что для 90% сделок EMA находится в интервале [5; 7], а для 10% — [12; 20]. Общая сфера [5; 20] — диаметр 15. Но если выкинуть 10%, то сфера сужается до [5; 7] — диаметр 2.
Это существенное изменение размера сферы, поэтому пытаемся избавляться от подобных сделок: если на момент принятия решения о совершении сделки EMA выходит за пределы узкой сферы, не совершаем сделку. Т.е. создаем фильтр.
Именно отсутствие учета таких залетных сделок заметно увеличивает вероятность поймать существенные убытки в реальной торговле. Заметьте, что они могут показывать очень хорошие результаты на бэктестах, проходить OOS, но от этого их рисковая составляющая не уменьшается.
Может оказаться, что сделки можно разделить на несколько узких сфер — задача классификации. В таком случае ТС представляется, как случайно получившийся портфель из более простых ТС. И каждый такой кирпич рассматривается далее отдельно.
Сделки-отщепенцы бэктестов — это не кирпичи ТС.
В критерий оптимизации желательно добавлять фильтр подобной стат. значимости сделок, который выдавал бы результат только на основе сделок после фильтра. Т.е. фильтрация встраивается в сам критерий, а не задается отдельно, как часть ТС.
Безусловно, тема уменьшения выборки ради повышения стат. значимости должна быть давно изъезжена в статьях соответствующей тематики. Поэтому дефицита в алгоритмах отбора «близких по духу» точек в пространстве не должно наблюдаться.
Должна получиться подобная картинка из сделок. Здесь видны сделки-изгои и кирпичи ТС.
Если начать анализировать сделки портфеля из разношерстных ТС, то при должной сноровке должны быть видны кластеры каждой из входящих ТС.
Но пост о том, что желательно выкидывать сделки-отщепенцы.
А-ля н вход подали 1000 прогонов IS, выбрали 10% лучших, их прогнали на OOS, выбрали 10% лучших. В таком варианте IS+OOS будет не сильно лучше IS only.
Ну какие? PF ну так понятно, что для части сделок он будет отрицательным и хорошо бы их убрать. Сделки с большой просадкой, их тоже хотелось бы порезать, но когда их начнем фильтровать, то затронем и благонадежный кластер.
Имхо, интересным вариантом видится развитие сделки во времени. У нас есть некая ветвь, где критичные отклонения нам надо подрезать на ходу.
Поэтому желательно брать что-то, что было на момент открытия сделки. Да, это с огромной вероятностью заденет хорошие сделки, ошибочно указав на них. Но это research, а не готовый рецепт.
Что касается research, то занимаюсь сейчас тем же самым. Идея: сделать бенчмарк сделки, остальные трейды оценивать относительно него. Если какие то сделки ушли ниже допуска, то их стопарить.
Типа ушла ветка, с течением времени, что ж надо ее остановить.
«Алгоритмизированный SL» — интересная тема. Не занимался.
Моя же идея другая, что отношение MFE/MAE мы можем задать в качестве бенчмарка во времени для данного ряда сделок. И если сделка с течением времени выходит за определенную функцию (см. график — красная линия) мы такую сделку стопим.
Привязка ко времени — это нужно запоминать ряд для каждой сделки. Дороговато по ресурсам, если оптить.
Кстати, тут ML упоминалось как минус в данном контексте (если на нем сама стратегия), но вот чтобы искать расстояния — по факту задача кластеризации и поиск аутлаеров — как раз для ML задача.
fxsaber, Типа прогнали набор значений — выкинули аутлаеры — оценили?
На счет скорости не помню, вроде есть модели, которые при новой точки с нуля кластеризуют, а есть которые при новой точке её просто мапят на систему координат.
Вообще как выкидывание отличающихся можно рассматривать как вариант улучшить то что есть, можно так же, вероятно, рассматривать некоторую меру наличия и влияния аутлаеров как меру робастности. В общем ещё одна метрик оцени стратегии (ну как PF, RF и прочие).
Уже готовый сет не очень интересно исследовать, хоть и полезно. Больше интересует встраивание в критерий оптимизации, тогда более красивые (высокий PF и т.д.) будут проигрывать менее красивым. Но у вторых изгоев будет меньше.
Может применяться на любых продающихся роботах (в Тестере работают бесплатно), но сам использую только на своих.
либо в базисе этого принципа ошибка?
кажись понял ответ
имею в виду, вот выбрал индикаторы всё такое, а если в этом выборе ошибка, по какому принципу всё это выбирается?
спасибо, и за тему
здорово бы как нить упоминуть как проще найти инструменты для анализа данных, как задавать принцип отсева для сделок, как данные в этот анализ заливать — связанное с использованием этих инструментов, либо ссылку названий на них, документация должна же быть
открытый код на эти инструменты?
понял, сразу не проверил, посмотрю
Классификация есть, но нет разбиения на простые ТС. Их результаты зависят от общих параметров всей ТС.
Также, думаю, что в общем случае неверно выбрасывать:
Представим вход по ЕМА и удержание до трейлинг-стопа, который ниже ЕМА на сколько-то. Часто он достигается быстро (например, намеренными шпильками) и сделки получаются кучные по исходам. Но иногда шпилек не делают, и трейд получается длинным и большим по результату. Выбрасывать его не стоит.
Выброс нетипичных результатов сделок и их наборов рассматривал в блоге в нескольких записях. Лучше там смотреть на эту тему. Здесь о другом.
Если комиссия отрицательна (рибейт на крипте) — тогда да, оптимальный торговый алго должен колбасить, как не в себя...
С уважением
1. Для его нахождения требуется что-то вроде модели рынка и весьма сложная аналитика
2. Подобрать оптимум методом тыка — вообще без шанса...
С уважением