DF-ТРД-003 · Инструменты для трейдинга
Как проверить полноту CSV с торговыми операциями
- Как отличить целый CSV от файла, который просто открывается
- Какие поля нужны для проверки операций
- Как найти пропуски, дубли и обрезанный период
- С чем сверить итоговые суммы
CSV открылся в Excel, столбцы стоят ровно, а даты похожи на правду. Можно ли сразу строить отчёт? Нет: такой файл может не содержать начало периода, комиссии, частичные исполнения или неторговые списания.
Полноту нужно проверять в трёх слоях: корректно ли разобрана структура файла, все ли нужные виды операций вошли в выгрузку и сходятся ли итоги с исходной системой. Только после этого данные пригодны для расчётов.
Если задача пока ограничивается ручным учётом, пригодится отдельная инструкция про журнал сделок трейдера. Здесь разберём другой этап — проверку входного файла до отчёта.
Что считать полной выгрузкой?
Сначала зафиксируйте границы проверки: счёт, начальную и конечную дату, часовой пояс и момент создания файла. Запишите также, какие разделы экспортировались: исполненные операции, заявки, пополнения, списания или только закрытые позиции.
Полный файл покрывает заданный период и содержит все типы записей, которые влияют на нужный отчёт. Наличие первой и последней строки само по себе этого не доказывает: внутри диапазона могут отсутствовать отдельные дни или категории операций.
Не смешивайте заявку и исполнение. В документации MQL5 заявка описана как поручение выполнить операцию, а сделка — как факт исполнения. У заявки есть состояние, включая частичное исполнение, поэтому одна строка заявки не заменяет данные о фактических исполнениях.
Для отчёта заранее выберите единицу учёта. Если расчёты строятся по исполнениям, основной набор должен состоять из сделок, а идентификаторы заявок и позиций нужны для связи записей. На странице разработки и проверки торговых инструментов тот же принцип используется для воспроизводимой проверки: сначала фиксируются данные и сценарий, затем оценивается результат программы.
Как проверить структуру CSV?
Не оценивайте количество записей по числу видимых строк в текстовом редакторе. RFC 4180 допускает перенос строки внутри поля, если такое поле заключено в двойные кавычки. Запятые и двойные кавычки внутри значения тоже требуют специальной обработки.
Откройте файл через импорт данных и явно укажите кодировку, разделитель и признак заголовка. RFC описывает формат с запятой, но конкретный экспортёр может использовать другой разделитель. Если настройки импорта выбраны неверно, несколько полей сольются в одно или, наоборот, один комментарий распадётся на столбцы.
После импорта проверьте четыре свойства:
- у записей одинаковое число полей;
- заголовки не повторяются посреди файла;
- даты, идентификаторы и числовые значения разобраны в ожидаемые типы;
- пустое значение не превратилось автоматически в ноль.
Отдельно найдите строки, которые импортёр пропустил или поместил в один столбец. Если структура нарушена, дальнейшая сверка бессмысленна: сначала нужно повторить экспорт либо исправить параметры чтения, сохранив исходный файл без изменений.
Какие поля и операции сверять?
Для исполнения минимально полезны его уникальный идентификатор, время, тип, инструмент, направление входа или выхода, объём, цена и связь с заявкой или позицией. Для денежного отчёта также нужны комиссия, сбор, перенос позиции и финансовый результат — если эти поля предоставляет источник.
Документация MQL5 перечисляет у сделки отдельные свойства для комиссии, сбора, переноса и результата. Там же указаны неторговые типы: балансовые операции, кредит, дополнительные комиссии, проценты, дивиденды и налоги. Если выгрузить только покупки и продажи, изменение средств на счёте может не сойтись.
Сначала проверьте уникальность идентификатора исполнения. Повтор может появиться после объединения пересекающихся выгрузок. Если устойчивого идентификатора нет, составной ключ из времени, инструмента, типа, объёма и цены годится лишь для поиска кандидатов: две реальные операции способны совпасть по этим полям.
Затем сгруппируйте записи по типу и дате. Необычный ноль между активными днями, резкий обрыв в конце месяца или отсутствие целой категории — повод вернуться к фильтрам экспорта. Это не доказательство пропуска, а точка для проверки по исходной системе.
Как выполнить итоговую сверку?
Сравнивайте CSV с отчётом того же счёта за тот же период и в том же часовом поясе. Зафиксируйте правило границ: входит ли операция ровно в начальный и конечный момент. Иначе расхождение на стыке двух выгрузок будет повторяться при каждом обновлении.
Сверьте число исполнений по типам, а затем отдельные денежные итоги: комиссии, сборы, переносы, результат и балансовые изменения. Общий объём по разным инструментам складывать в одно число обычно бесполезно — лучше сравнивать его отдельно по каждому инструменту.
Проверьте связи между сущностями. У исполнения должен сохраняться идентификатор заявки, если источник его предоставляет; у связанных входов и выходов — идентификатор позиции. Запись без связи не обязательно ошибочна, но её нужно вынести в список исключений и разобрать отдельно.
В конце сохраните исходный файл, параметры импорта и короткий протокол: период, количество записей по типам, найденные дубли, необъяснённые пропуски и результаты сверки. Готовность определяется не тем, что таблица выглядит аккуратно, а отсутствием необъяснённых расхождений.
Источники
- RFC 4180: Common Format and MIME Type for CSV Files — RFC Editor
- Deal Properties — MQL5 Reference
- Order Properties — MQL5 Reference
Материал носит информационный характер и описывает разработку и проверку программных инструментов. Он не является индивидуальной инвестиционной рекомендацией и не содержит предложения совершить сделку. Deskforge не является брокером, дилером, управляющей компанией или инвестиционным советником, не управляет средствами клиентов и не совершает сделок за них. Торговля на финансовых рынках связана с риском потери капитала; результаты тестирования на исторических данных и прошлые результаты не гарантируют будущих. Решение о сделках пользователь принимает самостоятельно.
Deskforge на связи
Где нас найти
Нажмите на карточку или наведите камеру на QR-код.