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
Market reversals are often driven by crowd positioning, not clean trend logic. Larry Williams’ smash day reversal targets breakouts that fail fast and trap late participants.

A smash day is a bar that closes beyond recent structure: below prior lows for buy reversals, above prior highs for sell reversals. Outside bars are excluded to reduce ambiguous range expansion.

The EA framework makes the pattern testable in MQL5. It supports buy-only, sell-only, or both, with a single active position to keep attribution clean.

Entries trigger on a break of the smash bar level, either immediately on price cross or after bar-close confirmation. Stops sit at the smash bar extreme; take profit uses a configurable risk-reward ratio. Position sizing can be fixed-lot or percent-risk.

πŸ‘‰ Read | NeuroBook | @mql5dev

#MQL5 #MT5 #EA
❀33πŸ‘Œ6πŸ‘¨β€πŸ’»3🀨1
This article builds an on-chart position labeler for MetaTrader 5 to close the usability gap between the Trade tab and live price action. Each open position is tied to a chart β€œbubble” anchored at entry time/price, showing ticket and real-time P/L with a clickable close area.

The implementation uses MQL5 Standard Library components: CCanvas for ARGB overlay rendering, CPositionInfo for stateful access to live position fields, CTrade for safe programmatic closes, and CiMA (Trend) to generate simple test positions.

Key engineering points include custom hitboxes for mouse interaction, OnInit bootstrapping of indicator handles and chart event routing, and a throttled redraw loop (~30 FPS) to keep UI responsive without slowing trading logic.

πŸ‘‰ Read | AppStore | @mql5dev

#MQL5 #MT5 #EA
❀36πŸ”₯4πŸ‘Œ3πŸ‘1
A new option has been added to select the timeframe used when drawing Bobokus Fibonacci levels. This allows Fibonacci calculations and placement to be based on a chosen chart period rather than the currently active view, improving consistency when switching timeframes.

Support is also included for custom Fibonacci levels. Any additional ratios can be defined and displayed alongside the default set, making it easier to align levels with a specific trading model or internal standards.

The update focuses on configurability and repeatable layout, reducing manual rework when analyzing multiple symbols or sessions.

πŸ‘‰ Read | NeuroBook | @mql5dev

#MQL5 #MT5 #Indicator
❀33πŸ‘€4⚑2πŸ‘Œ2πŸ”₯1
Better MQL5 code often comes down to habits, not years of experience.

Strong forum culture matters: critique code only after understanding intent, and provide explanations that teach. Dropping unclear snippets encourages copy-paste fixes, spreads bad patterns, and leads to wrong answers and unfair reviews.

Adopt a growth mindset. Complex EAs, advanced math, and adaptive models become approachable through steady practice and reading real source code.

Keep code lean and intentional. Remove unused blocks and variables to reduce bugs, speed reviews, and make debugging easier.

Treat mistakes as training data. Try multiple approaches before posting, document what was attempted, then understand the fix to prevent repeats. Progress in algo trading development is incremental, built through iteration, experiments, and helping others.

πŸ‘‰ Read | Docs | @mql5dev

#MQL5 #MT5 #Strategy
❀73πŸ‘9πŸ‘Œ6⚑4🀑3πŸ”₯2🀨1
An equidistant channel tool is used to mark rectangular consolidation by placing two parallel boundaries around price. The upper line tracks repeated highs, the lower line tracks repeated lows, while the midline helps assess balance and potential mean reversion.

Key checks include multiple clean touches on both sides, stable channel width, and limited slope to confirm a range rather than a trend. When volatility contracts inside the channel, breakouts can be evaluated by close outside the boundary, follow-through, and a retest of the broken line as former resistance or support.

πŸ‘‰ Read | Quotes | @mql5dev

#MQL5 #MT5 #Indicator
❀39✍5πŸ‘€5πŸ‘Œ3
GUI animation on CCanvas requires deterministic redraw. Overpainting frames accumulates pixels, so state must be restored before drawing the next frame.

A minimal sprite workflow is implemented by caching the background under a moving element, drawing the element, then restoring the cached pixels on the next update. This scales better than full form redraw for multiple independent elements.

GCnvElement is extended to store an initial pixel snapshot, add resource-to-array copying, and track last text coordinates plus anchor-based X/Y offsets for correct background capture.

ShadowObj is simplified by reusing the new base snapshot and Width/Height accessors. Form.mqh adds a pixel-copier class with ID-based instances, storing rect coordinates, effective clipped size, and save/restore methods for partial canvas regions.

πŸ‘‰ Read | Calendar | @mql5dev

#MQL5 #MT5 #algorithm
❀67πŸ‘Œ11
A new technical indicator marks values when they enter oversold and overbought zones, with an arrow signaling when the value returns from an extreme level.

Configuration options cover colors, line width, zone levels, and arrow display, allowing quick adjustment to different chart templates and instruments.

For more stable outcomes, the indicator is designed to be used alongside other signals and broader market analysis rather than as a standalone trigger.

Optional alerts are available to notify on key zone events and return signals, supporting monitoring without constant chart focus.

πŸ‘‰ Read | AlgoBook | @mql5dev

#MQL4 #MT4 #Indicator
❀45✍6πŸ‘€3πŸ‘2😁2πŸ‘Œ2⚑1
Geometric Asymmetry (GA) Breakout frames breakouts as a structural condition, not a volatility event. Consolidations are qualified via fractal swing sequences, ATR-normalized range rules, and internal leg proportion checks to detect directional pressure before any boundary breach.

Decision flow is staged: fractal-based swing extraction, consolidation validation, geometric voting on distance/slope/time asymmetry, then pattern locking to prevent repainting. Signals trigger only on candle close beyond range high/low with a configurable buffer and cooldown.

MQL5 implementation follows a modular layout: fractal detection, range boundary calculation, qualification filters, asymmetry validation, breakout scanning, and pattern lifecycle management. OnTick runs a bar-close pipeline and emits chart objects plus multi-channel alerts without repeated triggers on the sa...

πŸ‘‰ Read | NeuroBook | @mql5dev

#MQL5 #MT5 #EA
❀32⚑2πŸ‘Œ2
Markets often look random, but chaos theory frames them as systems with hidden structure: mean reversion, sensitivity to initial conditions, and fractal self-similarity across timeframes.

The article builds a MetaTrader-style Neural Attractor Oscillator: a small feedforward network trained on price history, using tanh for bipolar dynamics and normalization for stable learning. It predicts a moving β€œattractor” level, then outputs an oscillator as percent deviation from that attractor to flag overextension and potential snap-back.

Signal quality is gated by a Lyapunov exponent to quantify how chaotic the market is, with optional fractal noise (Midpoint Displacement) and momentum optimization to improve training. Practical use includes adaptive overbought/oversold bands, divergence detection, and smoothing choices (EMA/SMA) based on regime.

πŸ‘‰ Read | AppStore | @mql5dev

#MQL5 #MT5 #AITrading
❀29✍2πŸ‘Œ2πŸ‘€2πŸ€”1🀩1
MetaTrader 5 indicators and EAs ship with a standard settings dialog built from default tabs. Most UI additions seen in custom tools duplicate what the platform already provides, and increase maintenance without adding capability.

The first tab can be adjusted via #property directives, including icon, purpose text, and a URL. These values are compiled into the binary and rendered by the terminal, with link details available via hover and click.

Indicator execution hinges on OnInit and OnCalculate. MQL5 provides overloaded OnCalculate signatures; the chosen signature affects whether specific configuration tabs are shown. A minimal indicator can be defined statically with #property, one plot buffer, and SetIndexBuffer, relying on platform-managed styling options such as color, line style, thickness, and calculation mode.

πŸ‘‰ Read | NeuroBook | @mql5dev

#MQL5 #MT5 #Indicator
❀63πŸ‘7⚑6πŸ‘Œ3😁2πŸŽ‰2πŸ‘€1
Moving Average Cloud renders four moving averages on the same chart using a histogram-style band. It combines slow SMA(200) and EMA(200) with fast SMA(50) and EMA(50).

The space between the paired slow lines and the paired fast lines is plotted as boundary histograms, forming a cloud that highlights MA separation and compression. This makes it easier to track trend structure and potential support/resistance zones derived from MA alignment.

Histogram color changes are used to flag momentum shifts, helping detect transitions where fast/slow relationships start to rotate or converge.

πŸ‘‰ Read | Quotes | @mql5dev

#MQL4 #MT4 #Indicator
❀47✍2πŸ‘Œ2
A lightweight EMA in MQL5 can be implemented with a single change in the calculation line, relying on MetaTrader 5 event handling and buffer management. The EMA formula only needs the current price, prior EMA value, and period, with an initialization workaround for the first value.

A key follow-up is parameterization. Using an input constant allows period changes without recompilation, and a string comment improves the settings UI by providing a clear label instead of the raw identifier.

The article also contrasts the two OnCalculate signatures. The extended version exposes more series data but typically fixes the applied price (for example, Close), which removes UI options and shifts responsibility to the implementation.

πŸ‘‰ Read | Signals | @mql5dev

#MQL5 #MT5 #Indicator
❀22πŸ‘Œ4
Manual Supertrend trading is deterministic on paper, but live execution often adds latency and decision noise. An MQL5 Expert Advisor can keep analysis separate from execution by acting only on confirmed trend flips.

Supertrend stays in two states. A buy triggers when a completed candle closes above the upper band and the state turns bullish. A sell triggers when a completed candle closes below the lower band and the state turns bearish. Signals are evaluated only on closed bars to avoid unstable reads.

EA rules: close any opposite position first, then open in the new direction if enabled. Direction can be long-only, short-only, or both. Stop loss is optional, using last candle high/low or the Supertrend band. Lot sizing supports fixed volume or risk-percent auto sizing.

πŸ‘‰ Read | VPS | @mql5dev

#MQL5 #MT5 #Indicator
❀37πŸ‘5✍2πŸ‘Œ2πŸ€”1
StrategyTester5 adds multi-symbol, multi-timeframe history handling to a MetaTrader 5–Python simulator via a HistoryManager that fetches bars, ticks, and synthetic ticks, then syncs timeframe data for later copy_rates/copy_ticks access.

A naive multi-timeframe loop is a major bottleneck. Real-ticks mode can drop to ~13 ticks/s when repeatedly calling copy_rates_from_pos across symbols and timeframes. Switching to direct MT5 terminal reads can lift throughput to ~600 ticks/s, but long ranges still remain costly.

Parallel per-symbol OnTick execution improves total wall time by isolating trade operations per instrument while sharing account state. Additional gains come from new-bar event gating to avoid repeated history reads, and choosing faster modelling (M1 OHLC/new-bar) when tick-level accuracy is not required.

πŸ‘‰ Read | VPS | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀29πŸ‘2πŸ€“2πŸ‘Œ1🀑1
MetaTrader 5 already supports alerts, push, email, logs, and simple sounds, but typical notifications lack context. A tone does not identify BUY vs SELL, symbol, timeframe, or signal conditions.

Semi-automated trading tools amplify this gap because they depend on human confirmation while communicating mainly through chart visuals. Accessibility limits come from UI assumptions, not from MQL5 capabilities.

A practical approach is an MQL5 MA crossover indicator that triggers structured text plus embedded WAV resources. On each confirmed crossover it reports symbol, timeframe, MA values, and price, plays buy/sell audio, logs events for later review, and avoids duplicate alerts via new-bar gating.

The design can be extended with richer voice feedback, voice commands, and future AI voice synthesis via external APIs, without changing the core signal logic.

πŸ‘‰ Read | Quotes | @mql5dev

#MQL5 #MT5 #Indicator
❀28✍5πŸ‘Œ4⚑3πŸ‘€3πŸ†1
Angular analysis is moving from subjective chart drawing to measurable features: compute the angle between consecutive price points after normalizing time and price axes.

The workflow builds a continuous angle stream, then derives rolling features such as last angle, 3-bar mean, positive/negative ratio, standard deviation, and max angle.

A practical pipeline pairs direction classification with magnitude regression using gradient boosting (CatBoost), trained on windows (for example 15 bars) and labeled by forward returns (for example +24 bars).

Backtests on EURUSD indicate angles carry predictive signal, with stronger performance in trending regimes and around reversal setups where a unidirectional angle run flips sharply.

πŸ‘‰ Read | Docs | @mql5dev

#MQL5 #MT5 #AlgoTrading
❀49πŸ‘Œ6πŸ€”5
Average price tracking can be configured on higher periods such as H1 and D1. A D1 average helps assess whether an instrument is trading above or below its daily mean, while H1 reacts faster and can flag reversals earlier.

The indicator relies on three inputs: calculation symbol, averaging timeframe, and applied price. Lower chart timeframes from M1 to M30 are typically used for monitoring, with M1 providing the most granular view.

It also supports overlay comparisons of multiple instruments on a single chart, such as EURUSD versus USDCAD on M15, and can display daily average levels that often act as practical support and resistance zones.

πŸ‘‰ Read | Docs | @mql5dev

#MQL5 #MT5 #Indicator
❀29πŸ†2πŸ‘Œ1
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