Всю жизнь тестировал и оптимизировал торговые стратегии для фьючерсов используя так называемый «склеенный» фьючерс с сайта Финама. Я понимал и понимаю, что в момент «умирания» старого фьюча и соответственно перетекания ликвидности на новый фьючерс происходит ценовой ГЭП. Или контанго (когда цена нового фьюча больше чем цена уходящего в небытие) или бэквордация (обратная ситуация).
Как выяснилось, склейку фьючей Финам проводит по методу «Панама» (или проводил), а как будет проводить — кто его знает. Да и что за «Панама» — яндекс в помощью интересующимся. Смысл в том, что на стыке двух фьючей идут недостоверные котировки.
Из-за наличия такого ценового разрыва в склеенных фьючерсах результаты тестирования стратегии искажаются и как результат в процессе оптимизации находятся неоптимальные параметры.
Я считал, что это несущественные искажения, но если учесть, что оптимизацию иногда провожу на промежутке времени до 10 лет и каждый год происходит как минимум 4 склейки (поквартально) — получается около 40 сделок дают искаженный финансовый результат, которого можно не достичь в реальной торговле. Если же использовать фьючи на нефть — склейки могут доходить до 12 раз в году.
Поискал, что думают об этой теме трейдеры, которые используют ТСЛаб. Вот результаты поиска на форуме по ключевым словам «фьючерс и склейка»:
Как видим, вопрос возник не только у меня. Многие, кто сталкивался с этой проблемой задавались аналогичным вопросом. При этом технического решения так нигде не увидел. Только небезызвестный Родион Скуратовский написал, что можно заморочиться и сделать это в коде (Кстати, почему-то Родион перестал писать на тслабовском форуме — неужели разочаровался в системной торговле?).
В общем, решил я «заморочиться» и хотя бы раз объективно проверить — насколько будут отличаться параметры торговой системы после оптимизации на склеенном фьюче и при оптимизации методом, которым я действую в реальной жизни.
Несколько слов о реальной жизни: когда подходит срок экспирации старого контракта обычно за 3 или 2 дня — я указываю роботу, чтобы он не открывал новых сделок, а существующие сделки начинал закрывать. Как только я вижу стратегии, у которых нулевая текущая позиция — я тут же провожу смену фьючерсного контракта на новый. И снова включаю робота в «автоматический режим».
Именно такую логику удалось реализовать в коде торговой стратегии. Пришлось позаморачиваться, но в результате получилось, что стратегии я могу подсовывать не склеенный фьючерс с нереальными ценами в момент стыка, а серию реальных фьючей (например, SIH8, SIM8, SIU8, SIZ8, SIH9) c фактическими котировками.
Затем я указываю стратегии, за сколько дней до «смерти» старого фьюча нужно закрывать позиции по старому. Сразу после закрывания позиций по старому фьючу идёт открытие (в соответствии с логикой торговой стратегии) по новому. Причём индикаторы к моменту закрытия позы по старому фьючу уже считаются по новому фьючу, поэтому искажений не происходит.
Вот как это выглядит на картинке (на примере SIH8 и SIM8):
В общем, появилась возможность ответить на два вопроса:
1) Сильно ли будут отличаться параметры торговой системы при оптимизации на «склеенном» фьюче и используя «жизненный» подход — на серии реальных фьючей
2) За сколько дней лучше всего переходить на новый фьюч с точки зрения получения наилучших результатов (этот параметр я тоже оптимизировал) — для интереса.
Ваши варианты ответа жду в комментариях. Завтра расскажу о результатах своего эксперимента.
Мне было бы любопытно узнать — как поступаете Вы? Используете склейку и не заморачиваетесь? Или есть какие-то свои наработки по этому вопросу (может поделитесь опытом?)
Как — то вот так: DateTime lastTimeOfFutures = symbol_SIM8.Bars[symbol_SIM8.Bars.Count — 1].Date;
Как показала практика подобные действия не сильно изменяют итоговые показатели тестов, за исключением брента.
Подкину вам еще тему для размышления по поводу брента.
В моих системах брент не торгуется вечером в среду, т.е. день, когда выходит отчет о запасах. Но отчет не всегда выходит в среду! (праздники, выходные и пр.) И если в реальном режиме работы время торговли можно и нужно исправлять руками, то что делать с тестером?
так как я использую MT5, то у меня нет возможности использовать никакой другой вариант котировок кроме того, который склеен брокером. Найти абсолютно точно все даты склеек в интернете дело 15 минут, да и на графике их видно невооруженным глазом.
Либо завести Custom Symbol и загрузить в него какую хотите склейку.
Custom Symbol совсем не про это.
Дмитрий Овчинников, заводите всю историю фактических дат в виде массивчика и в тестере просто проверяете «сегодня день выхода АПИ или нет?»
К счастью, это только первый раз надо попотеть, а потом только добавляете новые фактические значения.
В ТСЛаб примерно так хранится фактическое расписание торговых и праздничных дней для рынка ФОРТС.
спасибо, это очевидное решение. Видимо все же придется перебороть свою лень и прописать такую функцию.
Дмитрий Овчинников, если оно того стоит на Ваш взгляд.
А почему не торгуете в среду вечером? Там сильно дергает и ситуация становится слишком непредсказуемой?
поведение цены существенно отличается от стандартного, фактически для меня это другой инструмент.
Тут все просто: если эти искажения влияют в разные стороны на результаты систем — это одно, если в одну сторону (например, всегда улучшают) — тогда надо как-то лечить, ну или делать реалистичную поправку.
Если же в разную, то в целом можно не заморачиваться (кроме разве что случаев где эксплуатируется какая-то тема как раз связанная с процессом смены фьючей), потому что если ты затачиваешься на конкретные трейды и чистыми данными результаты будут полностью другие — ну это же чистая подгонка — нафиг оно надо.
В дальнейшем, данные из файлов заливались в массив без всякой склейки и подавались на вход оптимизатору.
И вот что я вам скажу. Результаты оптимизации на финамовских склейках практически ничем не отличались от самодельных исторических данных без склейки. Поэтому, рекомендую забить на ценовые люфты от склейки и не парить себе мозг.
Но решать, конечно, вам))
Начнём с главного.
Откуда взялась такая точная информация о методе склейки ?
Вы задавали прямой вопрос Финаму или это догадка некоего uuzzeerr с форума http://forum.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=20824&page=all ?
Дмитрий Власов, а как с тем, что в последние дни на старом фьючерсе падает ликвидность ?
Могут появляться пробелы в данных.
Ну и по мере падения ликвидности разница с новым фьючерсом увеличивается.
я не считал — но точно пользоваться можно, если не допускать перегрузки го.
можно и покупать и продавать.
Если направленно (спред ) то тетта не опасна.
1 битые данные с финама — это стресс тест для бота...
2 просто запрещаешь торговлю в неудобные дни… если дата==ТТТТ, то закрываешь позицию и не открываешь сделки… ну вылетят у тебя 5-6 дней из торговли… имхо на статеистике не отразится никак
3 насколько помню… тслаб2 позволяет самому клеить
а брент да конечно… неудобно
но перестала это использовать, так как уже пару лет, не вижу сильных гэпов при склейке.
За 1 день до экспиры идет перекладка (если есть поза) в новый фьюч.
Фьючи переименованы, чтобы были по порядку:
SiH2008 — SI11
SiM2008 — SI12
SiU2008 — SI13
И т.д.
Да, график эквити в итоге получается один, тоже в посте выложу.