Grid Chande Momentum Oscillator EA
- Experts
-
AL MOOSAWI ABDULLAH JAFFER BAQER
To trade successfully we need to go through the proven path that others had gone and reached!
Here are 17 quotes from such successful investors:
1- Limit your size in any position so that fear does not become the prevailing instinct guiding your judgment.
Joe Vidich - 버전: 3.15
- 활성화: 5
Test it free first: open Grid Chande Momentum Oscillator EA in the MetaTrader 5 Strategy Tester, turn on visual mode, and watch which momentum readings it accepts and which it turns down.
ONE BIG CANDLE IS NOT MOMENTUM.
Tushar Chande built his Momentum Oscillator to weigh every rise against every fall over a window of closes. It is honest arithmetic, with one blind spot: it adds up sizes, so a single news candle can push it through a level while the other bars did very little. Grid Chande Momentum Oscillator EA starts a grid cycle only when momentum has been earned on closed bars, by several candles and not by one. From there a full management engine reduces the oldest exposure through group closures and partial slices.
Share a screenshot of your order with me, and I will personally select a free product from my catalogue to send you as a gift.
At a glance
• A cycle can begin only when CMO crosses your level on a closed bar. Closed bars only, so accepted signals do not repaint.
• CMO is calculated inside the EA from the chart's own closes. No custom indicator file and no DLL.
• New in this product: the Spike Guard. It measures how much of the winning sum came from the single biggest candle and refuses the crossing when that share is too high.
• The Climb Guard asks that CMO really rose over the last few bars, rather than drifting across the line.
• The Range Guard skips crossings inside a tight box, and the default EMA 200 filter accepts only the side of the slow trend.
• On the live chart, past crossings are marked on their candles: a small arrow when one passed every rule, a grey dot when a guard refused it.
• Profits are banked by groups of the oldest and newest orders, and a heavy old order is retired in partial slices.
• No stop loss and no forced close-all. A reached limit refuses new levels while the existing book keeps being managed.
----------
Start here
Begin on EURUSD H1 with the default 0.01 lot and the additive ladder. Set RunMode to Scan only for the first session: the panel shows each plan and no order is sent, and one button moves it to Armed when you are ready. Before going live, repeat the tests below on your own broker's data, because spreads, swaps and commissions differ.
----------
What our tests showed
Default settings, Strategy Tester, 1 minute OHLC model, 1:100 leverage, 2025.01.01 to 2026.09.30, one broker's demo data. You can reproduce the method with these exact settings:
• EURUSD H1, $10,000 deposit: net result +951.03, maximal equity drawdown 804.04 (8.03%), 310 trades, no stop-out and no margin refusals.
• EURUSD H1, $1,000,000 deposit: net result +951.03, maximal equity drawdown 804.04 (0.08%), 310 trades, no stop-out and no margin refusals.
• XAUUSD D1, $10,000 deposit: net result +47.97, maximal equity drawdown 47.92 (0.48%), 12 trades, no stop-out and no margin refusals.
• XAUUSD D1, $1,000,000 deposit: net result +47.97, maximal equity drawdown 47.92 (0.00%), 12 trades, no stop-out and no margin refusals.
Read these as simulations of one past period, not as a forecast. Notice that the drawdown in money was the same at both deposits, because the lots do not grow with the balance: 804.04 is about 8% of $10,000, and it would be a far larger part of a small account. Smaller deposits were not tested, so test your own before trusting it. The 12 XAUUSD trades are too few to prove anything. Netting behaviour has not been verified, and the account mode of these runs is not confirmed, so treat your own account type as untested until you have run it.
----------
Why CMO, and why these guards
Many momentum tools smooth their data twice and blur what happened. CMO keeps the rises and the falls side by side: their difference divided by their total, on a scale from -100 to +100. That makes it direct, and it also makes it easy to fool, because one large close change can outweigh many small ones.
The improvement in this release
The Spike Guard is this EA's own addition. On the signal bar it finds the biggest single close change on the winning side and works out its percentage of that side's whole sum. If that share is above your maximum, the crossing is refused, however high CMO reads. The panel shows the share live with OPEN or HOLD, so the decision is visible. Setting the maximum to 100 turns it off. How much this guard alone changes results has not been measured separately, and you can compare it yourself in the tester with it on and off. Margin-level timeframe safety is included and is off by default.
----------
One cycle, step by step
1. The sums. On each new bar the EA rebuilds CMO from closed bars. The forming candle is not used by default.
2. The crossing. CMO must pass through your level on the signal bar: upward through plus the level for BUY, downward through minus the level for SELL.
3. The Climb Guard. CMO must have gained enough over the last few bars.
4. The Spike Guard. No single candle may hold too large a share of the winning sum.
5. The Range Guard. The width of the CMO window, measured in ATR, must reach your minimum.
6. The trend filter. By default a slow EMA must agree with the side. You can also fade it, or switch it off.
7. The rhythm. A quiet gap of bars separates accepted signals, and a signal stays valid for a few bars if a level cannot be placed at once.
8. The ladder. Levels are spaced by fixed points or by ATR, with a floor, an upper limit and an option to freeze the distance. BUY and SELL grids can run together or in one direction only.
9. The harvest. The closer searches for groups of the oldest and newest orders and closes a group once its combined result, after swap and commission, beats your target. If the oldest order is still too heavy, only a slice of it is closed.
10. The safety checks. A reopen guard blocks a 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 before sending.
11. The optional hedge cycle. Off by default, and not exercised in the tests above. 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 and keeps the right side and the price scale clear. It shows the symbol and magic number, a status pill, grid mode, lot step, spacing, banked result, the book, the closing plan for each side and the order list. The CMO PULSE row shows the period, the CMO of the last closed bar and the bar before it, your level, and how many bars ago the last crossing happened. The SPIKE GUARD row shows the favoured side, the peak candle share, the climb and the window width in ATR, each with OPEN or HOLD, then the EMA side. Buttons switch Armed / Scan only, Pause / Resume, chart marks and slicing. The Hedge Vault card is built to dock under the main panel; it was not on screen in our screenshot because the hedge is off by default. The panel draws nothing in a non-visual backtest.
----------
Protection you control
No stop loss and no forced close-all. A reached limit stops new levels; it never dumps the book.
Before each order the money check asks whether there is 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. MinMarginLevelPercent and MaxAccountRiskPercent are off by default; consider setting them for your account.
Optional margin-level timeframe safety moves the signal and the spacing to a higher timeframe when the margin level falls to your chosen levels. Off by default and not exercised in the tests above.
Each copy filters by symbol and magic numbers, so give every chart its own magic numbers.
Scan only mode shows every decision without sending any order.
----------
Who it suits, and who it does not
It suits patient traders who want momentum proved by more than one candle, 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? Accepted signals use closed bars only. The chart marks and both panel rows also read closed bars.
Which timeframes were tested? EURUSD H1 and XAUUSD D1 only. Everything else is yours to test.
Which setting should I change first? The cross level and the Spike Guard maximum. Change one at a time and compare the drawdown as well as the net result.
Can I change the CMO period? Yes. A shorter period usually gives more crossings. The Range Guard uses the same window, so review it too.
Does it work on netting accounts? The EA has a separate margin cap for them, but we have not verified netting behaviour.
----------
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 (9754380).
GridOrderComment - the comment on each grid order (GCMO).
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 (9754381).
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 CMO 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).
Chande Momentum Oscillator - the signal
InpCMOPeriod - how many close changes are summed (20; 2 or more).
InpCMOCrossLevel - BUY when CMO rises through plus this value, SELL when it falls through minus this value; 0 is the zero line (25).
InpCMOClimbMin - Climb Guard: points CMO must have gained towards the signal side (20; 0 = off).
InpCMOClimbBars - Climb Guard: how many bars back that gain is measured from (3).
InpCMOSpikeMax - Spike Guard: the largest share of the winning sum, in percent, that one candle may hold (30; 100 = off).
InpCMORangeMinATR - Range Guard: the smallest width of the CMO window, in ATR (5.0; 0 = off).
InpCMOATRPeriod - the ATR length used by the Range Guard (14).
InpCMOTrendFilter - 1 trades with the EMA side (default), 2 trades against it as a fade, 0 is off.
InpCMOTrendMAPeriod - the trend EMA length (200).
InpShowSignalArrows - arrows on the candles where a cycle was armed (on).
InpShowCMOOnChart - marks past crossings on the live chart: small arrow = passed, grey dot = refused (on).
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 carries real risk. It adds to positions while the market moves against them, there is no stop loss, and a long one-way move can hold the book open for a long time or, with too large a lot for the balance, lead to a stop-out and heavy loss. Strong momentum can reverse on the very next bar, because CMO describes what has happened and not what comes next. No result is promised. Pick a lot your account can carry through a bad run, test on your own broker first, and trade live only what you can afford to lose. It needs no DLLs and no extra files.
If you try it, a short and honest review of how it behaved on your account, good or bad, helps other traders make their choice.
