Обсуждение статьи "Трейдинг с экономическим календарем MQL5 (часть 12): Хранение данных в SQLite и предотвращение повторных сделок"

Опубликована статья Трейдинг с экономическим календарем MQL5 (часть 12): Хранение данных в SQLite и предотвращение повторных сделок:

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

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

Поток данных становится асимметричным и упорядоченным. В режиме реального времени при каждом обновлении API календаря теперь выполняется upsert (вставка или обновление) каждого события в базу данных в рамках одной транзакции, поэтому состояние данных на диске остаётся синхронизированным с тем, что программа видит в памяти. Новый входной параметр позволяет пользователю запросить однократную загрузку данных за любой исторический диапазон дат для начального наполнения базы данных; при этом поверх отображается индикатор выполнения, показывающий процент и количество записей по мере накопления строк. В режиме тестера программа вообще не выполняет вызовов API — она запрашивает таблицу событий за настроенное окно бэктеста и передаёт результат напрямую в тот же конвейер фильтрации и отрисовки, который используется в режиме реального времени. Список идентификаторов сработавших сделок загружается один раз при запуске из истории базы данных за последние двадцать четыре часа, восстанавливая контекст предотвращения повторных сделок, оставленный предыдущим сеансом. Ниже представлена визуализация того, чего мы намерены достичь.

СХЕМА ПОТОКА ДАННЫХ В БАЗЕ ДАННЫХ


Автор: Allan Munene Mutiiria

Вау, это же просто исчерпывающе. Отличная работа, Gee! 👍
Solomon Anietie Sunday #:
Вау, это же очень подробно. Отличная работа, gee! 👍
Добро пожаловать и спасибо за добрые отзывы.