Привет, Смарт-лаб.
Сразу к делу.
Стоит задача собирать архив котировок фьючерсов с moex.
При этом инструмент, который будет пользоваться этим архивом, построен с позиции «широкого охвата» рынка. Что это значит? — В инструменте подтягиваемые данные по конкретному фьючу могут рассматриваться и анализироваться не только в границах конкретного фьючерса, но и относительно других фьючей.
Для удовлетворения этого условия для себя определил, что архив данных по отдельным фьючам должен иметь:
- «А» — единую структуру (поля)
- «Б» — общий параметр (ключ), по которому будет возможно в принципе сопоставить данные разных фьючерсов
С пунктом «А» проблем нет, загружаемый состав параметров в спецификациях фьючей у всех одинаковый.
С пунктом «Б» сложнее.
В рамках пояснения, к примеру, для индексов и акций решение было очень простым, таким «связующим» параметром стала дата каждого закрытия дневной свечи IMOEX. Логика тут проста, если сегодня торгуется акция, значит сегодня торгуется индекс. И наоборот. Соответственно, в архиве ключом для всех инструментов является дата торгов индекса imoex, и если по какой-то акции за дату торгов индекса не пришли данные, то считаем, что это «не проблема всего рынка», а значит «широкий охват» не нарушен, просто имеем выбитые данные, с которыми разбираемся отдельно (например, приостановка торгов конкретной бумагой).
И если для индексов, акций (облиги будут позже, т.к. там долгосрок, срочности нет) всё работает исправно, то для фьючерсов начинается головная боль. А может эту боль я сам себе придумываю?
Итак, по какому ключу связывать фьючерсы, чтобы была возможность их сравнивать между собой? ну например, фьюч аэрофлота и палладий. Ключом в такой «экзотической» связке я вижу только дату проведения торгов инструментами.
Но дату проведения торгов чего конкретно брать за основу?:
- фьюча аэрофлота?
- фьюча палладия?
- может фьюча на ртс?
- может аналогично взять торговые дни индекса imoex?
по первому и второму пункту оба фьюча, скажем так, имеют одинаковый вес с точки зрения анализа. Нет явного критерия в этих фьючерсах, чтобы однозначно выбрать эталоном какой-то один и относительно него пренебрегать данными второго.
(то есть ни первое ни второе решение задачу не решают)
по третьему пункту, типа, мы берем что-то отдельно стоящее от нашей пары, но важнее по «весу». Выбрали Ri, т.к. он важнее потому что это фьюч на индекс, а в индекс входят акции. Но почему надо воспринимать «вес» Ri больше чем «вес» фьюча палладия, ведь они как теплое с мягким?
(то есть пункт 3 покрывает задачу частично, + наверняка там есть риск присущий к четвертому пункту, об этом ниже)
по четвертому пункту вроде всё логично, более того он позволяет «широким охватом» сравнить индекс полной дохи, декабрьский фьюч аэрофлота, текущий фьюч палладия, да еще и акцию газпрома. Типа вообще красота, крути как хочешь.
(получается пункт 4 полностью покрывает задачу?)
Собственно теперь о фантомной боли:
В решении задачки «Б» получается логичным ориентироваться на даты торгов индексом, но возникает вопрос, есть ли здесь календарный фактор?
Я в механике рынка фьючерсов пока только разбираюсь, и у меня возник вопрос, всегда ли фондовая секция и срочная торгуются одновременно? Есть же, например, праздничные дни. Я посмотрел календарь торгов фондовой и срочной секции на этот год, расхождения по торговым дням не нашел. Получается, что боли нет, и можно спокойно строить архив по «дате индекса»? Но ведь в то же время есть праздничные дни за бугром, и есть фьючи, данные по которым «зеркалятся» к нам. Получается если там выходной, а у нас торги идут, то передается ли то что мы наторговали у себя на след день за бугор?
В общем если боль не фантомная, то код придется отложить пока не оценю значимость данных, которые есть риск не получить.
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
это ради экономии места?
акция 1 торговалась понедельник, среду и пятницу
акция 2 торговалась вторник и четверг.
Чьи данные станут эталоном в этой связке? акции 1 потому что у нее торговых дней больше? тогда по акции 2 мы никогда данные не получим за эту неделю. Поэтому брался индекс, относительно которого выбитые данные по акции 1 и акции 2 принимаются как допустимое явление. При этом в данном случае выбор индекса за основу позволяет:
1) сравнивать акции с индексом
2) сравнивать акции между собой
3) анализировать каждую акцию отдельно
с фьючами начинается какой-то трэш. Если реально торговые дни нескольких фьючерсов могут различаться, то все 3 условия одновременно не выполняются.
Я понаблюдаю что выдает moex в день экспиры по сгораемым фьючам, но подскажите, может ли быть ситуация, когда в день экспирации после самой экспирации на бирже фьюч числится живым, а цена по нему передается null или вообще пустая? Я был уверен, что когда экспирация закончена, то этот фьюч до закрытия торгов просто висит с ценой экспиры. Если это не так, то в принципе, ваше предложение реализовать не сложно, поля известны, доп проверка с текущей датой не проблема.
да там причины достаточно простые, цель вести базу возникла из-за не желания в регламенте вручную обновлять данные по интересующим меня инструментам. А когда автоматизировал процесс, сразу заложил в него расширяемость, то есть по тем же индексам и акциям я тупо веду конфиг, в котором перечисляются нужные мне инструменты для загрузки, то есть загружаются только нужные. С фьючами подход немного изменился, я гружу всю котировальную таблицу фьючей, и на лету парсю её по нужным мне инструментам. (не спрашивайте почему подход загрузки данных у фьючей другой, так еще один пост можно писать о причинах).
В целом глобальный архив (если сразу в конфигах проставить значение all) решает несколько задач:
1) В любой момент времени мне доступны для анализа исторические данные по любому инструменту
2) исторические данные берутся из первоисточника (а это снижает риск некорректности данных, неактуальности данных, риск исчезновения контрагента-поставщика котировок)
3) автоведение архива + возможность применения самописных скриннеров по всему рынку. А это значит не привязанность к конкретным бумагах и работа по сигналам в любом инструменте (если скриннер будет на «ловлю ракет», то благодаря такому архиву можно видеть все ракеты рынка
Я не тяну мегабайты данных из сети, полученный байты превращаются в мегабайты исключительно за счет внутренней логики работы загрузчика (он просто каждый день добавляет новую строку в каждом архиве + вписывает служебные данные)
Я не знаю откуда цена передается и где висит фьюч с ценой экспирации.
Соответственно не могу ответить на вопрос. Но думаю это и не важно. Мое мнение, что цена фьюча в день экспирации не интересна и не показательна для анализа, за исключением случая, когда непременно нужно знать цену экспирации.
ну пока что цель получать весь жизненный цикл фьюча от и до. Пренебрежение теми или иными данными у меня вынесено на сторону инструмента, который читает архив.
1) сравнение фьюча с индексом (допускаем что в выборку не попадут данные по дням когда фьюч торговался, а индекс нет, т.к. в таком сравнении в большинстве случаев важнее будет поведение индекса)
2) сравнение фьюча с любым другим фьючом, т.к. вся срочка котируется в день торгов
3) анализировать каждый фьюч отдельно, т.к. буду собраны данные за все дни торговли фьючерса.
Получается правильнее будет использовать решение №3 и брать за ключ торговые даты фьюча Ri! Супер!!! Спасибо!!!
А есть ли в вашей базе исторические данные по ГО на фьючерсы на каждый день?
Это не применительно к вашей задаче. Это я для себя интересуюсь)
пока что ГО я не собираю. Но это вопрос времени.
Serj90, да, это оно.
если использовать в торговой системе пирамидинг (докупки) позиции, то размер ГО будет сильно влиять на то, какое количество контрактов сможете взять и соответственно на итоговый результат.
Имхо, хранить данные надо в сыром виде — как вы видите их в таблице всех сделок. А уже представление этих данных и обработка — как захотите.
Согласен с вами, гружу я их тоже в «сыром» виде, как биржа отдает, то и записываю, кручу верчу их уже в инструменте, который читает архив.