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
Result
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
{
if (value <= 0.0)
{
return ResultValue
}
return ResultValue
}
ResultValue
{
return ResultValue
}
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))
.......
⚠ 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.