Трейдинг с экономическим календарем MQL5 (часть 12): Хранение данных в SQLite и предотвращение повторных сделок
В этой статье мы заменяем встроенный CSV-снимок слоем SQLite, который сохраняет события календаря и идентификаторы сработавших сделок между перезапусками. База данных хранится в общей папке терминала и используется как графиками в реальном времени, так и тестером стратегий, поэтому оба режима читают одни и те же данные без перекомпиляции. Загрузчик по запросу с индикатором выполнения на холсте получает историю из API календаря и сохраняет ее для повторного использования в автономном режиме.
За пределами GARCH (Часть I): Сравнение моделей MMAR Мандельброта и GARCH Энгла
В этой статье мы начинаем построение мультифрактальной модели доходности активов (MMAR) на данных EURUSD на таймфрейме M5. Мы загружаем рыночные данные через Python API для MetaTrader5 и анализируем функцию разбиения на неперекрывающихся интервалах, чтобы проверить наличие мультифрактального масштабирования. Результаты проверки позволят сделать эмпирически обоснованный вывод, обладают ли данные фрактальными свойствами. Это необходимый шаг перед построением MMAR и для решения, стоит ли вообще выходить за рамки GARCH.
Интеграция внешних приложений с использованием OAuth MQL5 Community
Узнайте, как добавить функцию "Войти с помощью MQL5" в ваше Android-приложение с помощью процесса для кода авторизации OAuth 2.0. В этом руководстве рассматриваются регистрация приложения, эндпоинты, URI перенаправления, Custom Tabs, обработка диплинков, а также бэкенд на PHP, который обменивает код на токен доступа по HTTPS. Вы реализуете аутентификацию реальных пользователей MQL5 и получите доступ к данным их профиля, таким как ранг и репутация.
Создание объектно-ориентированного движка инференса ONNX на языке MQL5
В статье рассказывается, как запускать модели, обученные на Python, непосредственно в MetaTrader 5 с помощью функций ONNX терминала. Мы создаем класс MQL5, который инкапсулирует создание сеанса, фиксирует формы входных/выходных тензоров, применяет min-max-нормализацию признаков, чтобы повторять обработку, использованную при обучении, и запускает OnnxRun один раз на каждый бар, чтобы снизить нагрузку на ЦП. В результате получается надежный и удобный в сопровождении канал инференса для графиков в реальном времени и Тестера стратегий без использования сокетов или DLL-библиотек.
Создание графической библиотеки для MetaTrader 5 по образцу Cairo (Часть 1): Зачем терминалу собственный 2D-рендерер
В этой статье мы начинаем пошаговую разработку графического 2D-движка для MetaTrader. Мы введем единый стандарт представления цветов ARGB и реализуем поверхность с возможностью повторного использования — буфер пикселей типа uint, который загружается как динамический ресурс и отображается с помощью одного объекта OBJ_BITMAP_LABEL. Вы нарисуете прямоугольники и вертикальный градиент, убедитесь, что прозрачность здесь действительно работает, и освоите эффективный способ обновления с одним вызовом Flush.
Построение системы обнаружения дивергенций (Часть IV): Создание переиспользуемого модуля обнаружения дивергенций для MQL5
В статье логика обнаружения дивергенций, разработанная в этой серии, выносится в подключаемый файл DivergenceEngine.mqh, который можно повторно использовать в индикаторах и советниках на языке MQL5. В статье подробно описаны архитектура на основе структур, выбор осциллятора (MPO4 или RSI), работа с опорными точками и состоянием, а также минимальный API для доступа к данным. Советник на основе Parabolic SAR демонстрирует подключение модуля: коэффициент ускорения индикатора изменяется в зависимости от обнаруженной дивергенции. Этот пример дает понятную схему, которую можно повторно использовать без дублирования кода.
За пределами GARCH (Часть II): Оценка фрактальной размерности рынков
Опираясь на анализ функции разбиения из первой части, мы подробнее рассмотрим теоретическую основу, прежде чем завершить аналитический пайплайн. Сначала мы подробно и системно разберем показатель Херста: что он измеряет, что говорит о "памяти" рынка и почему важен для мультифрактальной модели доходности активов (MMAR). Затем мы дадим интуитивное объяснение мультифрактальных спектров и выясним, что f(alpha) показывает о неоднородности волатильности. Затем перейдем к реализации: определим функцию масштабирования tau(q), оценим H методом R/S и подгоним мультифрактальный спектр к четырем распределениям-кандидатам. К концу статьи у нас будет полный набор параметров для построения процесса MMAR в третьей части. Вторая часть серии из восьми статей.
За пределами GARCH (Часть III): Построение MMAR и вердикт
Получив во второй части мультифрактальные параметры, в этой статье мы построим полный процесс MMAR. Мы строим мультипликативный каскад торгового времени, генерируем фракционное броуновское движение с помощью алгоритма Дэвиса — Харта на основе БПФ и объединяем оба компонента в X(t) = B_H[theta(t)]. Прогноз волатильности получаем моделированием методом Монте-Карло по 1000 траекториям, а затем сравниваем его с прогнозом GARCH на тех же данных EURUSD на таймфрейме M5. Превосходит ли фрактальная архитектура Мандельброта по качеству прогноза подход Энгла, основанный на условной дисперсии? Третья часть серии из восьми статей, посвященной созданию нативной библиотеки и советника на MQL5.
Использование Экономического календаря MQL5 для фильтрации новостей (Часть 3): Сохранение работы при перезапусках терминала во время новостного окна
В статье представлена устойчивая к перезапуску модель хранения состояния для удаления стопов на время новостей. Состояние приостановки и исходные значения SL/TP для каждой позиции записываются в глобальные переменные терминала, считываются и реконструируются в OnInit() и удаляются после восстановления стопов. Это позволяет советнику продолжить активное окно приостановки после перекомпиляции или перезапуска и восстановить стопы только после окончания новостного окна.
Создание графической библиотеки для MetaTrader 5 по образцу Cairo (Часть 2): Точки, контуры и путь
Во второй части мы добавим слой геометрии в графическую библиотеку для MetaTrader 5, создаваемую по образцу Cairo. В ней определяется путь из точек с координатами двойной точности, сгруппированных в контуры, сохраняется признак того, является ли контур открытым или замкнутым, а вершины хранятся в плоском массиве с индексами начала контуров. Мы реализуем методы MoveTo, LineTo и Close, добавим базовые вспомогательные методы для построения фигур и демонстрационный пример, который отображает построенную геометрию для визуальной проверки и повторного использования.
За рамками REST и ZeroMQ: Создание моста Protocol Buffers между MetaTrader 5 и Python с выходом на gRPC для инференса в реальном времени
В этой статье мы определим контракт Protocol Buffers для обмена данными между MetaTrader 5 и Python и реализуем на языке MQL5 клиент Protobuf-over-TCP, передающий сообщения с префиксом длины: MQL5 нативно не поддерживает реальный gRPC. Небольшая прослойка на Python передает эти фреймы в полноценный сервер grpc.aio. Пока через нее выполняются только унарные RPC-вызовы, но на бэкенде уже работают и потоковые вызовы. Вы получите строго типизированные сообщения с контролем соответствия схеме, явные сообщения об ошибках, повторные попытки с задержкой между ними и кэш для тестера стратегий, позволяющий воспроизводить результаты тестирования на истории там, где сокеты недоступны.
Создание графической библиотеки для MetaTrader 5 по образцу Cairo (Часть 5): Правила заливки, отверстия и рамки
В пятой части мы добавим в растеризатор правило заливки, а в путь — вспомогательную функцию для построения обводки. Теперь движок поддерживает заливку по правилу ненулевого числа обхода и по правилу "чет-нечет". Выбор задается одним параметром типа перечисления, что позволяет создавать кольца, полноценные рамки, не закрашивающие внутреннюю область, и внутренние просветы глифов. Функция AddThickLine() строит обводки из заливок в рамках одного пути и одного прохода, сохраняя равномерную непрозрачность на стыках. На ее примере показано, почему для таких обводок требуется правило ненулевого числа обхода.
Создание графической библиотеки для MetaTrader 5 по образцу Cairo (Часть 4): Сглаживание, покрытие и композиция
Теперь растеризатор накапливает точное покрытие интервалов по оси X и покрытие по оси Y, вычисляемое по выборкам, а затем использует его при композиции через CairoBlendOver в формате ARGB без предумножения. CairoAaSamples задает число выборок по вертикали во время выполнения. Затраты почти линейно зависят от этого числа и в основном приходятся на ребра фигур. В результате получаются сглаженные границы, корректная композиция полупрозрачных фигур и возможность регулировать производительность.
Создание графической библиотеки для MetaTrader 5 по образцу Cairo (Часть 3): Ребра и первая фигура с заливкой
В третьей части реализован построчный растеризатор, написанный целиком на языке MQL5. Мы преобразуем отрезки пути в ребра, записанные в направлении сверху вниз, проходим по каждой строке, сортируем точки пересечения и применяем ненулевое правило заливки, чтобы определить, какие пиксели находятся внутри фигуры. В результате получается метод Fill(path, color, buffer, w, h), который рисует прямоугольники, звезды, глифы или фигуры с 2 000 ребрами без отдельного кода для каждого типа фигуры. Его можно сразу использовать в ваших проектах на языке MQL5.
Пакетный подход к разработке на языке MQL5 с помощью KnitPkg
В статье предлагается подход, который помогает повысить надежность продуктов для MetaTrader, создаваемых на MQL, и эффективность разработки за счет повторно используемых "пакетов", которыми управляет KnitPkg — менеджер проектов для MQL5/MQL4. Пакет можно использовать как составной элемент других пакетов или как основу для конечных артефактов, запускаемых непосредственно на платформе MetaTrader, например советников, индикаторов и других программ.
От новичка до эксперта: Выявление переворотов зон ликвидности на языке MQL5
В этой статье представлен индикатор на языке MQL5, который обнаруживает перевороты зон ликвидности и управляет ими. Он выявляет зоны предложения и спроса на старших таймфреймах с помощью паттерна "база → импульс", применяет формализованные пороговые значения для пробоя и силы импульса и автоматически переворачивает зоны при изменении структуры. В результате получается динамическая карта поддержки и сопротивления, которая сокращает необходимость ручной перерисовки и дает понятный и практически применимый контекст для оценки сигналов и ретестов.