Кэш баров и конвейер истории: кэш, покрытие, брокер, живые данные
Любой график футпринта загружает бары через один контроллер: прочитать локальный кэш 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, отображается в один ключ, если символ удаётся разобрать.