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
Utility script for removing chart annotations and drawing objects on the active chart. Intended to clear items such as comments, horizontal and vertical lines, arrows, and other objects created by indicators or manual markup.

No user input is required. When executed, it deletes all objects on the current chart, so it should be validated on a clean, newly opened chart before running on an active workspace.

Operational notes: assign a keyboard hotkey via the platform’s script list (context menu: Set hotkey) or run it by dragging the script onto the chart. The code can be adjusted to keep specific object types if needed.

πŸ‘‰ Read | Signals | @mql5dev

#MQL4 #MT4 #script
❀28πŸ‘6
Structured vs organized code remains a frequent source of confusion. A practical boundary appears when structures start carrying context through internal procedures, before transitioning to classes and OOP.

A struct with public data can compute average/median, but it also allows external writes. After a reset, memory may be reused incorrectly, producing wrong medians and hard-to-trace faults. This is a typical encapsulation error.

Marking internal arrays as private blocks direct access and even prevents blanket memory wipes, forcing explicit API methods for set/reset/print. The result is tighter invariants, clearer intent, and fewer hidden state bugs, at the cost of more deliberate design.

πŸ‘‰ Read | VPS | @mql5dev

#MQL5 #MT5 #algorithm
❀30πŸ‘Œ2
Risk-management module update: new enums, structures, and constants added to support daily limits, position accounting, and dynamic per-trade risk.

Dynamic risk now adjusts assigned_percentage based on balance drawdown from an initial balance. Initial balance can be fixed (prop firm) or captured at startup (personal account). Thresholds must be sorted; a loop-free counter-based method requires ordered activation levels. A CHashMap approach is recommended to preserve key-value mapping during sorting.

Balance-check timing is configurable via enum: per-tick checks (accurate but noisy) or checks on trade close (lighter but less granular). Dynamic-risk modes include full custom strings, fixed numeric parameters (up to four steps, optimizer-friendly), or disabled.

Daily limit exceedance criteria are selectable: equity only, closed P/L only, or combined. Trade ac...

πŸ‘‰ Read | Calendar | @mql5dev

#MQL5 #MT5 #Strategy
❀31✍3πŸ‘2πŸ‘Œ2πŸ†2⚑1πŸ€”1
This article turns slanted, swing-anchored trendlines into a rule-based breakout signal tool for MetaTrader 5. Trendlines are treated as dynamic support/resistance built from market structure, not discretionary drawing.

Signals come only from validated lines: two swing anchors define the slope, and a third swing confirms that price actually respects the level. Breakouts are detected via true cross logic (with optional close vs wick selection and a configurable buffer), filtering minor intrusions and reducing false triggers.

The MQL5 EA is modular: ATR-assisted swing filtering, ordered swing storage, scored selection of best support/resistance candidates by touches and recency, automatic chart objects, and persistent breakout records with optional alerts. Practical result: consistent trendline breakout execution suitable for automation and clean cha...

πŸ‘‰ Read | Docs | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀30😱1πŸ‘Œ1
Part 18 extends the MQL5 canvas vector toolkit by composing a rounded rectangle body with a triangular pointer to form a speech bubble, with pointer orientation set to up, down, left, or right via an enum.

Geometry is precomputed per orientation, including body bounds, pointer vertices, apex rounding, tangents, and scanline mode selection. Filling uses supersampled high-res rendering, scanline triangle fill with arc inclusion checks, and quadrant circle fills for rounded corners, then bicubic downsampling.

Border rendering is segmented to avoid overdrawing at the pointer junction. A configurable borderExtensionMultiplier scales edge extensions by thickness to keep joins clean across wider strokes. Initialization integrates additional canvases, redraw handling, and cleanup, with backtest visuals confirming output.

πŸ‘‰ Read | Forum | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀32πŸ‘2πŸ‘1πŸ‘Œ1
This part extends an MQL5 trading journal from basic file creation to exporting real account history into a structured log. It selects deals within a defined date range, then extracts core fields needed for audit and analysis: ticket, symbol, side, volume, open/close times and prices, SL/TP, profit, and a final result flag.

The journal becomes readable by writing a consistent header row first, ensuring every subsequent value lands in the right column and can be parsed later by scripts or spreadsheets.

History processing is done safely: HistorySelect scopes the dataset, HistoryDealsTotal drives iteration, and DEAL_ENTRY_IN filters to true position entries. Ticket IDs are collected into a resized dynamic ulong array, using a separate index to avoid gaps when non-entry deals are skipped.

πŸ‘‰ Read | NeuroBook | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀27πŸ‘3πŸ”₯2πŸ‘Œ2🀣1😈1
Market Memory Zones move from a chart-only indicator to a MetaTrader 5 Expert Advisor that turns price behavior into executable rules. The system models three zone types: displacement (ATR-qualified impulse candles), structure transitions (CHoCH via swing breaks), and liquidity sweeps (stop-hunts that reverse back into range).

Each zone is stored as a structured object with boundaries, direction, ATR context, expiry, and activation state, managed in bounded arrays for stable long runs. OnTick updates ATR and swing structure, detects new zones only on fresh bars, removes expired zones, and continuously evaluates returns into active zones.

Entries avoid blind level trading: a zone must be revisited and confirmed on a lower timeframe (engulfing or strong close). Trades use risk-based sizing, optional dynamic stops beyond zone invalidation, structure-aware targ...

πŸ‘‰ Read | Forum | @mql5dev

#MQL5 #MT5 #EA
❀32πŸ‘Œ3😈1
Final part of a risk management series builds an MT5 Expert Advisor around an optimized Order Blocks indicator, then measures how risk controls change backtest results across four parameter sets (with/without loss and profit limits, plus dynamic per-trade risk).

Indicator speed is improved by reducing recalculation loops via prev_calculated, simplifying mitigation checks to highs/lows, switching to predefined OHLC arrays, and using template helpers to add/remove array elements. Mitigated blocks are now removed from the main list and deleted from the chart using auxiliary name arrays.

The EA is assembled with clear inputs: Order Block/TP-SL modes (ATR or points), fixed vs risk-based lots, PropFirm-style constraints, max daily/weekly/total loss, max daily profit with strict/non-strict logic, and dynamic GMLPO risk adjustment checked on ticks or on trade close...

πŸ‘‰ Read | Quotes | @mql5dev

#MQL5 #MT5 #EA
❀45πŸ‘Œ7πŸ†1
Multi-timeframe RSI scanners can reduce false positives versus single-chart RSI, especially on volatile symbols like XAUUSD and fast FX crosses. This build tracks RSI across up to seven timeframes (M1 through D1) and renders a compact dashboard with color-coded states plus per-timeframe overbought/oversold alerts via push, email, or sound.

The main signal is convergence: when three or more timeframes reach the same extreme zone, a dedicated warning is raised. This is intended as a confirmation layer for reversal or continuation setups, not an entry system.

v1.6 (Feb 2026) focuses on operational stability: alert retry (up to 2 retries with 100ms delay, skipping configuration errors), verbose logging toggle for VPS usage, extracted constants, throttled warnings, safer dashboard positioning, and handle cleanup. Live usage since Oct 2025 reported no crashes o...

πŸ‘‰ Read | CodeBase | @mql5dev

#MQL5 #MT5 #Indicator
❀31
This article upgrades a basic Python echo server into a multi-client TCP server suitable as a bridge concept for Excel and MetaTrader 5 workflows.

The core issue is blocking I/O: accept() and recv() halt execution, and when Python runs inside Excel via VBA it competes for CPU time, making the spreadsheet sluggish.

The solution shown is a threaded design: the main loop keeps accepting connections, while each client gets its own handler thread with an independent receive loop. This enables reconnects and simultaneous clients, and mirrors earlier MT5 mini-chat ideas previously implemented with a C++ server.

It also notes practical limits: threads consume scheduling resources, so scaling requires restraint and careful design before adding client-to-client message routing.

πŸ‘‰ Read | Signals | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀30πŸ‘Œ2✍1
Basic news filters that only pause entries at release time miss the real risk: spreads can blow out, slippage increases, and stop-losses get triggered by volatility spikes. Open trades stay exposed, prop-firm timing rules get violated, and many EAs lose their logic after restarts or can’t be tested without live events.

The article builds a structured MQL5 news filter around the native Economic Calendar, replacing fragile web scraping with cached, deterministic terminal data that can be simulated in the Strategy Tester.

Key mechanics: load and cache a rolling 24-hour event set, map events to the traded symbol via currency relevance (base/quote for FX, heuristics for indices/commodities, manual overrides for odd symbols), filter by impact, and enforce configurable pre/post buffers. The result is a state-driven system that blocks entries and can optio...

πŸ‘‰ Read | VPS | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀22πŸ‘Œ3✍2
In the MetaTrader 4 Beta Build 1457, we have implemented several important security enhancements, fixed known issues, and improved overall platform stability.

We invite all traders to participate in testing. Your experience and feedback help us further improve the platform reliability.

To receive the beta update, connect to our public demo server MetaQuotes-Demo β€” enter the server name in the search field and open a demo account.

Discuss the update...
❀33πŸ”₯5πŸ‘Œ3πŸ‘2
This article tackles a practical integration issue: a threaded Python socket server works fine standalone, but becomes disruptive when launched from Excel via xlwings. The root cause isn’t threading itselfβ€”it’s blocking accept() and an always-running loop that still contends with Excel’s execution.

A safer pattern replaces blocking accept() with select() using a short timeout, letting the server poll for events without freezing the host application. Logging back into Excel is simplified with a small helper that writes status and messages into worksheet rows.

The server is then refactored into a class, separating connection checks and message handling into callable methods. Moving the main loop outside the class makes the component easier to package, test, and later adapt for MetaTrader 5 ↔ Excel data exchange.

πŸ‘‰ Read | VPS | @mql5dev

#MQL5 #MT5 #script
❀67πŸ€”6πŸ‘Œ5✍2
An indicator implements pivot calculations for any selectable timeframe, provided the pivot timeframe is higher than the current chart timeframe. This supports multi-timeframe levels without switching charts.

Two calculation modes are available. Original mode follows the approach described by Austin Passamonte. Alternate mode adjusts the level logic to emphasize support and resistance behavior more strongly.

Operational use is consistent with standard pivot workflows, including plotting key levels for planning entries, exits, and risk boundaries across sessions.

πŸ‘‰ Read | Docs | @mql5dev

#MQL4 #MT4 #Indicator
❀30πŸ‘7⚑3🀯2πŸ‘Œ2😐2
Part 41 shifts from writing trade journals to reading them back in MQL5, using a practical target: an indicator that ingests a CSV trading history and plots a balance curve from profit/loss over a selected period.

The core technique is treating CSV content as sequential elements (cell-like values), not β€œlines of text”. The workflow starts by opening the file in FILE_READ with CSV parsing and defined encoding, validating the handle, and using FileIsEnding + incremental reads to count total elements for safe loop bounds.

After counting, the file pointer is reset, then all elements are loaded into dynamic arrays. This enables scalable grouping by column (TradeID, LotSize, etc.), avoids fixed-size structures, and prevents out-of-range errors when processing real trading logs.

πŸ‘‰ Read | CodeBase | @mql5dev

#MQL5 #MT5 #Algorithm
❀28⚑5πŸ‘Œ3
A Python socket server can act as a bridge between Excel (VBA/COM) and MetaTrader 5, enabling Excel-driven actions without placing orders directly from Excel.

The implementation uses only the Python standard library, with a class-based server, explicit host/port parsing, and defensive exception handling for Excel session, worksheet, and cell access.

Data flow is kept minimal: one control cell for requests and one log area for responses. The server reads MT5 messages, writes results into Excel, and forwards Excel cell content back to MT5.

Connection gating is handled via an initial header plus simple command parsing (shutdown, disconnect). Unknown clients are rejected, and missing worksheets trigger a clean shutdown.

πŸ‘‰ Read | Quotes | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀26⚑4πŸ‘Œ2πŸ‘1
Part 19 builds a chart drawing tools palette in MQL5 using Canvas, turning UI elements into an interactive, stateful panel instead of static buttons. The palette supports dragging, edge/corner resizing, minimize/close controls, and dark/light theme switching via centralized theme-aware color getters.

Tools are modeled with enums and a button table (icon font, type, tooltip), enabling consistent hover/active rendering and clean tool naming. Mouse handling is event-driven in OnChartEvent: hit-testing separates header drag zones, control buttons, tool grid, and resize handles, while clamping keeps the panel within chart bounds.

Drawing logic maps clicks to chart objects with ChartXYToTimePrice and ObjectCreate, handling single-click (H/V lines, text, arrows) vs two-click tools (trendline, rectangle, Fibonacci). Crosshair mode adds live cursor tracking plus a ...

πŸ‘‰ Read | VPS | @mql5dev

#MQL5 #MT5 #EA
❀24πŸ‘Œ4
In MetaTrader 5 build 5640, we have refined the dark interface theme by updating the overall background color, as well as the colors of tabs and scrollbars, to provide a more comfortable user experience.

We have also introduced convenient support for Markdown files in MetaEditor. You can now use Markdown to create descriptions and documentation for your projects when publishing them to AlgoForge.

MQL5 has also received several improvements: we fixed a number of compiler issues, added the new Color2PRGB function, and extended support for NormalizeDouble β€” it can now be applied to matrices and vectors.

Read more...
❀36πŸ‘4πŸ‘Œ2
Part 7 moves from an evolved RSI stack to a hybrid TPO Market Profile indicator in MQL5, covering intraday/daily/weekly/monthly/fixed sessions with timezone offsets. Prices are quantized to a grid, then session OHLC/high/low are tracked per profile window.

Data structures store per-level TPO strings and counts, plus session metadata. Core routines create/roll sessions, snap prices to grid, parse daily ranges, filter eligible bars, and add TPO characters. Levels are sorted descending, Point of Control is derived from max count, and Value Area expands around POC to a target percentage of total TPOs.

Rendering uses chart objects (labels and trend lines) rather than buffers, with configurable colors for default prints, single prints, value area, POC, and close highlighting.

πŸ‘‰ Read | Freelance | @mql5dev

#MQL5 #MT5 #Indicator
❀33πŸ‘Œ7
This article completes the Excel side of an MT5–Python–Excel socket bridge by adding a small VBA layer that controls the Python server and exposes a simple UI.

VBA starts the server script from the workbook’s folder, passes the required parameters, and runs it asynchronously so Excel remains usable. Server lifecycle is handled cleanly: auto-start on Workbook_Open and shutdown on Workbook_BeforeClose to avoid orphaned processes.

User actions are routed through shape-linked macros that call centralized procedures (start/stop, send MT5 commands). Button states are driven by worksheet events that watch a β€œstatus” cell and update colors to reflect whether MT5 is online, keeping the workflow transparent for traders while staying extensible for developers via a separate Python β€œmessage client” script.

πŸ‘‰ Read | NeuroBook | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀54πŸ†2😁1
A trading indicator based on Williams %R (WPR) for BUY/SELL signaling is being updated with a different decision threshold.

Instead of relying on classic overbought/oversold zones, the logic uses the -50 level as a pivot point, aiming for more stable behavior in markets where the extremes do not produce consistent entries. The threshold can be adjusted back to overbought/oversold levels if needed.

This release is functionally aligned with the prior version, but includes a fix for object cleanup. The update addresses cases where chart objects were not deleted correctly, reducing clutter and preventing stale elements from remaining on the chart.

πŸ‘‰ Read | NeuroBook | @mql5dev

#MQL5 #MT5 #Indicator
❀35πŸ‘Œ4