请观看如何免费下载自动交易
请在Twitter上找到我们!
加入我们粉丝页
有趣的脚本?
因此发布一个链接 -
让其他人评价
喜欢这个脚本? 在MetaTrader 5客户端尝试它
程序库

Result - type-safe error handling for MQL5 without exceptions - MetaTrader 5程序库

Maksym Yaroslavovych Libovych
Maksym Yaroslavovych Libovych
  • Software Engineer | .NET | MQL5 | NinjaTrader 在  Self-employed
  • 乌克兰
  • 180
MQL5 Developer — Expert Advisors & Custom Indicators | NinjaTrader, QuantConnect
• I build and maintain algorithmic trading systems in MQL5 — Expert Advisors, custom indicators, and strategy backtesting/optimization.
| Chinese English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
显示:
12
等级:
(1)
已发布:
\MQL5\Include\Common\ \MQL5\Include\
MqlError.mqh (8.26 KB) 预览
\MQL5\Scripts\
MQL5自由职业者 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

目的

此包含文件为 MQL5 提供了一种“成功或错误”的返回类型,因此函数可以明确地报告成功或失败,而无需通过全局的GetLastError()/ResetLastError() 状态——后者容易被遗忘、容易被覆盖,并且会强制使用输出参数和“魔法”返回值。


功能说明

函数返回一个对象,该对象要么包含一个值,要么包含一个错误;调用方在使用该值之前必须进行检查。

  • ResultValue<T> 用于值类型(数字、结构体)。
  • Result<T> 适用于通过指针持有的对象(类)的相同契约。
  • Error 一个轻量级结构体(代码 + 描述);代码通过 EnumToString 映射为可读名称。
  • MQLError 针对 GetLastError / ResetLastError / SetUserError 的轻量级封装。
  • 宏 — TRY RETURN_ON_ERROR PRINT_ON_ERROR RETURN_SAME_ON_ERROR RESULT_ON_ERROR 用于在无需冗余代码的情况下传播早期返回。
  • 可选回调 — Then Match MapError 它们接受顶级函数或静态函数;MQL5 不支持闭包)。

访问器: Value ()、 ValueOr (fallback)、 CurrentError ()、 IsError ()。

用法

错误处理

// 阶段函数(顶级函数——MQL5 不支持闭包)
ResultValue<double> EnsurePositive(const double &value)
{
   if (value <= 0.0)
   {
      return ResultValue<double>::Fail("price must be positive");
   }
   return ResultValue<double>::Ok(value);
}

ResultValue<double> ToPips(const double &price)
{
   return ResultValue<double>::Ok(price / _Point);
}

Error Describe(const Error &error)
{
   return Error::Create(error.code, "pipeline failed: " + error.description);
}

void OnOk(const double &value)  { PrintFormat("[pipeline] result = %.1f pips", value); }
void OnFail(const Error &error) { PrintFormat("[pipeline] %s", error.description); }

// 处理流程:读取 -> 验证 -> 转换 -> (标注错误) -> 处理
void RunPipeline()
{
   SymbolDouble("EURUSD", SYMBOL_BID)
      .Then(EnsurePositive)
      .Then(ToPips)
      .MapError(Describe)
      .Match(OnOk, OnFail);
}

由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/74427

SimpleTradeStats SimpleTradeStats

已平仓交易的统计数据。 该指标显示交易结果,并按“魔术号码”进行筛选。

V1N1 LONNY MT5 V1N1 LONNY MT5

亚洲区间突破日间交易自动交易系统。支持多品种交易,时间周期为M15/M30/H1。在伦敦交易时段开始前,根据PSAR + MACD + 随机指标的信号,在亚洲交易时段的预设区间外设置挂单止损单,并自动处理伦敦/纽约夏令时调整,支持结构化止损、追踪止损和盈亏平衡止损。

Pip Value Calculator Pip Value Calculator

实时点值、基于风险的仓位规模设定、自定义交易量风险分析及持仓盈亏——尽在一屏之中。

SR Zone Scanner SR Zone Scanner

支持多时间周期支撑位与阻力位区域扫描,附强度评级和即时提醒——M15、H1、H4、D1。