Дмитрий Власов
Дмитрий Власов личный блог
16 февраля 2019, 23:01

Как обойтись без склейки фьючей при тестировании и оптимизации торговой стратегии в ТСЛаб

Всю жизнь тестировал и оптимизировал торговые стратегии для фьючерсов используя так называемый «склеенный» фьючерс с сайта Финама. Я понимал и понимаю, что в момент «умирания» старого фьюча и соответственно перетекания ликвидности на новый фьючерс происходит ценовой ГЭП. Или контанго (когда цена нового фьюча больше чем цена уходящего в небытие) или бэквордация (обратная ситуация).

Как выяснилось, склейку фьючей Финам проводит по методу «Панама» (или проводил), а как будет проводить — кто его знает. Да и что за «Панама» — яндекс в помощью интересующимся. Смысл в том, что на стыке двух фьючей идут недостоверные котировки.

Из-за наличия такого ценового разрыва в склеенных фьючерсах результаты тестирования стратегии искажаются и как результат в процессе оптимизации находятся неоптимальные параметры.

Я считал, что это несущественные искажения, но если учесть, что оптимизацию иногда провожу на промежутке времени до 10 лет и каждый год происходит как минимум 4 склейки (поквартально) — получается около 40 сделок дают искаженный финансовый результат, которого можно не достичь в реальной торговле. Если же использовать фьючи на нефть — склейки могут доходить до 12 раз в году.

Поискал, что думают об этой теме трейдеры, которые используют ТСЛаб. Вот результаты поиска на форуме по ключевым словам «фьючерс и склейка»:

Как обойтись без склейки фьючей при тестировании и оптимизации торговой стратегии в ТСЛаб

Как видим, вопрос возник не только у меня. Многие, кто сталкивался с этой проблемой задавались аналогичным вопросом. При этом технического решения так нигде не увидел. Только небезызвестный Родион Скуратовский написал, что можно заморочиться и сделать это в коде (Кстати, почему-то Родион перестал писать на тслабовском форуме — неужели разочаровался в системной торговле?).

В общем, решил я «заморочиться» и хотя бы раз объективно проверить — насколько будут отличаться параметры торговой системы после оптимизации на склеенном фьюче и при оптимизации методом, которым я действую в реальной жизни.

Несколько слов о реальной жизни: когда подходит срок экспирации старого контракта обычно за 3 или 2 дня — я указываю роботу, чтобы он не открывал новых сделок, а существующие сделки начинал закрывать. Как только я вижу стратегии, у которых нулевая текущая позиция — я тут же провожу смену фьючерсного контракта на новый. И снова включаю робота в «автоматический режим».

Именно такую логику удалось реализовать в коде торговой стратегии. Пришлось позаморачиваться, но в результате получилось, что стратегии я могу подсовывать не склеенный фьючерс с нереальными ценами в момент стыка, а серию реальных фьючей (например, SIH8, SIM8, SIU8, SIZ8, SIH9) c фактическими котировками.

Затем я указываю стратегии, за сколько дней до «смерти» старого фьюча нужно закрывать позиции по старому. Сразу после закрывания позиций по старому фьючу идёт открытие (в соответствии с логикой торговой стратегии) по новому. Причём индикаторы к моменту закрытия позы по старому фьючу уже считаются по новому фьючу, поэтому искажений не происходит.

Вот как это выглядит на картинке (на примере SIH8 и SIM8):
Как обойтись без склейки фьючей при тестировании и оптимизации торговой стратегии в ТСЛаб

В общем, появилась возможность ответить на два вопроса:

1) Сильно ли будут отличаться параметры торговой системы при оптимизации на «склеенном» фьюче и используя «жизненный» подход — на серии реальных фьючей

2) За сколько дней лучше всего переходить на новый фьюч с точки зрения получения наилучших результатов (этот параметр я тоже оптимизировал) — для интереса.

Ваши варианты ответа жду в комментариях. Завтра расскажу о результатах своего эксперимента.

Мне было бы любопытно узнать — как поступаете Вы? Используете склейку и не заморачиваетесь? Или есть какие-то свои наработки по этому вопросу (может поделитесь опытом?)


47 Комментариев
  • Oleg Only Algo
    16 февраля 2019, 23:18
    Как вычисляете дату последнего дня торговли фьючерса?
      • Oleg Only Algo
        17 февраля 2019, 12:29
        Дмитрий Власов, непонял. В текущий момент как определить дату последнего дня обращения текущего фьючерса? То есть информацию справа от текущей даты?
          • Oleg Only Algo
            17 февраля 2019, 14:52
            Дмитрий Власов, понял. Вы наверно файлы в определенной директории держите и добавляете туда просто новый файл и програмно все ищете считаете опреляете? Или кубики Источник польщуете?
  • Дмитрий Овчинников
    16 февраля 2019, 23:19
    Так как мои системы торгуют внутри дня, то для получения корректных результатов в тесте добавляю в код советника фильтр, запрещающий торговлю в определенные дни (дни склейки). 
    Как показала практика подобные действия не сильно изменяют итоговые показатели тестов, за исключением брента.

    Подкину вам еще тему для размышления по поводу брента. 
    В моих системах брент не торгуется вечером в среду, т.е. день, когда выходит отчет о запасах. Но отчет не всегда выходит в среду! (праздники, выходные и пр.) И если в реальном режиме работы время торговли можно и нужно исправлять руками, то что делать с тестером?
      • Дмитрий Овчинников
        16 февраля 2019, 23:39
        Дмитрий Власов, 
        так как я использую MT5, то у меня нет возможности использовать никакой другой вариант котировок кроме того, который склеен  брокером. Найти абсолютно точно все даты склеек в интернете дело 15 минут, да и на графике их видно невооруженным глазом. 
        • Jame Bonds
          17 февраля 2019, 00:45
          Дмитрий Овчинников, Можно и в MT5. Либо прямо в советнике прописать выбор фьючерса в зависимости от даты (дата экспирации прописана в свойствах фьючерса). Это, конечно, усложнит советник.
          Либо завести Custom Symbol и загрузить в него какую хотите склейку.
          • Дмитрий Овчинников
            17 февраля 2019, 10:15
            Jame Bonds, 
            прямо в советнике прописать выбор фьючерса в зависимости от даты
            можно, но не нужно. Трудозатрат много, а экономического смысла мало.
            Либо завести Custom Symbol и загрузить в него какую хотите склейку.

            Custom Symbol совсем не про это.

      • Дмитрий Черников
        17 февраля 2019, 12:00
        Дмитрий Власов, но ведь торгуя роботом перед экспирацией вы перекладываетесь в другой, примерно за несколько дней до оной, думаю что автор прав, я еще и на утренних гэпах заглядывал вперед и если стоп был близко и первая свеча прошивала его закладывал цену стопа со значительным убытком.. 
    • ch5oh
      16 февраля 2019, 23:49

      Дмитрий Овчинников, заводите всю историю фактических дат в виде массивчика и в тестере просто проверяете «сегодня день выхода АПИ или нет?»

       

      К счастью, это только первый раз надо попотеть, а потом только добавляете новые фактические значения.

       

      В ТСЛаб примерно так хранится фактическое расписание торговых и праздничных дней для рынка ФОРТС.

      • Дмитрий Овчинников
        16 февраля 2019, 23:54
        ch5oh, 
        спасибо, это очевидное решение. Видимо все же придется перебороть свою лень и прописать такую функцию.
        • ch5oh
          16 февраля 2019, 23:58

          Дмитрий Овчинников, если оно того стоит на Ваш взгляд.

           

          А почему не торгуете в среду вечером? Там сильно дергает и ситуация становится слишком непредсказуемой?

          • Дмитрий Овчинников
            17 февраля 2019, 00:04
            ch5oh, 
            поведение цены существенно отличается от стандартного, фактически для меня это другой инструмент. 
  • Replikant_mih
    17 февраля 2019, 00:09

    Тут все просто: если эти искажения влияют в разные стороны на результаты систем — это одно, если в одну сторону (например, всегда улучшают) — тогда надо как-то лечить, ну или делать реалистичную поправку.

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

  • Сергей Симонов
    17 февраля 2019, 00:41
    Когда у меня возникло такое же острое возбуждение по поводу склейки, я добавил в роботов модули создания исторических данных. Данные за каждый день записывались в файлы. Как только переходил на новый контракт (за 1 день до экспирации), данные начинали записываться с нового контракта. И так далее.

    В дальнейшем, данные из файлов заливались в массив без всякой склейки и подавались на вход оптимизатору.

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

    Но решать, конечно, вам))
  • Тарас Громницкий
    17 февраля 2019, 08:22

    Начнём с главного.

    Откуда взялась такая точная информация о методе склейки ?

    Вы задавали прямой вопрос Финаму или это догадка некоего uuzzeerr с форума http://forum.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=20824&page=all ?

      • Oleg Only Algo
        17 февраля 2019, 10:22
        Дмитрий Власов, Вы в кубике Источник склеиваете все за историю трехмесячные фьючи? а в бренте за каждый месяц это надо склеить за 10 лет аж 120 файлов…
      • Тарас Громницкий
        17 февраля 2019, 16:01

        Дмитрий Власов, а как с тем, что в последние дни на старом фьючерсе падает ликвидность ?

        Могут появляться пробелы в данных.

        Ну и по мере падения ликвидности разница с новым фьючерсом увеличивается.

  • baron_samedi
    17 февраля 2019, 08:51
    в момент смены (зф 2 нед до экспиры) отключить робот от фьючей и открыть небольшой стренгл или стреддл в новых контрактах, или направленную позицию с ограниченным риском.
      • baron_samedi
        17 февраля 2019, 14:12
        Дмитрий Власов, 
        я не считал — но точно пользоваться можно, если не допускать перегрузки го.
        можно и покупать и продавать.
        Если направленно (спред ) то тетта не опасна.
  • SergeyJu
    17 февраля 2019, 12:52
    Я склеиваю сам. Имитируя продажу старого и покупку нового фьюча за день-два до экспиры. Так и тестирую. 
    • Oleg Only Algo
      17 февраля 2019, 13:21
      SergeyJu, а день экспиры как определяете? Склеиваете в файле одном друг к другу? А даты экспиры забиваете в файл И оттуда берете?
  • kozmonavt
    17 февраля 2019, 12:55
    Для того чтобы результаты при тестировании не искажались существует специальный способ склейки фьючерсов который используют многие поставщики котировок с мировых бирж. Back adjusted называется.
  • ves2010
    17 февраля 2019, 13:14
    все проще...
    1 битые данные с финама — это стресс тест для бота... 
    2 просто запрещаешь торговлю в неудобные дни…  если дата==ТТТТ, то закрываешь позицию и не открываешь сделки… ну вылетят у тебя 5-6 дней из торговли… имхо на статеистике не отразится никак
    3 насколько помню… тслаб2 позволяет самому клеить
    • Oleg Only Algo
      17 февраля 2019, 13:32
      ves2010, можно склеить и в тслаб2.0. Но вот в нефти за 10 лет — это аж 120 файлов. Не знаю как тс лаб будет при таком количесве работать, ла и геморно это. Как вот определять даты склейки и от них уже плясать? Я не встречал битые данные с финама. Есть пример, где данные битые там?
      • ves2010
        17 февраля 2019, 13:44
        Oleg Only Algo, битые данные увидеть легко… там шипы в обе стороны на каждой свечке в +-2 % на дистанции 10-20 свечей… и обычно если бот трендовый то в этот день рисуетя слив, а если контртрендовый то эпичный профит

        а брент да конечно… неудобно
        • Oleg Only Algo
          17 февраля 2019, 13:54
          ves2010, да и ртс, тоже неудобно. Проще один раз файл собрать  и склеивать его с текущим фьючем. Но на практике если сделок много, то нет особой разницы. Поэтому и смысла не вижу так делать. А вот на нефти есть разница. На нефти есть смысл так сделать, тк результаты отличаются. 
      • Oleg Only Algo
        17 февраля 2019, 14:48
        Дмитрий Власов, от алгоритма зависит. По нефти обязательно будут искажения. По нефти тоже у Вас не существенно результаты отличаются?
  • Мария
    17 февраля 2019, 13:45
    в алго для тестов собраны кубики по склейке, пример в картинке.

     но перестала это использовать, так как уже пару лет, не вижу сильных гэпов при склейке.
      • Мария
        17 февраля 2019, 15:24
        Дмитрий Власов, не сильно искажается. в любом случае, что бы тесты не показали выбираем более менее адекватные параметры. историчекие данные в реале никогда не повторятся, поэтому думаю на этот ньюанс можно не смотреть. ну например вы тестируете год. 4 склейки. а сделок в году сколько?)) ну не сильно исказит. ну и при красивом тесте если положить на период 5 лет например, вот про 10 тоже смысла не вижу, рынок очень сильно изменился ну вы же будете смотреть что бы без сильных провалов был график и зеленый. потому что этот результат ну как бы подтверждение вашего теста, его актуальность на длительном периоде.  а смысл смотреть какая том точно доходность в процентах, тоже лишнее.
  • robot_bsk
    17 февраля 2019, 20:36
    Дмитрий Власов, в wealth-lab я тестирую по портфелю фьючерсов с перекладкой.
    За 1 день до экспиры идет перекладка (если есть поза) в новый фьюч.
    Фьючи переименованы, чтобы были по порядку: 

    SiH2008 — SI11

    SiM2008 — SI12

    SiU2008 — SI13

    И т.д.

      • robot_bsk
        18 февраля 2019, 13:42
        Дмитрий Власов, Процесс «Перекладки» в комментарии лучше не писать, т.к. слишком много букв. Напишу пост и сюда ссылку выложу.
        Да, график эквити в итоге получается один, тоже в посте выложу.
      • robot_bsk
        18 февраля 2019, 19:02
        Дмитрий Власов, Как обойтись без склейки фьючей при тестировании и оптимизации торговой стратегии в Wealth-lab smart-lab.ru/blog/523180.php
  • Александр Элс
    04 марта 2019, 10:06
    1 день до склейки запрещаю открытие сделок и вечером закрываю те, что были. Руками в блоке указываю дни склейки. Не думаю что сильно влияет.
  • Sergei
    14 января 2020, 17:58
    А автор статьи напишет свои результаты тестирования ??

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

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