Кэш баров и конвейер истории: кэш, покрытие, брокер, живые данные

Любой график футпринта загружает бары через один контроллер: прочитать локальный кэш SQLite, спросить у кэша, каких окон не хватает, дозапросить у брокера только их, затем применить живые пакеты. Кэш ключуется по каноническому инструменту и хранит минутное зерно, из которого выводятся внутридневные таймфреймы.

Senzoukria · Документация · Обновлено: сентябрь 2026


Где найти

Фазы
idle → cache → ensure → live, с процентом выполнения, который за один прогон никогда не идёт назад
Опорное зерно
1 мин. Каждый внутридневной таймфрейм, который делится нацело, суммируется локально из кэшированных минутных баров; 1d и счётные бары (100t, тиковые/объёмные/range/delta) кэшируются в своём зерне
Глубина истории
Настройки графика → «History range»: 24 часа (сегодня), 3 дня, 7 дней. По умолчанию 24 часа (сегодня). У брокера запрашивается окно «диапазон × 24 часа назад от текущего момента», независимо от часового пояса отображения; у дневного таймфрейма нижняя граница 360 часов
Где управляют кэшем
Настройки → «Кэш и брокеры» отсылают на страницу счёта: «Источники данных, брокеры и локальный кэш находятся на странице счёта». Ни один элемент графика не удаляет кэшированные бары

Что он делает

Контроллер истории выполняет одну и ту же последовательность для любого источника данных. Сначала он постранично читает кэш (cache_query_page, 1 000 строк на страницу, не более 64 страниц) для запрошенного окна. Затем спрашивает cache_coverage о пропусках внутри этого окна и передаёт брокеру только их (rithmic_history_ensure с размером тика инструмента). Наконец, он подписывается на живые пакеты и сливает их в то же хранилище.

Бары хранятся по метке времени корзины вместе с происхождением: synthetic, ohlcv, cache, hist или live. Правило слияния решает, какая копия побеждает: настоящий бар всегда заменяет синтетический, живой бар заменяет формирующуюся корзину, OHLCV никогда не перезаписывает существующий бар, а в остальных случаях сохраняется копия с большим объёмом (затем — с большим числом сделок). Именно это позволяет кэшированному, перезапрошенному и живому бару сосуществовать без удвоения объёма.

Символы не из Rithmic приводятся к каноническому ключу вида ESZ6.CME (корень, код месяца, последняя цифра года, биржа), чтобы «ES 12-26» от моста и «ESZ6» от Rithmic делили одни строки кэша. Символы Rithmic хранятся как присланы, с добавленной биржей, когда она известна.

Настройки и ограничения

Значения, которые ограничивают то, что конвейер загружает и хранит
НастройкаПо умолчаниюЧто меняет
History range (настройки графика)24 часа (сегодня)Окно, запрашиваемое у кэша и у брокера: 1, 3 или 7 дней × 24 часа назад от текущего момента. Часовой пояс отображения управляет осью, а не объёмом данных. В офлайне окно кэша привязывается к самому свежему кэшированному бару, а не к часам
Лимит баров на таймфрейм15с/30с 200 · 1м 1 500 · 3м 1 200 · 5м 2 100 · 15м 3 000 · 1ч 4 500 · 1д 400 · 100t 1 500Максимум баров, удерживаемых в памяти; лимиты минутных таймфреймов (кроме 1д) умножаются на диапазон в днях
Пользовательские таймфреймыОт 120 до 1 500 баров (25 часов), от 2ч и выше — до 4 500 (190 дней)Лимит вычисляется из периода, когда таймфрейма нет в таблице
Размер тикаИз каталога инструментовПередаётся на шаг ensure; без него бэкенд раскладывает по сетке по умолчанию, и окно никогда не помечается покрытым
Reload historyКнопка⚙ → Trading Settings → Reload history заново открывает окна, которые брокер вернул с нулём тиков; ничего не очищает

Как этим пользоваться

  • Откройте график на нужном таймфрейме; история заполнится сама и останется на диске, поэтому следующее открытие читает кэш раньше, чем спрашивает брокера.
  • Свободно переключайтесь между 1м, 5м, 15м и другими выводимыми таймфреймами: они суммируются локально из минутного зерна, без обращения к серверу.
  • Расширяйте History range только при необходимости: неделя минутного футпринта — это очень много тиков, и первая загрузка займёт время.
  • Если уведомление сообщает, что другая загрузка истории уже идёт или что загрузка застопорилась, нажмите Reload history в настройках графика — больше ничто в приложении не открывает заново окно, вернувшееся пустым.

Уведомления и подводные камни

  • «CME Globex закрыт» означает, что скачивать нечего; кэшированные бары остаются на графике, а опустошённую сессию по-прежнему можно переиграть в реплее.
  • Отказы с rp_code 13 обычно носят перемежающийся характер; график продолжает работать на кэше и живых данных и повторяет попытку сам.
  • «Ценовая сетка этого инструмента неизвестна» означает, что размера тика нет в каталоге, поэтому история перекачивается при каждой загрузке, пока он не будет добавлен.
  • Окно, вернувшееся пустым, автоматически больше не запрашивается; снять это можно только через Reload history.
  • У фазы ensure есть сторожевой таймер простоя на 120 секунд, а занятый бэкенд переспрашивается через 3 секунды; контроллер никогда не вызывает cache_clear и не трогает localStorage.
  • Подсказка History range в настройках говорит, что окно отсчитывается от полуночи в выбранном часовом поясе; контроллер истории вместо этого запрашивает «диапазон × 24 часа назад от текущего момента», поэтому график, открытый поздно вечером, может нести чуть больше календарных суток.

Эта страница на других языках

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

Почему график уже показывает бары, пока индикатор выполнения ещё движется?
Фаза кэша публикует бары сразу по мере чтения страниц (до 25 % прогресса), а затем фаза ensure заполняет пропуски, которые брокеру ещё предстоит прислать.
Можно ли стереть кэш, чтобы исправить плохую загрузку?
Контроллер истории никогда не вызывает cache_clear, и график не предлагает очистки. Рычаг — Reload history в настройках графика: он заново открывает только окна, вернувшие ноль тиков, и не трогает ни кэшированные бары, ни живой поток.
Общий ли кэш у моста и у Rithmic?
Строки ключуются по каноническому ключу инструмента, поэтому декабрьский контракт ES, увиденный через мост и через Rithmic, отображается в один ключ, если символ удаётся разобрать.