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
    Что-что, а нумерация у вас крутая).

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


      • Replikant_mih
        23 ноября 2021, 14:38
        grepan, Wealth-Lab 7, но и Python использую — для постпроцессинга транзакций или для ML. Просто теперь это менее органично).
      • Replikant_mih
        23 ноября 2021, 14:44
        grepan, Я знал, я знал, что это не ошибка!)
  • ves2010
    23 ноября 2021, 14:19
    1 тебе нужна средняя сделка> 3...5*(спред + комисс) тогда можно не выносить мозг ерундой
    2 надо 10000 сделок чтоб собрать достоверную статистику
  • bohemian rhapsody
    23 ноября 2021, 15:02
    А если серьезно, то «история не повторяется, а если и повторяется, то не в пользу трейдера».

    На анализе исторических данных можно увидеть лишь статистические закономерности, типа " Рынок чаще находится в боковике" или «Ри падает быстрее и сильнее, чем растет» и оценить их количественно.
      • bohemian rhapsody
        23 ноября 2021, 15:19
        grepan, это результаты теста или реальные сделки?
          • bohemian rhapsody
            23 ноября 2021, 18:07
            grepan, что, по историческим данным всего за 1 день построен индикатор?
              • bohemian rhapsody
                23 ноября 2021, 18:31
                grepan, а инструмент какой?, учитываются ли сборы биржи и комисы брокера?
  • Sprite
    23 ноября 2021, 18:00
    «Можете что дополнить или скорректировать?»
    Могу дополнить: ваши лимитные ордера выставленные по стакану в бэктесте (я уже не говорю по свечам), в реалтайме могут повлиять на волатильность стакана. Например если в бэктесте стоит на асках 10 уровней по 10 лот, а вам надо 100 лот, то в бэктесте вы получите позицию по 10-и бестаскам, а в реале могут а) лимитом не дать и уйти б) маркетом протащить на худшие цены в) при большом вашем объеме вас запомнить и наказать позже. Т.е. фактически используя «систему», и одновременно находясь внутри нее вы на самом деле на нее влияете, что разумеется не отражается ни в каких линейных тестах. Это просто надо понимать и пытаться учитывать.
      • Sprite
        23 ноября 2021, 18:38
        grepan, «в бэктесте нет стакана» ну у кого как )
          • Sprite
            23 ноября 2021, 18:49
            grepan, не секрет — StockSharp. Разработчики библиотеки даже попытались сделать сведение ордеров в бэктесте и учитывать влияние своего объема на тесты, аля виртуальная биржа в реалтайм. Но я эту их часть не осилил и запилил свою.
            • Sprite
              23 ноября 2021, 18:52
              grepan, в принципе, при наличии данных по стаканам всё не так уж сложно и можно самому собрать велосипед. Сортируете тики и изменения стаканов по дате и обрабатываете в порядке очереди.
                • Sprite
                  23 ноября 2021, 19:05
                  grepan, всему своё время )
  • Andrew Morozov
    23 ноября 2021, 18:21
    papers.ssrn.com/sol3/cf_dev/AbsByAuth.cfm?per_id=1121907 где-то тут, по моему в первой пдфке, про модели micro mid-priced для стакана при бэктестах
    • Sprite
      23 ноября 2021, 18:46
      Andrew Morozov, супер, спасибо, все материалы очень интересные.
  • Andrew Morozov
    23 ноября 2021, 18:23
    Но, на моэх стаканчики намного более дерганые, чем к примеру, на сме.
  • Владимиров Владимир
    23 ноября 2021, 20:59
       Интересные темы поднимаете, спасибо.
       Вот таких конкретных обсуждений здесь на сайте и ждешь, а их практически не осталось — все «объемы» общения ушли в юмор, ЗОЖ, разные бытовые вопросы и пр. и т.п.
       По сути статьи: на мой взгляд, никакой тест на истории не даст вам полноценного соответствия реальной торговле. В силу неопределенности в отношении стакана, поведения ММ, поведения других участников торговли, и, наконец, вашей очереди в стакане по выставленной в заявке цене. А если алгоритм работает по границам цен (H и L), то важна еще скорость соединения вашего интернета, поскольку искомую цену вы в истории видите, а по факту взять ее не можете. 
       Что следует из этого предположения? Бессмысленность ИЗЛИШНЕ ЗАМОРАЧИВАТЬСЯ с детальной правдоподобностью теста. Я не говорю, что тест не нужен, а считаю контр-продуктивным тратить время и силы на попытку приблизить условия теста к реальным условиям, когда понимаешь, что полностью все важные факторы учесть или имитировать невозможно. Достаточно «золотой середины». Например, маленьких интервалов. И надо четко понимать, что в реале доходность метода будет в разы меньше такой «теоретической доходности». 
       Я, во всяком случае, столкнулся с проблемами, о которых написал выше. В итоге приходится: входить в позицию и выходить из нее по менее оптимальным ценам. А это, в свою очередь, приводит к необходимости менять систему риск-менеджмента, и вот тут появляются абсолютно нетривиальные подводные камни...   
       Удачи вам в разработках. С интересом прочту продолжение статьи

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

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