Andrey Varakin
Andrey Varakin личный блог
Вчера в 20:47

Как я проверяю, что стратегия не подогнана: протокол из 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, демо-стратегия написана
специально для пакета. Стратегия торгуется, и раздавать её я не собираюсь.
Оценивать предлагаю процедуру вокруг неё, её как раз видно целиком.

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

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
11 Комментариев
  • Задача трех тел
    Вчера в 21:18
    Мудрено, солидно!
    Не нашел ничего про период тестирования, ну или некоторые говорят про минимальное количество сделок в тесте.
    Еще есть критерий стабильности системы вне зависимости от параметров и от инструментов.
    Что со средней сделкой? И т.д.

    В общем, у меня другой подход.
  • Андрей К
    Вчера в 22:05
    уменьшаем книгу с 5 млн до 250 тыс 

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

     

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

  • Андрей К
    Вчера в 22:07
    Буду рад, если разберёте по косточкам.
    че тут разбирать ) очень сложно читать, ИИ стопудово написал, не?

    еще и адреса такого нет ( github.com/andreyvarakin
  • kolinkor
    Сегодня в 03:28
    Читать не возможно. А тема вечная, но от этого не менее интересная

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн