Как из тиков строятся свечи

Свеча описывает все обновления цены инструмента за период четырьмя числами: открытие, максимум, минимум и закрытие (OHLC). Свечи вычисляются из потока тиков: сначала минутные, затем из них агрегируются старшие таймфреймы. Правильные границы, часовой пояс и сессии - то, от чего зависит, сойдутся ли графики из разных источников.

Обновлено 5 мин чтения Инженерная команда FinaQuotes

Как из тиков получается одна свеча

Возьмём все тики инструмента за период, например с 14:05:00 до 14:05:59 UTC. Свеча за эту минуту - это четыре значения:

  • Open - цена первого тика периода.
  • High - максимальная цена тика за период.
  • Low - минимальная цена тика за период.
  • Close - цена последнего тика периода.

Свеча обозначается временем начала периода. Свеча 14:05 включает тики с 14:05:00 до 14:06:00, не включая его. Если один источник помечает свечи по началу, а другой по концу, весь график смещается на период.

Важно и то, по какой цене строится свеча. У инструментов с ценой последней сделки (крипта, индексы, сырьё, облигации) цена в тике одна. У инструментов с двусторонней котировкой нужно выбрать один ряд. Свечи в фиде FinaQuotes строятся по единому правилу; какой ряд цен в них используется, смотрите в документации. Почему у вас правило должно совпадать - в статье о bid, ask и спреде.

Минутная база и старшие таймфреймы

Считать каждый таймфрейм из сырых тиков расточительно и чревато расхождениями. Обычный подход, и в фиде FinaQuotes тоже, - строить из тиков минутные свечи, а всё остальное агрегировать из них.

Агрегация повторяет ту же логику: пятиминутная свеча берёт открытие первой минутной, максимум из максимумов, минимум из минимумов и закрытие последней. Часовая - то же самое за шестьдесят минут, и так до месяца. Таймфреймов 9: 1m, 5m, 15m, 30m, 1H, 4H, 1D, 1W, 1MN. Раз все они из одной базы, часовая свеча всегда сходится с шестьюдесятью минутными внутри неё.

Почему границы в UTC

Все границы свечей в фиде выровнены по UTC: часы начинаются в :00 UTC, четырёхчасовые свечи - в 00:00, 04:00, 08:00 и так далее, дневные - в 00:00 UTC, месячные - первого числа. Недельные строятся по тому же принципу, точное правило - в документации.

Локальное время кажется удобнее, но ломает свечи: летнее время даёт сутки по 23 и 25 часов и час, который случается дважды; клиенты в разных странах видели бы разные дневные свечи; брокеру с клиентами в разных поясах пришлось бы хранить по истории на каждый пояс.

В UTC этих проблем нет. Храните и передавайте всё в UTC, а в локальное время переводите только при отображении. Если нужна дневная свеча по местному торговому дню, соберите её у себя из часовых или минутных.

Сессии: акции, форекс, крипта

Не все рынки торгуют круглосуточно, и свечи следуют за рынком, а не за календарём.

  • Акции: свечи строятся только в часы торгов биржи листинга, с учётом перехода на летнее время. Основная сессия в США, открывающаяся в 09:30 по Нью-Йорку, начинается в 13:30 UTC летом и в 14:30 UTC зимой, и свечи сдвигаются вместе с ней.
  • Форекс: 24 часа пять дней в неделю. Свечи непрерывны в течение недели, на выходных - разрыв между закрытием пятницы и открытием воскресенья.
  • Крипта: 24/7, свечи непрерывны, включая выходные и праздники.
  • Металлы, индексы, сырьё и облигации следуют часам своих рынков.

Покрытие по рынкам - на страницах акций, форекса и криптовалют.

Минуты без тиков

Что делать с минутой, в которую не пришло ни одной цены? Подходов два: «нет тика - нет свечи», когда минуты в истории просто нет, и forward fill, когда создаётся плоская свеча со всеми четырьмя ценами, равными предыдущему закрытию.

Фид на реальных тиках обычно не создаёт свечу для минуты без тиков, и от FinaQuotes стоит ожидать именно этого; окончательное правило - в документации. Причина - честность: плоская свеча намекает, что рынок проверили и он не изменился, хотя на деле ничего не наблюдалось. Если графической библиотеке нужен непрерывный ряд, заполняйте пропуски при отображении, а хранимые данные оставляйте как есть.

Глубина истории по таймфреймам

История свечей отдаётся через REST: годы дневных данных, месяцы внутридневных. Цифры приблизительные и могут отличаться по инструментам, например у недавно добавленных.

ТаймфреймТипичная глубинаДля чего
1mДо 180 днейВнутридневные детали
5m, 15m, 30mОколо 60 днейВнутридневные графики за недели
1H, 4HОколо 2 летСреднесрочные графики, аналитика
1D, 1W, 1MNНесколько летДолгосрочные графики и бэктесты

Подробнее - на странице исторических данных.

Корректировки и поздние обновления

Свеча не всегда окончательна в момент закрытия периода. Последняя свеча меняется с каждым тиком, а тик с меткой за секунду до границы может прийти чуть позже неё. Храните свечи как записи с ключом «инструмент, таймфрейм, время открытия» и обновляйте их по ключу: пришла свеча с тем же ключом - замените, а не добавляйте вторую. Тик применяйте к той свече, которой принадлежит его время, даже если это предыдущая.

Корректировки после сбоя источника. Каждый класс активов обслуживается несколькими независимыми источниками с автоматическим переключением. Если источник отказал или прислал неверные значения, данные за этот период могут быть исправлены задним числом, включая сохранённые свечи. Клиент с кэшем истории должен уметь перезагрузить недавний диапазон. Тишина инструментов отслеживается, но пропуск может остаться, если за период цен не было ни из одного источника. Подробно - в политике рыночных данных.

Частые вопросы

Почему дневные свечи в UTC, а не в моём времени?

Потому что в UTC нет перехода на летнее время и он одинаков для всех клиентов. Локальные дневные свечи различались бы по странам и ломались бы дважды в год. Переводите время только при отображении или собирайте свои дневные свечи из часовых.

Почему на графике акции разрывы ночью и на выходных?

Свечи акций строятся только в часы торгов биржи листинга, пока биржа закрыта, свечей нет. У форекса есть разрыв на выходных, у крипты, которая торгуется 24/7, разрывов нет.

Может ли последняя свеча измениться после отрисовки?

Да. Текущая свеча меняется с каждым тиком, а недавние свечи могут быть исправлены после сбоя источника. Храните свечи по ключу «инструмент, таймфрейм, время открытия» и заменяйте при получении новой версии.

Нужен фид, о котором эта статья?

Расскажите, что вы строите и какие классы активов нужны. Ответим в течение одного рабочего дня: условия доступа и стоимость.

Написать нам