MQL5 Algo Trading
581K subscribers
4.71K photos
7 videos
4.72K 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 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
❀30πŸ‘6πŸ†4πŸ”₯1πŸ‘Œ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
❀30πŸ‘7πŸ‘Œ3πŸ†3πŸ‘€3
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
❀36πŸ‘13πŸ‘Œ3
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
❀32πŸ‘8πŸ‘Œ1
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
❀24πŸ‘11πŸ‘Œ2
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
❀38πŸ‘15πŸ‘Œ3
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
❀33πŸ‘16πŸ‘Œ1
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
❀43πŸ‘24πŸ‘Œ2
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
❀69πŸ‘8πŸ‘Œ3πŸ‘€3
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
❀33πŸ‘19πŸ‘Œ5πŸ”₯4
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
❀29πŸ‘13πŸ‘Œ2
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
❀30πŸ‘10πŸ”₯5πŸ‘Œ2
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
❀59πŸ‘11πŸ†6πŸ’―5✍4πŸ”₯3πŸ‘€2
Nadaraya and Watson (1964) proposed estimating values as a locally weighted average using a kernel as the weighting function.

This approach produces a non-causal, recalculating smoothed series. The output can be treated as an estimate of the underlying trend component, not as a forward-looking projection.

No extrapolation is applied, specifically to avoid misinterpretation as predictive signaling. The implementation follows prior work by luxAlgo adapted across trading platforms.

Operational guidance: use for discretionary assessment only. Avoid using the output as a trigger in any automated or rule-based signaling mode.

πŸ‘‰ Read | Forum | @mql5dev
❀41πŸ‘12πŸ‘Œ2⚑1
Algorithmic execution by large participants can create time gaps: price crosses a zone fast enough that the chart shows minimal time-in-zone and low follow-through activity.

A MetaTrader 5 indicator concept formalizes this via a volume-based impact coefficient (VIC), emphasizing high volume plus short traversal time. Detection uses an adaptive price grid, zone forensics over historical bars, and strict sufficiency checks on absence duration, max stay time, speed, and volume impact.

Zones are tracked with dynamic β€œmemory strength” using decay plus session cyclicality, and marked closed when fully filled. Suggested tuning differs by asset class: FX lower thresholds, stocks session-aware, crypto higher thresholds with smaller minimum bars. Signals include boundary rebounds, full fills, and failed fill reversals.

πŸ‘‰ Read | Freelance | @mql5dev
❀31πŸ‘8πŸ”₯5πŸ‘Œ3
This article shows how to build a candle/bar counter in MT5 without harming terminal performance. The key is treating OnCalculate as a high-frequency event: it can fire on every tick, so detection of new bars must be constant-time and avoid unnecessary data access.

Instead of comparing datetime values from the Time[] series, the article favors using rates_total and prev_calculated to detect when a new bar appears. This integer-based check is simpler and faster, and it keeps indicators responsive even on volatile symbols.

It then shifts to chart objects: everything drawn is an object, either chart-coordinate or screen-coordinate based. A practical example uses an indicator to create and update a Linear Regression Channel by setting anchor points, and removes it on deinit. Updating the object on each recalculation produces a highly reactive, self-adjus...

πŸ‘‰ Read | Freelance | @mql5dev
❀32πŸ‘11πŸ‘Œ5
This article connects MT5 replication/simulation work to practical SQL use via SQLite, arguing that database features often replace large amounts of custom MQL5 state-handling code for orders and positions.

It contrasts SQLite’s small set of storage classes with MySQL/PostgreSQL’s extensive type systems. The key takeaway is SQLite’s flexible typing: columns don’t need rigid sizes, reducing schema maintenance while staying compatible with standard SQL patterns.

The example shifts from storing raw symbol strings in every quote record to a relational design using primary/foreign keys, so historical data remains stable even when tickers change. This lays groundwork for a command and order log suitable for strategy research and automation.

πŸ‘‰ Read | NeuroBook | @mql5dev
❀34πŸ‘21πŸŽ‰4⚑2πŸ‘Œ2
A new trading automation script supports creating multiple pending orders in a single run, focused on Buy Stop and Sell Stop entries. The order count is configurable, allowing batches such as 10 or 20 positions to be placed quickly and consistently.

Each pending order can be assigned risk controls and exit parameters at placement time, including Stop Loss and Take Profit levels. This reduces manual repetition, helps standardize execution rules, and limits configuration drift when placing multiple orders under the same setup.

Suitable for workflows that require scaling into breakouts with predefined targets and protective stops while maintaining consistent order parameters across a series.

πŸ‘‰ Read | CodeBase | @mql5dev
❀31πŸ‘15πŸ‘Œ4πŸŽ‰3✍2
IMR combines Hurst Exponent, ADX, and linear regression (slope + RΒ²) to help classify market phase and reduce timing errors in SMC/ICT execution. Many failures come from applying valid setups in the wrong regime: accumulation, distribution, or continuation.

RegScore expresses regression confidence: +100 or –100 implies a clean, disciplined move with RΒ² β‰₯ 0.60. Treat extremes as context, not entries. With Hurst < 0.45 (mean reversion), +100 flags upside overextension and a higher probability of retracement; –100 does the same for downside, favoring reversal frameworks such as ChoCh plus order blocks/breakers.

With Hurst > 0.55 (trend persistence), +100 supports continuation bias; avoid fading and wait for pullbacks into aligned order blocks. ADX adds trend strength: <25 weak conditions, 25–50 workable expansion, >50 often climactic pressure where reve...

πŸ‘‰ Read | Signals | @mql5dev
❀34πŸ‘9πŸ‘Œ3✍2
Dynamic Fair Value Gap (FVG) is a custom MQL5 indicator built to detect unmitigated price imbalances based on a 3-candle pattern. It flags bullish gaps between Candle 1 High and Candle 3 Low, and bearish gaps between Candle 1 Low and Candle 3 High.

Mitigated zones are removed automatically once touched by later price action, keeping only active FVG areas on the chart. While untouched, each zone extends forward by a configurable number of bars (default 18) and remains labeled for monitoring.

The tool also plots previous daily high and low as horizontal liquidity references, refreshed at each new trading day. Alerting supports terminal pop-ups, sounds, and push notifications on new FVG formation, with scan depth controlled via BarsToKeep (default 300).

πŸ‘‰ Read | AlgoBook | @mql5dev
❀38πŸ‘10πŸŽ‰3πŸ‘Œ2