Блог им. grepan
Я нахожусь в процессе тестирования на промышленных данных тех моделей, которые я разработал с помощью системы 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 стакана.
Пользуйтесь русскими аналогами: тест (на) истории или открытая библиотека )))
Согласен, на питоне удобно ещё и тем, что ты расстоянии вытянутой руки от всех дата-саенс библиотек и от всего машинного обучения. Иногда скучаю по такой доступности.
2 надо 10000 сделок чтоб собрать достоверную статистику
На анализе исторических данных можно увидеть лишь статистические закономерности, типа " Рынок чаще находится в боковике" или «Ри падает быстрее и сильнее, чем растет» и оценить их количественно.
Могу дополнить: ваши лимитные ордера выставленные по стакану в бэктесте (я уже не говорю по свечам), в реалтайме могут повлиять на волатильность стакана. Например если в бэктесте стоит на асках 10 уровней по 10 лот, а вам надо 100 лот, то в бэктесте вы получите позицию по 10-и бестаскам, а в реале могут а) лимитом не дать и уйти б) маркетом протащить на худшие цены в) при большом вашем объеме вас запомнить и наказать позже. Т.е. фактически используя «систему», и одновременно находясь внутри нее вы на самом деле на нее влияете, что разумеется не отражается ни в каких линейных тестах. Это просто надо понимать и пытаться учитывать.
www.youtube.com/watch?v=0ZHypIAxYNo
Презентация, по которой сделано видео:
github.com/sstoikov/microprice/blob/master/Microprice%20-%20Big%20Data%20Conference.ipynb
Вот таких конкретных обсуждений здесь на сайте и ждешь, а их практически не осталось — все «объемы» общения ушли в юмор, ЗОЖ, разные бытовые вопросы и пр. и т.п.
По сути статьи: на мой взгляд, никакой тест на истории не даст вам полноценного соответствия реальной торговле. В силу неопределенности в отношении стакана, поведения ММ, поведения других участников торговли, и, наконец, вашей очереди в стакане по выставленной в заявке цене. А если алгоритм работает по границам цен (H и L), то важна еще скорость соединения вашего интернета, поскольку искомую цену вы в истории видите, а по факту взять ее не можете.
Что следует из этого предположения? Бессмысленность ИЗЛИШНЕ ЗАМОРАЧИВАТЬСЯ с детальной правдоподобностью теста. Я не говорю, что тест не нужен, а считаю контр-продуктивным тратить время и силы на попытку приблизить условия теста к реальным условиям, когда понимаешь, что полностью все важные факторы учесть или имитировать невозможно. Достаточно «золотой середины». Например, маленьких интервалов. И надо четко понимать, что в реале доходность метода будет в разы меньше такой «теоретической доходности».
Я, во всяком случае, столкнулся с проблемами, о которых написал выше. В итоге приходится: входить в позицию и выходить из нее по менее оптимальным ценам. А это, в свою очередь, приводит к необходимости менять систему риск-менеджмента, и вот тут появляются абсолютно нетривиальные подводные камни...
Удачи вам в разработках. С интересом прочту продолжение статьи