grepan
grepan личный блог
23 ноября 2021, 13:43

Трезво оцениваем полезность системы Backtest’а

Я нахожусь в процессе тестирования на промышленных данных тех моделей, которые я разработал с помощью системы Backtest’а.


В основе системы лежит open-source библиотека Zipline, разработанная стартапом Quantopian, но не поддерживаемая где-то с апреля этого года, когда этот стартап приказал долго жить.


В библиотеке допилена возможность онлайн-закачки данных с источников (финам, mfd, YF), достаточно просто  в алгоритме указать, какие тикеры нужны за какой период, и данные будут в нужном виде скачаны и преобразованы. А также допилена возможность работать с минутным таймфреймом.


Поскольку библиотека реализована на Python, то в пайплайн алгоритма можно вставить любые методы обработки и анализа данных, включая библиотеки машинного и глубокого обучения, сразу в одном ноутбуке и скачав данные, и обучив модели, и проведя бэктест алгоритма, что дико удобно.


В принципе, проверена даже техническая возможность повторить портал Quantopian, добавив на какой-либо сайт возможность работы с ноутбуком Zipline, расшаривая (при желании) для других пользователей на форуме либо полный скрипт пользовательского алгоритма, либо его результаты (таблицы и графики).


Бэктест для меня незаменим не только при разработке торгового алгоритма (поиск точек входа и выхода), но и что не менее важно, для поиска методов сопровождения сделок и методов управления капиталом и риском. Здесь уже кто-то писал про важность этих моментов, я присоединяюсь двумя руками.


Результат алгоритмов сильно меняется при изменении подходов: работаем в обе стороны, или только лонг/шорт, есть ли нет стоп-лосса (фиксированного или трейлинг-стопа), фиксированный ли профит или нет, есть ли докупки или частичное закрытие позы и так далее.


Например, я хорошо увеличил производительность алгоритмов, еще на этапе бэктеста разделив независимое отслеживание длинных и коротких позиций (то есть в некоторых моих алгоритмах могут одновременно существовать открытые короткие и длинные позы).


Мои алгоритмы сейчас базируются на минутках. И при повторе их на реальных данных, есть различия между позициями бэктеста и позициями на реальных данных. Например, за вчерашний день:


Бэктест дал 24 сделки, с общим результатом 1613 единиц.


OPEN 198 2021-11-22 07:42:00+00:00
CLOSE  2021-11-22 08:18:00+00:00 profit= 46.0
OPEN 199 2021-11-22 09:00:00+00:00
CLOSE  2021-11-22 09:15:00+00:00 profit= 90.0
OPEN 200 2021-11-22 10:15:00+00:00
CLOSE  2021-11-22 10:18:00+00:00 profit= 71.0
OPEN 201 2021-11-22 11:37:00+00:00
CLOSE  2021-11-22 11:38:00+00:00 profit= 60.0
OPEN 202 2021-11-22 11:41:00+00:00
CLOSE  2021-11-22 11:42:00+00:00 profit= 112.0
OPEN 203 2021-11-22 12:15:00+00:00
CLOSE  2021-11-22 12:27:00+00:00 profit= 45.0
OPEN 204 2021-11-22 12:29:00+00:00
CLOSE  2021-11-22 13:01:00+00:00 profit= 31.0
OPEN 205 2021-11-22 13:06:00+00:00
CLOSE  2021-11-22 13:09:00+00:00 profit= 39.0
OPEN 206 2021-11-22 13:20:00+00:00
CLOSE  2021-11-22 13:38:00+00:00 profit= 44.0
OPEN 207 2021-11-22 13:45:00+00:00
CLOSE  2021-11-22 13:56:00+00:00 profit= 103.0
OPEN 208 2021-11-22 14:11:00+00:00
CLOSE  2021-11-22 14:13:00+00:00 profit= 98.0
OPEN 209 2021-11-22 14:35:00+00:00
CLOSE     2021-11-22 14:39:00+00:00 profit= 67.0
OPEN 210  2021-11-22 16:09:00+00:00
CLOSE     2021-11-22 16:13:00+00:00 profit= 96.0
OPEN 211  2021-11-22 16:21:00+00:00
CLOSE     2021-11-22 16:22:00+00:00 profit= 54.0
OPEN 212  2021-11-22 16:29:00+00:00
CLOSE     2021-11-22 16:30:00+00:00 profit= 64.0
OPEN 213  2021-11-22 16:32:00+00:00
CLOSE     2021-11-22 16:33:00+00:00 profit= 129.0
OPEN 214  2021-11-22 16:45:00+00:00
CLOSE     2021-11-22 16:48:00+00:00 profit= 36.0
OPEN 215  2021-11-22 17:13:00+00:00
CLOSE     2021-11-22 17:21:00+00:00 profit= 189.0
OPEN 216  2021-11-22 18:18:00+00:00
CLOSE     2021-11-22 18:21:00+00:00 profit= 31.0
OPEN 217  2021-11-22 18:21:00+00:00
CLOSE     2021-11-22 18:22:00+00:00 profit= 45.0
OPEN 218  2021-11-22 18:25:00+00:00
CLOSE     2021-11-22 18:30:00+00:00 profit= 63.0
OPEN 219  2021-11-22 19:10:00+00:00
CLOSE     2021-11-22 19:47:00+00:00 profit= 32.0
OPEN 220  2021-11-22 19:50:00+00:00
CLOSE     2021-11-22 19:56:00+00:00 profit= 38.0
OPEN 221  2021-11-22 21:30:00+00:00
CLOSE     2021-11-22 21:40:00+00:00 profit= 30.0

На продуктиве (торговля одним лотом) же сделок было всего 5, с результатом 213 единиц:


2021.11.22 12:17:54 OPEN
2021.11.22 12:38:21 OPEN
2021.11.22 12:58:39 CLOSE profit=41
2021.11.22 14:54:17 CLOSE profit=32
2021.11.22 18:25:35 OPEN
2021.11.22 19:11:22 OPEN
2021.11.22 19:17:47 OPEN
2021.11.22 20:16:35 CLOSE profit=49
2021.11.22 20:24:34 CLOSE profit=45
2021.11.22 21:12:16 CLOSE profit=46


В процессе анализа разницы, я понял для себя некоторые моменты, которыми хочу поделиться, и прошу поправить, если я ошибаюсь:
1. На бэктесте цена закрытия минутки может являться ценой ASK или BID, в зависимости от направления последней сделки в минутной свече. На продуктиве, ожидая профита, мониторится своя часть стакана, в зависимости от направления открытой позиции. Таким образом, какая-то часть котировок из минутных свечей нам будет вообще недоступна для работы. Возможно, эту ситуацию можно сгладить, если выставлять лимитные ордера, но это пока не для моего текущего алгоритма.
2. Разница дискретности анализа данных: на бэктесте анализируется каждая минутная свеча, на проде анализируется стакан на возможность как открыть позицию, так и закрыть ее с необходимым профитом. Даже если перейти на анализ продуктивных данных каждую минуту, вряд ли получишь данные, эквивалентные бэктесту из-за пункта 1. Соответственно, профит и убытки на проде меньше (быстрее реагируем).
3. Близкий к идеальному бэктест – это система, анализирующая стакан (даже не тики), а возможно еще одновременно и ленту сделок.
4. Но даже наличие простого бэктеста на минутках, позволяет оценить профит-фактор алгоритма, заложив негативное проскальзывание на среднюю ширину между лучшими BID и ASK стакана.


Можете что дополнить или скорректировать?
37 Комментариев
  • bohemian rhapsody
    23 ноября 2021, 14:05
    Поосторожней с иностранными словами! Backtest можно перевести и как тест жопы ;)

    Пользуйтесь русскими аналогами: тест (на) истории или открытая библиотека )))
  • Replikant_mih
    23 ноября 2021, 14:13
    Что-что, а нумерация у вас крутая).

    Согласен, на питоне удобно ещё и тем, что ты расстоянии вытянутой руки от всех дата-саенс библиотек и от всего машинного обучения. Иногда скучаю по такой доступности.


  • ves2010
    23 ноября 2021, 14:19
    1 тебе нужна средняя сделка> 3...5*(спред + комисс) тогда можно не выносить мозг ерундой
    2 надо 10000 сделок чтоб собрать достоверную статистику
  • bohemian rhapsody
    23 ноября 2021, 15:02
    А если серьезно, то «история не повторяется, а если и повторяется, то не в пользу трейдера».

    На анализе исторических данных можно увидеть лишь статистические закономерности, типа " Рынок чаще находится в боковике" или «Ри падает быстрее и сильнее, чем растет» и оценить их количественно.

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

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