Сессии
Почему IANA-таймзоны, а не UTC-смещения
Если захардкодить UTC-смещения, при переходе на летнее время сессия сдвинется на час относительно реального рынка. Время задаётся в локальной таймзоне биржи через ZoneInfo — Python сам применяет актуальное UTC-смещение на конкретную дату.
Зима: London 08:00 GMT = 08:00 UTC ✓
Лето: London 08:00 BST = 07:00 UTC ✓ (BST = GMT+1)
Tokyo — DST не наблюдает, всегда: 07:00 JST = 22:00 UTC предыдущего дня
Буфер ±2 дня
Сканирование дат начинается на 2 дня раньше from_ts и заканчивается на 2 дня позже to_ts. Нужно для токийской сессии, которая начинается в 22:00 UTC предыдущего дня — без буфера сессия понедельника не попала бы в ответ при запросе с from_ts = Monday 00:00 UTC.