Блог им. AndreyVarakin

Как я проверяю, что стратегия не подогнана: протокол из 14 процедур, код открыт

В алготрейдинге около года, пришёл из другой сферы, где исследование начинается
с протокола: что проверяем, каким способом и какое решение принимаем по каждому
результату — всё это ДО того, как посмотрели на данные. В трейдинге меня удивило,
что здесь так почти никто не делает: сначала перебирают параметры, потом решают,
что считать успехом.

Выложил в открытый доступ то, чем сам проверяю систематическую стратегию перед
тем, как пустить её на реальные деньги:
github.com/andreyvarakin/quant-validation

Это не библиотека и не грааль. Половина содержимого давно и лучше сделана
в arch, quantstats, pypbo, backtesting.py — в README так и написано: в продакшн
берите их. Ценность в другом: в порядке процедур и в том, что каждая метрика
откалибрована.

Четыре вещи, ради которых писалось.

1. Отбор не должен видеть проверку. Если параметр выбран по всей истории, а
потом на ней же и показан — это не результат, а описание прошлого. В коде
параметр выбирается только на прошлом и применяется вперёд, без исключений.

2. Метрика модели — не результат счёта. Это самое недооценённое. В демо видно
прямо: уменьшаем книгу с 5 млн до 250 тыс — и доля позиций, округлённых
в НОЛЬ целыми лотами, растёт с 0.8% до 7.6%. То есть торгуется уже не тот
портфель, который посчитан, при том же самом сигнале. Туда же задержка
исполнения, издержки и лимит ликвидности.

3. Метрику надо калибровать, а не только считать. Любимое. Есть показатель
вероятности переподгонки (PBO). Само число не значит ничего, пока не известно,
что эта же процедура выдаёт в заведомо известных случаях. Поэтому она гоняется
ещё на двух контрольных наборах: где эдж специально уничтожен и где
«разные» конфигурации на самом деле клоны одной. В демо рабочая сетка даёт
4.6% против примерно 80% на убитом эдже. Без этих двух реперов число не
читается — а в готовых пакетах их нет, там показатель считают и на этом
останавливаются.

4. Просадка и потеря денег — разные вопросы. «Яма 20% от пика» на выросшем
счёте может не означать потери ни рубля. Считаю то, что реально интересует:
минимум эквити относительно СТАРТА. И отдельно проверяю, не досталась ли
наблюдённая просадка везением порядка сделок — в демо её перцентиль 81, то
есть путь был удачный, и планировать по нему нельзя.

Плюс отдельная секция, где аппарат обязан МОЛЧАТЬ: тот же набор процедур
прогоняется на рынке, где предсказуемость не заложена вообще. Точечный Sharpe
там может выйти каким угодно — важно, что p-value отказывается его подтверждать.
Если ваш тестер на таком рынке рисует прибыль, дело не в рынке.

Свой код проверял тем же способом, что и стратегию, — вторым независимым
источником. Те же ряды прогнаны через сторонние библиотеки в отдельном
окружении: Sharpe, профит-фактор, просадка и Deflated Sharpe совпали
с quantstats и pypbo до нуля, бутстрап и PBO — в пределах 1–4%.

Запускается на голом numpy + pandas, данные генерируются, ключей и интернета
не нужно: pip install -r requirements.txt, python run_demo.py. 47 тестов
написаны на инварианты, а не на золотые числа: лимит ликвидности не смотрит
в сегодняшний объём, повторная обработка того же дня не удваивает
реализованный P&L, сбой чтения позиций не закрывает книгу в учёте. Последние
два написаны по следам собственных аварий.

Сразу отвечу на главный вопрос: сигнала, параметров и состава корзины там нет
и не будет — инструменты называются INSTRUMENT_A…E, демо-стратегия написана
специально для пакета. Стратегия торгуется, и раздавать её я не собираюсь.
Оценивать предлагаю процедуру вокруг неё, её как раз видно целиком.

Буду рад, если разберёте по косточкам.

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
614 | ★2
10 комментариев
Мудрено, солидно!
Не нашел ничего про период тестирования, ну или некоторые говорят про минимальное количество сделок в тесте.
Еще есть критерий стабильности системы вне зависимости от параметров и от инструментов.
Что со средней сделкой? И т.д.

В общем, у меня другой подход.
Задача трех тел, 


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

Стабильность по параметрам есть — сетка чувствительности, где двигаешь по одному
параметру за раз, плюс walk-forward. Он заодно показывает, часто ли вообще меняется
выбранный параметр: если каждое окно новый оптимум, это уже ответ. По инструментам
смотрю вклад каждой ноги в итог, когда всё держится на одной — видно сразу.

Период теста в демо 900 дней: отбор на 250, проверка на следующих 60, шаг 60.
Получается 10 непересекающихся кусков OOS, склеенных в один ряд. Параметр за эти 10
окон сменился 5 раз — само по себе диагноз. PBO режет ту же
историю на 16 блоков по 56 дней и перебирает все 12 870 способов поделить её пополам.

Но walk-forward без длинной истории не
собирается в принципе, так что снизу оно упирается само.

А что за подход у вас? Правда интересно, чем стабильность меряете.

уменьшаем книгу с 5 млн до 250 тыс 

чего за книга такая? ) ИИ видимо написал неподумав

 

в амерской старой литературе так называли стакан заявок )

Андрей К, 

Ну так-то вы говорите про order book, другое значение слова)

В посте про то, что при уменьшении портфеля с 5 млн до 250 тыс часть позиций округляется целыми лотами в ноль, и торгуется уже
не то, что посчитано. И под книгой подразумевается торговый портфель

Буду рад, если разберёте по косточкам.
че тут разбирать ) очень сложно читать, ИИ стопудово написал, не?

еще и адреса такого нет ( github.com/andreyvarakin
Андрей К, это очевиднейший нейрослоп. Скидывают такое через анонимные аккаунты, зареганные несколько дней назад, видимо, чтобы просто посмеятся с реакций.
Андрей К, 

Адрес верный, дело не в нём. GitHub зафлажил мой аккаунт целиком: профиль и оба репозитория отдают 404 всем, кроме меня. Аккаунту неделя, захожу через VPN. Апелляция подана, как снимут напишу здесь же.

Читать не возможно. А тема вечная, но от этого не менее интересная
avatar
«Валидировать — не мешки ворочать» ©
avatar
Привязка к начальной стоимости портфеля, имхо, блажь, которую используют инфоцыгане, чтобы объявить, что у них нет убытков. 
Многие будут плеваться, но я считаю эквити в лог. масштабе и использую в качестве базовой меры отношение среднегодовой доходности к среднеквадратическому дроудауну расчитанному по всей эквити относительно предшествующего ДД максимума. С натяжкой — индекс язвы 
(ulcer). 
Методологически мне не нравится в Вашем подходе то, что смешиваются какие-то базовые вещи частностями типа лотности. То, что можно учесть отдельно, как поправку. Биржа этой лотностью вовсю елозит.
Ну и главное, если я занимаюсь оптимизацией, то лукфорварды и оценки вне интервала подгонки в принципе несостоятельны. 
Дополнительно к этому — нестационарность исходных данных. Ну очевидно же, что QQQ в кризис доткомов и вне кризиса доткомов — просто разные ряды. Либо вы догоняетесь переключателями режимов, что само есть злая подгонка или рукоблудие, или желаете невозможного. 

avatar

Читайте на SMART-LAB:
Как платить налоги с паев ЗПИФ
Сколько налога вы платите с регулярного дохода по паям Доход по паям приходит уже за вычетом налога. Разберём, сколько именно и по какой...
Фото
Три уровня защиты в OsEngine.
В этой статье поговорим про три уровня защиты данных пользователей в OsEngine без маркетинговых сказок про «абсолютную безопасность»....
Фото
XAU/USD: быки возвращают золоту его былой блеск
Золото завершило длительную консолидацию, заметно прибавив в цене. Рынок начал быстро убирать из цены сценарий дальнейшего ужесточения ФРС,...
Фото
Портовый срез #8: НМТП отгружает нефть, разворот в контейнерах и ставках
Порты России вместо привычной сверхмаржи и дохода для инвесторов стали мишенью для БПЛА противника. Перестали ли из-за этого они быть...

теги блога Andrey Varakin

....все тэги



UPDONW
Новый дизайн