MQL5 Algo Trading
507K subscribers
3.36K photos
3 videos
3.36K links
The best publications of the largest community of algotraders.

Subscribe to stay up-to-date with modern technologies and trading programs development.
Download Telegram
A script for MT5 audits tick-value properties across every symbol in Market Watch: SYMBOL_TRADE_TICK_VALUE, SYMBOL_TRADE_TICK_VALUE_LOSS, and SYMBOL_TRADE_TICK_VALUE_PROFIT.

This matters for EAs that size positions from tick value. On many brokers, especially with cross-currency pairs, LOSS and PROFIT can differ. Using LOSS yields a conservative risk estimate and smaller lots. Using the generic tick value often matches PROFIT, producing slightly larger positions than intended.

Workflow: add symbols to Market Watch, run the script on any chart, and read the summary in the Experts tab. Optional CSV export writes full per-symbol results to MQL5/Files/ to avoid log line limits.

Symbols are classified as ALL_EQUAL, TV_MATCHES_PROFIT, TV_MATCHES_LOSS, or ALL_DIFFER, followed by an aggregate count per category.

πŸ‘‰ Read | Quotes | @mql5dev
❀21πŸ‘4
Utility script sets Stop Loss on all open positions using a per-position maximum loss defined in the account deposit currency (for example, 50 units). The calculation works across any forex symbol and deposit currency by using SYMBOL_TRADE_TICK_VALUE_LOSS for automatic conversion.

For each position, the script derives an SL price that targets the configured loss if hit, then validates broker stop and freeze levels before sending a modification request. Positions are skipped when the existing SL is already within one tick of the target.

If market movement makes the computed SL invalid under broker constraints, the script leaves the position unchanged and logs a specific reason for the rejection, enabling quick diagnosis of unmodifiable trades.

πŸ‘‰ Read | CodeBase | @mql5dev
❀15πŸ‘9πŸ‘1
This installment tackles a recurring issue in an MQL5 volatility library ported from Python’s ARCH: identical data and starting values produced noticeably different GARCH-family parameters in MetaTrader 5. Log-likelihood verification with fixed Python parameters showed the MQL5 objective was correct, narrowing the mismatch to the optimizer’s behavior rather than model math.

To improve cross-platform parity, the library replaces ALGLIB’s minNLC (penalty/interior-point style) with SLSQP, matching ARCH’s approach. SLSQP solves a sequence of quadratic subproblems, enforces constraints via an active-set method, and targets KKT satisfactionβ€”useful for variance non-negativity and stationarity constraints that must be respected tightly.

An MQL5-native SLSQP (Fortran Kraft port) is integrated via CSLSQP, adding constraint abstractions, optional variable clippi...

πŸ‘‰ Read | VPS | @mql5dev
❀14πŸ‘11
MMAR research in Python has covered data loading, partition scaling, Hurst extraction, spectrum fitting, cascade construction, fBM generation, Monte Carlo tests, and benchmarking versus GARCH, with MMAR showing stronger results.

Operational use in MetaTrader 5 requires a native MQL5 implementation. The current focus is a dependency-free library that reacts per tick and integrates with Strategy Tester without bridge processes or IPC latency.

Work starts with the Partition Analysis engine in MQL5. It computes S_q(dt) across log-spaced time scales and a q-grid, runs OLS on log-log fits to obtain tau(q), estimates H via tau(q)=0 with GHE as fallback, and applies diagnostics to confirm multifractality from scaling quality and curve shape.

πŸ‘‰ Read | Quotes | @mql5dev
❀15πŸ‘10πŸ”₯4
Candlestick patterns can be treated as ordered strings once each candle is encoded into a finite alphabet (e.g., bullish β€œAHEGD”, bearish β€œahegd”). This converts price-action pattern search into a permutation problem that can be exhaustively counted and generated in MQL5.

Two cases are covered: permutations without repetition, computed as P(n,r)=n!/(n-r)! (or efficiently via a descending product), and permutations with repetition, computed as n^r. The article shows how quickly the search space grows as r increases, making manual pattern discovery unrealistic.

An MQL5 utility is built in two parts: a calculator that validates inputs and reports counts, and generators that output all sequences as string arrays. The generators use recursive backtracking, with a β€œused” mask for no-repetition and free reuse for repetition, enabling systematic backtests ...

πŸ‘‰ Read | AppStore | @mql5dev
❀25πŸ‘15πŸ‘Œ3
Two recent TASC articles (July and August 2021) described Moving Average Bands and Band Width as trend-following tools. The method tracks a shorter-term moving average relative to a longer-term moving average, rendering bands that help quantify directional bias and consolidation versus expansion.

An updated implementation keeps the original logic but adds one practical parameter: the input price can be selected instead of being fixed to Close. This allows testing against Open, High, Low, Median, Typical, or Weighted prices depending on the market and timeframe.

Operationally, the bands can be interpreted in a similar manner to Bollinger Bands, with band expansion and contraction used to gauge volatility regime changes while maintaining a moving-average trend framework.

πŸ‘‰ Read | Forum | @mql5dev
❀13πŸ‘12
A two-part MQL5 series outlines a framework for portable, reusable, maintainable indicators, starting from a minimal applied-price line and refactoring into a template.

The first section formalizes incremental recalculation using rates_total and prev_calculated, then hardens OnCalculate for Strategy Tester batching via tester_everytick_calculate and edge cases like rates_total=1.

The next steps move logic into .mqh headers and OOP modules. Applied price becomes a CAppliedPrice sub-indicator with its own buffer and onCalculate, reducing coupling.

Global state is removed by introducing a root CIndicator object. Input handling is isolated using a params object pattern with a base class in headers and a derived class near the input variables to avoid leaking inputs into core modules.

πŸ‘‰ Read | Signals | @mql5dev
❀22πŸ‘5πŸ†4πŸ”₯1
Repeated trade utilities remain a common source of bugs and inconsistent behavior across MQL5 EAs. Centralizing them into include modules reduces duplication and makes maintenance and reviews more predictable.

A reusable positions layer typically covers position existence checks and counters with optional filters (symbol, magic, type, ticket), plus bulk close helpers including profitable/losing filters. Additional utilities return the newest or oldest position by open time for grid, pyramiding, and time-based logic.

A companion orders module mirrors the same patterns for pending orders: exists, count, recent/oldest selection, and cancel routines. Positions and orders stay separate to match MT5’s object model and execution differences.

A minimal SMA(10/20) crossover reversal EA demonstrates cleaner strategy code by delegating selection, counting, and clo...

πŸ‘‰ Read | CodeBase | @mql5dev
❀22πŸ‘6πŸ‘€3πŸ‘Œ2πŸ†2
Multi-symbol entry logic in MQL5 often ends up in hard-coded multidimensional arrays, with limited relational state management and increasing maintenance risk as strategies scale.

A proposed alternative is a Wizard-integrated signal class, CSignalBTreeBayesian, combining SQLite-style B-Tree indexing with a Bayesian neural network uncertainty filter. Parameters exposed to Wizard: BTreeMode (1–4), UseBayesian, MaxUncertainty.

BTreeMode supports direct lookup, range scan, depth discrepancy search, or a hybrid. The BNN runs repeatable Monte Carlo passes per bar (seeded by timestamp) to produce mean and variance, rejecting trades when variance exceeds MaxUncertainty. This shifts signals from deterministic execution toward confidence-gated execution in noisy regimes.

πŸ‘‰ Read | Quotes | @mql5dev
❀24πŸ‘11πŸ‘Œ2
This article connects AFML-style bet sizing to a safe pyramiding engine in MetaTrader 5 by inserting a small adapter layer, CPyramidBridge. The sizing module decides risk as a signed bet_size in [-1, 1]; the pyramid engine decides how to express that risk as multiple entries with strictly decreasing lots and a single stop that advances so total risk drops after each add-on.

Five integration points replace hardcoded engine parameters with live sizing outputs: probability-calibrated initial/add-on lots (with floor-to-step logic and trade skipping when ratios collapse), a budget-based entry gate using concurrent signal occupancy, a forecast-driven add-on trigger using BetSizeDynamic, a reserve-based adaptive trailing stop using EF3M CDF, and synchronization of the sizing signal arrays when the pyramid closes to prevent concurrency overcounts.

Implementation...

πŸ‘‰ Read | AlgoBook | @mql5dev
❀27πŸ‘6
Part II extends structured logs with two internal diagnostics: a lightweight profiler that writes CSV timing summaries, and a minimal unit-test harness for pure trading logic.

PerfMeter.mqh measures named sections, aggregates microseconds, and reports calls, total, min/max, average, and slow-call counts under a per-section threshold. The intent is stable, comparable reports across Strategy Tester runs, with clear section names and controlled sampling.

TestLite.mqh runs deterministic assertions, collects all failures, and writes a plain text report. TradeMathCore.mqh isolates testable helpers such as pip/point conversion, volume normalization, stop-distance checks, and MA crossover classification. ProfilerExampleEA.mq5 profiles event-driven paths without trading; UnitTestRunner.mq5 verifies rules before longer tester passes.

πŸ‘‰ Read | Docs | @mql5dev
❀18πŸ‘9
Many strategy failures in live trading come from execution, not signal logic. Spread expansion, erratic tick flow, quote gaps, and slippage can erase expected value, while remaining invisible on candlestick charts.

This EA is built as an execution-quality filter placed between strategy rules and the market. Per symbol, it maintains tick buffers, spread history, and volatility profiles, then blocks trading unless spread, tick velocity, quote gaps, micro-volatility, and execution stability stay within thresholds.

Only after conditions are stable does a liquidity sweep continuation module activate. It waits for a stop-hunt, requires noise settlement and a structure shift, then applies exposure caps, correlation limits, and equity-scaled sizing. Direction accuracy is not the objective; fill quality is.

πŸ‘‰ Read | CodeBase | @mql5dev
❀27πŸ‘11
MetaTrader 5 candles use fixed time widths, so high-activity and low-activity periods can look identical. The EquiVolume approach fixes this by encoding volume into candle width while keeping price range as height, making participation visible directly in the chart structure.

The indicator is built in MQL5 as a separate subwindow and draws everything with rectangle objects rather than plot buffers. It auto-selects real volume when available, otherwise falls back to tick volume, keeping it broker-agnostic.

Core logic: scan a lookback range to find max volume, normalize each bar’s volume to that reference, map it to a user-defined maximum width, then draw wick-range and body rectangles with bull/bear coloring. Performance is kept stable by updating existing objects, running once per new bar, and removing off-range rectangles.

πŸ‘‰ Read | NeuroBook | @mql5dev
❀26πŸ‘14
An on-chart XAUUSD/Gold dashboard for MetaTrader 5 focused on learning, observation, and fast market context. It does not open or close trades, manage positions, or send signals. All values should be treated as informational market data.

The panel aggregates standard platform indicators and symbol info into a compact view: live spread (points), H1 ATR volatility, H1 EMA trend bias, H4 EMA trend filter, H1 RSI state, daily range (D1 high-low), a basic session label, and optional standard/cent account text detection. Three visual themes and a configurable refresh timer are included.

Usage is limited to attaching the indicator to an XAUUSD chart; it can be viewed on any timeframe since it reads H1/H4 internally. Parameters cover panel placement, ATR/EMA/RSI periods, low/high ATR thresholds, and a spread warning level. Educational utility only; no forecast...

πŸ‘‰ Read | Freelance | @mql5dev
❀28πŸ‘21
A lightweight chart indicator displays a configurable info panel with spread statistics updated on every tick. The panel shows current spread in points and pips, plus session minimum, session maximum, and a running arithmetic mean since attachment.

Current spread output switches between two user-defined colors based on a wide-spread threshold in points. This supports quick identification of elevated execution costs during events such as session opens, scheduled news, or low-liquidity windows.

Configuration includes normal and wide colors, threshold level, font size, and X/Y offsets for placement. Implementation uses OBJ_LABEL only and does not draw indicator buffers, keeping the price chart unchanged. Statistics reset on reattach or terminal restart, and the tool works across all symbols and timeframes.

πŸ‘‰ Read | AlgoBook | @mql5dev
❀57πŸ‘5πŸ‘Œ2πŸ‘€1
A MetaTrader 4 release is available for the previously published MetaTrader 5 implementation of the Nadaraya-Watson estimator.

The MT4 version mirrors the MT5 logic, focusing on kernel-based smoothing for price series and producing the same type of output expected from the original indicator.

Recommendations remain unchanged from the MT5 release, including the same usage conditions, parameter considerations, and limits noted in the prior publication.

πŸ‘‰ Read | NeuroBook | @mql5dev
πŸ‘15❀13πŸ‘Œ3πŸ”₯2
The article contrasts β€œstatic” MT5 indicators built with compilation directives versus β€œdynamic” ones configured at runtime through standard library calls. Removing directive-based plot definitions compiles but produces no output until buffers, plots, and color palettes are explicitly set in OnInit.

A key takeaway: runtime configuration enables changing visual behavior without recompiling, but it can hide options in the indicator dialog until after the first attach, and user color changes may reset when the chart is rebuilt (e.g., timeframe change).

The approach becomes practical when an indicator must adapt to chart modes. By reading the current mode via ChartGetInteger (ENUM_CHART_MODE), the code can switch drawing logic so Inside Bar rendering matches candles, bars, or line charts, improving robustness across chart types.

πŸ‘‰ Read | Docs | @mql5dev
❀15πŸ‘9
This part of the market simulation series shifts from basic SELECT queries to the core of relational design: primary and foreign keys, used to preserve data integrity and prevent duplicate or inconsistent records.

It also recommends moving beyond MetaEditor’s minimal SQLite support when learning database concepts, using DB Browser for SQLite to edit, save, and run SQL scripts in a database-focused environment.

The article ties SQL back to algorithmic trading infrastructure: MT5 tools can reach databases over sockets, enabling scalable data flows between terminals, Excel, and server-hosted SQL. The key takeaway is to rely on SQL and proper schema constraints instead of reinventing database behavior in code, keeping systems reusable across applications.

πŸ‘‰ Read | Calendar | @mql5dev
❀22πŸ‘6πŸ”₯3
DEA (Dolphin Echolocation Algorithm) is a population-based optimizer aimed at trading-robot parameter tuning. Agents evaluate candidates, broadcast influence within an effective radius Re, and build an accumulated fitness (AF) prospectivity map. PP (predetermined probability) increases over epochs using Power to shift from wider sampling to stronger reuse of high-quality regions.

A key detail is AF reset for the current best location, which reduces early collapse into a single point and keeps neighborhood probing active. Re controls locality: small Re tightens search, mid values balance, large Re spreads influence but reduces precision.

Implementation notes cover S_Alternative and S_Coordinate storage, plus a DEA class with Init/Moving/Revision and internal routines for PP, AF, best-location reset, and next-location selection. Memory cost scales with...

πŸ‘‰ Read | Freelance | @mql5dev
❀35πŸ‘7πŸ†3✍2πŸ’―2