Дмитрий Власов
Дмитрий Власов личный блог
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
    Как вычисляете дату последнего дня торговли фьючерса?
  • Дмитрий Овчинников
    16 февраля 2019, 23:19
    Так как мои системы торгуют внутри дня, то для получения корректных результатов в тесте добавляю в код советника фильтр, запрещающий торговлю в определенные дни (дни склейки). 
    Как показала практика подобные действия не сильно изменяют итоговые показатели тестов, за исключением брента.

    Подкину вам еще тему для размышления по поводу брента. 
    В моих системах брент не торгуется вечером в среду, т.е. день, когда выходит отчет о запасах. Но отчет не всегда выходит в среду! (праздники, выходные и пр.) И если в реальном режиме работы время торговли можно и нужно исправлять руками, то что делать с тестером?
  • Replikant_mih
    17 февраля 2019, 00:09

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

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

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

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

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

    Но решать, конечно, вам))

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

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