От истории MT5 к понятному отчёту.
Реальные сделки. Отдельный учёт пополнений. Экспорт результата.
Скачать пример на Python · ZIP ↓
Пошаговая инструкция
- 0:00
От истории MT5 к понятному отчёту.
В этом уроке вы узнаете, как получить историю сделок MT5, рассчитать учтённый торговый результат и выгрузить понятный отчёт с помощью Python.
- 0:13
Подключитесь для чтения истории.
Откройте mt5.mrpc.pro и выберите ConnectEx. Укажите логин демосчёта, пароль и сервер брокера. Используйте TRIAL или свой ключ API. Необязательное поле id оставьте пустым. Для этой записи мы используем инвесторский пароль с доступом только для чтения. Консоль сохранит полученный идентификатор терминала.
- 0:41
Проверьте валюту счёта.
Выполните AccountSummary. Это демосчёт в долларах США. Его баланс составляет девяносто девять тысяч девятьсот девяносто девять долларов девяносто шесть центов. При отображении прибыли и расходов используйте валюту счёта.
- 1:01
Выберите завершённый период.
Выберите DealsHistory. Заполните inputFromUtc и inputToUtc временными метками с буквой Z в конце. Соответствующие поля времени брокера оставьте пустыми. В записи выбран период с первого октября до начала двадцать восьмого октября. Зафиксируйте его перед загрузкой следующих страниц.
- 1:27
Получите все страницы.
Получив HTTP Status Code 200, сначала проверьте error. Здесь ошибки API нет. При pageSize, равном двум, первый ответ содержит лишь две из тринадцати записей. Передайте nextPageToken в pageToken, сохранив фильтры. Продолжайте, пока nextPageToken не станет пустым.
- 1:53
Ордера, сделки и позиции.
Ордер — это торговое поручение, а сделка фиксирует его исполнение. AllHistoryOrders показывает записи ордеров. В DealsHistory поле order связывает сделку с тикетом ордера, а positionId объединяет исполнения одной позиции. Здесь у позиции вход объёмом ноль целых две сотых лота и два выхода по одной сотой.
- 2:19
Складывайте суммы с их знаками.
Для каждой сделки сложите profit, commission, swap и fee именно в том виде, как их вернул API. Сохраняйте знаки: отрицательную комиссию не нужно вычитать ещё раз. Эта закрывающая сделка принесла два цента без расходов. Учитывайте и входящие сделки: брокер может взимать комиссию при открытии.
- 2:45
Отделяйте пополнения.
Первая запись — пополнение демосчёта на сто тысяч долларов. Её тип BALANCE, ордер и позиция отсутствуют. Это не торговая прибыль. Отчёт отделяет сделки Buy и Sell от остальных типов. Отдельные списания, кредиты и корректировки проверяйте в файле other-deals.
- 3:10
Учитывайте границы отчёта.
Получены все тринадцать записей. Двенадцать торговых сделок дают минус четыре цента. Комиссии, свопы и сборы в этом примере нулевые. Пополнение учитывается отдельно. Это учтённые суммы за период, а не плавающая прибыль. У позиции, открытой раньше, часть расходов может остаться за границами отчёта.
- 3:36
Выгрузите данные через Python.
Скрипт вызывает тот же DealsHistory, проходит все страницы по курсору и проверяет итоговое число записей. Он использует десятичную арифметику и группирует суммы по positionId. Сохраните ключ API и идентификатор терминала в приватных переменных окружения. Скрипт не открывает и не закрывает сделки.
- 4:02
Откройте три файла отчёта.
Запустите скрипт с фиксированными датами UTC. Он создаст trade-deals.csv, other-deals.csv и summary.json. Пример выгрузки проверен на записанной истории. При ошибке API или неполном наборе страниц скрипт останавливается, а не показывает неполный итог.
- 4:26
Завершите сеанс.
В конце вызовите Disconnect в консоли, чтобы освободить терминал. Наш сеанс уже отключён. Вы получили историю, отделили пополнения от торгового результата и выгрузили отчёт, который можно проверить и использовать дальше.