Live EAs under news volatility routinely hit failure sequences: requotes, connection drops, spread spikes, and overlapping ticks. Immediate retries inside OnTick() can create duplicate submissions for the same signal, bypassing risk controls and producing untracked exposure.
Common patterns like Sleep(500), local retry loops, and uniform GetLastError() handling fail in three areas: no retcode classification, no cumulative failure state, and duplicated logic across the codebase. This increases missed entries, uncontrolled doubling, and cases where stop attachment fails without recovery or diagnostics.
A structured approach uses three layers: a retry executor with explicit retryable retcodes and exponential backoff; a circuit breaker tracking consecutive failures with OPEN/HALF-OPEN/CLOSED behavior; and a gateway that composes both behind a single, configured...
π Read | Quotes | @mql5dev
Common patterns like Sleep(500), local retry loops, and uniform GetLastError() handling fail in three areas: no retcode classification, no cumulative failure state, and duplicated logic across the codebase. This increases missed entries, uncontrolled doubling, and cases where stop attachment fails without recovery or diagnostics.
A structured approach uses three layers: a retry executor with explicit retryable retcodes and exponential backoff; a circuit breaker tracking consecutive failures with OPEN/HALF-OPEN/CLOSED behavior; and a gateway that composes both behind a single, configured...
π Read | Quotes | @mql5dev
β€26π10π¨βπ»3π2β1
New beta version 6006 is available at MetaQuotes-Demo.
π13β€9π2π₯1
MetaTrader 5 input parameters scale poorly: each chart instance freezes its settings at attach time, so changing lot size, stops, or filters means manually reopening properties and restarting every chart. That breaks down fast when the same EA runs across many symbols or risk profiles.
A shared JSON file becomes the single configuration source. All EA instances can read the same file (or per-symbol files) and refresh settings on a trigger, avoiding reattach cycles and enabling scripted updates outside the terminal.
The design uses a typed SStrategyConfig with safe defaults, plus a lightweight JSON tokenizer focused on a flat object (quoted keys, string/number values). It avoids DLL dependencies, handles commas inside quoted strings, and falls back cleanly when the file is missing or malformed.
π Read | AppStore | @mql5dev
A shared JSON file becomes the single configuration source. All EA instances can read the same file (or per-symbol files) and refresh settings on a trigger, avoiding reattach cycles and enabling scripted updates outside the terminal.
The design uses a typed SStrategyConfig with safe defaults, plus a lightweight JSON tokenizer focused on a flat object (quoted keys, string/number values). It avoids DLL dependencies, handles commas inside quoted strings, and falls back cleanly when the file is missing or malformed.
π Read | AppStore | @mql5dev
β€44π13π3
A common requirement after opening a position is automatic profit protection. The usual approach is a trailing stop that starts only after price reaches a defined profit threshold, then moves the stop to reduce downside while allowing continuation.
Key parameters are activation distance, trailing step, and update frequency to avoid excessive modifications. A break-even rule is often added: once the position is in profit by a set amount, the stop-loss is moved to entry price plus costs and a small offset.
Implementation details matter: handle bid/ask correctly by order type, respect minimum stop levels and freeze levels, and avoid repeated updates when the new stop is not better than the current one. Logging and throttling are recommended for stability under fast ticks.
π Read | Signals | @mql5dev
Key parameters are activation distance, trailing step, and update frequency to avoid excessive modifications. A break-even rule is often added: once the position is in profit by a set amount, the stop-loss is moved to entry price plus costs and a small offset.
Implementation details matter: handle bid/ask correctly by order type, respect minimum stop levels and freeze levels, and avoid repeated updates when the new stop is not better than the current one. Logging and throttling are recommended for stability under fast ticks.
π Read | Signals | @mql5dev
β€29π8β2π1
MetaTrader 5 file I/O in pure MQL5 runs inside a sandbox, with paths resolved to predefined roots rather than arbitrary disk locations. This becomes critical when moving from chart object handling to persistence and configuration storage.
Binary and text files can carry any payload, so format and encoding details matter. A simple string-to-char array write may include the terminator byte, which can appear as an extra character in external editors but usually does not break readback when converted correctly.
The FILE_COMMON flag switches the root from MQL5\Files to Terminal\Common\Files. Read and write calls must use the same storage scope, or the terminal may return errors or load the wrong file.
Relative paths allow subdirectories under the sandbox root, and MetaTrader 5 can create missing folders. Attempts to traverse outside the sandbox root using path t...
π Read | Forum | @mql5dev
Binary and text files can carry any payload, so format and encoding details matter. A simple string-to-char array write may include the terminator byte, which can appear as an extra character in external editors but usually does not break readback when converted correctly.
The FILE_COMMON flag switches the root from MQL5\Files to Terminal\Common\Files. Read and write calls must use the same storage scope, or the terminal may return errors or load the wrong file.
Relative paths allow subdirectories under the sandbox root, and MetaTrader 5 can create missing folders. Attempts to traverse outside the sandbox root using path t...
π Read | Forum | @mql5dev
β€18π8π2π2β‘1
This article digs into an underused MQL5 detail: ZOrder. It controls not just which chart object looks βon topβ, but which one receives clicks and selection events, even when another object visually covers it. Small ZOrder differences can prevent confusing interactions after timeframe changes or when overlays are present.
That behavior becomes critical in a Position View indicator where SL/TP lines can overlap. If both share the same ZOrder, selection becomes ambiguous; assigning a higher ZOrder to one line makes event handling deterministic, but overlapping across multiple positions still exposes edge cases on hedging accounts.
To make iterative fixes safer, the indicator logic is refactored into a class, then moved into a header. Private creation methods hide implementation details, names are undefined to avoid global conflicts, and configuratio...
π Read | NeuroBook | @mql5dev
That behavior becomes critical in a Position View indicator where SL/TP lines can overlap. If both share the same ZOrder, selection becomes ambiguous; assigning a higher ZOrder to one line makes event handling deterministic, but overlapping across multiple positions still exposes edge cases on hedging accounts.
To make iterative fixes safer, the indicator logic is refactored into a class, then moved into a header. Private creation methods hide implementation details, names are undefined to avoid global conflicts, and configuratio...
π Read | NeuroBook | @mql5dev
β€21π10π4
Part 2 upgrades the earlier portfolio risk script from a single βrisk gapβ number to full matrix inspection. A CCovarianceMatrix class wraps MQL5/OpenBLAS .Cov(), stores the [asset x asset] covariance matrix, guarantees the required layout (assets as rows, observations as columns), and keeps symbol labels attached to the data.
The script CovarianceMatrixPrinter.mq5 adds structural checks and diagnostics: it verifies symmetry with a numeric tolerance before decomposition, then prints a readable labeled grid with enough precision to expose small FX covariances and the sign of each relationship.
It then runs native .Eig() on the covariance matrix to extract eigenvalues and eigenvectors, turning total variance into independent risk factors. Traders get a clear view of which instruments share the same underlying driver; developers get a reusable compone...
π Read | CodeBase | @mql5dev
The script CovarianceMatrixPrinter.mq5 adds structural checks and diagnostics: it verifies symmetry with a numeric tolerance before decomposition, then prints a readable labeled grid with enough precision to expose small FX covariances and the sign of each relationship.
It then runs native .Eig() on the covariance matrix to extract eigenvalues and eigenvectors, turning total variance into independent risk factors. Traders get a clear view of which instruments share the same underlying driver; developers get a reusable compone...
π Read | CodeBase | @mql5dev
β€27π4π2π1
This part turns a chart-drawing toolkit into a durable workspace by persisting both drawings and UI state. It adds an SQLite layer (built into MT5) that restores objects, tool style memory, theme, panel geometry, pinned tools, and selection after timeframe changes or terminal restarts.
Drawn objects are serialized into a versioned text payload, including geometry, styling, and a timeframe-visibility mask. A small βsegment codecβ flattens typed arrays into self-delimited text so complex tools (paths, Fibonacci levels, per-level styles) round-trip safely and can evolve without breaking old rows.
Persistence is wired into the session lifecycle using dirty tracking, transaction-based snapshots, and a simple settings key-value store. Objects are saved per symbol, IDs are re-synced on load, corrupt rows are skipped, and the tool is converted from EA to indic...
π Read | Calendar | @mql5dev
Drawn objects are serialized into a versioned text payload, including geometry, styling, and a timeframe-visibility mask. A small βsegment codecβ flattens typed arrays into self-delimited text so complex tools (paths, Fibonacci levels, per-level styles) round-trip safely and can evolve without breaking old rows.
Persistence is wired into the session lifecycle using dirty tracking, transaction-based snapshots, and a simple settings key-value store. Objects are saved per symbol, IDs are re-synced on load, corrupt rows are skipped, and the tool is converted from EA to indic...
π Read | Calendar | @mql5dev
β€26π4π3π€3π¨βπ»3π2β1
Forex intraday movement is driven by repeatable liquidity cycles tied to global trading sessions and scheduled events, not random chart noise. Session overlaps, especially London/New York, concentrate volume and volatility, while Asia and the Pacific tend to be quieter and range-bound.
The article focuses on intraday seasonality in spreads between symbols using the ISI ProSpread SMA indicator. It applies probability and basic statistics to detect hour-by-hour directional bias and strength that are hard to see visually.
ISI ProSpread SMA supports four calculation modes (spread/price SMA, price difference, volatility index, candle strength), configurable trading hours and history depth, plus a dashboard that reports hourly probabilities and bias. Practical uses include intraday timing, spread/arbitrage setups, seasonal pattern research, and signal conf...
π Read | VPS | @mql5dev
The article focuses on intraday seasonality in spreads between symbols using the ISI ProSpread SMA indicator. It applies probability and basic statistics to detect hour-by-hour directional bias and strength that are hard to see visually.
ISI ProSpread SMA supports four calculation modes (spread/price SMA, price difference, volatility index, candle strength), configurable trading hours and history depth, plus a dashboard that reports hourly probabilities and bias. Practical uses include intraday timing, spread/arbitrage setups, seasonal pattern research, and signal conf...
π Read | VPS | @mql5dev
β€45π6π3π1
Chart Navigator MT5 Light adds a compact mini-chart to the main price chart to speed up navigation across long history ranges. The visible area is highlighted with a frame, allowing fast repositioning without manual scrolling.
Clicking on the mini-chart moves the main chart to the selected point. Dragging the frame shifts the viewport quickly. Vertical lines placed on the main chart are mirrored on the mini-chart as time markers, enabling one-click jumps back to saved events such as signals, trades, news timestamps, or review zones.
The mini-chart supports dynamic date readout on hover, mouse-based resizing, and a low-height bottom bar mode to minimize screen usage. Start and optional end dates can limit the displayed range.
Implementation details: canvas rendering only. No trading logic, no trade requests, no DLL usage, no external services, and no...
π Read | NeuroBook | @mql5dev
Clicking on the mini-chart moves the main chart to the selected point. Dragging the frame shifts the viewport quickly. Vertical lines placed on the main chart are mirrored on the mini-chart as time markers, enabling one-click jumps back to saved events such as signals, trades, news timestamps, or review zones.
The mini-chart supports dynamic date readout on hover, mouse-based resizing, and a low-height bottom bar mode to minimize screen usage. Start and optional end dates can limit the displayed range.
Implementation details: canvas rendering only. No trading logic, no trade requests, no DLL usage, no external services, and no...
π Read | NeuroBook | @mql5dev
β€33π4π3π2
Classic indicators such as RSI, MACD, and moving-average crossovers have lost statistical edge as markets adapted to widely shared signals. Reported win rates for simple MA crossover systems shifted from 65β70% in the 1990s to ~52% by 2010, nearing 50% in recent conditions.
Early neural nets improved nonlinearity but struggled with sequence context; RNN/LSTM designs faced vanishing gradients on long histories. Standard Transformers improved long-range handling but introduced O(NΒ²) attention cost and frequent overfitting on continuous market series.
PatchTST reframes time-series input into fixed patches (often 16 bars) and uses multi-channel features such as price change and log volume. This reduces compute, preserves local structure, and supports hierarchical attention across intraday and multi-session dependencies.
π Read | Calendar | @mql5dev
Early neural nets improved nonlinearity but struggled with sequence context; RNN/LSTM designs faced vanishing gradients on long histories. Standard Transformers improved long-range handling but introduced O(NΒ²) attention cost and frequent overfitting on continuous market series.
PatchTST reframes time-series input into fixed patches (often 16 bars) and uses multi-channel features such as price change and log volume. This reduces compute, preserves local structure, and supports hierarchical attention across intraday and multi-session dependencies.
π Read | Calendar | @mql5dev
β€27π3π2
This part extends candlestick encoding from single bars to ordered two-candle sequences, using an MQL5 script that builds overlapping pairs, counts occurrences, and ranks them by frequency across GBPUSD and XAUUSD on M5, M15, and H1.
A key finding is that the most common pairs often include an unclassified β_β candle (especially β__β), showing the classifier leaves many bars outside defined types. Filtering those out reveals the real structure: fully classified pairs are dominated by Marubozu transitions (A and a).
Across timeframes and both symbols, the top classified patterns are consistently Aa, aA, aa, and AA, with spinning-top transitions (G/g) appearing far less. The output is best used to shortlist candidate transitions for later return/testing, not as signals by itself.
π Read | VPS | @mql5dev
A key finding is that the most common pairs often include an unclassified β_β candle (especially β__β), showing the classifier leaves many bars outside defined types. Filtering those out reveals the real structure: fully classified pairs are dominated by Marubozu transitions (A and a).
Across timeframes and both symbols, the top classified patterns are consistently Aa, aA, aa, and AA, with spinning-top transitions (G/g) appearing far less. The output is best used to shortlist candidate transitions for later return/testing, not as signals by itself.
π Read | VPS | @mql5dev
β€18π3π3π2
This article replaces lagging indicator filters with a rule-driven βorder blockβ engine that detects imbalance zones: the last opposite candle before an impulse that breaks nearby structure (MSS), then keeps the zone valid until a retest mitigates it.
The logic validates zones via displacement intensity, a full close beyond the structural high/low, and mitigation on closed bars only (shift=1). Zones are tracked using the base candleβs OHLC and removed immediately after a wick retest on a completed candle.
Engineering focus: a reusable OrderBlock_Engine.mqh class shared by both an indicator and an EA, using heap allocation with pointer checks and safe deletion. Ind_OrderBlock visualizes zones efficiently with prev_calculated and EMPTY_VALUE handling; EA_OrderBlock adds a new-bar gate, CTrade execution, and notes netting vs hedging position selection.
π Read | NeuroBook | @mql5dev
The logic validates zones via displacement intensity, a full close beyond the structural high/low, and mitigation on closed bars only (shift=1). Zones are tracked using the base candleβs OHLC and removed immediately after a wick retest on a completed candle.
Engineering focus: a reusable OrderBlock_Engine.mqh class shared by both an indicator and an EA, using heap allocation with pointer checks and safe deletion. Ind_OrderBlock visualizes zones efficiently with prev_calculated and EMPTY_VALUE handling; EA_OrderBlock adds a new-bar gate, CTrade execution, and notes netting vs hedging position selection.
π Read | NeuroBook | @mql5dev
β€21π12π¨βπ»2π1
The key new feature of MetaTrader 5 Beta Build 6030 is built-in support for the Model Context Protocol (MCP) and agentic AI.
The terminal and MetaEditor now include an integrated AI Assistant that can help analyze markets and trading activity, develop MQL5 applications, explain code, identify errors, and automate complex tasks.
Another important addition is Passkey support β a modern technology for securing trading accounts. Passkeys provide an additional authentication factor during sign-in, protecting users against phishing attacks and unauthorized access.
For developers, we've significantly enhanced MetaEditor. The editor now includes the long-awaited code folding and 'highlight all occurrences' features, making it much easier to work with large projects.
Learn more...
The terminal and MetaEditor now include an integrated AI Assistant that can help analyze markets and trading activity, develop MQL5 applications, explain code, identify errors, and automate complex tasks.
Another important addition is Passkey support β a modern technology for securing trading accounts. Passkeys provide an additional authentication factor during sign-in, protecting users against phishing attacks and unauthorized access.
For developers, we've significantly enhanced MetaEditor. The editor now includes the long-awaited code folding and 'highlight all occurrences' features, making it much easier to work with large projects.
Learn more...
β€51π11π₯9π7
FoxWave P/L Calendar converts closed-trade history into a monthly profit/loss calendar view, providing a daily breakdown without generating separate reports. The grid follows a MonβSun layout and scales to the exact number of weeks in each month, avoiding unused rows.
Daily cells are color-coded with intensity tied to magnitude, making larger gains and losses immediately visible. The current day is highlighted, and month navigation is handled via a single control for quick back/forward review.
The panel detects the account deposit currency and presents figures accordingly. A summary bar aggregates monthly P/L, counts profit and loss days, and identifies best and worst sessions. An optional single-symbol filter limits results to one instrument or keeps the view account-wide.
History is read on a periodic timer rather than per tick, keeping runtime ov...
π Read | AppStore | @mql5dev
Daily cells are color-coded with intensity tied to magnitude, making larger gains and losses immediately visible. The current day is highlighted, and month navigation is handled via a single control for quick back/forward review.
The panel detects the account deposit currency and presents figures accordingly. A summary bar aggregates monthly P/L, counts profit and loss days, and identifies best and worst sessions. An optional single-symbol filter limits results to one instrument or keeps the view account-wide.
History is read on a periodic timer rather than per tick, keeping runtime ov...
π Read | AppStore | @mql5dev
β€30π6π4π2π₯1
Local trade copier setup for MT5/MT4 uses a Go transport bridge and a C# WPF dashboard, with master/slave EAs attached per terminal. The dashboard provides a unified view of copied trades and bridge logs.
MT5 archived DLL-based routing uses a ZeroMQ bridge. Start T5Copier_Bridge.exe from C:\T5Copier\Go_bridge\ and confirm ports 5567 (master in), 5568 (slave out), 5569 (dashboard logs). Run CSharpDashboard.exe from C:\T5Copier\Dashboard\ and connect to MT5 on port 5569. Attach T5Copier_Master with DLL imports and Algo Trading enabled, address tcp://localhost:5567. Attach T5Copier_Slave with lot mode, multiplier, and optional reverse copy.
MT5 DLL-free mode uses native TCP sockets via T5Copier_Bridge.exe on port 5580. Dashboard connects to port 5580. Master/Slave EAs require Algo Trading only, with server 127.0.0.1 and port 5580.
MT4 mode uses a ZeroMQ bridg...
π Read | Signals | @mql5dev
MT5 archived DLL-based routing uses a ZeroMQ bridge. Start T5Copier_Bridge.exe from C:\T5Copier\Go_bridge\ and confirm ports 5567 (master in), 5568 (slave out), 5569 (dashboard logs). Run CSharpDashboard.exe from C:\T5Copier\Dashboard\ and connect to MT5 on port 5569. Attach T5Copier_Master with DLL imports and Algo Trading enabled, address tcp://localhost:5567. Attach T5Copier_Slave with lot mode, multiplier, and optional reverse copy.
MT5 DLL-free mode uses native TCP sockets via T5Copier_Bridge.exe on port 5580. Dashboard connects to port 5580. Master/Slave EAs require Algo Trading only, with server 127.0.0.1 and port 5580.
MT4 mode uses a ZeroMQ bridg...
π Read | Signals | @mql5dev
β€25π7β‘2π€2π1
The Expert Advisor uses an equity-based portfolio model, avoiding broker-side SL/TP and managing exits through internal equity thresholds per cycle.
Entry checks run once per bar using Close[1] and Open[0] against indicator buffers. Cycle 1 is MA-based: buys require both prices strictly above the MA, sells require both strictly below. Cycles 2 and 3 use Envelopes as breakout filters: buys require both prices above the upper band, sells require both below the lower band. Cycle 3 mirrors Cycle 2 with its own magic number and deviation.
Risk control snapshots Account Equity on the first trade of a cycle and computes monetary target and risk levels from percent inputs. On every tick, floating P/L plus swap and commission are aggregated per magic number; breaching either threshold closes all positions for that cycle and resets state. A noted anomaly applies /100...
π Read | Forum | @mql5dev
Entry checks run once per bar using Close[1] and Open[0] against indicator buffers. Cycle 1 is MA-based: buys require both prices strictly above the MA, sells require both strictly below. Cycles 2 and 3 use Envelopes as breakout filters: buys require both prices above the upper band, sells require both below the lower band. Cycle 3 mirrors Cycle 2 with its own magic number and deviation.
Risk control snapshots Account Equity on the first trade of a cycle and computes monetary target and risk levels from percent inputs. On every tick, floating P/L plus swap and commission are aggregated per magic number; breaching either threshold closes all positions for that cycle and resets state. A noted anomaly applies /100...
π Read | Forum | @mql5dev
β€14β4π4π1
An Expert Advisor design based on four independent trading cycles (Cycle 1β4), each isolated by its own Magic Number, indicator stack, entry triggers, and money management rules.
Cycle 1 uses MA/RSI/WPR confluence with a binary c1_signal gate to invalidate conflicting signals. MA entries require prior close and current open on the same side of the MA. RSI and WPR use configurable overbought/oversold thresholds, with optional reverse-signal flipping and a one-trade-per-bar constraint via a stored bar open price.
Cycle 2 trades Envelopes breakouts (close and open beyond upper/lower band). Cycle 3 reuses Envelopes but executes the opposite side for mean reversion. Cycle 4 adds a point-distance filter versus Envelopes to enforce minimum displacement before acting.
Exits avoid per-trade SL/TP and instead track per-cycle equity baselines on the first position, t...
π Read | VPS | @mql5dev
Cycle 1 uses MA/RSI/WPR confluence with a binary c1_signal gate to invalidate conflicting signals. MA entries require prior close and current open on the same side of the MA. RSI and WPR use configurable overbought/oversold thresholds, with optional reverse-signal flipping and a one-trade-per-bar constraint via a stored bar open price.
Cycle 2 trades Envelopes breakouts (close and open beyond upper/lower band). Cycle 3 reuses Envelopes but executes the opposite side for mean reversion. Cycle 4 adds a point-distance filter versus Envelopes to enforce minimum displacement before acting.
Exits avoid per-trade SL/TP and instead track per-cycle equity baselines on the first position, t...
π Read | VPS | @mql5dev
β€23π7β‘4π1
Part III tightens a MetaTrader 5 supply/demand framework into a consistent decision pipeline: quantitative zone admission, event-driven lifecycle monitoring, and deterministic interaction resolution. Logging stays observational, but records every state transition with enough metadata to reconstruct behavior later.
Automatic zones now enter the system only after AnalyzeZoneCandidate() assigns a normalized 0β100 score from three signals: relative tick-volume spike, ATR-normalized departure strength over a lookahead window, and local swing symmetry. The result drives tiering (Elite/High/Moderate/Low) and a MinZoneScore gate to keep weak pivots out.
After passing the gate, TryCreateAutoZone() performs integrity checks (wrong-side levels, duplicates, blacklists, clustering) then registers a fully initialized zone for MonitorZoneLifecycle(). Manual zones b...
π Read | Quotes | @mql5dev
Automatic zones now enter the system only after AnalyzeZoneCandidate() assigns a normalized 0β100 score from three signals: relative tick-volume spike, ATR-normalized departure strength over a lookahead window, and local swing symmetry. The result drives tiering (Elite/High/Moderate/Low) and a MinZoneScore gate to keep weak pivots out.
After passing the gate, TryCreateAutoZone() performs integrity checks (wrong-side levels, duplicates, blacklists, clustering) then registers a fully initialized zone for MonitorZoneLifecycle(). Manual zones b...
π Read | Quotes | @mql5dev
β€22π5π1
This MT5 project builds an implied-volatility surface indicator directly in the terminal. It loads an option chain from native MT5 option symbols or a CSV file, converts mid prices to implied vols, arranges them into a strike-by-expiry grid, then renders a shaded, rotatable 3D surface via the built-in DirectX layer.
The numerical core uses BlackβScholes plus a robust implied-vol solver: Newton-Raphson when vega is reliable, with bracketed bisection fallback to handle deep ITM/OTM quotes and ensure convergence. Invalid quotes (below intrinsic) are rejected.
Data handling turns scattered contracts into a regular mesh-ready grid, fills missing cells with conservative forward/backward carries, and tracks min/max IV for scaling and coloring. Practical result: live skew and term structure visualization from real quotes inside MT5.
π Read | AlgoBook | @mql5dev
The numerical core uses BlackβScholes plus a robust implied-vol solver: Newton-Raphson when vega is reliable, with bracketed bisection fallback to handle deep ITM/OTM quotes and ensure convergence. Invalid quotes (below intrinsic) are rejected.
Data handling turns scattered contracts into a regular mesh-ready grid, fills missing cells with conservative forward/backward carries, and tracks min/max IV for scaling and coloring. Practical result: live skew and term structure visualization from real quotes inside MT5.
π Read | AlgoBook | @mql5dev
β€32π6β‘2π1
Many Forex EAs still execute trades using legacy indicators despite low signal-to-noise, long dependencies, and regime shifts that break stationarity assumptions.
An N-BEATS pipeline was implemented in MQL5 from scratch: matrix tensors with gradient storage, SiLU with stable exponent bounds, Adam, quantile loss for uncertainty, robust median/MAD normalization, anomaly handling, and hysteresis to prevent signal churn. Production concerns included caching on OnTick(), memory control, profiling, continuous training, and concept-drift monitoring with automated response.
Backtests on JanβAug 2025 did not produce stable profitability, unlike prior Mamba and PatchTST variants. Key gaps were market noise, missing microstructure effects, and unfavorable compute-to-edge ratio, while the engineering stack remains reusable for further research.
π Read | NeuroBook | @mql5dev
An N-BEATS pipeline was implemented in MQL5 from scratch: matrix tensors with gradient storage, SiLU with stable exponent bounds, Adam, quantile loss for uncertainty, robust median/MAD normalization, anomaly handling, and hysteresis to prevent signal churn. Production concerns included caching on OnTick(), memory control, profiling, continuous training, and concept-drift monitoring with automated response.
Backtests on JanβAug 2025 did not produce stable profitability, unlike prior Mamba and PatchTST variants. Key gaps were market noise, missing microstructure effects, and unfavorable compute-to-edge ratio, while the engineering stack remains reusable for further research.
π Read | NeuroBook | @mql5dev
β€36π5β2π€2π€―2π1