Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5

RegularExpressions на MQL4 для работы с регулярными выражениями - библиотека для MetaTrader 4
- Опубликовал:
- MetaQuotes
- Просмотров:
- 3172
- Рейтинг:
- Опубликован:
- 2017.03.27 13:39
- Обновлен:
- 2018.09.11 14:51
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Примечание: Библиотека работает на MetaTrader 4 build 1384 и выше.
Для работы нужно распаковать архив в папку каталог_данных_терминала.
Коды библиотеки размещаются в папке: <каталог_данных_терминала>\MQL4\Include\RegularExpressions\
Примеры тестовых скриптов размещаются в папке: <каталог_данных_терминала>\MQL4\Experts\RegExpressions Demo\Tests.m4
RegularExpressions для MQL4 - реализация обработчика регулярных выражений .NET Framework 4.6.1.
Регулярные
выражения предоставляют формальный язык для быстрой и гибкой обработки
текста. Каждое регулярное выражение является шаблоном(маской), для
которого обработчик регулярных выражений пытается найти совпадения в
исходном текстом. Шаблон состоит из односимвольных или многосимвольных
литералов,
операторов или конструкций.
Для реализации обработчика регулярных выражений в .NET
Framework используется традиционная NFA-машина (NonDeterministic Finite-state Automaton
– недетерминированные конечные автоматы), которая выполняет поиск с
возвратом для регулярных выражений. Аналогичные обработчик регулярных
выражений использовались в Perl,
Python, Emacs и Tcl. Использование NFA-машины отличает его от более
быстрых, но и менее функциональных DFA-машин (детерминированный конечный
автомат),
предназначенных только для регулярных выражений и используемых в awk,
egrep или lex.
Обработчик регулярных выражений .NET Framework имеет в себе основные функции NFA-машины, а также полный набор
структурных элементов, позволяющий управлять процессом
поиска с возвратом. Используя данные структуры программист имеет возможность для существенного ускорения
поиска или для выбора предпочтительных расширений.
Основные возможности обработчика регулярных выражений .NET Framework:
Ленивые кванторы: ??, *?, +?, {n,m}?.
Положительный поиск: (?=subexpression).
Отрицательный поиск: (?!subexpression).
Условная оценка: (?(expression)yes|no) and (?(name)yes"> no ) и (?(name)yes|no) ).
Сбалансированные определения групп: (?<name1-name2> subexpression).
Не возвращающаяся ("жадная") часть выражения: (?>subexpression).
Поиск совпадений справа налево. Для этого в метод
сопоставления статических экземпляров или в сам конструктор класса Regex передаем параметер RegexOptions::RightToLeft.
Положительный и
отрицательный поиск назад: (?<=subexpression) для положительного
поиска назад и (?<!subexpression) для отрицательного поиска назад.
С данной библиотекой все эти возможности будут доступны средствами языка MQL4.
Описание:
Здесь представлен перевод RegularExpressions c .Net Framework 4.6.1.
Для работы с библиотекой необходимо подключить к вашему коду файл Regex.mqh из директории \MQL4\Include\RegularExpressions\.
Также вместе с библиотекой прилагается несколько демонстрационных примеров, одновременно выполняющих роль тест-кейсов. Все примеры взяты с официального сайта Microsoft Corporation, они наглядно показывают основные отличия от регулярных выражений на C# и особенности использования их на MQL4.
Подробнее о пакетах портированной библиотеки RegularExpressions MQL4:
Пакеты |
Описание |
---|---|
CharUnicodeInfo.mqh |
Заархивированный txt для определения Unicode-категорий для всех символов (включая и нелатинские символы). |
RegexCapture.mqh |
Представляет результаты одной успешной записи части выражения. |
RegexCaptureCollection.mqh |
Представляет набор записей, сделанных одной группой записи. |
RegexGroup.mqh | Представляет результаты отдельной группы записи. |
RegexGroupCollections.mqh | Возвращает набор записанных групп в одном сопоставлении. |
RegexMatch.mqh | Представляет результаты из отдельного совпадения регулярного выражения. |
RegexMatchCollection.mqh | Представляет
набор успешных совпадений, обнаруженных путем итеративного применения
шаблона регулярного выражения к входной строке. |
Regex.mqh | Представляет неизменяемое регулярное выражение. |
RegexOptions.mqh | Предоставляет перечисленные значения для использования при задании параметров регулярных выражений. |
Параметры регулярных выражений из файла RegexOptions.mqh:
Параметр | Описание |
---|---|
None | Параметры не установлены. |
IgnoreCase | Регистр при поиске совпадений не учитывается. |
Multiline | Указывает многострочный режим. |
ExplicitCapture | Не захватывать неименованные группы. Единственные допустимые выделения — это явно именованные или нумерованные группы в формате (?<имя> часть выражения). |
Singleline | Указывает однострочный режим. |
IgnorePatternWhitespace | Устраняет из шаблона разделительные символы без escape-последовательности и включает комментарии, помеченные символом "#". |
RightToLeft | Указывает, что поиск будет выполнен в направлении справа налево, а не слева направо. |
Debug | Указывает, что программа работает под отладчиком. |
ECMAScript | Включает ECMAScript-совместимое поведение для выражения. Это значение может быть использовано только вместе со значениями IgnoreCase и Multiline. |
Особенности работы с RegularExpressions для MQL4:
- Как и в версии под .Net, в данной библиотеке реализовано хранилище (статическая кэш-память)
регулярных выражений. Все неявно созданные регулярные выражения
(экземпляры класса Regex) заносятся в это хранилище. Данный подход
ускоряет работу скриптов, так отпадает необходимость заново строить
регулярные выражения, если его шаблон совпадает с одним из уже
имеющихся. По умолчанию размер хранилища равен 15. Метод Regex::CacheSize() возвращает или задаёт максимальное количество записей в текущей статической кэш-памяти скомпилированных регулярных выражений.
- Вторая особенность при работе с регулярными выражениями на MQL4 непосредственно вытекает из первой. И заключается она в том, что вышеупомянутое хранилище необходимо чистить. Для этого необходимо вызвать статическую функцию Regex::ClearCache(). Данную функцию рекомендуется вызвать только после того, как вы закончили работу с регулярными выражениями, иначе велика вероятность удалить нужные указатели.
- В отличие от .Net, в MQL4 не реализован цикл foreach, а следовательно, и работа с перечислениями будет отличаться. Пример:
//--- Код на C# Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b", RegexOptions.IgnoreCase); string text = "The the quick brown fox fox jumped over the lazy dog dog."; MatchCollection matches = rx.Matches(text); foreach (Match match in matches) { //--- обработка }
//--- Код на MQL4 Regex *rx = new Regex("\\b(?<word>\\w+)\\s+(\\k<word>)\\b", RegexOptions::IgnoreCase); string text = "The the quick brown fox fox jumped over the lazy dog dog."; MatchCollection *matches = rx.Matches(text); IEnumerator<Match*> *en = matches.GetEnumerator(); while(en.MoveNext()) { Match *match = en.Current(); //--- обработка } delete rx; delete matches; delete en; Regex::ClearCache();
- Как видно из примера выше, синтаксис языка C# позволяет ставить перед строками символ '@' для игнорирования всех знаков форматирования в ней. В MQL4 такой подход не предусмотрен, поэтому все управляющие символы в шаблоне регулярных выражений нужно прописывать явно.
Для более подробного ознакомления с библиотекой RegularExpressions для MQL4 и её возможностями создан эксперт Tests.mqh. В нем реализовано больше количество примеров использования регулярных выражений, затрагивающие весь основной функционал библиотеки.

Класс-обертка для функции WebRequest.

Простой вариант построения средней для текущего/старшего временного периода, сразу отображаются две средних, рассчитанных по данным указанными в параметрах.

Построение тренда с применением паттерна поглощения

InfoPanel - информационный индикатор по символу, на который он установлен.