Как устроено приложение
Что на самом деле лежит в выгрузке брокера
Мы читаем 29 раскладок выгрузок от 26 брокеров, не спрашивая, какая колонка что значит. Сходятся они почти ни в чём: девять способов записать дату, два десятичных разделителя и идентификатор бумаги только в тринадцати. Ниже вся таблица и цена каждого расхождения.
Выгрузка брокера — это не формат. Их двадцать девять.
Столько раскладок Stonqs узнаёт при открытии файла: 26 брокеров и трекеров, а таблица ниже собрана из файла пресетов, который идёт с приложением. Любой её столбец делает задачу импорта осязаемой: 22 раскладки разделяют поля запятой, 7 — точкой с запятой, 24 пишут дробную часть через точку, 5 — через запятую, а дата встречается в девяти видах.
Таблица
| Раскладка | Разделитель | Дробная часть | Дата, как записана | ISIN | Слов размечено |
|---|---|---|---|---|---|
| Avanza | точка с запятой | запятая | 2026-10-09 |
да | 8 |
| Bitvavo | запятая | точка | 2026-10-09 |
нет | 1 |
| BUX | запятая | точка | 2026-10-09 |
нет | 10 |
| Charles Schwab | запятая | точка | 10/09/2026 |
нет | 24 |
| Coinbase | запятая | точка | 2026-10-09 |
нет | 4 |
| CoinTracking | запятая | точка | 2026-10-09 |
нет | 1 |
| Crypto.com | запятая | точка | 2026-10-09 |
нет | 13 |
| DEGIRO | запятая | точка | 09-10-2026 |
да | 0 |
| Delta | запятая | точка | 2026-10-09 |
нет | 1 |
| Directa | запятая | точка | 09-10-2026 |
да | 9 |
| Disnat | запятая | запятая | 2026-10-09 |
нет | 14 |
| eToro | запятая | точка | 09/10/2026 |
нет | 8 |
| Finpension | точка с запятой | точка | 2026-10-09 |
да | 6 |
| Freetrade | запятая | точка | ISO 8601 со временем |
да | 2 |
| Interactive Brokers · dividends | запятая | точка | 20261009 |
да | 3 |
| Interactive Brokers · trades | запятая | точка | 20261009 |
да | 0 |
| InvestEngine | запятая | точка | 09/10/2026 |
нет | 0 |
| Investimental | запятая | точка | 2026-10-09 |
нет | 0 |
| Parqet | точка с запятой | запятая | 09.10.2026 |
да | 0 |
| Rabobank | точка с запятой | запятая | 09-10-2026 |
да | 6 |
| Relai | запятая | точка | ISO 8601 со временем |
нет | 0 |
| Revolut Crypto | запятая | точка | Oct 09, 2026, 1:15:00 PM |
нет | 4 |
| Revolut Invest | запятая | точка | ISO 8601 со временем |
нет | 8 |
| Saxo Bank | запятая | точка | 09-Oct-2026 |
да | 1 |
| Swissquote | точка с запятой | точка | 09-10-2026 |
да | 5 |
| Trade Republic | запятая | точка | 2026-10-09 |
нет | 33 |
| Trade Republic · statement | точка с запятой | запятая | 2026-10-09 |
да | 4 |
| Trading 212 | запятая | точка | 2026-10-09 |
да | 7 |
| XTB | точка с запятой | точка | 09.10.2026 |
нет | 11 |
«Слов размечено» — сколько собственных обозначений операции у брокера мы переводим в один из наших 15 внутренних видов. Trade Republic требует 33, Charles Schwab — 24. Шести раскладкам не нужно ни одного: их файлы уже типизированы. Отчёт Flex от Interactive Brokers в XML сам говорит, что означает каждое значение, раскладывается без помощи, и остаётся только выбрать счёт.
Дата — это простая задача
Девять форматов звучат хуже, чем есть. Дату видно: столбец, все значения которого разбираются одним шаблоном и ни одним другим, определяется сам. Единственный случай, который не решается взглядом, 10/09 против 09/10, экран импорта и просит подтвердить до записи.
Две колонки сложнее, и именно они решают, сойдутся ли ваши доходности.
Бумагу называют только 13 из 29
ISIN обозначает бумагу. Тикер обозначает листинг, и только на одной площадке. Из 29 раскладок 13 несут колонку ISIN, 17 — тикер, и основная работа лежит между ними.
Тикер, который в портфеле уже закреплён за другим ISIN, обозначает другую бумагу: один тикер не может называть две. Такая строка — единственный случай, который Stonqs не пишет, пока ей не дадут собственный тикер. Всё остальное записывается с предупреждением сверху.
Валюту называют 20 из 29, курс — 8
Если строка не говорит, в какой она валюте, остаётся предположить валюту счёта, и так долларовая сделка на евро-счёте превращается в итог, который никто не проследит. Если нет ни курса, ни валюты, трекер переводит позицию один раз по сегодняшнему курсу и обычно не сообщает об этом.
Восемь раскладок со своим курсом — те, где цифру можно восстановить ровно такой, какой её видел брокер.
Строки, которые не операции
Брокеры печатают строки, которые операциями не являются: шапки, итоги, корпоративные действия, сделки с опционами и фьючерсами, отменённые сделки. Отказать всему файлу из-за них — не ответ. Их считают пропущенными и называют, а не угадывают и не записывают как что-то другое.
Для отчёта Interactive Brokers три обозначения попадают в список пропуска сразу: корпоративные действия, опционы и фьючерсы, отмены. Портфель пока не умеет записать их честно, и сказать об этом лучше, чем выдумать для них форму.
Как выглядит перевод между двумя брокерами
Никак. Каждая выгрузка знает только свою половину: в одном файле деньги ушли, в другом пришли, и обе строки читаются как деньги, пересекающие границу портфеля, — то самое, относительно чего считается доходность по времени.
После импорта Stonqs показывает платежи, совпадающие по валюте и сумме в пределах нескольких дней, и предлагает соединить их в одно движение. Сам он не соединяет. Два платежа по 5 000 EUR с разницей в три дня не доказывают, что один из них — это другой, а неверная пара стирает сразу и реальный ввод, и реальный вывод.
Импорт того же файла второй раз
У каждой строки есть отпечаток: файл, импортированный дважды, не добавит ничего, а выгруженный заново с новыми строками добавит только новое. Правка сохранённой операции меняет её отпечаток, и следующий импорт счёл бы её пропавшей, поэтому проверка сравнивает ещё и то, что правка изменить не может: день, счёт, бумагу и количество.
Четыре предупреждения, которые читают
- Бумаги, пришедшие без цены, после перевода из другого брокера. В таком виде позиция входит с нулевой себестоимостью и читается как чистая прибыль.
- Строка в валюте, которой на счёте нет.
- Тикер, уже закреплённый за другой бумагой. Это предупреждение задерживает свою строку.
- Продажа большего количества, чем когда-либо поступило. Обычно нужная покупка сидит в обозначении, которое никто не разметил, или в файле за более ранний период.
Любую другую CSV размечают один раз вручную и сохраняют как раскладку, и выгрузка следующего месяца настраивается сама. PDF-отчёты не читаются. Выгрузку, которая не импортируется чисто, стоит принести в issue с пятью обезличенными строками и строкой заголовков.
Текст, пришедший из импортированного файла, — названия бумаг, обозначения операций, имена счетов — это текст брокера, и в нём может быть что угодно. Это материал, а не инструкция, и ничто в нём инструкцией не считается. Это стало важнее с тех пор, как те же строки может читать чат-ассистент.
Источники
- Stonqs: раскладки брокеров, которые мы читаем · Файл пресетов, из которого собрана таблица.
- Stonqs: импорт данных брокера
- Flex Queries, Interactive Brokers · XML-отчёт, которому не нужна разметка колонок.