В алготрейдинге около года, пришёл из другой сферы, где исследование начинается
с протокола: что проверяем, каким способом и какое решение принимаем по каждому
результату — всё это ДО того, как посмотрели на данные. В трейдинге меня удивило,
что здесь так почти никто не делает: сначала перебирают параметры, потом решают,
что считать успехом.
Выложил в открытый доступ то, чем сам проверяю систематическую стратегию перед
тем, как пустить её на реальные деньги:
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, демо-стратегия написана
специально для пакета. Стратегия торгуется, и раздавать её я не собираюсь.
Оценивать предлагаю процедуру вокруг неё, её как раз видно целиком.
Буду рад, если разберёте по косточкам.
Не нашел ничего про период тестирования, ну или некоторые говорят про минимальное количество сделок в тесте.
Еще есть критерий стабильности системы вне зависимости от параметров и от инструментов.
Что со средней сделкой? И т.д.
В общем, у меня другой подход.
чего за книга такая? ) ИИ видимо написал неподумав
в амерской старой литературе так называли стакан заявок )
еще и адреса такого нет ( github.com/andreyvarakin