Grid Donchian Channel EA
- Uzmanlar
- Sürüm: 3.15
- Etkinleştirmeler: 5
Judge it on your own data first: open Grid Donchian Channel EA in the MetaTrader 5 Strategy Tester, turn on visual mode, and watch it ignore every ordinary new high and low until one breakout fails and price closes back inside the old range.
WHEN A BREAKOUT FAILS, THE GRID GETS ITS CUE.
Richard Donchian's channel is the plainest map in trading: the highest high and the lowest low of the last N bars, nothing averaged and nothing smoothed. Those two lines mark where earlier buyers and sellers ran out of strength, which is why so many stops and breakout orders sit just beyond them. Sometimes the break is real. Often it only collects those orders and then fails, and that failure is the one event this EA waits for. Grid Donchian Channel EA turns it into a single visible reason to begin each grid cycle: a bar sweeps past an old channel line, and the next closed bar finishes back inside. From there a complete grid management engine keeps shrinking the oldest exposure through group closures and partial slices.
At a glance
• A BUY cycle can begin only after one bar trades below the old lower line and the next closed bar finishes back above it; a SELL cycle needs the mirror move at the upper line. Decisions use closed bars only, so an arrow never moves after it is drawn.
• The channel is worked out inside the EA from the bars' own highs and lows, and the guards use the built-in ATR. There is no custom indicator file to install.
• New in this product: the Stale Extreme Guard. In a strong trend every bar breaks a level made a bar or two earlier, and those breaks are not failures. The EA checks how many bars the swept extreme had stood, and it ignores young ones.
• The Sweep Guard asks how far price really travelled past the line, in ATR, so a one-tick poke does not count.
• The Re-entry Depth Guard checks the return: a close back inside by a hair is usually undecided, and a huge snap is usually a whip. Both are skipped.
• An optional slope rule and an optional slow EMA can demand that the larger direction agrees, or fade it.
• On the live chart the upper, lower and middle lines are drawn in the main window, and arrows mark each candle where a cycle was armed.
• Profits are banked by groups of the oldest and newest orders, and a heavy old order is retired in partial slices instead of waiting for a full return.
• No stop loss and no forced close-all. A reached limit refuses new levels while the existing book keeps being managed, which also means losses are not capped by the EA.
FIRST STEPS
Start on EURUSD H1 or XAUUSD D1 with the default 0.01 lot and the additive ladder. Choose Scan only in RunMode for the first session: the panel shows every plan the EA would carry out without sending an order, and one button switches it to Armed when you are ready. Test on your own broker's data before going live, because spreads, swaps and commissions differ. On a small balance keep the starting lot and let the tester show how deep the book can grow on your symbol.
Why a failed break, and not the breakout
The classic use of a Donchian Channel is to buy the new high and sell the new low. That suits a system with a stop on every trade. A grid is different: it has no stop, so it should not start a ladder in the direction of a move that may simply be exhausted, and it should not stand in front of one still accelerating. A failed break is a useful compromise. By the time the signal closes, price has already tested the line, been refused and come back, so the first level opens after the push has paused. It is not a promise of reversal, only a clear, checkable condition.
One detail matters here. The EA judges each sweep against the channel as it stood before that bar, built from the N bars older than it. The bar that makes the break can never move its own line.
The improvement in this release
The Stale Extreme Guard is this EA's own addition. When a bar sweeps a line, the EA looks up the bar that made that extreme and counts how long it had stood. If the extreme is younger than your minimum, three bars by default, the sweep is ignored because it is only another step of a running trend. Set it to 0 to switch the guard off. The panel shows the live reading beside the sweep and depth readings, with OPEN or HOLD for each. Margin-level timeframe safety is included and is off by default.
One cycle, step by step
1. The read. On every closed bar the EA finds the highest high and lowest low of the N bars older than the bar it is judging, and reads the ATR.
2. The sweep. The previous bar must have traded beyond the old line: below the lower line for a BUY, above the upper line for a SELL.
3. The return. The signal bar must close back inside that same line.
4. The Stale Extreme Guard. The swept extreme must have stood for your minimum number of bars.
5. The Sweep Guard. The sweep must have reached your minimum ATR distance past the line.
6. The Re-entry Depth Guard. The returning close must sit between your minimum and maximum ATR distance inside the line.
7. The optional slope rule and trend filter. The channel midline can be asked to point the trade's way, and a slow EMA can confirm the side, fade it, or stay off.
8. The rhythm. A quiet gap of bars between accepted signals stops a choppy session from starting one cycle after another, and a signal stays valid for a few bars if a level cannot be placed at once.
9. The ladder. Levels are spaced by fixed points or by ATR, with a floor, an upper limit and an option to freeze the distance for the whole cycle. BUY and SELL grids can run side by side or in one direction only.
10. The harvest. The closer searches for groups of the oldest and newest orders and closes a group as soon as its combined result, after swap and commission, beats your target. When the oldest order is still too heavy, only a slice of it is closed, paid for with profit already available.
11. The safety checks. A reopen guard blocks any closure that would reopen the same level straight away. Every leg is checked against the deal history, failed legs go into a retry queue, and a plan is dropped if the book changes between the scan and the send.
12. The optional hedge cycle. Off by default. When switched on it holds a balanced pair on a symbol you choose and retires it in equal slices, funded by a small surcharge on closures the grid is already making.
The panel
The panel sits on the left of the chart and keeps the right side and the price scale clear. It shows the symbol and magic number, a status pill (ARMED, SCAN ONLY or PAUSED), grid mode, lot step, spacing, banked result, the book in lots with its net result, the closing plan for each side with its own close button, and the order list. The DONCHIAN PULSE row shows the channel period, where price sits in the channel as a percentage (0 is the lower line, 100 the upper line), the channel width in ATR, whether the midline is rising or falling, and how many bars ago the high and the low were made. The SWEEP GUARD row shows the last bar's sweep of the nearer line, the age of that extreme and the live re-entry depth, each with OPEN or HOLD, plus the trend filter. Buttons switch Armed / Scan only, Pause / Resume, chart marks and slicing. The Hedge Vault card is docked directly under the main panel and follows it when you drag or minimise. The panel scales with the screen and draws nothing in a non-visual backtest, so optimisation stays fast.
Protection you control
No stop loss and no forced close-all. A reached limit stops new levels; it never dumps the book at a bad moment.
Before each order the money check asks one plain question: is there enough free margin, with a safety buffer, for this order?
Limits on levels per grid, orders per side and lot per order keep the ladder bounded, and the lot ladder stops growing at the level limit.
On netting accounts the margin of the merged position is capped as a percentage of equity.
Optional margin-level timeframe safety moves the signal and the spacing to a higher timeframe when the margin level falls to your chosen levels, and moves back only after margin recovers past a cushion. Off by default.
Every copy isolates itself by symbol and magic numbers, so several charts never touch each other's orders or saved state.
Scan only mode shows every decision without sending any order.
Our own test figures
Strategy Tester, 1 minute OHLC, 2025.01.01 to 2026.09.30, leverage 1:100, default inputs:
• EURUSD H1, $10,000 deposit: net result +1,783.70, maximal equity drawdown 9.24%, 774 trades, no stop-out and no margin refusals.
• EURUSD H1, $1,000,000 deposit: net result +1,783.70, maximal equity drawdown 0.11%, 774 trades, no stop-out and no margin refusals.
• XAUUSD D1, $10,000 deposit: net result +55.18, maximal equity drawdown 0.26%, 19 trades, no stop-out and no margin refusals.
• XAUUSD D1, $1,000,000 deposit: net result +55.18, maximal equity drawdown 0.00%, 19 trades, no stop-out and no margin refusals.
These are simulations of one past period on one broker's data, not a forecast. The 19 XAUUSD trades are far too few to prove anything, and a different period can end very differently. The grid's real danger, a long trend against a deep book, is not ruled out by these runs.
Who it suits, and who it does not
It suits traders who read the market through plain highs and lows, who like one clear reason behind every new cycle, who prefer many small closures to one distant target, and who will size the lot for their own account. It does not suit anyone who needs a stop loss on every order, a promised monthly figure, or a set-and-forget robot running large lots on a tiny balance.
Quick answers
Does it repaint? No. Signals come from closed bars, and each line is judged as it stood before the bar in question.
Is this a breakout EA? No. It starts after a break fails. For a breakout approach, this is the wrong tool.
How is this different from Keltner or Bollinger channels? Those are built around an average with a volatility distance. A Donchian Channel uses only actual highs and lows, so its lines stay flat until a real extreme changes.
Do I need to attach a Donchian indicator? No. The channel is calculated inside the EA and drawn by it on the live chart.
Can I make it trade more or less often? Yes. Lower SignalBarsDelay, the channel period or the guard minimums for more cycles; raise them or switch on the trend filter for fewer.
Every setting explained
Grid - how levels are opened
TradeMode - dual grid by default (BUY and SELL side by side), or one direction only.
GridSpacePoints - fixed distance between levels in points when ATR spacing is off (25).
GridSpaceMultiplier - 1.0 keeps levels evenly spaced; a higher value spreads deeper levels further apart.
MaxGridLevels - the most levels one grid may hold (1000).
UpDirectionIsBuy - decides which side an upward move belongs to.
EAMagicNumber - the ID written on this EA's grid orders (9754350).
GridOrderComment - the comment on each grid order (GDCE).
OneOrderPerBar - no more than one new level per bar.
Lot ladder
InitialLotSize - volume of the first level (0.01).
LotSizingMode - additive by default, or multiply.
LotMultiplier - in multiply mode, each level is the previous lot times this value (1.25).
LotAddStep - in additive mode, the volume added at each level (0.01; 0 means the starting lot).
MaxOrderVolume - the largest lot any single order may use (1.0).
UseAutoLot - scales the starting lot with the balance (off).
AutoLotBaseBalance - the balance that matches the starting lot (1000).
AutoLotAllowDecrease - lets auto lot go below the starting lot (off).
ATR spacing
GridSpacingMode - ATR by default, or fixed points.
ATRTimeframe - the timeframe volatility is measured on (current chart).
ATRPeriod - ATR length (14).
ATRSpacingFactor - spacing equals ATR times this value (1.0).
ATRBarShift - 1 uses the last closed bar.
ATRMinSpacingPts - the smallest allowed spacing in points (50; 0 means none).
ATRMaxSpacingPts - the largest allowed spacing in points (5000; 0 means none).
ATRFreezeOnStart - keeps one spacing for the whole cycle (off).
Profit target
DesiredProfitPerClosure - the base target in account currency (2.0).
ProfitMultiplier - scales the final target between 1.00 and 2.00.
ProfitTargetMode - scaled by default, so a bigger and deeper book must earn a bigger result.
ProfitVolumePower - how strongly closing volume lifts the target (1.0; 0 turns it off).
ProfitDepthBonus - extra target for each additional open level (0.10).
ProfitMaxMultiple - the cap on the scaled target as a multiple of the base (50).
ProfitMaxReachFraction - keeps the target within a fraction of one grid step so it stays reachable (0.50).
Fragment scanner
UseMultiLegScan - tests combinations of several orders before the simple pair (on).
MaxOldestLegs - the most oldest orders allowed in one closure (3).
MaxNewestLegs - the most newest orders allowed in one closure (6).
ScanPriority - how qualifying groups are ranked; most orders first by default.
NeverBankLessThanPair - a group must also beat the plain pair target (on).
RequireCloseVolumeExceedsTarget - the newest volume must outweigh the oldest volume (on).
MinCloseVolumeRatio - minimum ratio of closing volume to target volume (1.5).
Target slicing - partial closes
EnableTargetSlicing - closes a slice of the oldest order when the whole lot cannot be paid off yet (on).
FragProfitWeightPower - how profit is weighted per closing lot (1.5).
FragMinSlicePercent - the smallest slice as a percent of the target order (20).
FragAllowMultiCloser - lets several newest orders pool their profit to pay for one slice (on).
FragPreferFullClosure - a full closure wins over a slice whenever both qualify (on).
Reopen guard
ReopenGuard - blocks closures that would immediately reopen a level (step based).
ReopenGuardCushion - the safe distance as a fraction of one grid step (0.90).
Account protection
MinMarginLevelPercent - no new levels below this margin level percent (0 = off).
MaxAccountRiskPercent - no new levels above this floating loss as a percent of balance (0 = off).
NetMaxMarginPercent - on netting accounts, the largest margin of the net position as a percent of equity (5.0).
MaxTotalOrders - absolute cap on grid orders per side (1000).
Execution and verification
RunMode - Armed or Scan only; Scan only is the gentle first step.
CloseSequence - the order in which legs are sent; oldest first by default.
MaxSlippagePoints - maximum slippage (30 points).
MaxSpreadPoints - trading pauses above this spread (7500 points).
MinSecondsBetweenClosures - minimum pause between two closures on the same side (5 seconds).
CloseAttemptsPerLeg - send attempts before a leg moves to the retry queue (3).
VerifyTimeoutSeconds - how long a stuck leg keeps being checked (90 seconds).
DeferWhenMarketClosed - waits for the session instead of halting when the market is closed (on).
MarketClosedRetrySeconds - retry interval while the broker refuses orders (30 seconds).
AutoResumeAfterSeconds - clears a halt by itself after this many seconds (300; 0 waits for the panel button).
NoPartialRetryMinutes - tries partial closes again this many minutes after a broker refusal (15; 0 never).
AbortIfBookChanged - drops a plan if a leg changed between the scan and the send (on).
UseFullCommission - counts commission for both sides of a trade (on).
CommissionPerLot - fallback commission when history has none (0 reads it from history).
CloseOrderComment - the comment on closing deals.
Hedge cycle
EnableHedgeCycle - off by default.
HedgeSymbols - comma-separated list of hedge symbols; repeating one gives it more turns (XAGUSD).
HedgeSymbolRotation - how the next cycle's symbol is picked (per cycle).
HedgeMaxSymbolsInTester - limits rotation in the Strategy Tester only (2; 0 means no limit).
HedgeCycleLots - lots on each side of the balanced pair (0.01).
HedgeSliceLots - lots retired from each side per slice (0.01).
HedgeFragmentBonus - extra amount added on top of the slice cost (100).
HedgeBonusIsPercent - the bonus is a percent of the slice cost; false makes it a fixed amount (on).
HedgeMaxSurcharge - money cap on what one closure may be surcharged (0 = no cap).
HedgeMaxSurchargePercent - the most the hedge may raise any closure target, in percent (50).
HedgeMagicNumber - the hedge legs' ID; it must differ from the grid's (9754351).
HedgeReopenOnFinish - opens a fresh cycle when one finishes (on).
HedgeStartRequiresTrade - waits for the grid to open something before the first cycle (on).
HedgeIntegritySeconds - how often both legs are checked to be equal (5 seconds).
HedgeAutoRepair - repairs a lone leg automatically (on).
HedgeNakedAction - what to do with a lone leg; re-hedge by default.
HedgeMaxSpreadPoints - no hedge orders above this spread (0 = off).
HedgeSlippagePoints - maximum slippage on hedge orders (30 points).
HedgeAttemptsPerLeg - send attempts per hedge leg (3).
HedgeVerifyTimeout - how long a stuck hedge leg keeps being checked (90 seconds).
HedgeCommissionPerLot - fallback hedge commission (0 reads it from history).
HedgeOrderComment - the comment on hedge deals.
Weekly cash day
WeeklyCashDay - no new hedge cycle and no slice during your withdrawal window (off).
CashDayOfWeek - 0 Sunday, 1 Monday and so on (1).
CashCutoffHour - server hour after which no new slice is fired (21).
Panel and chart
ShowPanel - shows or hides the panel.
PanelX and PanelY - panel offsets from the chart edges (12 and 15).
PanelFontSize - base font size (9).
ShowArabic - adds an Arabic line under the English on the panel (on).
ShowChartMarks - draws plans and levels on the chart (on).
MaxTableRows - order rows shown per grid (13).
PanelCorner - the chart corner the panel is anchored to.
Entry trigger
EntryTriggerMode - the Donchian Channel strategy arms the first level by default.
SignalBarShift - 1 means the last closed bar.
SignalBarsDelay - bars that must pass between accepted signals (30; 0 accepts every signal).
SignalValidBars - a signal stays usable for this many bars (3).
SignalAllowBuy and SignalAllowSell - turn each direction on or off separately.
SignalReverse - inverts the direction (off).
Donchian Channel - the signal
InpDCPeriod - how many older bars set the highest high and lowest low (20).
InpDCATRPeriod - the ATR length all three distance readings use (14).
InpDCMidSlopeAgree - when on, a BUY only while the channel midline rises and a SELL only while it falls (off).
InpDCAgeMinBars - Stale Extreme Guard: how many bars the swept extreme must have stood (3; 0 = off; must stay below the period).
InpDCSweepMinATR - Sweep Guard: how far past the old line the bar must travel, in ATR (0.05; 0 = off).
InpDCDepthMinATR - Re-entry Depth Guard: the smallest distance the returning close must sit inside the line, in ATR (0.05; 0 = off).
InpDCDepthMaxATR - Re-entry Depth Guard: the largest accepted distance inside the line in ATR, so violent snaps are skipped (1.50; 0 = off).
InpDCTrendFilter - 0 off, 1 trade with the EMA side, 2 trade against it as a fade.
InpDCTrendMAPeriod - the trend EMA length (200).
InpShowSignalArrows - arrows on the candles where a cycle was armed (on).
InpShowDCOnChart - draws the upper, lower and middle lines in the main window of the live chart (on; no extra sub-window, so the panel keeps the full chart height).
Debug
DebugMode - detailed journal logging (off).
Margin timeframe safety
UseMarginTFSafety - off by default.
Level1MarginPct and Level1TF - at or below 6000 percent margin level, work on M15.
Level2MarginPct and Level2TF - at or below 5000 percent, work on H1.
MarginTFHysteresisPct - how far margin must recover above a level before stepping back (500).
Honest expectations
A grid manages a position; it cannot see the future, and it can lose a large part of an account. Grid Donchian Channel EA is careful about when a cycle begins, but a failed break can turn into a real one a few bars later. With no stop loss, the book then stays open and grows while the trend runs, up to the limits you set. Pick a lot your account can carry through that, test on your own broker first, and let the Strategy Tester show you how it behaves before you trade it live. It runs on any symbol and timeframe and needs no DLLs and no extra files.
If it earns a place on your charts, a short and honest review of how it behaved on your account, good or bad, helps other traders make their choice.
