Обсуждение статьи "Возможности Мастера MQL5, которые вам нужно знать (Часть 86): Ускорение доступа к данным с помощью разреженной таблицы в пользовательском классе трейлинга"

 

Опубликована статья Возможности Мастера MQL5, которые вам нужно знать (Часть 86): Ускорение доступа к данным с помощью разреженной таблицы в пользовательском классе трейлинга:

В этой статье мы перерабатываем ранее опубликованные материалы о тестировании торговых стратегий с помощью Мастера MQL5, уделяя больше внимания качеству, очистке и обработке входных данных. В предыдущих статьях мы рассмотрели множество пользовательских классов сигналов, пригодных для использования в Мастере MQL5. Теперь перейдем к пользовательскому классу трейлинга, поскольку выход из позиции также является важной частью любой торговой системы. Основная тема этой статьи – эффективность работы с данными и запросы диапазона со сложностью O(1). В качестве основных технологий используются MQL5, SQLite и Python с Polars; алгоритм – разреженная таблица, а в качестве фильтра валидации используется индикатор ATR.

Многие советники с пользовательскими трейлинг-стопами сталкиваются с практическим ограничением, связанным с производительностью и качеством данных. На каждом баре, а иногда и на каждом тике они просматривают длинные исторические окна – обычно от 500 до 5 000 и более баров – в поисках максимумов и минимумов. Это линейно увеличивает время обработки и вызывает скрытый дрейф исполнения на VPS или в реальной торговле. В то же время данные, получаемые через встроенный механизм MetaTrader для доступа к истории, могут содержать пропуски и несогласованности, из-за которых поведение советника различается в тестере и при реальной работе.

В этой статье проблема рассматривается в более узком контексте:

  • (1) когда функция трейлинга многократно пересчитывает экстремумы диапазона на больших периодах анализа и с высокой частотой обновления, запросы O(N) становятся заметной причиной задержек и запаздывающего выхода из позиции; и
  • (2) советнику необходим воспроизводимый очищенный поток ценовых данных вместо несистемного чтения данных напрямую из терминала.

Для решения этих задач создадим структуру для запроса минимума/максимума на диапазоне со сложностью O(1) (разреженную таблицу) для поиска экстремумов за постоянное время. Затем объединим ее с пайплайном Python (Polars) → SQLite, который очищает и интерполирует данные тиков и баров, а также добавляет временные метки, чтобы советник получал детерминированные данные.


Автор: Stephen Njuki