MQL5 Algo Trading
489K subscribers
3.1K photos
3.1K 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 unidirectional trend strategy for XAUUSD is built by combining K-Means clustering with CatBoost classification. K-Means segments history into market modes using compact meta-features (e.g., rolling volatility), then a meta-model learns to detect the active mode while the main model predicts trade direction for that mode.

The workflow is engineered for fast iteration: feature generation from close prices, per-cluster trade labeling for a single side (buy-only in the example), 70/30 validation with early stopping, and a custom tester that ranks candidates using balance-curve RΒ². Sparse clusters are filtered out to avoid unreliable fits.

Practical deployment is covered via ONNX export to MT5, with a key caveat: feature calculations must match exactly between Python and MQL5, or live signals will drift.

πŸ‘‰ Read | CodeBase | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀37πŸ€”3😁2πŸ‘Œ1
This article shows how to build richer MT5 indicators without multiplying separate scripts. It starts by extending a basic High-based plot into a single indicator that draws multiple lines (High and Low) by adding extra indicator buffers, assigning unique buffer indexes, and correctly increasing the declared plot count.

It then switches from DRAW_LINE to DRAW_COLOR_LINE to support color-changing lines. The key detail is that each colored plot needs an additional color-index buffer, mapped in order with SetIndexBuffer, and populated with INDICATOR_COLOR_INDEX values that select entries from the plot’s color array.

Finally, it previews DRAW_FILLING: a two-buffer plot that fills the area between lines, useful for band-style visuals or crossover-style signals by swapping top/bottom values based on bar direction.

πŸ‘‰ Read | NeuroBook | @mql5dev

#MQL5 #MT5 #Indicator
❀29⚑2πŸ†2πŸ‘Œ1
Part 8 extends an MT5 hybrid EA (MA crossover + on-chart CCanvas controls) with a persistent CSV trade journal that records not just what happened, but why it happened.

A CTradeJournal module built on Files/FileTxt.mqh uses CFileTxt to open/append CSV safely, write the header once via Size(), Seek() to the end, and Flush() after each entry for crash-resistant logging. FILE_SHARE_READ keeps the journal inspectable while running.

Each trade event is tagged by decision source: ALGO for strategy-driven entries and HUMAN for chart-click closures routed through OnChartEvent(). The result is portable, analysis-ready data (time, ticket, symbol, action, profit) that cleanly separates automated performance from discretionary intervention and plugs directly into spreadsheets or Python/R workflows.

πŸ‘‰ Read | CodeBase | @mql5dev

#MQL5 #MT5 #EA
❀27πŸ‘Œ3
Part 39 in the MQL5 series focuses on practical file handling for trading tools. Core topics include where terminal files are stored, and safe open/read/write/close workflows for persistent logs, indicator snapshots, and error reporting.

A project script is outlined for a CSV trading journal that records account identity plus deal history fields such as ticket, symbol, type, volume, timestamps, prices, SL/TP, profit, and result, along with last update time.

User-selected storage is implemented via FileSelectDialog instead of hardcoded paths, supporting default names, filters like CSV|*.csv, and write modes that allow creating new files. FileOpen then creates or opens the target with flags such as FILE_WRITE, FILE_CSV, FILE_SHARE_READ, FILE_ANSI, followed by handle validation, error checks, and FileClose for data integrity.

πŸ‘‰ Read | CodeBase | @mql5dev

#MQL5 #MT5 #script
❀19πŸ†3πŸ‘Œ2πŸ‘1
Static indicator implementations in MQL5 are simple but lock the rendering mode. A dynamic approach allows multiple indicator behaviors, including pattern marking and alternative inner-bar criteria.

For candle recoloring, buffer order is critical. MetaTrader 5 interprets OHLC buffers by position; a wrong sequence can change candle geometry, not just colors. Correct indexing as Open, High, Low, Close fixes rendering.

An inner bar can be detected against the previous candle, or against an older boundary using stored high/low limits. Static variables can preserve these limits until a breach occurs, preventing false positives and clearing state when invalidated.

Chart UI can also be controlled via code, including hiding price/time scales. Such changes should be reversible in Deinit, but forced removals may skip cleanup, so user options and cautious defa...

πŸ‘‰ Read | VPS | @mql5dev

#MQL5 #MT5 #Indicator
❀17πŸ‘Œ4πŸ‘2
Multi-agent trading in an MQL5–Python stack extends feedback-driven adaptation into cross-symbol coordination. Independent agents score trend, momentum, and volatility per instrument, while a context layer aggregates macro inputs such as USD strength from major pairs to bias decisions on XAUUSD.

The runtime is a shared MT5 session managed in Python, with real-time data pulled into pandas and enriched with EMA, RSI, and ATR. Agent outputs are combined through a weighted consensus model, logged to JSON, and gated by confidence thresholds before execution.

A Flask API provides /start, /stop, and /status controls plus signal delivery. The MQL5 EA polls the API, parses JSON via a minimal in-terminal parser, enforces risk sizing and ATR-based stops, closes opposing positions, normalizes prices, and submits orders asynchronously.

πŸ‘‰ Read | Docs | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀28✍7⚑6
Part 16 extends the MQL5 canvas dashboard with anti-aliasing and high-resolution rendering. Supersampling renders panels at 4x size and downsamples by pixel averaging, reducing jagged borders on curves, text, and UI controls. Bicubic-style resampling is used during scaling to retain smooth gradients.

The implementation adds high-res canvases for stats and text panels, plus inputs for rounded triangle arrows, font sizing, and optional scroll buttons. Initialization creates both normal and high-res bitmaps; deinit and UI state changes destroy them when not needed.

Rendering changes include precise arc-based rounded rectangle borders and scanline-filled quadrilaterals. Scrollbar arrows are redrawn as rounded triangles using precomputed tangent geometry and angle checks for correct arc sweeps, aligned to a Windows 11-style scrollbar.

πŸ‘‰ Read | Freelance | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀45πŸ‘Œ6πŸ€”4πŸ‘3
This tool upgrades trendline analysis in MT5 by replacing ZigZag pivots with swing points extracted directly from raw price action. Swings are detected via local high/low dominance, then filtered by a minimum size threshold or ATR-adjusted volatility, keeping only meaningful structural turns.

Validated swings are ordered by time to preserve structural consistency and reduce repaint-like behavior. Trendlines are built only when swing relationships align with market direction: descending highs for resistance and ascending lows for support.

Candidate lines are scored by touch count, recency, and tolerance-based β€œrespect” checks, then only the most significant support and resistance rays are drawn. The result is a cleaner chart and a repeatable way to work with sloped structure, useful for discretionary structure reading and algorithmic context filters r...

πŸ‘‰ Read | Signals | @mql5dev

#MQL5 #MT5 #Strategy
❀27πŸ‘Œ2⚑1
Mixed copulas extend elliptical and Archimedean models by blending multiple families into a single dependence model, with weights that sum to one. This makes it practical to represent center dependence plus asymmetric or symmetric tail behavior in one fit, which is common in financial pairs.

The article implements two mixtures used in copula-based pairs trading research: Clayton-Frank-Gumbel (separates lower tail, middle, upper tail) and Clayton-Student-t-Gumbel (adds two-sided tail dependence for volatility clustering/regime shifts).

Parameter estimation is handled with an EM algorithm and a penalized likelihood using the SCAD penalty, which can shrink unhelpful mixture weights to zero while avoiding Lasso-style bias on strong components. Hyperparameters are tuned via cross-validated grid search.

In MQL5, mixed.mqh defines a modular CMixedCopula ...

πŸ‘‰ Read | VPS | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀27πŸ‘5😁2πŸ‘Œ2✍1
Smash-day reversals are high-signal events, but trading every instance without context tends to amplify noise and reduce consistency. Larry Williams frames these as emotional excess: a breakout that attracts late entries, then fails quickly and forces a reversal.

A custom MQL5 indicator can handle objective detection without auto-execution. It flags confirmed patterns only: bullish when the next bar breaks above the smash bar high, bearish when the next bar breaks below the smash bar low. Outside bars are filtered, and lookback depth is adjustable.

Implementation centers on buffer binding, history mapping, and lightweight real-time updates. OnInit validates sufficient bars and configures plots; OnCalculate converts arrays to forward indexing, scans once on load, then updates the most recent indices on new bars and ticks.

πŸ‘‰ Read | Calendar | @mql5dev

#MQL5 #MT5 #Indicator
❀35πŸ‘Œ3
Follow-up work on MQL5 scripting shows why β€œorganized” code is not the same as structured code.

A script that hides and restores chart scales can be written with free functions plus a plain struct, but SAVE/RESTORE quickly lose context as features grow. Reuse then pushes toward overloads and duplicated names.

Moving SAVE/RESTORE into the struct binds behavior to the stored state, removes redundant declarations, and makes intent local to the data. The next failure case appears when adding another chart property: public fields allow unintended writes, causing state restore to break via data leakage.

This is the practical motivation for stronger encapsulation and the move toward classes.

πŸ‘‰ Read | Freelance | @mql5dev

#MQL5 #MT5 #Indicator
❀32✍7πŸ‘3πŸ‘Œ3
This article explains why socket-based Python servers (threads or select) can degrade Excel responsiveness: the script and Excel compete for CPU, making a spreadsheet-driven trading workflow impractical.

The proposed fix is to switch inter-process communication to Microsoft COM. Using Python’s built-in COM support, Excel can be automated directly without extra packages, with code that mirrors VBA-style object access (create or attach to an Excel instance, add/activate/rename sheets, write values and formulas).

It then extends the approach to event-driven integration: Python can subscribe to Excel Application/Workbook events, but handler methods must use exact event names from the Excel COM documentation. This enables real-time Excel-to-MetaTrader 5 control flows where Excel acts as the UI and an MT5 EA interprets commands.

πŸ‘‰ Read | VPS | @mql5dev

#MQL5 #MT5 #EA
❀43πŸ†5✍3πŸ‘3πŸ‘Œ3
A chart watermark indicator is available to show the active symbol and current timeframe in a large font on the chart background. This reduces mistakes when switching between multiple instruments and timeframes during analysis or execution monitoring.

Setup is straightforward. Open the desired symbol on a chart and select the required timeframe. Attach the Watermark indicator, then adjust visual parameters such as font family, font size, color, and on-chart position to match the workspace layout and avoid overlap with other objects.

πŸ‘‰ Read | AppStore | @mql5dev

#MQL4 #MT4 #Indicator
❀25πŸ‘8πŸ‘Œ3πŸŽ‰2
This article shows how to generalize an MQL5 struct that computes average and median so it works across numeric types without duplicating code. The core technique is templating the structure, enabling β€œoverload-like” reuse while keeping data encapsulation via a Set method.

A key pitfall appears with return types: a templated median/average can silently promote integers to double, producing unexpected results for integer-based structs. The fix is a cleaner API: expose Sum() and Count() inside the struct, then compute averages with explicit casting where needed.

For EA/indicator code, this encourages reusable, type-safe utilities and pushes precision/rounding decisions to the caller instead of hiding them in one monolithic function.

πŸ‘‰ Read | Signals | @mql5dev

#MQL5 #MT5 #EA
❀33πŸ‘7πŸ‘Œ3✍1
Work continues on structural templates and type overloading, moving from basic structs toward data-aware containers used in search and lookup tasks.

The example models a key/value association using two arrays (K as keys, H as values). A direct index access fails when K is unordered, so the relationship must be preserved while enabling efficient search via sorting or binary search.

A refined approach embeds the lookup inside a struct: search K for a key, then return H at the same position. This keeps the mapping intact and prepares the code for reuse.

Generalization then starts by templating one base type to trigger compiler overloading. This introduces warnings when return types and stored types diverge, highlighting a common library-design risk: hidden conversions and mismatched expectations.

πŸ‘‰ Read | Calendar | @mql5dev

#MQL5 #MT5 #algorithm
❀67πŸ‘Œ4😱3πŸ‘1😁1
A chart watermark indicator is available for displaying the active symbol and current timeframe directly on the chart background using a large, configurable font. This reduces ambiguity when switching rapidly between multiple instruments and timeframes across several windows.

Operation is straightforward: open a chart for the required symbol and set the desired timeframe, then attach the Watermark indicator. Visual parameters can be adjusted as needed, including font family, font size, color, and on-chart positioning to match existing templates and keep other overlays readable.

πŸ‘‰ Read | NeuroBook | @mql5dev

#MQL5 #MT5 #Indicator
❀32πŸ‘3πŸ‘Œ3
Better programming outcomes come from improving learning habits and applying fundamentals, not from constant coding.

Avoid blind copy/paste. Treat forum snippets as references, then validate assumptions against documentation and write the fix intentionally.

Stop β€œhacking” errors. Identify root cause, reduce the case, and use official references and peer review to ask precise questions.

Drop perfectionism and ship incremental improvements. Prefer clean, consistent, commented, DRY code over β€œsmart” tricks. Optimize for readability, maintenance, and user-facing diagnostics rather than shortest code.

πŸ‘‰ Read | AppStore | @mql5dev

#MQL5 #MT5 #Programming
❀67πŸ‘19✍4πŸŽ‰3πŸ‘Œ3⚑2πŸ”₯1
Utility script for chart cleanup: removes all graphical objects from the active chart, including comments, horizontal and vertical lines, arrows, and other drawing elements.

No user input is required. Execution is immediate and will clear every object on the current chart.

Operational notes: assign a keyboard hotkey via the script context menu (β€œSet hotkey”) or run it by drag-and-drop onto the chart.

Risk notice: use on a new or non-critical chart first. Running on a working chart will permanently remove existing annotations and objects from that chart.

πŸ‘‰ Read | NeuroBook | @mql5dev

#MQL5 #MT5 #script
❀34πŸ‘2πŸ‘Œ2⚑1
Part 17 extends the MQL5 canvas dashboard with vector rendering for rounded rectangles and rounded triangles, keeping edges clean through supersampling and controlled downsampling.

The implementation builds reusable primitives: ARGB color packing with opacity, angle normalization and arc-range tests, and a scanline polygon filler used to paint interiors and border strips deterministically.

Rounded rectangles are composed from a central fill, side strips, and quadrant circle fills, then bordered using thickened straight-edge quads plus precise corner arc rings.

Rounded triangles rely on precomputed geometry (arc centers, tangency points, and arc angles) so scanline filling can combine straight edges and circular arcs without gaps. This supports configurable radii, border thickness, and transparency for modern MT5 UI elements and overlays in backtests.

πŸ‘‰ Read | Quotes | @mql5dev

#MQL5 #MT5 #EA
❀32πŸ”₯4πŸ‘Œ4
This article breaks down a common execution error in price-action trading: treating liquidity grabs and market structure shifts as the same event. Liquidity grabs typically sweep equal highs/lows or prior session levels, then reverse quickly, often leaving an imbalance; structure shifts are decisive breaks that flip the sequence of highs/lows, usually after major liquidity is cleared.

A key emphasis is multi-timeframe context: use D1/W1 plus MA stacking to define trend and narrative, then drop to M15/M5/M1 to time intraday entries after a purge, avoiding counter-trend trades.

An MQL5 Expert Advisor operationalizes this with configurable inputs (lookback, volume spike, engulfing confirmation window), 1% risk per trade, and trailing stops. Practical benefit: consistent rule-based filtering to reduce false breakouts and late entries on pairs like GBPJPY, GBPUS...

πŸ‘‰ Read | Quotes | @mql5dev

#MQL5 #MT5 #EA
❀75πŸ‘Œ6⚑3πŸ†3πŸ‘2
SNR Sentinel is an adaptive support and resistance engine for MT5 that maintains only the nearest active levels to current price. It uses strict left/right bar confirmation to validate swing highs and lows, filtering out low-quality structure and reducing chart noise.

Breakouts are recognized only on candle close beyond a level. Once breached, the prior level is marked and queued for replacement, and the engine selects the next historically relevant level likely to receive a reaction.

Active levels are projected forward and updated per bar using controlled line extensions rather than rays. Output is limited to one support and one resistance at any time, with no repainting and no redundant objects.

Typical applications include breakout and retest workflows, reaction-zone mapping for scalping or swing trading, market structure validation, and clean S/...

πŸ‘‰ Read | AppStore | @mql5dev

#MQL5 #MT5 #Indicator
❀40πŸ‘Œ2