Clean Code (Robert C. Martin) mandates: *"Use exceptions, never return codes."* This principle assumes a language with `try`/`catch`/`throw` semantics (Java, C++, Python). MQL5 has **none of these constructs**. The language provides no mechanism to throw, propagate, or catch exceptions.
The native MQL5 API itself is built entirely on error codes:
-`OrderSend()` returns `bool` and fills `MqlTradeResult.retcode`
-`GetLastError()` returns the last runtime error code
- Every trade operation follows the pattern: `bool success` + `int error_code`
## Decision
Use the **bool return + output parameter** pattern for all fallible operations in the framework:
- **Callers must always check the return value**. Unlike exceptions, nothing forces the caller to handle the error. This is mitigated by the test suite (which validates both success and failure paths).