Привет, Смарт-лаб.
Сразу к делу.
Стоит задача собирать архив котировок фьючерсов с 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, да, это оно.
если использовать в торговой системе пирамидинг (докупки) позиции, то размер ГО будет сильно влиять на то, какое количество контрактов сможете взять и соответственно на итоговый результат.
Имхо, хранить данные надо в сыром виде — как вы видите их в таблице всех сделок. А уже представление этих данных и обработка — как захотите.
Согласен с вами, гружу я их тоже в «сыром» виде, как биржа отдает, то и записываю, кручу верчу их уже в инструменте, который читает архив.