DF-ТРД-005 · Инструменты для трейдинга
Дубли торговых операций в выгрузке: как найти и проверить
- Как отличить точный дубль от похожей операции
- Какие поля включить в ключ сравнения
- Как найти повторы в Power Query и pandas
- Как проверить результат перед удалением строк
В выгрузке две строки совпадают по времени, инструменту, объёму и цене. Можно удалить одну из них? Пока нет: это может быть повтор, а может быть две отдельные операции, которые внешне похожи.
Безопасная проверка начинается не с удаления, а с определения ключа — набора полей, по которому строки считаются одной операцией. Затем нужно показать все совпавшие строки рядом, проверить их различия и только после этого решить, какие записи лишние.
Если источник передаёт уникальный идентификатор операции, он обычно становится основой ключа. Если такого поля нет, совпадение времени, цены и объёма даёт лишь кандидата на дубль. Автоматически удалять такую строку нельзя.
Какие строки считать дублями?
Точный дубль совпадает по всем значимым полям выгрузки. Он часто появляется, когда один файл импортировали дважды или объединили пересекающиеся периоды. Но даже здесь сначала исключите служебные столбцы: дата скачивания или номер строки могут различаться, хотя сама запись повторяется.
Дубль по ключу совпадает только по выбранным полям. Для проверки могут использоваться счёт, идентификатор операции, вид записи, инструмент, время, направление, объём и цена. Состав зависит от схемы конкретного источника, поэтому названия и смысл столбцов нужно сверить с его документацией.
Похожая строка — ещё не дубль. Один идентификатор заявки может встречаться в нескольких записях, если выгрузка отдельно отражает части исполнения, комиссии, исправления или разные состояния. Такие строки различаются по смыслу, даже когда часть значений совпадает.
| Вид совпадения | Что сравнивать | Что делать |
|---|---|---|
| Точный повтор | Все содержательные поля | Проверить происхождение и пометить лишнюю копию |
| Повтор по ключу | Выбранный набор полей | Сопоставить различающиеся столбцы и правила источника |
| Внешне похожие строки | Время, инструмент, цена или объём | Не удалять без дополнительного идентификатора |
Как найти повторы в Power Query?
Сохраните исходный файл отдельно и работайте с копией. При загрузке добавьте индекс строки: он поможет вернуться к исходному месту записи и зафиксировать, какая именно строка была проверена.
Для поиска точных повторов выделите все содержательные столбцы и примените команду сохранения дубликатов. Для проверки по ключу выделите только поля ключа. Официальная документация Power Query подтверждает, что поиск выполняется по выбранным столбцам и может как удалить, так и оставить только повторяющиеся строки.
Сравнение текста в Power Query чувствительно к регистру. Значения buy и BUY будут различаться. Приводить регистр к одному виду стоит лишь там, где регистр действительно не меняет смысл поля. Время и числовые значения не следует округлять ради совпадения: так можно объединить разные операции.
Не запускайте удаление сразу после фильтра. Microsoft предупреждает, что Power Query не обещает сохранить именно первое в наборе совпадение. Сначала вынесите найденные группы в отдельную таблицу, добавьте решение по каждой группе и сохраните основание для исключения строки.
Как проверить выгрузку скриптом?
В pandas метод DataFrame.duplicated умеет сравнивать все столбцы или указанный набор. Параметр keep=False помечает каждого участника повторяющейся группы, поэтому на проверку попадут и первая строка, и последующие совпадения.
import pandas as pd
df = pd.read_csv("operations.csv")
key = ["account", "operation_id", "type", "symbol", "time", "volume", "price"]
duplicates = df[df.duplicated(subset=key, keep=False)].sort_values(key)
duplicates.to_csv("duplicates-for-review.csv", index=False)
Названия полей в примере условные: их нужно заменить столбцами своей выгрузки. Отдельно полезно выполнить сравнение по всем столбцам. Если две проверки дают разные результаты, значит среди совпадений по ключу есть строки с отличиями, которые требуется разобрать.
Перед сравнением убедитесь, что CSV прочитан правильно. RFC 4180 описывает запись CSV как последовательность полей и строк, допускает заголовок и требует учитывать пробелы как часть значения. Поля с запятыми, переносами строк или двойными кавычками должны разбираться с учётом экранирования, а не простым разделением текста по запятой.
Какие совпадения нельзя удалять автоматически?
Сначала проверьте уникальные идентификаторы. Если у строк разные идентификаторы операции или исполнения, совпадение остальных полей само по себе не подтверждает повтор. Причину различия нужно искать в правилах формирования выгрузки.
Затем сравните тип записи, состояние, комиссию, объём и точность времени. Отличие хотя бы в одном содержательном поле может означать отдельное событие. Особенно опасно выбирать ключ только из даты, инструмента и цены: такой набор не различает несколько операций с одинаковыми параметрами.
Если файлы собираются за несколько периодов, проверьте их границы. Например, выгрузки за 1–10 и 10–20 число могут обе содержать записи за 10 число. Тогда повтор возник при объединении файлов, а не в исходной системе.
До поиска дублей стоит проверить, все ли записи вообще попали в файл. Порядок проверки полей и контрольных итогов описан в статье о полноте CSV с торговыми операциями. Иначе очистка повторов создаст аккуратную таблицу, но не обнаружит пропуски.
Как проверить результат очистки?
Не заменяйте исходную выгрузку очищенным файлом. Сохраните отдельно исходник, таблицу кандидатов, список исключённых строк и итоговую версию. Для каждой удалённой записи должны быть указаны ключ, оставленная строка и причина решения.
Сверьте количество строк по формуле: исходные строки равны сохранённым плюс исключённым. Затем повторите поиск по тому же ключу. В итоговой таблице не должно остаться необъяснённых повторяющихся групп, но допустимые совпадения нужно оставить и пометить.
После этого сравните контрольные итоги до и после очистки: число операций, суммы объёмов и комиссий по счёту, дате и инструменту. Изменение должно соответствовать только подтверждённым повторам. Неожиданное расхождение означает, что правило захватило лишние строки.
Если такая проверка нужна регулярно, ключ, исключения и контрольные итоги лучше закрепить в воспроизводимом сценарии. Подход к передаче исходников и отчёта о проверке описан на странице разработки торговых инструментов.
Источники
- Working with duplicate values — Microsoft Learn
- pandas.DataFrame.duplicated — pandas
- RFC 4180: Common Format and MIME Type for CSV Files — RFC Editor
Материал носит информационный характер и описывает разработку и проверку программных инструментов. Он не является индивидуальной инвестиционной рекомендацией и не содержит предложения совершить сделку. Deskforge не является брокером, дилером, управляющей компанией или инвестиционным советником, не управляет средствами клиентов и не совершает сделок за них. Торговля на финансовых рынках связана с риском потери капитала; результаты тестирования на исторических данных и прошлые результаты не гарантируют будущих. Решение о сделках пользователь принимает самостоятельно.
Deskforge на связи
Где нас найти
Нажмите на карточку или наведите камеру на QR-код.