MQL5 Algo Trading
562K subscribers
4.18K photos
6 videos
4.19K 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
SAGDFN targets noisy, redundant market data by keeping only neighbors that measurably influence the system. After implementing Significant Neighbors Sampling in OpenCL, the focus shifts to Sparse Spatial Multi-Head Attention to extract structure from the selected links while staying compute-efficient.

A key optimization avoids per-pair embedding concatenation. By splitting the first linear layer into separate query/key projections computed once per node, pair logits become simple vector additions, cutting complexity from O(NMhd) to O(Nhd)+O(NMh) and reducing memory pressureβ€”well-suited to GPU execution in MQL5+OpenCL.

For attention normalization, iterative Ξ±-Entmax is replaced with Sparse-SoftMax to keep sparsity without expensive Ο„ searches. The OpenCL forward kernel computes head-wise sparse weights with local reductions, NaN/Inf guards, bounds-che...

πŸ‘‰ Read | Calendar | @mql5dev
❀17πŸ”₯4🀩2πŸ‘Œ2πŸ‘1πŸ‘¨β€πŸ’»1
Dragonfly Algorithm (DA), proposed by Seyedali Mirjalili in 2015, models two swarm modes: static hunting and dynamic migration. These map directly to exploitation and exploration in population-based optimization.

Each agent applies five terms per iteration: separation, alignment, cohesion, attraction to the current best (Food), and repulsion from the current worst (Enemy). Velocity is updated as a weighted sum plus inertia, then position is advanced and clamped to bounds.

When an agent has insufficient neighbors and Food is out of range, DA switches to LΓ©vy flight using Mantegna sampling to generate heavy-tailed steps.

Adaptive control drives convergence: neighborhood radius increases over epochs, inertia drops from 0.9 to 0.4, and s/a/c/e decay to zero mid-run, leaving Food attraction dominant. Population size is the main external parameter.

πŸ‘‰ Read | Signals | @mql5dev
❀20πŸ‘5πŸ”₯1🀩1
Tree-based feature_importances_ (MDI) answers what the forest split on, not what a feature is worth. As features multiply, correlated indicators become interchangeable, and their β€œcredit” gets diluted across copies, letting weak or even useless columns outrank a real signal with no warning.

Permutation importance (MDA) is out-of-sample but can fail harder: if a signal has duplicates, permuting one column leaves substitutes intact, so the measured impact can collapse toward zero.

The robust fix is clustered MDA: group dependent features using an unsupervised clustering step on a denoised correlation matrix (Marčenko–Pastur + effective sample size), then permute entire clusters. This recovers the true signal in a synthetic triple-barrier setup and produces a clean separation between informative and noise blocks.

Clustered MDI can invert rankings when ...

πŸ‘‰ Read | Quotes | @mql5dev
❀14πŸ‘7🀩4πŸ”₯2
MetaTrader 5 reports blend partial exits into a single result, hiding whether scaling out improved or weakened performance. This article builds a native MQL5 Scale-Out Value Analyzer that reconstructs positions from deal history, detects multi-exit closures, and evaluates scaling against counterfactual full exits using only the trader’s realized exit prices.

For each scaled position, it reprices the full volume at the first, last, and best per-lot exit outcome (including profit, commission, and swap). It then measures value added vs holding to the last exit, efficiency vs the best achievable exit, and aggregates results safely via ratio-of-sums.

The tool ships as two scripts: an exporter using HistorySelect() to write deal-level CSV, and an analyzer that parses, groups by PositionID, validates volumes, excludes multi-entry positions, runs a single-trade depende...

πŸ‘‰ Read | AlgoBook | @mql5dev
❀17🀩5πŸ‘4πŸ”₯4⚑2πŸ‘Œ1
Double tops/bottoms look obvious in hindsight but are hard to automate because pivots, necklines, and tolerances are often subjective. This article turns the pattern into a deterministic contract suitable for MT5 Strategy Tester.

The MQL5 design confirms swing pivots using a fixed left/right bar window, then pairs two same-type pivots only if their prices match within a tolerance scaled by pattern height. The neckline is strictly the opposite pivot between peaks, with spacing, leg-balance, and optional prior-trend filters to reject noisy shapes.

A small state machine manages progression from detection to entry: arm the setup, trigger on a close through the neckline or wait for a retest, then invalidate on extreme breach or timeout. Risk rules are explicit: stop beyond the paired extreme with buffer, targets via measured-move or reward-to-risk, opti...

πŸ‘‰ Read | Freelance | @mql5dev
❀19πŸ”₯8πŸ‘5🀩2πŸ‘Œ1
MetaTrader 5 ships with MarketProfile, but it does not segment volume by individual swing legs. A swing-based profile can be built from OHLC and platform tick volume to study volume concentration inside each completed high-to-low and low-to-high move.

Core logic: confirm swing highs/lows using a configurable window and next-bar validation, then connect confirmed points with a ZigZag leg. For each finished leg, compute the swing range, create ATR(200)/2 adaptive price bins, and allocate each bar’s tick volume to a bin using the close.

After aggregation, the highest-volume bin is marked as the POC and the full profile is rendered with chart rectangles scaled by relative volume. Results reflect tick volume, not exchange-level order flow.

πŸ‘‰ Read | AlgoBook | @mql5dev
❀17πŸ”₯6🀩6πŸ‘5πŸŽ‰1
ATR-smoothed Heiken Ashi candles are drawn directly on the chart: blue for bullish and red for bearish. Smoothing is ATR-driven: if the new HA close deviates from the prior smoothed close by at least ATR x sensitivity, the candle uses raw HA values; otherwise open/close are blended via a configurable factor to suppress minor colour flips.

Trend bias is provided by Fast EMA (default 20) and Slow EMA (default 50). Early-entry arrows trigger only when a smoothed candle flips direction in line with EMA bias and while EMAs remain close, with β€œclose” measured in ATR units to adapt across symbols and timeframes. Signals are skipped once EMAs separate beyond the ATR threshold.

Buy arrows print below candles and sell arrows above, offset by an ATR fraction. Optional popup and push alerts fire once per bar per direction. No trade execution, no SL/TP, and the c...

πŸ‘‰ Read | AlgoBook | @mql5dev
❀17πŸ”₯7πŸ‘4🀩4⚑2
Probability theory remains a practical dependency for trading systems, from strategy PnL estimates to risk models. Modern ML also inherits classical statistics: neural nets are probabilistic models optimized via maximum likelihood, with predictable strengths and limits.

A random variable is a deterministic function X(Ο‰) on an assumed probability space Ξ©, used because Ξ© is rarely tractable directly. The working representation is the distribution on R via the CDF F(x)=P(X≀x), which supports interval probabilities by differences F(b)-F(a).

Distributions split into discrete (PMF with point masses, stepwise CDF), continuous (PDF as dF/dx, interval probabilities via integrals), and mixed. Degenerate variables map all outcomes to a constant and appear in convergence results like LLN.

Practical tooling includes CDF/PDF and QQ comparisons and MQL5 standard library...

πŸ‘‰ Read | Quotes | @mql5dev
❀18πŸ‘9πŸ”₯6🀩5⚑1πŸ‘¨β€πŸ’»1
FX options desks work in delta space, not strike space. Standard quotes per expiry are ATM volatility, 25-delta risk reversal, and 25-delta butterfly, with optional 10-delta wings. Strikes are derived from these pillars plus an interpolation choice.

Equity-style tooling in MetaTrader 5 commonly starts from listed strike chains and single-rate Black-Scholes. For FX this misses both market quoting practice and the two-rate setup required for carry.

A correct implementation uses Garman-Kohlhagen and treats delta as a convention: spot vs forward delta, and premium-adjusted vs unadjusted. The convention varies by pair, premium currency, and tenor, and can shift 1Y strikes by tens of pips or more without triggering obvious errors.

The reconstruction pipeline converts RR/BF to wing vols, then solves each pillar’s delta back to its strike at that vol. Outpu...

πŸ‘‰ Read | Docs | @mql5dev
πŸ”₯13❀7πŸ‘4🀩4πŸ†1
MQL5 can be extended with a small OS-style helper layer to standardize filesystem work, using native terminal APIs as building blocks. Coverage is narrower than Python, but enough for common file and folder tasks.

Core methods map cleanly: getcwd (via script path and parent), listdir, scandir with a lightweight DirEntry equivalent, remove (FileDelete), rmdir, rename/move (FileMove), mkdir (FolderCreate), and stat via a custom stat_result with size and timestamps.

A companion os.path-style class can provide exists, isfile, isdir (including handling ERR_FILE_IS_DIRECTORY 5018), join using arrays, and split.

Result is a consistent interface for reuse in MT5 projects without DLL dependencies.

πŸ‘‰ Read | Docs | @mql5dev
❀13πŸ‘10🀩6πŸ”₯4πŸ†3πŸ‘Œ1
Canvas-based MQL5 dashboards can remain visually correct while losing responsiveness when every hover, scroll, or popup triggers a full repaint and repeated OS text measurements. Under rapid interaction, event volume outpaces rendering and causes stutter.

A performance pass keeps output unchanged by combining frame throttling and partial rendering. Rendering is capped at ~16 ms per frame, collapsing event bursts into a single paint via a timer flush. Repaints are limited to the affected pane or region, with popups restored from a frozen backdrop using bulk rectangle copies.

Implementation details include a direct-buffer CCanvas subclass for fast row copies, a text-width memo table keyed by text/font/size, and a glyph cache storing alpha coverage maps under a fixed memory budget. Hover handling maps to region masks to repaint only the touched bands,...

πŸ‘‰ Read | NeuroBook | @mql5dev
❀13πŸ‘5πŸ”₯5🀩4πŸ‘Œ1
Native MT5 chart objects make table UIs hard to maintain: RectLabel/Edit grids require manual coordinates, per-object styling, and tight synchronization. A reusable CTable class resolves this by separating cell state from rendering and centralizing layout and lifecycle.

Each cell stores width/height, colors, alignment, read-only, and description, plus β€œcustom color” flags to protect overrides when defaults change. CTable manages backgrounds, cell objects, headers, and Refresh-driven updates.

Core API: CoordinatesSet and WidthHeightSet clamp values and move/resize objects safely; CellsInitialize is required to size arrays and compute cell geometry; Create builds frame objects and per-cell controls with rollback on errors. PrefixSet renames all objects consistently.

Per-cell setters/getters update both stored state and live objects; CellsColorSet, HeadersCo...

πŸ‘‰ Read | AlgoBook | @mql5dev
❀13πŸ‘5πŸ”₯1🀩1πŸ‘Œ1
SAGDFN targets spatio-temporal forecasting bottlenecks by reducing redundant edges early. Significant Neighbors Sampling builds a sparse neighborhood per node using similarity-ranked candidates plus random picks to preserve diversity and limit overfitting.

Sparse Spatial Multi-Head Attention operates on the sparse graph and prunes weak links more aggressively via Entmax-style normalization. In practice, Sparse-SoftMax can replace iterative Ξ±-Entmax to avoid Ο„ search overhead while keeping hard sparsity.

OneStepFastGConv consolidates spatial aggregation into a single step. Implementation details center on GPU SpMM and its backward pass: local reductions, guarded indexing, and separate gradients for sparse weights and dense inputs, integrated into a recurrent GRU-like block with explicit intermediate buffers.

πŸ‘‰ Read | Quotes | @mql5dev
❀9πŸ”₯5πŸ‘Œ2πŸ‘1🀩1πŸ‘¨β€πŸ’»1
Serial autocorrelation can remain hidden behind a clean equity curve. Lag-1 checks are insufficient; dependence often shows up at higher lags or across a block of lags.

The Ljung-Box portmanteau test addresses this by aggregating sample autocorrelations through horizon h into a single Q statistic and chi-square p-value. Residual diagnostics matter: if ARIMA/GARCH residuals remain autocorrelated, the model is leaving structure unmodeled, and downstream stats assuming independence can be biased.

An MQL5 toolkit (no external deps) implements ACF, Ljung-Box Q, df adjustment, and p-values via the regularized incomplete gamma function (MQL5 lacks a chi-square CDF). Inputs support three data sources: closed-bar price returns, closing-deal P/L sequences, or external residual files, with guards for zero variance, invalid df, and malformed lag sets.

πŸ‘‰ Read | AlgoBook | @mql5dev
❀12πŸ‘9πŸ”₯6🀩4✍1πŸ‘Œ1
Maximum drawdown reports miss a key variable: time underwater. Two systems can share the same 15% max drawdown and still differ materially in recovery duration.

A dashboard script reconstructs an equity curve from closed deals by summing profit, swap, and commission per exit, sorting by deal time, then folding into a running balance.

A single-pass analyzer segments drawdowns into start, trough, and recovery, flags still-open episodes, and computes duration in calendar days. Summary stats report deepest depth, longest duration, average recovery time (closed only), and open count.

Output includes a CCanvas timeline with shaded drawdown bands and alternating-row labels, plus a terminal table sorted by duration so long shallow drawdowns surface first.

πŸ‘‰ Read | Signals | @mql5dev
❀20πŸ‘9πŸ”₯8🀩5πŸ‘Œ2😁1
Multi-symbol EAs that size trades from a correlation matrix often show unstable weights across adjacent rebalance windows. With N symbols and T bars, correlation estimates become dominated by sampling error when T is not much larger than N, even if market structure is unchanged.

Random Matrix Theory offers a practical filter. Using the Marchenko–Pastur upper edge with Q=T/N, eigenvalues at or below lambda_max are treated as noise; only eigenvalues above the edge are retained as signal.

A native MQL5 implementation can run without ALGLIB or DLLs by using a symmetric Jacobi eigendecomposition and a flat-buffer matrix class. Noise eigenvalues are replaced by their average to preserve the trace, then the cleaned matrix is reconstructed for downstream sizing.

A useful runtime check is Frobenius distance between consecutive windows: denoised matrices ty...

πŸ‘‰ Read | VPS | @mql5dev
πŸ‘17🀩12❀10πŸ”₯8πŸ‘Œ1
Many lot size calculators hardcode pip value assumptions that break on gold, indices, JPY crosses, and non-USD account currencies. A sizing routine should use the tick and volume properties the trade server publishes per symbol, then compute risk from those inputs.

CalcLots() takes risk in account currency plus entry and stop prices, then returns the trade volume and the actual risk after broker constraints. Volume is always rounded down to the volume step. If requested risk is below the minimum lot, the minimum is returned, clamped_min is set, and the higher real risk is reported. The function is direction-agnostic and also provides stop distance in points and point value per 1.00 lot.

The sizing math is isolated in Calc.mqh with no terminal state. It consumes a SymbolSpec struct and can be tested offline. SpecFromSymbol() is the only live-data bridge and...

πŸ‘‰ Read | NeuroBook | @mql5dev
❀11🀩10πŸ‘7πŸ”₯5πŸ‘Œ3πŸ‘¨β€πŸ’»2🀯1
MetaTrader 5 strategy optimization typically relies on brute-force sweeps or the built-in genetic algorithm, but GA behavior varies with implementation details. The article builds an alternative optimizer around Particle Swarm Optimization, treating EA inputs as coordinates and iteratively updating particle positions using inertia plus attraction to each particle’s best state and the best state within its social group.

Because EA parameters are discrete, particle coordinates are rounded to configured steps. To avoid wasting passes on repeated parameter sets, each candidate point is hashed (CRC64 over the parameter bytes) and tracked in a binary search tree for fast β€œseen/not seen” checks.

The PSO core is decoupled from any EA via a Functor interface returning a user-selected trading metric, then validated against benchmark functions. For parallel t...

πŸ‘‰ Read | Docs | @mql5dev
❀17πŸ”₯9🀩6πŸ‘4πŸ‘Œ3