DF-ТРД-004 · Инструменты для трейдинга
Часовые пояса в выгрузке торговых операций: как проверить даты
- как понять, указан ли часовой пояс в файле
- как привести временные метки к UTC без потери исходных данных
- где искать ошибки на границе суток и при смене смещения
- как проверить результат по контрольным операциям
Выгрузка показывает операцию в 00:30, а торговая платформа относит её к предыдущему дню. Где ошибка? Возможно, нигде: файл хранит местное время сервера, а отчёт строится по времени компьютера или UTC.
До расчёта дневных итогов нужно определить временную основу каждого столбца, сохранить исходные значения и привести операции к общей шкале. Удобная основа для сравнения — UTC. Местное время можно добавить отдельным столбцом уже после нормализации.
Если в файле нет смещения, названия часового пояса или описания времени в документации источника, точное преобразование по одной дате невозможно. Сначала понадобится контрольная операция, время которой можно сверить в исходной системе.
Как понять, какое время записано в файле?
Начните с вида значения. Запись 2026-10-26T00:30:00+03:00 содержит смещение +03:00, а 2026-10-25T21:30:00Z обозначает тот же момент в UTC. Такой способ записи определён в RFC 3339: числовое смещение считается как местное время минус UTC.
Строка 2026-10-26 00:30:00 сообщает дату и часы, но не позволяет понять, где находились эти часы относительно UTC. Название столбца Time тоже ничего не доказывает. Нужны описание экспорта, настройки счёта либо сопоставление с записью, у которой известен точный момент исполнения.
Не смешивайте время торгового сервера, локальное время компьютера и UTC. Даже внутри одной платформы это могут быть разные величины. Например, справочник MQL5 отдельно описывает серверное время, локальное время, GMT и текущее смещение локального компьютера.
Как привести операции к одной шкале?
Сохраните исходный файл без правок. В рабочей копии добавьте поля для исходной метки, установленного часового пояса или смещения, времени в UTC и времени для отчёта. Тогда преобразование можно проверить и при необходимости повторить с другим правилом.
Для метки с явным смещением расчёт однозначен: из местного времени вычитают смещение. Поэтому 2026-10-26T00:30:00+03:00 превращается в 2026-10-25T21:30:00Z. Дата изменилась — это нормальный результат, а не повод вернуть прежнее число вручную.
Если смещения нет, зафиксируйте основание, по которому оно назначено. Это может быть настройка торгового сервера, документация экспорта или сверенная операция. Не подставляйте текущий пояс своего компьютера: он описывает среду обработки, а не происхождение записи.
После преобразования не удаляйте исходную метку. Для разбора расхождений полезно хранить рядом минимум четыре значения: исходный текст, источник времени, применённое правило и результат в UTC. Одного исправленного столбца недостаточно для воспроизводимой проверки.
Почему одного смещения иногда мало?
Смещение +03:00 описывает отношение конкретной метки к UTC, но не правила региона на другие даты. Часовой пояс содержит историю и возможные изменения смещений. База часовых поясов IANA обновляется, когда меняются границы зон, смещения или правила сезонного перевода часов.
Это особенно важно для длинных выгрузок. Нельзя взять сегодняшнее смещение города и применить его ко всем прошлым операциям. Для исторических дат используют именованную зону, например Europe/Moscow, и актуальную базу правил, а не постоянное число, выбранное по текущим настройкам.
Во время перевода часов отдельное местное время может не существовать либо соответствовать двум разным моментам. На это прямо указывает RFC 9557. Если экспорт содержит только местные часы без смещения, неоднозначную запись нельзя надёжно восстановить без дополнительных данных.
Отдельно определите, по какому поясу строится календарный день отчёта. Сначала сравнивайте операции в UTC, затем вычисляйте отчётную дату в выбранной зоне. Иначе одна и та же сделка может попасть в разные сутки в журнале, отчёте брокера и внутренней панели.
Как проверить преобразование на реальных операциях?
Выберите несколько опорных записей: около полуночи, в начале и конце периода, а для регионов с сезонным временем — рядом со сменой смещения. Сверьте их с карточкой операции или другим первичным представлением в исходной системе. Номер операции и инструмент должны совпадать, чтобы не сравнить соседние исполнения.
Затем проверьте порядок событий. Открытие не должно оказаться позже связанного закрытия только из-за разных правил времени. Интервалы между событиями до и после преобразования должны сохраняться, если источник не округлял секунды и не выгружал разные типы времени.
Постройте контрольную сводку по дате до и после нормализации. Перемещение записей через границу суток ожидаемо, но общее число операций и их идентификаторы не должны меняться. Если проверяется весь входной файл, используйте также инструкцию Как проверить полноту CSV с торговыми операциями.
Для автоматической обработки правило часового пояса стоит включить в требования вместе с форматом входной даты, поведением при пустом смещении и контрольными примерами. Такие проверки относятся к разработке и проверке торговых инструментов: программа должна не только прочитать дату, но и показать, по какому правилу получила итоговое время.
Что должно остаться после проверки?
В проверенной таблице есть исходная временная метка, её источник, UTC-время и отдельно вычисленная отчётная дата. Для значения без зоны записано основание преобразования, а сомнительные строки не исправлены молча, а отмечены для сверки.
Контроль считается пройденным, когда опорные операции совпадают с исходной системой, последовательность событий сохранена, число записей не изменилось, а перенос через границу суток объясняется выбранным поясом. После этого даты можно использовать в журнале и сводных расчётах.
Источники
- RFC 3339: Date and Time on the Internet — RFC Editor
- RFC 9557: Timestamps with Additional Information — RFC Editor
- Time Zone Database — IANA
- Date and Time — MQL5 Reference
Материал носит информационный характер и описывает разработку и проверку программных инструментов. Он не является индивидуальной инвестиционной рекомендацией и не содержит предложения совершить сделку. Deskforge не является брокером, дилером, управляющей компанией или инвестиционным советником, не управляет средствами клиентов и не совершает сделок за них. Торговля на финансовых рынках связана с риском потери капитала; результаты тестирования на исторических данных и прошлые результаты не гарантируют будущих. Решение о сделках пользователь принимает самостоятельно.
Deskforge на связи
Где нас найти
Нажмите на карточку или наведите камеру на QR-код.