Обсуждение статьи "Создание системы торговой аналитики (Часть 3): Сохранение данных о сделках MetaTrader 5 в SQLite"

Опубликована статья Создание системы торговой аналитики (Часть 3): Сохранение данных о сделках MetaTrader 5 в SQLite:

В этой статье мы расширим бэкенд на Flask, чтобы надежно принимать, проверять и сохранять данные о закрытых сделках из MetaTrader 5 с помощью SQLite и Flask-SQLAlchemy. В нем реализованы проверка обязательных полей, преобразование временных меток, сохранение данных в транзакциях с откатом при ошибке и работающие эндпоинты получения всех сделок, отдельных записей и базовой сводки. В результате получается полноценный пайплайн данных с локальным тестированием: он сохраняет записи о сделках и предоставляет доступ к ним через структурированный API для дальнейшего анализа.

На этом этапе советник MetaTrader 5 надежно обнаруживает закрытые сделки и отправляет данные о них в API на Flask, который подтверждает получение каждого запроса. Однако данные о входящих событиях не сохраняются. Бэкенд возвращает успешный ответ, но записи в базе данных SQLite не создаются.

Это не позволяет проверить пайплайн данных. Нельзя получить сохраненные записи о сделках через API, убедиться в сохранности данных или использовать их для анализа.

В этой части мы расширим бэкенд, чтобы каждая сделка, отправленная советником, долговременно сохранялась в базе SQLite. Основное внимание уделяется четкому и проверяемому поведению API, которое можно проверить тестированием. Система будет:

  • принимать только корректные данные JSON через POST /api/v1/trades и возвращать ответы 4xx на некорректно сформированные запросы;
  • проверять обязательные поля, такие как symbol, order_ticket, deal_ticket, position_ticket, position_type, lot_size, entry_price, profit, open_time и close_time;
  • преобразовывать входящие значения к нужным типам, в том числе разбирать значения времени в формате YYYY.MM.DD HH:MM:SS и преобразовывать значения числовых полей;
  • создавать запись Trade в SQLite с фиксацией транзакции и вызовом db.session.rollback() при сбое;
  • возвращать 201 Created с созданным trade_id при успехе и ответы 5xx при непредвиденных ошибках сервера.

К концу этой части данные о закрытой сделке из MetaTrader 5 будут сохраняться в записи, доступной через API. Это завершит основной пайплайн данных.


Автор: Chacha Ian Maroa