Смотри, как бесплатно скачать роботов
Ищи нас в Telegram!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

RegularExpressions на MQL4 для работы с регулярными выражениями - библиотека для MetaTrader 4

Опубликовал:
MetaQuotes
Просмотров:
3020
Рейтинг:
(30)
Опубликован:
2017.03.27 13:39
Обновлен:
2018.09.11 14:51
\MQL4\Experts\RegExpressions Demo\ \MQL4\Include\Internal\ \MQL4\Include\Internal\Generic\ \MQL4\Include\Internal\TimeSpan\ \MQL4\Include\RegularExpressions\
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Реальный автор: Microsoft Corporation. Исходные коды взяты из .Net Framework 4.6.1

Примечание: Библиотека работает на 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:

  1. Как и в версии под .Net, в данной библиотеке реализовано хранилище (статическая кэш-память) регулярных выражений. Все неявно созданные регулярные выражения (экземпляры класса Regex) заносятся в это хранилище. Данный подход ускоряет работу скриптов, так отпадает необходимость заново строить регулярные выражения, если его шаблон совпадает с одним из уже имеющихся. По умолчанию размер хранилища равен 15. Метод Regex::CacheSize() возвращает или задаёт максимальное количество записей в текущей статической кэш-памяти скомпилированных регулярных выражений.
  2. Вторая особенность при работе с регулярными выражениями на MQL4 непосредственно вытекает из первой. И заключается она в том, что вышеупомянутое хранилище необходимо чистить. Для этого необходимо вызвать статическую функцию Regex::ClearCache(). Данную функцию рекомендуется вызвать только после того, как вы закончили работу с регулярными выражениями, иначе велика вероятность удалить нужные указатели.
  3. В отличие от .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();
  4. Как видно из примера выше, синтаксис языка C# позволяет ставить перед строками символ '@' для игнорирования всех знаков форматирования в ней. В MQL4 такой подход не предусмотрен, поэтому все управляющие символы в шаблоне регулярных выражений нужно прописывать явно.

Для более подробного ознакомления с библиотекой RegularExpressions для MQL4 и её возможностями создан эксперт Tests.mqh. В нем реализовано больше количество примеров использования регулярных выражений, затрагивающие весь основной функционал библиотеки.


CWebRequest CWebRequest

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

MTF MovingAverage Double MTF MovingAverage Double

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

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

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

InfoPanel InfoPanel

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