Type-Safe Error Handling for MQL5 Without Exceptions

Type-Safe Error Handling for MQL5 Without Exceptions
Download ALL MT5 scripts (351)
YouTube Video Thumbnail



Similar MetaTrader Tools

Type-Safe Error Handling for MQL5 Without Exceptions

Info

The Type-Safe Error Handling for MQL5 Without Exceptions is a Script for MetaTrader 5 that this include file provides a value-or-error return type for mql5, so functions can report success or failure explicitly instead of through the global getlasterror() / resetlasterror() state — which is easy to forget, easy to overwrite, and forces out-parameters and magic return values. What it doesA function returns one object that either holds a value or an Error; the caller must check before using the value.

Usage

This tool is typically used for enhancing chart analysis and decision making.

Platform

This Script works exclusively on MetaTrader 5 (both build 600+ and newer versions).

Setup

Place the downloaded file in MQL5/Scripts folder via File ? Open Data Folder in MetaTrader 5.


How to Install and Use Type-Safe Error Handling for MQL5 Without Exceptions

1. Installation: Move your script file into the MQL/Scripts directory and restart the platform.

2. Execution: Drag the script onto a chart; it will perform a one-time action, such as closing all open orders or clearing chart objects.

3. Editing: Use MetaEditor (F4) to modify code, click "Compile," and verify no errors appear in the terminal before running.

4. Removing: Scripts stop automatically, but you can remove them manually by right-clicking the chart and choosing "Remove Script."

Frequently Asked Questions

Q: How are scripts different from EAs? A: Scripts execute a single action and then stop; EAs monitor the market and trade continuously.

Q: Can I assign a hotkey to a script? A: Yes, right-click the script in the Navigator, select "Set Hotkey," and define your preferred keyboard shortcut.

Q: Why did my script stop? A: Scripts are designed to stop immediately after finishing their programmed command; this is normal behavior.

What this tool does

This include file provides a value-or-error return type for MQL5, so functions can report success or failure explicitly instead of through the global GetLastError() / ResetLastError() state — which is easy to forget, easy to overwrite, and forces out-parameters and magic return values.

Typical Use Case

This Script excels in automated trading and technical analysis on MetaTrader 5.

Compatible Platform & Setup

This Script works on MetaTrader 5. Place the file in the MQL5/Scripts folder and restart the terminal.

Description & Settings

Related: similarity based market watch symbol mapping script - another powerful script for MetaTrader 5 traders.

This include file provides a value-or-error return type for MQL5, so functions can report success or failure explicitly instead of through the global GetLastError() / ResetLastError() state — which is easy to forget, easy to overwrite, and forces out-parameters and magic return values.

Also recommended: change chart and timeframe - similar script with strong performance on MetaTrader 5.


What it does

A function returns one object that either holds a value or an Error; the caller must check before using the value.

ResultValue — for value types (numbers, structs).
Result — the same contract for objects held by pointer (classes).
Error — a lightweight struct (code + description); codes map to readable names via EnumToString.
MQLError — a thin wrapper over GetLastError / ResetLastError / SetUserError.

Macros — TRY, RETURN_ON_ERROR, PRINT_ON_ERROR, RETURN_SAME_ON_ERROR, RESULT_ON_ERROR — for early-return propagation without boilerplate.

Optional callbacks — Then, Match, MapError (they take top-level or static functions; MQL5 has no closures).

Accessors: Value(), ValueOr(fallback), CurrentError(), IsError().

Usage

Stage functions (top-level — MQL5 has no closures)
ResultValue EnsurePositive(const double &value)
{
if (value <= 0.0)
{
return ResultValue::Fail("price must be positive");
}
return ResultValue::Ok(value);
}

ResultValue ToPips(const double &price)
{
return ResultValue::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); }

The pipeline: read -> validate -> transform -> (annotate error) -> handle

void RunPipeline()
{
SymbolDouble("EURUSD", SYMBOL_BID)
.Then(EnsurePositive)
.Then(ToPips)
.MapError(Describe)
.Match(OnOk, OnFail);
}

You may also like: clipboard - excellent alternative for script users on MetaTrader 5.

Source Code

#property copyright "RobotFX"
#property version "1.00"
#property script_show_inputs
#include <Common/ErrorHandling.mqh>
input string InpSymbol = "EURUSD";
ResultValue<double> SymbolDouble(const string symbol, const ENUM_SYMBOL_INFO_DOUBLE property)
{
   MQLError::Reset();
   double value = 0.0;
   if (!SymbolInfoDouble(symbol, property, value))

.......

Leave your opinion, ask a question, share some knowledge

Limitations & Risk Warning

  • This tool is provided for educational and testing purposes only.
  • Past performance does not guarantee future results.
  • Trading involves substantial risk of loss. Use on a demo account first.
  • Results may vary depending on market conditions, broker, and settings.
  • We recommend thorough backtesting and forward testing before using with real funds.
© ROBOTFX Free educational tools by RobotFX. Use entirely at your own risk; we are not liable for any financial losses incurred.