Решил начать писать небольшие заметки по алгоритмической торговле и всему что с ней связано. Возможно, когда-нибудь расширю, склею и опубликую в виде книжки. Пока же это просто наброски заметок, сделанные на скорую руку.
Можно часто слышать от тех, кто торгует алгоритмически, да и просто систематически, такие понятия как «оверфиттинг», «курвафиттинг», «зафит» и прочие ругательства с корнем «фит». Что все это значит?
На самом деле, все эти слова, как правило, используются для описания одного и того же явления, являющегося врагом всех трейдеров, торгующих систематически и пытающихся оценить исторический перформанс своих торговых логик — а именно, что «живой» аут-оф-сампл перформанс на реальном счете, как правило, хуже ожиданий, полученных ими при проверке своих идей на истории. Например, при тестировании торговой логики на истории трейдер с помощью своей модели «зарабатывал» 30% годовых, а в реале может в среднем иметь 10% годовых. Разница 20% годовых — может объясняться именно оверфиттингом (если нет других факторов — например, некорректный учет комиссионных и проскальзываний, или ошибка в торговом коде; но прочие факторы легко устранить, в отличие от оверфиттинга). На картинке в начале статьи — пример перформанса некоторого фонда в бэктесте и в реальности, наглядно иллюстрирующий написанное выше.
Оверфиттинг является следствием комбинации одного или нескольких из следующих факторов, положительно влияющих на бэктест (результаты прогонки модели на истории), что и создает у трейдера завышенные ожидания от своей модели. В этой части мы рассмотрим основные источники оверфиттинга, в следующей — поговорим о способах избежания или минимизации оверфиттинга при историческом тестировании моделей.
Начнем с простых источников оверфиттинга, относительно легко устранимых или минимизируемых, если у вас есть некоторый опыт:
1. Forward-looking bias («ошибка заглядывания вперед») — в основном техническая проблема начинающих алготрейдеров, когда вы «подсматриваете» в бэктесте данные, которые недоступны вам в реальной торговле. Самый базовый вариант (который мне доводилось встречать в одном реальном бэктестере) — это когда предполагалось, что вы можете посмотреть на цену закрытия, просчитать по ней некоторый сигнал, и тут же по этой цене зайти. Несомненно, это «заглядывание» — потому что цена закрытия определяется одномоментно, и если вы ее увидели, то зайти по ней уже не сможете (да еще и предполагая, что перед этим вам еще нужно что-то посчитать, собрав цены закрытия по всем контрактам). Проблема относительно легко решается, если у вас есть некоторый опыт написания бэктестеров.
2. Curvefitting (a.k.a. курвафиттинг) — также простой и относительно легко минимизируемый для хорошего специалиста вид оверфиттинга, при котором из некоторого класса моделей выбирается такая модель (или параметры для нее), при которых модель отлично торговала на истории, вследствие чего equity curve модели имеет гладкий вид, близкий к прямой (или экспоненты, если бэктест рисуется с реинвестированием) — отсюда и название curvefitting — «вырисовывание линии эквити» с помощью параметров. Однако ничего общего с реальностью такой «закурвафиченный» бэктест не имеет — он отлично «торговал» на истории вследствие специфической комбинации выбранных параметров, отлично подходящих для существовавших тогда рыночных условий, однако в будущем таковые условия вряд ли повторятся, и результаты торговли будут хуже.
Если вы знаете английский — покурвафитить можно вот здесь: carma.newcastle.edu.au/backtest/. На графике слева «синеньким» будет рисоваться гипотетическая зафиченная всего 2-мя простыми параметрами (!!!, период удержвания и стоп лосс) эквити (зелененьким — график торгуемого инструмента), на графике справа — аут-оф-сампл перформанс. Сайт отлично демонстрирует концепцию курвафиттинга и почему не надо торговать закурвафиченные стратегии в реале =)
3. Survivorship bias (или «ошибка выжившего») — тоже серьезная проблема. Если приводить пример из жизни — проще всего этот байес описывается фразой «Эх, если бы я в 90-е делал то же самое, что делал Абрамович, то я бы сейчас...», при этом на месте многоточия говорящему представляются виллы, яхты и рыбки. Когда на самом деле, объективно, если бы он делал то же, что Абрамович в 90-е — то с вероятностью 98% на месте многоточия должны быть кресты, надгробия и могилки, без яхт и рыбок. Соответственно, survivorship bias — это когда вы для бэктеста берете живых абрамовичей, но забываете взять тех, которые сейчас покоятся на кладбище — а в 90-е все они были живы, и было заранее неизвестно, кто из них доживет до 2017-го. В принципе, survivorship bias является разновидностью selection bias'а, но более хитрой, поэтому и выделяется отдельно. Основное его проявление — это когда при создании базы данных для исторического тестирования забывают включить в нее данные об акциях, которые уже по разным причинам не торгуются. А причины могут быть самые плохие — включая банкротство и падение цены на 90+% в течение одного дня. Пример для российского рынка — ЮКОС (тикер YUKO). В свое время (до ареста Ходора) это была одна из голубых фишек российского рынка акций, вы бы наверняка торговали ей в то время. Но после известных событий акция долго падала в цене, пока наконец не делистнулась. Если вы забыли включить ее в свою базу акций — это пример survivorship bias'а. Если подобные акции отсутствуют в бэктесте (но, несомненно, будут присутствовать в реальной торговле) — результаты такого бэктеста получатся завышенными.
Более тяжелые источники оверфиттинга:
4. Hindsight bias (которую я бы литературно перевел на русский как «ошибка ясновидения») — пожалуй, самая тяжело устранимая проблема всех бэктестов, и одна из самых хитрых и опасных своей незаметностью для трейдеров, инвесторов и алготрейдеров. Именно вследствие нее вам всегда кажется, что деньги на рынке зарабатываются легко и непринужденно (в этом помогает реклама, сама агрессивно использующая hindsight bias и его собрата selection bias). При взгляде на графики акций и индексов вам же очевидно, что в начале нулевых вы бы купили Сбербанк и Роснефть (жаль, торговать начали позднее), а в 2008-м вы бы обязательно пошортили RIZ, откупив с плечом в 2009-м? Ну так вот — вы пали жертвой hindsight bias'а. Кажется, что его легко избежать при алгоритмической торговле (ведь все же делается по правилам — какое тут ясновидение?), однако это не так. У алгоритмистов hindsight bias выражается в отборе тех моделей, которые приемлемо работали на всей истории и доработали до настоящего времени (отсюда и hindsight — вы сразу «подсмотрели», что модели работали на всей истории). Однако в будущем часть этих моделей перестанет (по разным причинам) давать удовлетворительные результаты, а часть моделей, которая по дороге «сломалась», но которые вы бы ранее торговали до того, как они «сломались» — вы вообще не включили в бэктест из-за «ясновидения» (этот эффект можно еще отнести и к selection bias'у, о котором далее).
5. Selection bias («ошибка выбора») — это когда некто (разработчик моделей, инвестор или рекламщик) выбирает стратегии или активы, которые нужным образом перформили на истории (росли, или на которых хорошо работал некий алгоритм), и утверждает, что в будущем можно достичь аналогичных результатов, работая с этими активами. Эту ошибку можно встретить практически в каждом 2-м посте на СЛ, посвященном алготрейдингу, и на *каждом* сайте любого брокера:
1) Когда вас призывают покупать криптовалюты только на основании того, что за последние несколько лет они выросли на порядки — это selection bias. Говорящие неявно подразумевают, что в будущем криптовалюты продолжат расти с той же скоростью — но это невозможно чисто физически.
2) Когда вам (на сайте любого брокера внизу странички) показывают только растущие графики и говорят, что вот «можно было заработать 100500%, купив вот эти акции» — это selection bias. Брокер выбрал из всех акций выросшие сильнее всех и пиарит это как ожидаемый доход. Но это не ожидаемый доход. Это акции, которые скорее всего вы бы не купили в начале периода, на котором считается доходность.
3) в конце мая 2015-го трэш-УК Сбербанка «Сбербанк ассет менеджмент» запустила фонд «Биотехнологии», в котором фактически перепродавала лохамсвоим любимым клиентам етф IBB с доп. комиссией 2% годовых. Реклама у фонда была что-то вроде «самый динамичный сектор, выросший на 250% за последние 5 лет» (так оно и было, если посмотреть на график IBB до лета 2015-го). Что происходило с фондом потом — можно посмотреть на сайте или на скрине ниже. Ребята (и их инвесторы) пали типичной жертвой selection bias'а — выбрали то, что сильнее всего росло на истории. По иронии судьбы анализировали перформанс за 5 лет — то есть играли *против* известного квантам value factor'а (то, что сильнее всего росло за последние 5 лет — андерперформит, и наоборот). Итог: S&P с тех пор прибавил 160%, IBB — упал на 13%. Не позавидуешь лохаминвесторам.
4) регулярно нам рассказывают (например smart-lab.ru/blog/451309.php), как можно заработать на всяких сервисах автоследования, если выбрать вот эти 4 супер-стратегии, и собрать из них портфель. Когда слышите про «возьмите вот эти 3 акции», или «возьмите вот эти 4 супер-стратегии» на основании того, что они хорошо перформили какое-то последнее время, и составьте из них еще более суперский портфель — «в аут» (побуду немного Мовчаном). Это типичный hindsight bias, в жесткой форме, вам продают «Фонд биотехнологий» на том основании, что он хорошо вырос за последние 5 лет. Вы можете и сами в этом убедиться, открыв топ стратегий комона по годам (https://www.comon.ru/info/codex/?id=94).
Вот список топов 16-го года на срочном рынке:
А вот список топов 17-го года:
Нашли хоть одно пересечение? Вот именно. И за другие годы то же самое! А если вы откроете почти любую стратегию из списка ТОПов 2016-го года и посмотрите, как они перформили в 2017-м — получите почти сплошной сливандос. Я предлагал автору оптимальных портфелей из стратегий комон помочь сделать анализ правильно, без selection & hindsight bias'ов — но он не пожелал этим заняться. Видимо, сам он понимает исход этой затеи.
6. Изменение внешних параметров (правила работы биржи, макроэкономические и геополитические параметры) — пожалуй, наиболее сложная причина, практически вообще не поддающаяся минимизации overfitting risk'а. Проблема из названия, думаю, ясна — на рынках меняютя «правила игры», что приводит модели в неработоспособность. Примеры:
1) stock decimilization (это когда в начале нулевых стоки стали котироваться в центах, а не в долях), что убило не только большую часть маркет-мейкерского бизнеса (за счет существенного сокращения спрэдов), но и некоторые технические стратегии (еще в 90-е дневные тренды на СнП работали, в нулевые — уже нет).
2) Политика околонулевых процентных ставок. Она привела к «вымиранию» большинства стратегий типа «кэрри» в бондах и валютах (потому что это самое «кэрри» практически обнулилось, а соответствующие риски никуда не делись), а также ряда других.
3) Появление мощных алго-фондов, HFT-трейдинга — также привело к «изменению правил игры», любые неэффективности быстрее устраняются, многие «классические» стратегии стали работать хуже или вообще перестали работать.
Надеюсь, текст получился полезным, буду рад услышать комментарии / замечания / дополнения.
единственно, что же всё-таки значит «работает»
это уроборос получается. либо мы что-то делаем мучаемся посерёдке и сравниваем в конце какие-то результаты. либо мы случайно рекомбинируем параметры просто сравниваем в конце какие-то результаты и всё.
чем принципиально сравнение помесячно отличается от сравнения в конце.
а так, идея повыбирать те факторы, которые влияют на результат из помесячных перестроений — это круто. но вот только не понятно, как оценивать результат. «какой критерий работает» — что это значит? мне кажется это и есть самое важное знание. а уж где рекомбинировать (перестраивать) портфель, в самом начале или каждый месяц — это детали.
А так — не вижу смысла полемизировать. Могу только сделать прогноз, что если рынок в этом году будет примерно в нулях, как и в прошлом — 40+% на публикуемых супер-портфелях мы не увидим, потому что эти портфели hindsight bias'нуты.
Другое дело, что судя по индексу стратегий комона их ожидаемый ретурн — в районе 0, поэтому навряд ли любой «оптимальный портфель» как угодно собранный будет иметь сильно лучшую доходность.
Еще один вариант — если есть доступ не только к эквити, но и к позициям — можно считать ковариацию по позициям, это в принципе даже сильно точнее, чем по ретурнам.
www.howtotrade.ru/nw/index.php?p=1296937244
Что касается комона, то в ликвидных фьючерсах мне уверенность придаёт наличие такого автора, как El-Primero, хотя в портфель он не попал именно из-за сильной корреляции с оптимальным портфелем. Зато его эквити 2014-2016 мне понятна: это же примерно Суперриск Форума. Значит можно независимо находить закономерности и зарабатывать на них.
А смысл в работе такой, что можно будет понять, насколько «честный» перформанс в среднем хуже тех нереалистичных цифр, которые получаются выбором наилучших стратегий на некотором промежутке и анализом перформанса на нем же.
А то, что комон «не был раскручен» — вовсе не означает, что среднее качество стратегий с тех пор выросло. Я бы сказал, что оно в среднем не изменилось и осталось нулевым. Вон и индекс всех стратегий комона на главной это подтверждает.
1. Доходность/просадка.
2. Корреляция эквити с натуральным рядом.
www.comon.ru/user/zhenya1991/strategy/detail/?id=7259
Но автоследование выключено по причине наличия акций, запрещеных для автоследования в силу низкой ликвидности. Соответственно в кандидатах не была.
Вы же вроде имеете какое-то отношение к комону — объясните там людям, что нормальные инвесторы с таким шлаком работать никогда не будут?
www.comon.ru/user/Robostock/strategy/detail/?id=1345
Она была в качестве «кандидата», но несмотря на 97% доходности в 2017-м в мой портфель не попала. Потому что, как я уже писал, цель моей оптимизации не максимизация доходности.
Вы же делали прекрасную вещь — кластеризацию состояний рынка. Я бы отсюда плясать начал.
Хороший пост, плюсанул. Всё перечисленное — это самые элементарные ошибки, забуряясь дальше и дальше, даже при отсутствии очевидных логических проколов продолжает наблюдаться примерно то же самое — посчитали одно, в реале получили другое ) Ищем ошибки — да не, вроде правильно всё посчитали, а имеем что имеем. Случайность штука такая )
Это всё другими методами борется, и что самое смешное, перцы со штангенциркулями, ну или другими измерительными приборами, отлично это знают, не рокет саенс
Zweroboi, а что вы такого писали за что вам стоит платить?)
не нашёл ничего на столько интересного и полезного, хотя про пени любопытно
Круть! давно не читал такого на смартлабе, ради таких постов и стоит тут сидеть)
ждём ещё постов от вас
спасибо
в топ
ок.
допустим у нас есть два массива — массив цен за всё время
и массив доходностей посделочно или помесячно, как угодно.
для N стратегий.
и стоит задача отобрать лучшую для работы в будущем. это возможно? по каким критериям?
я так понимаю, если упростить весь текст, то проблема в том, что большинство сравнивают только несколько цифр, доходность и просадка за всё время и разные производные за всё время.
а надо как-то выбирать оптимум на основе сравнения каждого периода? и допустим давать каждой стратегии +1 за каждый выигранный период.
а затем брать ту, у которой больше ++? но чем это будет отличаться от сравнения финрезов в конце?
Дело в том, что в изменениях цен существуют некоторые параметры, по которым локально можно рассчитывать точки разворота. А далее фокус в том, что накурвафиченные эти параметры меняются достаточно медленно (или резко, но редко). Это позволяет 'увидеть разворот' и он подтвердится с вероятностью существенно большей 0,5.
P.S. Кстати, частоту рекалибровки система тоже может рекалибровать =)
Хорошие, толковые статьи. Много полезного. За это и спасибо.
Но вот реклама Пурнова на фоне статей — эт пиндец какойто....