Spreadsheets can be used as a lightweight research harness for algorithmic strategies: import MT5 history from CSV/TXT, normalize numeric formats, and keep the dataset small enough (around a few thousand rows) to avoid slow recalculation with minimal impact on results.
The workflow builds indicators directly in cells. A separate βvariablesβ sheet stores parameters, while functions like IF, AVERAGE and INDIRECT generate a configurable SMA over dynamic ranges. Relative vs absolute references ($) make formulas safe to copy across long columns.
A moving-average crossover is then modeled as stateful trade logic: one column detects crossings, another persists position status bar-by-bar, and a signal column maps actions (Buy/Sell/Close) with correct next-bar execution. Additional columns propagate entry price (including spread) and compute pip outcomes for late...
π Read | AppStore | @mql5dev
The workflow builds indicators directly in cells. A separate βvariablesβ sheet stores parameters, while functions like IF, AVERAGE and INDIRECT generate a configurable SMA over dynamic ranges. Relative vs absolute references ($) make formulas safe to copy across long columns.
A moving-average crossover is then modeled as stateful trade logic: one column detects crossings, another persists position status bar-by-bar, and a signal column maps actions (Buy/Sell/Close) with correct next-bar execution. Additional columns propagate entry price (including spread) and compute pip outcomes for late...
π Read | AppStore | @mql5dev
β€43π12β6π¨βπ»3πΎ3π2
Backtests only charge the costs that were configured, so net profit and profit factor do not show how close a strategy is to the execution-cost boundary. This MQL5 tool measures the limit directly: how much cost the strategy can absorb before the edge disappears.
It reads a CSV (Date,Profit,Volume; one row per closing deal) and prints a report to the Experts tab. Output includes breakeven cost per deal, cushion versus an assumed realistic cost, net and profit factor re-priced at the assumed cost, a cost-sensitivity curve from 0 to 3x, and win erosion where costs flip winners into losers. A composite A+ to F score aggregates cushion, profit-factor resilience, and erosion, with recommendations.
Input file goes to MQL5\Files; Volume is optional. If missing on first run, a reproducible sample file is generated. A helper ExportCost.mq5 can export deals from ...
π Read | CodeBase | @mql5dev
It reads a CSV (Date,Profit,Volume; one row per closing deal) and prints a report to the Experts tab. Output includes breakeven cost per deal, cushion versus an assumed realistic cost, net and profit factor re-priced at the assumed cost, a cost-sensitivity curve from 0 to 3x, and win erosion where costs flip winners into losers. A composite A+ to F score aggregates cushion, profit-factor resilience, and erosion, with recommendations.
Input file goes to MQL5\Files; Volume is optional. If missing on first run, a reproducible sample file is generated. A helper ExportCost.mq5 can export deals from ...
π Read | CodeBase | @mql5dev
β€30π9π3π2β‘1
BBandsPsar is a custom hybrid indicator that merges a volatility model (Bollinger Bands) with a trend-following signal (Parabolic SAR) into one output.
The core calculation measures the gap between the Parabolic SAR value and the current candleβs open or close, reflecting SARβs alternating behavior during trend changes. That gap is then normalized using Bollinger Bands, producing a standardized histogram rather than raw price-distance values.
Because the output is scaled, the same threshold logic can be applied across instruments with different price ranges, improving cross-asset comparability.
BBandsPsar inherits the full input sets of both Bollinger Bands and Parabolic SAR, allowing adjustment of period, deviation, price source, step, and maximum settings to control sensitivity.
For dynamic parameter testing, the iBands call can be refactored so ...
π Read | Freelance | @mql5dev
The core calculation measures the gap between the Parabolic SAR value and the current candleβs open or close, reflecting SARβs alternating behavior during trend changes. That gap is then normalized using Bollinger Bands, producing a standardized histogram rather than raw price-distance values.
Because the output is scaled, the same threshold logic can be applied across instruments with different price ranges, improving cross-asset comparability.
BBandsPsar inherits the full input sets of both Bollinger Bands and Parabolic SAR, allowing adjustment of period, deviation, price source, step, and maximum settings to control sensitivity.
For dynamic parameter testing, the iBands call can be refactored so ...
π Read | Freelance | @mql5dev
β€23π6π2π2π―1
Indicator buffer data is being formalized as a first-class timeseries: per indicator, maintain a list containing all buffer values for every bar used in calculations. This enables consistent storage, search, sort, and later statistical analysis across library collections.
Core library changes: the NewBar class is relocated to Services; SeriesDE include paths are updated; new message indices/texts are added; a dedicated collection ID and timer constants are introduced. Indicator data gains an extra integer property for indicator handle, including sorting/search criteria support.
New class CSeriesDataInd stores CDataInd objects per bar/buffer, supports creation, refresh on current bar, append on new bar, and trimming to required depth. Indicator objects are extended with total buffer count and an embedded buffer-data series; the indicators collection and eng...
π Read | AlgoBook | @mql5dev
Core library changes: the NewBar class is relocated to Services; SeriesDE include paths are updated; new message indices/texts are added; a dedicated collection ID and timer constants are introduced. Indicator data gains an extra integer property for indicator handle, including sorting/search criteria support.
New class CSeriesDataInd stores CDataInd objects per bar/buffer, supports creation, refresh on current bar, append on new bar, and trimming to required depth. Indicator objects are extended with total buffer count and an embedded buffer-data series; the indicators collection and eng...
π Read | AlgoBook | @mql5dev
β€57π10π2
An open-source EA focuses on Stochastic-based position closing with three modes. Crossing Mode closes in OB/OS when %K and %D cross. Entering Mode closes when %D enters overbought or oversold. Exiting Mode closes when %D exits those zones. A profit-state filter restricts closures to Loss, Profit, or both.
Core parameters cover %K/%D periods, slowing, OB/OS levels, price field, and a selectable Stochastic timeframe independent of the chart. Logic runs on every tick and affects only the current symbol.
Optional Test Mode adds simple entries for research: 0.01-lot trades when %D crosses 50 with a configurable offset, only when no positions exist. No SL/TP, no magic filtering, and it can run alongside the closing logic. No money management features are included.
π Read | VPS | @mql5dev
Core parameters cover %K/%D periods, slowing, OB/OS levels, price field, and a selectable Stochastic timeframe independent of the chart. Logic runs on every tick and affects only the current symbol.
Optional Test Mode adds simple entries for research: 0.01-lot trades when %D crosses 50 with a configurable offset, only when no positions exist. No SL/TP, no magic filtering, and it can run alongside the closing logic. No money management features are included.
π Read | VPS | @mql5dev
β€26π4π€£3π3π1
MetaTrader 5 object interactivity is extended from simple selection outlines to controlled resizing workflows.
Current implementation highlights a selected object but lacks usable grab handles because helper objects share a protected name prefix, making them non-selectable. Forcing initial selection on specific objects enables MT5 drag behavior, but default anchor handling creates inconsistent resizing visuals and disconnected outline segments.
The update adds dedicated corner points and uses switch fall-through to reuse creation logic while adjusting placement, producing two effective resize handles.
Event handling is then tightened: clicking should move objects without toggling their selected state. A small handler addition blocks selection-state changes while keeping drag operations active.
π Read | Forum | @mql5dev
Current implementation highlights a selected object but lacks usable grab handles because helper objects share a protected name prefix, making them non-selectable. Forcing initial selection on specific objects enables MT5 drag behavior, but default anchor handling creates inconsistent resizing visuals and disconnected outline segments.
The update adds dedicated corner points and uses switch fall-through to reuse creation logic while adjusting placement, producing two effective resize handles.
Event handling is then tightened: clicking should move objects without toggling their selected state. A small handler addition blocks selection-state changes while keeping drag operations active.
π Read | Forum | @mql5dev
β€19π7π3β2
Work continued on MT5 replay/simulation tooling to render position state directly on the chart, not in terminal text. Standard platform position visuals are insufficient under cross-order execution and replay models.
The update adds three HLINE objects per position: open price, stop-loss, and take-profit. Object naming uses the position ticket plus suffixes to keep uniqueness and support bulk cleanup on indicator removal.
A priority enumeration was introduced to reduce selection issues when objects overlap. C_Terminal and C_ChartFloatingRAD were adjusted to consume the shared priority list, keeping Chart Trade above most graphics while allowing order/position overlays to remain selectable.
Further refinements add OBJPROP_TEXT descriptions for each line so the Objects list remains self-explanatory without changing user chart settings.
π Read | CodeBase | @mql5dev
The update adds three HLINE objects per position: open price, stop-loss, and take-profit. Object naming uses the position ticket plus suffixes to keep uniqueness and support bulk cleanup on indicator removal.
A priority enumeration was introduced to reduce selection issues when objects overlap. C_Terminal and C_ChartFloatingRAD were adjusted to consume the shared priority list, keeping Chart Trade above most graphics while allowing order/position overlays to remain selectable.
Further refinements add OBJPROP_TEXT descriptions for each line so the Objects list remains self-explanatory without changing user chart settings.
π Read | CodeBase | @mql5dev
β€22π7π2
MMAR is finalized as a native MQL5 library that packages multifractal analysis, spectrum fitting, simulation, and Monte Carlo forecasting behind a single CMMAR facade. An EA feeds returns, calls Fit(), then Forecast(); optional setters control moments, partitioning, cascade base, and RNG seeding for repeatable runs.
The pipeline extracts scaling exponents and Hurst diagnostics, then fits a singularity spectrum against multiple cascade distributions using bounded optimization. A status enum exposes partial results when spectrum fitting fails, so EAs can still use H and multifractality signals.
Forecasting runs many simulated MMAR paths to produce forward volatility plus a confidence interval, enabling risk-based position sizing and regime monitoring. The demo EA shows full portability: only MT5 Standard Library components (ALGLIB FFT/Cholesky, BLEIC, Math...
π Read | Freelance | @mql5dev
The pipeline extracts scaling exponents and Hurst diagnostics, then fits a singularity spectrum against multiple cascade distributions using bounded optimization. A status enum exposes partial results when spectrum fitting fails, so EAs can still use H and multifractality signals.
Forecasting runs many simulated MMAR paths to produce forward volatility plus a confidence interval, enabling risk-based position sizing and regime monitoring. The demo EA shows full portability: only MT5 Standard Library components (ALGLIB FFT/Cholesky, BLEIC, Math...
π Read | Freelance | @mql5dev
β€18π6π5
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