У меня на срочном рынке работает автомат: собирает данные, считает целевой портфель, сам ставит ордера через API брокера и вечером сверяет позиции со счётом. На прошлой неделе он двое суток держал не тот портфель, который должен был. И заработал на этом 69 762 ₽.
Сразу оговорюсь, чтобы не было разночтений с прошлым постом: речь про счёт в песочнице брокера. Ордера, маржа, роллирование и экспирация там настоящие, деньги виртуальные. Реальный счёт у меня отдельный и маленький, он тут ни при чём.
Дальше — про экспирацию. Не в смысле «не забудьте дату в календаре», а в смысле «она ломает ровно те места, где вы её не ждёте».
Что произошло
Портфель рыночно-нейтральный: несколько длинных позиций против нескольких коротких. Отдельную позицию дальше называю ногой, так короче.
Одна из коротких ног — по инструменту с квартальной серией контрактов.
25 августа. Ликвидность переехала на следующий контракт. Активный контракт я выбираю по максимуму дневного объёма, и он честно переключился. Проблема в том, что переключился за день до последнего торгового дня старого. Объём мигрирует когда мигрирует, а не когда мне удобно.
В алготрейдинге около года, пришёл из другой сферы, где исследование начинается
с протокола: что проверяем, каким способом и какое решение принимаем по каждому
результату — всё это ДО того, как посмотрели на данные. В трейдинге меня удивило,
что здесь так почти никто не делает: сначала перебирают параметры, потом решают,
что считать успехом.
Выложил в открытый доступ то, чем сам проверяю систематическую стратегию перед
тем, как пустить её на реальные деньги:
github.com/andreyvarakin/quant-validation
Это не библиотека и не грааль. Половина содержимого давно и лучше сделана
в arch, quantstats, pypbo, backtesting.py — в README так и написано: в продакшн
берите их. Ценность в другом: в порядке процедур и в том, что каждая метрика
откалибрована.
Четыре вещи, ради которых писалось.
1. Отбор не должен видеть проверку. Если параметр выбран по всей истории, а
потом на ней же и показан — это не результат, а описание прошлого. В коде
параметр выбирается только на прошлом и применяется вперёд, без исключений.