欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

MQL5 中的正则表达式用于处理正则表达式 - MetaTrader 5 库

author emer | 220 人阅读 | 0 人评论 |

RegularExpressions in MQL5 for working with regular expressions - library for MetaTrader 5

RegularExpressions in MQL5 for working with regular expressions - library for MetaTrader 5

RegularExpressions in MQL5 for working with regular expressions - library for MetaTrader 5

RegularExpressions in MQL5 for working with regular expressions - library for MetaTrader 5

RegularExpressions in MQL5 for working with regular expressions - library for MetaTrader 5

微软公司。源代码取自.Net框架4.6.1。 

注意:该库适用于 MetaTrader 5 build 1285 及更高版本。

将存档解压到终端数据文件夹
库代码位于:\MQL5\Include\RegularExpressions\
示例测试脚本可以在 \MQL5\Scripts\RegularExpressionsExamples\ 中找到

以下是 .Net Framework 4.6.1 中正则表达式的翻译。

要使用该库,请将“\MQL5\Include\RegularExpressions\”目录中的 Regex.mqh 文件包含在代码中。

该库提供了几个说明性示例,同时用作测试用例。所有样本均取自官方网站微软公司,它们生动地展示了与 C# 中正则表达式的主要区别以及它们在 MQL5 中的使用特点。

以下是有关正则表达式 MQL5 移植库包的更多详细信息:

文件中的正则表达式参数正则表达式选项.mqh

使用 MQL5 的正则表达式:

//--- C# 代码正则表达式 rx =新的正则表达式(@"\b(?<字>\w+)\s+(\k<字>)\b", RegexOptions.IgnoreCase);  细绳文字 =“那只敏捷的棕色狐狸跳过了那只懒狗。”;
MatchCollection matches = rx.Matches(text);foreach(比赛比赛匹配) 
  {
  //--- 处理  }//--- MQL5 代码正则表达式 *rx =新的正则表达式(“\\b(?<字>\\w+)\\s+(\\k<字>)\\b”, RegexOptions::IgnoreCase);        细绳文字 =“那只敏捷的棕色狐狸跳过了那只懒狗。”;
MatchCollection *matches = rx.Matches(text);
IEnumerator *en = matches.GetEnumerator();尽管(en.MoveNext()) 
  {
   匹配 *match = en.Current();
  //--- 处理}删除接收;删除比赛;删除恩;
正则表达式::清除缓存();
  • 从上面的例子可以看出,C#语法允许将'@'符号放在字符串前面忽略其中的所有格式标记。在 MQL5 中,未提供此方法,因此应显式定义正则表达式模式中的所有控制字符。

  • 使用 MQL5 正则表达式的示例:

    作为正则表达式的一个例子,考虑它们的应用程序来解析以 html 文件形式从终端下载的交易历史记录。

    为此,请创建一个具有“字符串”类型的单个输入参数的 EA,该参数将是沙箱文件

    RegularExpressions in MQL5 for working with regular expressions - library for MetaTrader 5

    该文档包含两个主要表:“订单”和“交易”。 

    创建正则表达式来解析文件:

    正则表达式 *rgx=新的正则表达式(“(>)([^<>]*)(<)”);

    考虑这个正则表达式:

    接下来,逐行读取文件并获取与此正则表达式对应的所有匹配项:

    细绳字符串=文件读取字符串(m_handel);
    MatchCollection *matches=rgx.Matches(str);

    html 文件的字符串,即“Orders”和“Deals”表的条目(元组),将具有最多的此类匹配,即分别为 23 和 27 个匹配。因此,剩下要做的唯一一件事就是从这些字符串中提取所有必要的信息。

    对于“订单”表:

    如果(匹配.Count()==23)
      {
      细绳 [11];
      为了整数我=0,j=1;我<11; i++,j+=2)
         {
          [i]=StringSubstr(匹配[j].Value(),1,StringLen(匹配[j].Value())-2);
         }
       m_list1.添加(新的订单记录());
      }

    已确认匹配数为23,因此处理的条目来自“Orders”表。创建一个字符串数组作为我们条目的初始表示。对所有奇数匹配创建迭代,使用以下方法获取这些匹配的值匹配[j][.Value()方法,修剪每个匹配的第一个和最后一个字符,对应于字符“>”和“<”。每个格式化的匹配都会写入先前声明的大批。之后创建一个实例订单记录(in)类,它代表“Orders”表的单个条目,并将其添加到m_列表1列表。该列表将解释“订单”表。

    “Deals”表将以类似的方式处理:

    如果(匹配.Count()==27)
      {
      细绳 [13];
      为了整数我=0,j=1;我<13; i++,j+=2)
         {
          [i]=StringSubstr(匹配[j].Value(),1,StringLen(匹配[j].Value())-2);
         }
       m_list2.添加(新的交易记录());
      }

    这里m_list2是一个指向的指针列表交易记录班级。它代表“交易”表。

    这两个名单都是贸易历史班级。该类是整个原始 html 文件的表示。此外,它还允许使用以下方法将简单的过滤器应用于“订单”和“交易”表:FindAllOrders(const int columnIndex,const T 值)FindAllDeals(const int columnIndex,const T 值)

    在 EA 中创建一个简单的图形界面来演示这些功能:

    RegularExpressions in MQL5 for working with regular expressions - library for MetaTrader 5

    使用此表单时,选择所需的表,选择列及其值来过滤表。按寻找按钮,下面将显示过滤后的表格,以及一些统计信息。这节省按钮将当前显示的表格存储到 csv 文件。保存的文件也将位于沙箱中,并具有名称结果.csv

    要了解更多有关MQL5 的正则表达式及其功能,使用提供的测试.mqh专家。它实现了许多正则表达式使用示例,涵盖了该库的所有主要功能。

    RegularExpressions in MQL5 for working with regular expressions - library for MetaTrader 5


    附件下载

    📎 TableListView.mqh (60.38 KB)

    📎 Tests.mq5 (139.55 KB)

    📎 TradeHistoryParsing.mq5 (55.11 KB)

    📎 Array.mqh (22.32 KB)

    📎 IComparable.mqh (4.98 KB)

    📎 dynamicmatrix.mqh (22 KB)

    📎 wrappers.mqh (16.99 KB)

    📎 Collection.mqh (12.54 KB)

    📎 Dictionary.mqh (42.58 KB)

    📎 EqualityComparer.mqh (8.65 KB)

    📎 ICollection.mqh (6.15 KB)

    📎 IComparer.mqh (6.62 KB)

    📎 IDictionary.mqh (6.88 KB)

    📎 IEnumerable.mqh (5.31 KB)

    📎 IEnumerator.mqh (10.39 KB)

    📎 IEqualityComparer.mqh (4.62 KB)

    📎 IList.mqh (5.7 KB)

    📎 KeyValuePair.mqh (6.34 KB)

    📎 LinkedList.mqh (28.3 KB)

    📎 List.mqh (38.62 KB)

    📎 TimeSpan.mqh (31.7 KB)

    📎 TimeSpanFormat.mqh (30.31 KB)

    📎 CharUnicodeCategory.txt (23.5 KB)

    📎 Regex.mqh (58.05 KB)

    📎 RegexBoyerMoore.mqh (18.01 KB)

    📎 RegexCapture.mqh (7.86 KB)

    📎 RegexCaptureCollection.mqh (10.25 KB)

    📎 RegexCharClass.mqh (97.97 KB)

    📎 RegexCode.mqh (22.25 KB)

    📎 RegexFCD.mqh (31.22 KB)

    📎 RegexGroup.mqh (8.72 KB)

    📎 RegexGroupCollections.mqh (11.25 KB)

    📎 RegexInterpreter.mqh (49.66 KB)

    📎 RegexMatch.mqh (22.94 KB)

    📎 RegexMatchCollection.mqh (11.04 KB)

    📎 RegexNode.mqh (32.45 KB)

    📎 RegexOptions.mqh (14.82 KB)

    📎 RegexParser.mqh (93.26 KB)

    📎 RegexReplacement.mqh (20.83 KB)

    📎 RegexRunner.mqh (31.31 KB)

    📎 RegexTree.mqh (8.47 KB)

    📎 RegexWriter.mqh (24.52 KB)

    Source: MQL5 #15242

    🔐
    请登录后参与评论
    注册满12小时后评论,即可解锁附件下载
    立即登录