Переподгонку торгового алгоритма принято связывать со сложностью модели, в частности, с числом параметров. Но есть, вероятно, более разумный способ ее оценить.
Зачем люди растят сложность и переобучают модели? Чтобы избавиться от лосей. Вот была простая, условно пробойная, система, которая забирала все крупные движения рынка, но за компанию ловила много лосей:
Кому-то это не понравилось, и он решил навесить на нее кучу фильтров. Профитов конечно изрядно поубавилось, но лосей стало еще меньше:
Вроде все хорошо: винрейт подрос, эквити сгладилось. Но возникает вопрос: почему трендовая (вроде как) модель ничего не делает на участках рынка с большими трендами?
Результат выглядит лучше, только если мы считаем ошибками модели лишь ее лоси (ложноположительные результаты, или ошибки 1-го рода). Но, глядя на улучшенную форму эквити, мы не замечаем ложноотрицательных результатов (ошибок 2-го рода), или упущенных профитов.
Они сразу бросились бы в глаза, если бы наши данные были размечены, как в машинном обучении, и тогда пропуск тренда считался бы такой же (на самом деле — еще более дорогой, ведь у трендовых систем всегда большие профиты и мелкие лоси) ошибкой, как и стоп-лосс. И мы бы увидели, что добились роста
precision (винрейта) при сильной потере
recall (число взятых профитов). Или, в терминах матрицы ошибок, подняли
специфичность (способность различать лоси, или ошибки 1-го рода) за счет падения
чувствительности (способности не упускать профиты, что является ошибкой 2-го рода). Что, вероятно, говорит о переобучении, потому что если трендовая модель не берет тренды, то, скорее всего, она потеряла обобщающую способность.
Такой подход мог бы помочь выявить, что не все сложные модели являются переобученными (и не все простые — эффективными). Было бы интересно проверить им, например,
модели Майтрейда))
Но это ничего не меняет. Модель все равно будет брать какой-то % лосей от общего числа. И какой-то % профитов. И ее можно будет оценивать по этим критериям.
P.S. — с индикаторами (строящие модель) естественно удобнее и быстрее.
Упование на то, участков типа (А) будет больше чем (В). Или «тренды» с углом 45 встретятся чаще «трендов» под 10 градусов. Или волатильность сохранится на уровне (n) в будущем. итд.
а не надо все время быть в рынке — энто просто экономически не выгодно..
— шортить в капиталистической России под такие проценты — энто забесплатно кормить своего брокера...
1. С точки зрения метрик качества модели, в трейдинге можно забить на ложно отрицательные. Тем на рынке дофига, рынков дофига, всего дофига, умеешь хорошо говорить «вот щас точно оно», даже если мимо вагонами пролетают упущенные возможности — этого более чем достаточно для заработка.
2. Ложно отрицательные как мера робастности и переподгонги. Идея интересная, но не думаю, что там что-то есть. Детали раскрывать не буду).
2. Против секретных аргументов у меня есть только секретные контраргументы, так что я тоже не буду их раскрывать! :)))
На самом деле пару раз замечал, как стратегия не берет прям забористые тренды из-за дурацкого фильтра. Думал, что сделать. Менял фильтр так, чтобы брало. И вуаля — на других участках тоже становилось сильно лучше!
Eth_algotrader,
1. Робастность модели и метрики качества (обычно это трейдерские — PF, winrate и т.д.) на бою, на OOS или где угодно — для меня это две разные вещи. Метрики качества — по сути это метрики в моменте, а робастность — про то, с какой вероятностью ты такие метрики сможешь в будущем увидеть :).
2. Технично обсудили)).
«Пару раз замечал» обычно путь к подгонке. Ну вернее стриггерить рисёч можно и «пару разами», но понимать что работает, что нет — через рисёч, ну или хотя бы расширить «пару раз» до большего кол-ва раз.
Пару раз это и есть пару рисерчей, а не пару случаев. Потому что каждый такой раз состоял из >1000 наблюдений (сделок).
А вот использование того, что принято называть фильтрами при проектировании систем я так и не смог приспособить к делу. Когда-то даже воспроизвел с очень высокой точностью фильтры А.Г. с его активной помощью. Но и им применения не нашел.
Но в любом случае надо диверсифицироваться конечно.
А мерить систему по соотношению ошибок первого и второго рода стоит, если после применения фильтров она по-прежнему берёт ВСЕ тренды, определённые ею без фильтров. Только меньшую долю тренда.
Так ведь это может случаться как раз потому, что система упускает слишком много трендов :) (делает ошибка 2 рода)
Но ведь если она по прежнему берет ВСЕ тренды, то и ошибок 2го рода нет. А уменьшение взятой величины тренда надо как-то иначе мерить…
1. Изначально система берёт тренды при всех параметрах из какой-то сплошной области. Далее вы сужаете область, выделяя прибыльную зону. Тут все ошибки 1-го и 2-го рода считаются зафиксированными, присущими системе.
2. Дальнейшие манипуляции с фильтрами ведутся внутри этой зоны только таким образом, чтобы новых ошибок 2-го рода не возникало. По возможности такого результата делается вывод о применимости фильтра с его областью параметров.
Обычная ситуация — это возможно, приобретаете больший процент выигрышных сделок, но теряете в средней величине сделки, а их произведение увеличивается.
Это же невозможно. Вы в любом случае упустите часть профитов при включении фильтров. И, если бы этого не происходило, тогда вместо вашей формулы «приобретаете больший процент выигрышных сделок, но теряете в средней величине сделки» было бы «приобретаете больший процент выигрышных сделок, и большую величину средней сделки».
Раз речь ведёте о трендах, то можно представить картину: при применении т. н. 'фильтра' часть убыточных без фильтра заходов в тренд становятся слабо прибыточными, а прибыточные без фильтра с фильтром уменьшаются в размерах из-за ухудшившихся входов и выходов.
Средняя по прибыльным уменьшается, средняя по убыточным несколько увеличивается. Общая средняя снижается. Доля прибыльных растёт. Сумма прибыльных минус сумма убыточных несколько возрастает.