Я нахожусь в процессе тестирования на промышленных данных тех моделей, которые я разработал с помощью системы 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 сделок чтоб собрать достоверную статистику
На анализе исторических данных можно увидеть лишь статистические закономерности, типа " Рынок чаще находится в боковике" или «Ри падает быстрее и сильнее, чем растет» и оценить их количественно.