交易员的正则表达式·综合运用
📘

交易员的正则表达式·综合运用

第 3/3 篇

◍ RegularExpressions 库自带的 20 个例程在测什么

MQL5 的 RegularExpressions 库除两个 EA 外,还在 Tests.mq5 里塞了 20 个例程,专门演示正则语法和库自身接口怎么跑。 MatchExamples 给出两种遍历匹配的思路:要么建 MatchCollection 一次性拿全部,要么用 Match.NextMatch() 逐个往后推。MatchGroups 讲怎么从捕获里抠出单独分组再继续处理;MatchResult 则演示 Match.Result(string) 按替代范式做扩展输出。 RegexConstructor 列出 Regex 类的三种构造:裸范式、带参数范式、带参数加超时毫秒数(控制比对最长尝试时长)。RegexEscape 看 Escape(string) 的转义行为,RegexIsMatch / RegexReplace / RegexSplit 分别覆盖各自静态方法的主要重载。 剩下如 Capture、Group、CaptureCollection、GroupCollection、MatchCollectionItem、MatchEvaluator、RegexOptions 等,基本都是把某一类对象(捕获、组、集合、选项)单独拎出来跑一遍。多数例程功能重叠,核心目的只是验证库在各种调用路径下行为一致。

「MQL5 正则与 .Net 语法的对应关系」

MQL5 在标准库里实现的正则表达式,覆盖了 .Net 常用语法的大部分集合,因此微软官方关于正则的文档至少在大面上可直接对照着用,不必重学一套规则。 Internal 文件夹内的相关类也遵循同一套实现逻辑,写自定义字符串匹配时可以直接调这些类,而不用自己造解析器。 实操上,开 MT5 进 MQL5/Include/Internal 翻 Regex 相关头文件,拿一段 .Net 文档里的模式(比如 \d{3}-\d{4})丢进 OnStart 测一遍,就能确认本地语法兼容到哪一档。外汇与贵金属波动剧烈,自动化文本解析仅用于日志或信号过滤,不构成任何交易决策依据。

顺着链接去挖原始素材

这一节本身没有新代码,只是把写前文时参考的几处外部资料摊开:C# 字符与正则理论、MSDN 里 string 与正则类文档,以及俄文原版发布页。想复现前文解析优化结果的整套逻辑,最好把 OptimizationResultParsing.mq5(2.18 KB)和 OptimizatorResultView.mqh(24.45 KB)先下到本地,再对照那些基础语言资料看,才不会卡在 MQL5 和标准库控件的衔接处。 有读者在 MT5 build 1340 实测时报过错:编译 TableListView.mqh 找不到 WndClient.mqh、Edit.mqh,原因是压缩包被解到了 MQL5\15242\Include 而非标准 Include 目录。后来作者回复已修复,但你拉新版本时仍建议手动丢进终端的 MQL5/Include/Controls 下,省得重踩。 外汇和贵金属品种用这套解析做策略复盘时波动剧烈、杠杆风险高,任何从历史优化里得出的倾向都只是概率,开 MT5 跑一遍自己的品种才作数。

常见问题

主要覆盖邮箱、日期、小数、HTML标签等常见文本模式的匹配与提取,可直接跑一遍看每个例程的输入输出,对照理解正则写法。
多数基础语法一致,注意转义符与分组引用写法可能略有差异,建议拿同一段文本在两边各跑一次比对结果。
小布可把你贴的交易日志或文本丢进对应例程做演示,并标出哪段被匹配到,省去手动翻代码。
顺着例程文件里的注释和引用链接去找原始文档,重点看模式说明和边界用例,比硬读代码更快。
先套用小数或数字提取例程,把模式里的位数限制改成你关心的精度,再跑文本验证即可。