MQL5 Algo Trading
503K subscribers
3.28K photos
2 videos
3.28K 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
The article walks through a practical MT5 + Python workflow that keeps research and execution connected: pull market data from the terminal, validate it visually, test statistical ideas, then move toward deployable models.

Setup focuses on reproducibility: isolate dependencies with venv, point MetaEditor to the virtual-env interpreter, and use a standard data stack (NumPy, Pandas, Matplotlib/Seaborn, scikit-learn, TA). Time handling is treated as critical engineering: MT5 timestamps are UTC, so Python datetime must be explicitly UTC to avoid silent bias.

On data and hypotheses, it shows how to request H1 EURUSD history, plot price with volume cleanly, then quantify β€œtrend continuation” using shifted returns and Pearson correlation. Results reject bar-to-bar momentum and reveal weak, structured mean reversion when averaging over mid-size windows, motivat...

πŸ‘‰ Read | Signals | @mql5dev

#MQL5 #MT5 #Python
❀56πŸ‘8πŸ‘Œ4πŸ†3✍2
Most retail algos still hardcode lookback periods such as RSI(14) or MA(20). This assumes cycle length is constant. In live markets the dominant cycle contracts or expands with liquidity and regime changes, so static windows create phase lag and systematic late entries.

A DSP approach replaces fixed periods with cycle estimation via a rolling Discrete Fourier Transform. The scan measures amplitudes across frequencies, isolates the dominant component, and keeps its phase aligned with current price action. Peaks and troughs are identified by the extracted wave rather than by delayed crossovers.

Implementation details matter. Naive DFT is CPU heavy, so practical engines rely on tight loops and array-level memory handling to keep latency low. The extracted dominant frequency can then be fed back into an EA to adapt indicator periods dynamically and re...

πŸ‘‰ Read | Docs | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀40⚑5πŸ‘Œ4✍3πŸ‘3
Algorithmic trading systems need fast feedback loops. With higher trade frequency, data becomes stale quickly, and manual journaling adds latency and errors.

MetaTrader 5 ships with native SQLite support, turning the journal into an in-terminal component. Queries run in milliseconds, stats update automatically, and analysis stays next to execution.

A practical β€œminimum working set” is a three-table schema: DEALS (trade history), SIGNALS (indicator/system signals), EVENTS (macroeconomic context). Indexed fields like symbol, magic, and time keep analytics responsive.

In MQL5, DatabaseOpen/Execute/Close covers most use cases. Prepared statements plus transactions materially improve throughput and reduce risk versus ad-hoc SQL or spreadsheet pipelines.

πŸ‘‰ Read | Quotes | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀51πŸ‘12πŸ‘Œ4πŸ‘€4✍3πŸ”₯3🀝3
The December 2020 issue of TASC featured John Ehlers’ MyRsi with Noise Elimination Technology (NET). The design applies a Kendall-style autocorrelation approach to reduce noise and suppress low-quality RSI swings.

This variant allows selecting the input price series instead of relying on a fixed close, enabling alignment with different data conventions such as typical price or weighted close.

Operationally it can be treated like a standard RSI, with the added NET line as a second confirmation layer. In comparative chart reviews, the NET line often reacts earlier while keeping fewer false transitions, which can improve signal clarity when combined with traditional RSI thresholds.

πŸ‘‰ Read | AlgoBook | @mql5dev

#MQL4 #MT4 #Indicator
❀33⚑2πŸ‘2πŸŽ‰2πŸ‘Œ2πŸ€”1
Moving MQL5 workloads from CPU to GPU with OpenCL only pays off when the problem is naturally parallel and executed in large batches. Otherwise, kernel launch, data transfers, and synchronization overhead can erase any gains and add architectural complexity.

A disciplined OpenCL setup matters: create and reuse the context, compile kernels once, reuse buffers, and avoid frequent CPU↔GPU exchanges. GPU performance is often limited by memory behavior, so minimizing global memory traffic and reducing tiny kernel launches is key.

A matrix-multiplication example contrasts a naive GPU kernel (one thread per output) with an optimized tiled version using local workgroups and shared local memory. On RTX 4060, global groups ran ~38 ms vs ~11 ms with local groups; Iris Xe improved ~213 ms to ~45 ms. Initialization cost (up to ~99 ms) makes batching essential for...

πŸ‘‰ Read | Forum | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀23πŸ‘Œ2
Fractional differentiation (FFD) is brought from an AFML-style Python pipeline into MetaTrader 5 with a production-ready MQL5 design: precompute the weight vector once, use a bounded lookback window, and compute each new value as a single dot product.

The core is a header-only CFFDEngine class that avoids per-tick allocation, minimizes CopyClose overhead, and supports both EA and indicator workflows. A companion FFD custom indicator wraps the engine and uses prev_calculated to recompute only new/changed bars, keeping runtime O(width) per bar.

Key implementation details include threshold-terminated weight generation (no fixed cap), safe log handling to match Python outputs, and new-bar timing to avoid look-ahead bias. A validation script confirms numerical parity with Python to ~1e-12, enabling reliable reuse of offline-optimized d values in live t...

πŸ‘‰ Read | Docs | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀29⚑4πŸ‘3πŸ‘Œ2
RSI confirmation often sits in a separate subwindow, forcing attention shifts during execution-heavy workflows such as scalping or manual trade management.

A chart-embedded RSI panel addresses this by attaching directly to the active price level and updating on every tick. It renders the current RSI value, a state label (OVERBOUGHT/OVERSOLD/NEUTRAL), and a slope-derived strength rating (WEAK/STRONG/EXTREME), with optional Bid/Ask anchoring.

Implementation centers on MQL5 chart objects plus ChartTimePriceToXY for time/price-to-pixel mapping. Position clamping keeps the panel on-screen during zoom, scroll, resize, and timeframe changes. RSI handle lifecycle is managed in OnInit/OnDeinit; CopyBuffer feeds updates; alert spam is avoided via state flags.

πŸ‘‰ Read | VPS | @mql5dev

#MQL5 #MT5 #Indicator
❀57πŸ‘Œ9⚑1😈1
An MT4 port of the MyRsi variant originally described by John Ehlers has been released, matching the behavior of the earlier MT5 build.

This RSI formulation differs from the platform’s built-in RSI in both scaling and signal interpretation. Output is normalized to the -1 to 1 range, making the zero line a practical reference for directional bias and cross-based signals.

Because the value distribution is not comparable to the standard 0–100 RSI, common thresholds such as 50 do not translate directly. Any rule set based on built-in RSI levels should be recalibrated for this implementation.

Operational guidance remains straightforward: treat it as an RSI-style oscillator, but validate levels and crossings against the new range before using it in automation.

πŸ‘‰ Read | Forum | @mql5dev

#MQL4 #MT4 #Indicator
❀30πŸ‘Œ2πŸ‘1πŸ”₯1πŸ†1
Distance-based trailing stops process every tick and remain memoryless, which increases sensitivity to micro-noise and CPU load on lower timeframes. High-frequency bar/tick loops can also limit the feasibility of heavier models due to latency and terminal–server desync risk.

A proposed MQL5 trailing module, CTrailingBloomRNN (inherits CExpertTrailing), adds a dual-gate path: an O(1) Bloom filter for price deduplication using a packed uchar bitset, then a lightweight RNN with persistent hidden state for sequence-aware moderation. Unique prices update m_hidden_state via tanh(0.5*h + 0.5*normalized_input).

Trailing overrides (CheckTrailingStopLong/Short) early-return on duplicate ticks, then apply an optional RNN threshold before computing broker-compliant stop levels and NormalizeDouble rounding.

πŸ‘‰ Read | AppStore | @mql5dev

#MQL5 #MT5 #AI
❀23⚑5✍1πŸŽ‰1πŸ‘Œ1
This article turns market structure into something an EA can reason about: validated swing highs/lows become graph nodes, and price movement becomes weighted edges. Edge costs are volatility-aware (ATR-normalized distance) and include real frictions like spread plus penalties for noisy, same-type transitions.

On each new bar, the system rebuilds the graph from unbreached swings, then runs A* to find the lowest-cost route from the node nearest current price to a directionally consistent goal capped by ATR. The resulting path is filtered by directional strength, total cost, and structural β€œblockers” before any trade is allowed.

Execution uses the final node as take-profit and a prior opposite swing as a structural stop, with ATR fallback when structure is missing. Risk is position-sized from stop distance, and chart rendering shows nodes, edges, and ...

πŸ‘‰ Read | Quotes | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀30πŸ‘Œ3⚑1🀯1🀩1
AutoARIMA for MQL5 targets a common terminal-side constraint: ARIMA forecasting without manual (p,d,q) selection or heavyweight estimation code. Input is a single Close[] array (Close[0] newest). Output is a one-step-ahead close forecast as a double.

Pipeline is fully automated: d is chosen via a variance-change heuristic, the series is differenced, ARMA(p,q) candidates are fit by SSE minimization using gradient updates with Adam, and coefficients are clipped to [-0.99, 0.99] for stability. Model selection uses AICc over a bounded (p,q) grid (defaults such as max p/max q = 5).

Forecasting reconstructs residuals, predicts the next differenced value, inverts differencing back to price space, and rounds to tick size. Diagnostics printed include best ARIMA(p,d,q), AICc, SSE, last price, and forecast.

πŸ‘‰ Read | Docs | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀48πŸ‘Œ7⚑3πŸ‘€1
The December 2020 TASC issue covered John Ehlers’ MyRsi with Noise Elimination Technology (NET), an RSI variant that applies a Kendall-style autocorrelation approach to reduce noisy signals.

A practical adaptation is support for configurable input prices rather than a fixed close-only feed, which can be useful when testing on typical price, median price, or custom series.

Operationally, it can be treated like a standard RSI, with an additional NET line available for confirmation. In comparative chart reviews, the NET line often shows earlier turns and cleaner transitions, while RSI provides the familiar baseline for thresholds and divergence analysis.

πŸ‘‰ Read | Forum | @mql5dev

#MQL5 #MT5 #Indicator
❀33πŸ‘€2
An object-oriented FVG scanner in MQL5 starts with strict three-candle geometry: bullish gaps form when candle 3 high is below candle 1 low; bearish gaps invert that relationship. This removes indicator lag by working directly on OHLC microstructure.

The implementation centers on a CFVGScanner class that pulls data via CopyRates into an MqlRates array (series-indexed), validates bar count to avoid out-of-range crashes, and supports multiple timeframe instances without shared global state.

A mitigation pass filters stale zones by scanning forward after detection and discarding gaps already touched by later highs/lows. Performance stays near O(N) with early breaks, and the EA runs scans only on new bars, not every tick.

Rendering uses OBJ_RECTANGLE with a unique name prefix plus targeted cleanup/deletion to prevent chart-object buildup and preserve user draw...

πŸ‘‰ Read | NeuroBook | @mql5dev

#MQL5 #MT5 #EA
❀32✍3⚑2πŸ‘Œ1
MetaTrader 5 lacks account-level validation after trade entry. Positions can be modified, partially closed, or opened by multiple EAs and manual actions, creating gaps between intended risk and real exposure.

An enforcement engine treats risk as continuously verifiable conditions: SL present, TP defined, equity-based risk within limits, and a maintained risk-to-reward ratio. Violations trigger reporting or correction depending on mode.

Core modules: trade monitor, risk evaluator, enforcement, dashboard/alerts, and session configuration. MQL5 uses OnInit() with EventSetTimer(), OnTimer() to scan positions, broker stop-level checks, tolerance-based comparisons, lot-size reduction, and TRADE_ACTION_SLTP updates.

Modes: passive, assisted, strict. Logging and on-chart state tracking support testing and auditability.

πŸ‘‰ Read | CodeBase | @mql5dev

#MQL5 #MT5 #EA
❀14πŸ‘5πŸŽ‰3πŸ‘Œ1
Candle Range Theory levels on H1/H4/D1 often disappear on execution charts, causing lower-timeframe moves to be misclassified. A practical fix is an MTF overlay that plots higher-timeframe candle range, body, and wicks directly on the active chart.

An MQL5 indicator addresses this by mapping each lower-timeframe bar to its parent HTF candle with time-accurate anchoring, confirming setups only after the HTF candle closes to avoid repainting, and rendering the full OHLC structure as persistent zones.

Implementation details include HTF data loading via Copy* calls, a binary-search index map, CRT pattern checks evaluated only on HTF-close bars, and automatic drawing of range rectangles plus entry/TP/SL lines. Optional filters handle Sundays and small-gap candles, with alerts and performance safeguards for large histories.

πŸ‘‰ Read | Freelance | @mql5dev

#MQL5 #MT5 #Indicator
❀20πŸ‘Œ2
Clock-time bars encode equal information per minute, which fails under variable tick density and injects heteroscedasticity before feature generation.

AFML Chapter 1 bar types are implemented in two runtimes: a unified Python make_bars() module for batch tick histories, and an MQL5 library for event-driven bar building inside an EA. Output parity is validated on identical tick streams.

Production issues addressed include out-of-core tick loading via partitioned Parquet plus Dask, broker-feed cleanup (zero/negative spreads, duplicates, NaT timestamps), removal of zero-tick time bars, and imbalance-bar thresholds driven by O(1) EWM updates. EWM state persistence avoids resets across EA restarts.

πŸ‘‰ Read | Calendar | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀24πŸ”₯5πŸ‘Œ3
Five-year H1 test on US_TECH100 (AvaTrade broker feed, 29,646 bars) evaluated MACD(12,26,9) histogram crossovers with ATR(14) exits: SL 2.5 ATR, TP 3.0 ATR, 48-bar timeout. Trades normalized to R, pessimistic same-bar fills assumed.

Filter impact was measured incrementally: regime (ADX + rolling ATR percentiles), then EMA200 alignment, then a US-session window (14:00–20:00 broker time). Raw MACD: 2,213 trades, 46.5% win rate, +0.017R expectancy, PF 1.03, max DD -28.8R. Regime and HTF filters changed little and slightly degraded expectancy.

Session filtering was the primary driver: 195 trades, 50.3% win rate, +0.100R expectancy, PF 1.20, max DD -9.7R. Regime breakdown showed RANGE negative, VOLATILE positive, contradicting common filter assumptions.

πŸ‘‰ Read | VPS | @mql5dev

#MQL5 #MT5 #Indicator
❀25πŸ‘9✍2πŸ‘Œ2πŸ†1
Minute-level NQ logic around the New York open fails most often through silent numeric faults: NaN/Inf, overflow from near-zero denominators, log of non-positive prices, missing/zero closes near history edges, and unstable variance from tiny samples. These values propagate as plausible numbers and corrupt downstream signals.

A defensive MQL5 foundation layer is specified as a single include file for CopyClose/SymbolInfoDouble workflows. It enforces minimum sample sizes, validates price arrays, bounds math outputs, and provides stable statistical and spectral primitives.

Core components include guarded math (SafeDivide, SafeLog, SafeSqrt, SafeExp, SafeTanh), validated data access (ValidateSymbolV2, SafeCopyClose), two-pass and trimmed estimators, a centralized OLS slope, shared result structs with status codes, and a single radix-2 FFT reused across mod...

πŸ‘‰ Read | NeuroBook | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀16πŸ†6πŸ‘Œ3
This refactor rebuilds an MT5 drawing tools palette that became brittle due to mixed rendering, layout, theme values, and event handling. The solution replaces the flat code with a layered, single-responsibility sidebar architecture where extending features becomes additive rather than a rewrite.

Key building blocks include a category registry (labels, icon glyphs, multi-tool flags), a theme manager that swaps full color sets for dark/light modes, and a canvas layer that owns chart bitmap labels and supports dynamic resizing.

Rendering quality is improved with supersampled CCanvas drawing: alpha blending, downsampling, and anti-aliased rounded rectangles with per-corner control for edge snapping. Practical result: a compact sidebar that snaps to chart edges, toggles theme instantly, and scales cleanly as more tool groups are registered.

πŸ‘‰ Read | AppStore | @mql5dev

#MQL5 #MT5 #Indicator
❀16πŸ‘4πŸ‘Œ1
Hardcoding min_ret in triple‑barrier labels hides the biggest source of false signal: broker- and session-specific transaction costs. A reproducible pipeline solves this by measuring costs per symbol and converting them into a labeling threshold aligned with the real execution environment.

An MQL5 script samples spread history via CopySpread(), captures swap metadata with SymbolInfoDouble(), and exports a structured CSV including spread percentiles plus hourly spread means. This makes costs session-aware instead of relying on a single average.

A Python TransactionCostModel ingests the CSV, normalizes spread, slippage, commission, and swap into fractional-return units, and exposes min_ret_for_symbol() and diagnostics. Swap handling covers broker swap modes and triple-swap days, preserving carry credits instead of forcing abs().

The same model param...

πŸ‘‰ Read | Signals | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀22πŸ‘5πŸ‘Œ2
Manual news trading still suffers from context switching between browser calendars and the MT5 terminal. That gap creates reaction delays, inconsistent execution, and strategies that cannot be validated on historical data or scaled with repeatable rules.

A practical architecture in MT5 is a dedicated news layer built on the terminal’s Economic Calendar and MQL5 API: single data source, cache + filters, exportable history for Strategy Tester, and automatic Live/Tester switching so identical code paths stay deterministic.

Key API usage patterns: CalendarValueHistory for bulk preloading, CalendarValueLast with change_id for incremental updates, and CalendarEventById/CalendarCountryById for metadata joins. Use TimeTradeServer for consistent time windows, and handle 5200/5201 retries while avoiding 5204 by timer-based polling.

πŸ‘‰ Read | Calendar | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀20πŸ‘4πŸ‘Œ1