• Overview
  • Reviews
  • Comments (39)
  • What's new

Shmendridge C7 Channel Breaks


  • Simultaneous Multi-Signals, Multi-Symbols and Multi-Time Frames
  • Extraordinarily robust (wide range of settings produces positive results over long testing periods during optimizations and across different broker feeds and time frames).
  • Built in anti-curve fitting features for extremely robust optimizations. (Time Dilation testing, Monte Carlo testing, Jiggle testing and Cross Market testing)
  • No martingale or other suspicious/dangerous MM.
  • No suspicious open trade draw-downs. Standard broker stop-loss placed on all orders.
  • No hard-coded tricks to fit past data.
  • No worries of order delays, this EA is a non scalper and uses stop entries only.
  • Settings working across multiple time frames nicely.
  • Set your own risk to reward.
  • Very simple and safe money management.
  • This EA is a powerful tool that will probably live forever in your trading arsenal.
  • Less than 1/3rd of the price of other incredible EA's.


This EA is a Multi-Time Frame, Multi-Symbol, Multi-Signal robot which plays Donchian Channel breakouts, Ichimoku crosses, Keltner Channel breakouts and Trend-line breakouts. It has unique ways of calculating channels width, entry, SL and TP and adapting to volatility. The trailing SL utilizes "big round numbers" as protection from premature stop outs. The built in anti-curve fitting features yield a high correlation between the resulting in sample back test and the out of sample forward test on many markets and time frames.

I will be using this EA on my own live account but I do not have much initial capital, so I will sell some copies of this to give my trading account a little boost.

Check the comments for more screenshots, settings, reports and live account results.

No reviews
Version 3.12 - 2016.05.23
New default settings m1 scalper.
fixed mod stop error
Version 3.11 - 2016.03.04
-Updated default settings.
Version 3.10 - 2015.12.16
Updated default settings plus minor bug fix where stop loss wasn't working as designed.
Version 3.9 - 2015.09.11
Fixed bug in trend-line detection

Added: 8 different trailing stop methods
-exBRN the original big round number trailing stop
-exHiLow trails on the last hi/low of the last x bars.
-exDHiLow trails on the last daily hi/low of the last x daily bars
-exIchi trails on the x line of the ichimoku indicator.
-exKelt trails on the keltner channel line of x bars.
-exHeiken trails on the heiken ashi hi/low of x bars.
-exDHeiken trails on the daily heiken ashi hi/low of the last x daily bars.
-exPsar trails on the SAR indicator.
[x=trailstop*10; one should optimize trailstop as follows: start 0.1 step 0.1 end 1.2]

added: 3 new signals
-mal places entry orders based from a moving average. signal always fires.
-pivma when moving average is higher than a traders pivot level it will go long and vice versa for short. places orders on a moving average.
-psar places entry orders based from the SAR indicator. signal always fires.

new inputs:
-trailtype select one of the trailing stop methods above.
-pivttype select one of the traders pivot levels for the pivma signal only.
-pvTF select a larger time frame for the traders pivots to be calculated from.
-psar1 step of the SAR for the psar signal only
-psar2 max for the SAR indicator psar signal only
Version 3.7 - 2015.09.02
- Changed ichi_E signal: it no longer uses highest high/lowest low. It is now a simple Ichimoku cross signal.
- Added chart comments to show various info.
- Added slippage reported to logs and push notifications.
- Fixed: order and position age are now calculated properly on initialization.
- Fixed bug where exitafterpeak would not exit after peak trading hours.
- Added: pending orders are removed but open trades are kept open (but not managed) during non-peak hours if both exitafterpeak and opentradepeakonly are 'true'.
- maxspread now expressed in percent of ATR instead of points.
- Reduced redundant pending order modifications.

- method kelt: Keltner channel breakout signal.
- method trnln: pattern recognition signal.
- ENTERTYPE EnterWithLimit and EnterWithStop: entry methods.
- OnlyPlaceWhenClose: if 'true', it will not place any orders at all until the price gets closer to the entry price.
- ReverseSignal: if 'true', it reverses long and short entry prices.
- alwaysforceorder: if 'true', it will place an order regardless of how far the price has moved past the target entry price.
- keltS: width of the Keltner channel expressed in factor1 (either ATR or BB units).
- mintouche: minimum extremity of a touch point expressed in bars.
- mintouchpt: minimum touch points for each trendline.
- Shortest: shortest segment allowed within a trend line.
- ttol: tolerance for precision of a straight line expressed in factor1 (either ATR or BB units).
- bounce: minimum bounce away from trendline for each touch point expressed in factor1 (either ATR or BB units).
- anglefilter: if 'true', it will not allow long signal on an up slope nor a short signal on a down slope.
- maxage: maximum age allowed for any trend line without a new touch point expressed in bars.
- patd: if not 0, then it is the maximum distance between upper and lower lines allowed to produce a signal expressed in factor1 (either ATR or BB units); if 0, then only one line produces a signal.
- UseMacdFl: if 'true', the MACD filter is used.
- MacdFl1: MACD filter period 1.
- MacdFl2: MACD filter period 2.
- MacdFl1: MACD filter period 3.
- UseMAdifFl: if 'true', the moving average difference filter is used.
- MAdifP: period for the MA difference filter.
- MAdifT: tolerance (distance between the current price and the MA) expressed in factor1.
- MAdifM: moving average method for the MA difference filter.
- maxtrades: if not 0, then this is the maximum trades allowed before the EA intentionally errors out.
Version 3.5 - 2015.07.29
bug where sometimes a replace sequence may have ended up with a double order fixed
Version 3.4 - 2015.07.23
- Time frame added to orders comments.
- Padding added (0.1 atr) to the replace order sequence (To prevent a replace sequence ending in "market too close" before the orders can be replaced.)

Inputs Added
- negscore: if limitneg is true then this will be the score to assign to frames with too few trades. used for optimzing
- limitneg: if false will allow negative scores (frames which lose money will have a score equal to its Sharpe Ratio as long as it satisfies minimum trades criteria.) used for optimizing
Version 3.3 - 2015.07.22
New signal Ichi-E:
When the "Tenkan" Ichimoku indicator crosses the "Senko" Ichimoku indicator and the highest high or lowest low of the last x th bars is broken, then it places a stop entry near (+/- pad) the moving average.

Bug fixed:
fixed Bollinger Band factor calculation.

Added inputs:
DateBeginSecondaries - the date to start trading the secondary symbols and timeframes. It will trade only the symbol "symbol0" on the "timeframe0" timeframe until then. Used for backtesting and optimizing
method=ichi_E - to run the new "ichi-E" signal, default is "dchan" which runs the original channel type signal
BarFraction - the fraction of a bar used to determine how long to wait between main program calls. It is an alternative to FREQUENCY. In case you want to run the main program every 1/4 of a bar for instance, you would set BarFraction to 0.25 and FREQUENCY to 1. It is only useful on the new ichi-E signal
PreCheckFraction - if true, it will not even execute order management or spread check functions until BarFraction is satisfied. Used to save CPU during optimizations
adjustorders - if true, it will continue to adjust pending orders once placed
checkdifonnewbar - if true, it will only adjust pending orders on a new bar
checkpatternonnewbar - if true, it will only place new orders on a new bar
usecurrentbar - if true, it will use the current bar in factor 1 calculations. It will be quicker to adjust to market conditions if true
exitfriday - if true, it will close positions and orders on friday at "exitfridaytime" hour
opentradepeakonly - if true, it will only open new trades during peak hours defined by "peakbegin"and "peakend"
exitafterpeak - if true, it will exit positions after peak hours defined above
AlwaysMinLot - if true, it will always open at least the minimum lot size. If false, it will not open any order which would exceed your risk percent by 2x even if that means not opening any orders at all.
Tenkan1 - the first period of the "tenkan" ichimoku indicator (ichi_E signal only)
Tenkan2 - the second period of the "tenkan" ichimoku (ichi_E)
Tenkan3 - the third period of the "Tenkan" ichimoku (ichi_E)
IchiB - the buffer number to use from the "Tenkan" ichimoku indicator (ichi_E)
Senk1 - the first period of the "Senko" Ichimoku (ichi_E)
Senk1 - the second period of the "Senko" Ichimoku (ichi_E)
Senk1 - the third period of the "Senko" Ichimoku (ichi_E)
IchiSB - the buffer number to use from the "Senko" ichimoku indicator (ichi_E)
Ma1 - the periods to use for the moving average (ichi_E)
Ma1m - the type of moving average (ichi_E)
spaceB - the number of the last bars of which all the highs or lows must be broken to complete ichi_E signal (ichi_E)
Version 3.0 - 2015.06.25
symbols - number of symbols from the symbols list to run simultaneously
symbol0..symbol30 - symbols list
timeframes - number of timeframes from the timeframes list to run on simultaneously
timeframe0..timeframe5 - timeframes list
FREQUENCY - number of seconds to wait in between main program calls
magic - Magic Number (now plays nice with other EAs and other instances of itself on the same symbol as long as the magic number is unique)
CheckMargin - check margin before placing an order. You may turn it off to increase performance in the Tester
slippage - maximum allowable slippage (if the broker allows such a setting)
maxspread - maximum spread allowed before it triggers safety mode and closes all pending orders temporarily
Lots - risk expressed in percent
stoploss - stop loss expressed in "factor1" (see below)
takeprofit - take profit expressed in factor defined below
trailstop - trailing stop loss expressed in "factor1" (see below)
trailpadding - padding of the trailing stop loss expressed in "factor1" (see below)
BRNTrailadj - adjuster used in the calculation of the frequency of the "big round numbers". A higher number is further apart big round numbers. This is a complex algorithm
Chanlength - length of channel expressed in bars
Chanwidth - width of channel expressed in "factor2" (see below)
chancore - channel core expressed in "factor2" (see below)
pad - pending order padding expressed in "factor1" (see below)
dchanmaxorderage - maximum order age of pending orders expressed in bars
dchanmaxposage - maximum position age of an open position expressed in bars
lotchngsense - minimum percent change of the lot size before an order replace sequence occurs
tpchngsense - minimum percent change of TP distance before an order modify or replace sequence is triggered (with the exception of a shrinking channel). In case the channel gets tighter/smaller, the order will always adjust)
maxadjDistance - expressed in "factor1" (see below), the market price must be within this price range for an order replace or order modify sequence to take place
F1type - Factor 1 definition. It can be bbF (percent of Bollinger Band 1) or atrF (ATR 1). This is the measurement of the SL and trailing SL are in
F2type - Factor 2 definition. It can be bbF (percent of Bollinger Band 2) or atrF (ATR 2). This is the measurement of the channel width, core and pad are in
Fbars1 - bars for the factor 1 calculation
Fbars2 - bars for the factor 2 calculation
bbd1 - Bollinger Band 1 setting
bbd2 - Bollinger Band 2 setting
Fnum TP - whether to use factor 1 or factor 2 calculation for the take profit factor
Cspreadmode - custom spread mode. It can either be csADD to add points to existing spread to simulate a wider spread or csMIN to be a static minimum spread. The balance is adjusted with the withdrawal function of Tester to replicate this larger spread. Use it to factor in additional commission and slippage to make sure your strategy/settings are robust
CustomSpread - custom spread expressed in points
TesterMinTrades - minimum trades used to calculate custom score of tester
MaxDchanWrat - maximum width to length ratio of the channel. It will error on init with the incorrect parameters message if this ratio is higher
MinDchanWrat - minimum width to length ratio of the channel. It will error on init with the incorrect parameters message if this ratio is lower
randFmode - it can be "scndtf", which will apply a change to the factors of all timeframes other than the timframe0. (It can be used to force a jiggle test on each frame if used in combination with a multi-timeframe optimization where all timeframe0..timeframe5 are the same, see below). It can be "all" which will change the factors of all timeframes including the timeframe0. It can be set to "off" as well
distributionmode - it can be "randD" which will make any factor changes random for a Monte Carlo effect or can be "evenD" which will make any factor changes evenly distributed (see below)
RandPercent - maximum percent of change applied to the factors when rand mode is on. This effects both randD mode and evenD mode
ScndTFadj - risk multiplier for the secondary timeframes. 1.0 means risk will be the same across all timeframes

Additional notable changes:
- Is now multi-symbol and multi-timeframe capable. Combination of rand modes and multi-timeframes uses include Monte Carlo mode and time dilation mode for robustness (see below)
- Uses virtual orders to track the positions and orders so now (with a unique magic) is compatible with other instances of itself on the same symbol as well as other EA.
- Orders are not arbitrarily contracted inwards unless the core requirement is met for the new width.
- Is now timer based. Main program is not called on each tick. Main program is called depending on FREQUENCY setting instead.
- Bolling Band percent instead of ATR can now be used as a factor to express the TP, SL, channel width and core settings.
- Order change sensitivity is now highly configurable in case your broker does not like the pending order spam.
- Is now very easy for me to add in new patterns, filters and other features so look out in the future for big additions.

Examples of Setting Combos:

Built in jiggle test during optimization for robustness: There will be 4 extra "5 minute runs" for each frame where the factors (effecting channel length, width, SL, TP, core etc.) are +6.25%, +12.5%, -12.5%, -6.25% making sure a wide range of similar settings are profitable during optimization:
timeframes - 5
timeframe0..timeframe5 - 5 minutes
randFmode - scndtf
distributionmode - evenD
RandPercent - 25

Built in jiggle test plus 2 secondary symbols for robustness of optimizations: There will be 2 extra "5 minute runs" for each of 1 main symbol and 2 secondary symbols at half risk. The secondary time frames will have adjusted factors by +9%/-9%.
timeframes - 3
timeframe0..timeframe2 - 5 minutes
symbols - 3
symbol0..symbol2 - any
scndrySadj - 0.5
randFmode - scndtf
distributionmode - evenD
RandPercent - 18

Monte Carlo 10 slightly adjusted (+/-12.5%) frames for verifying robustness of settings after optimization is complete:
Turn optimization on for FREQUENCY only (start 50 up to 500 to make the 10 frames)
randFmode - all
distributionmode - randD
RandPercent 25

Use "Bollinger Band 1 Percent" to express stop loss and trail and use "ATR 2" to express channel dimensions and TP:
F1type bbF
F2type atrF
FnumTP f2
Version 2.623 - 2015.04.07
- Checks for other pending orders near its own. If there are any, then lot size will be half of the normal one.
- If spread becomes volatile, orders are adjusted regardless of whether it is a new bar or not.
- SpreadBars is now hundreds of ticks instead of bars.
- Fixed New Channel bug.
Version 2.622 - 2015.04.03
-fixed channel filter blocking new channel bug
-updated default settings
-MAX_CHOP experimental filter market chop. 1 is the highest so a setting of 1 allows any market chop reading and is therefore not filtering anything. 0.5 will filter out most trades or all trades.
-CHOP_PERIOD the time-frame to take the market chop reading from.
-CHOP_BARS the amount of bars to take the average market chop reading from.
-MaxcwRatio the maximum CHANNEL_LENGTH:MAXCHANNELWIDTH ratio allowed. will block the optimizer by failing to init if this ratio is too high.
-MincwRatio the minimum CHANNEL_LENGTH:MAXCHANNELWIDTH ratio allowed. will block the optimizer by failing to init if this ratio is too low.
-m1penal in order to simulate slippage it uses the tester withdrawal function to make a small penalty withdrawal during optimizations.
-SimpleDDR if true will use the new optimization scoring algorithm with more weight on drawdown vs profit as well as the number of trades between equity peaks.
Version 2.61 - 2015.03.09
- Added: CHANNEL_FILTER filters out poorly defined channel walls.
- Added: Safety, if true disallows trading when other positions or orders are already present on the same symbol.
Version 2.53 - 2015.03.06
- Fixed bug padding not being applied correctly to the Big Round Number trailing stop mechanism.
- Fixed metal lot size (GOLD, SILVER etc.) calculation.
- Fixed "spread too wide" sometimes not triggering.
Version 2.52 - 2015.02.27
- Optimized default settings.
- CustomSpread is now considered during optimizations. Enter in your average slippage plus spread in points, and the tester will optimize for these parameters. Optimize to custom score with PUREDD=true to take advantage of this new CustomSpread algorithm.
- Implemented ultra tight stops. Now, a stop loss can be even tighter than allowed by the broker via an additional invisible stop loss handled within C7.
- Added: m1penal. Simulate the performance of live ticks a little better by penalizing any order where entry and exit are contained in the range of the same M1 bar (implements a forced withdrawal equal to an additional spread when penalizing), in points.
- Added: RestrictToDaily. If true, it will prohibit any pending orders from being placed within the previous days range (used for experimenting with some M1 settings).
Version 2.51 - 2015.02.05
Huge reduction in redundant pending orders.
Version 2.41 - 2015.02.03
New inputs:
MA - Moving average of MA filter
USEMA - turn the MA filter on/off
CustomSpread - simulate a larger spread during testing
StartDay - day of week to start trading
StartHour - Hour to start trading
EndDay - day to end trading for weekend
EndPosHour - Hour to close positions for weekend
EndPenHour - Hour to remove pending orders before weekend
MaxSpread - Maximum spread allowed before EA will stop trading temporarily
MaxSpreadBars - Amount of bars to stop trading for

Updated default settings for EURUSD 5M.
Version 2.2 - 2014.08.27
Added AddToEquity input: enter an extra amount to be used in the lot size calculation.
Version 2.1 - 2014.06.02
MINSWINGOUTRATIO - fraction of the core that a swingpoint must protrude in order to be calculated as a true swingpoint. (0.5)
ExpressCore - units that the core is expressed in (percent or ATR).

Overactive pending order adjustments.
Version 2.0 - 2014.03.20
- Removed STEP setting.
- Added ATR_BARS setting. The amount of bars in the ATR calculation.
- Now uses way less bars in its calculation.
- The whole algorithm is rebuilt. It is a lot more sensitive to current market conditions. It will adjust sl, tp, price and lot size based on recent volatility. Much testing shows this to have an overall increase in performance and robustness across different brokers data.
- Added the newest settings and readme doc to the comments area. Please read before using.
- Now the auto back order mechanism runs each time a new channel is detected. Much testing shows more trades/better performance.
- Fixed a small bug causing lot sizes to be slightly off as the spread was not being included in the formula.
- Fixed other small bugs.
Version 1.6 - 2014.03.18
- Arrows now indicate Channel walls and core positions.
- Timeframe added to order comments (user request).
- Checks the setting "Description(d99)" for matching timeframe and symbol for safety (user request).
- Now checks at initialization if there was supposed to be an order placed since the last new high/low. If so, places the order. That way if you miss an order because your computer crashed, it will still place the order when you REINITIALIZE. Note that if you disconnect and reconnect and miss an order, you will have to reinitialize the bot to take advantage of this.
- Improved PUREDD mode. Added "amount of trades between peaks" to algorithm so optimizer prefers smoother equity curves.
- Added PENexp setting. The exponent used in the algorithm which penalizing the frames that produce "amount of trades" or "profit factor" below the minimum requirements specified by the user as TesterMinTrades and MINPF respectively. The higher PENexp is set, the steeper the penalty curve.
- Added TesterLotinc setting. Slowly increases the lot size over time so that the optimizer prefers later performance over early one.
Version 1.5 - 2014.02.25
- Added Stop and Reverse setting (SAR) and fixed a couple minor bugs to mirror exact MetaTrader 4 version performance.
- Added SWINGPOINTONLY flag. Only channel walls defined by swingpoints will form a channel wall if true.
- Improved PUREDD mode to improve forward test and back test correlation.
- Updated default settings to freshly optimized (Feb 24th/2014).

Message me for newest settings for other pairs.
Version 1.4 - 2014.02.20
Bugfix of swingpoint. Was not performing as designed.
Improved volume corrections on existing pending orders.
Improved PUREDD optimization mode and its scoring has been smoothed.

Added inputs:
SWINGTYPE. Experimental swingpoint definitions.

Removed inputs:
MINSWINGOUT. Now consolidated with CHANNELCORE.
Version 1.3 - 2014.02.18
Converted all pip inputs to be based in ATR/StdDev instead of pips.

Added big round number trailing stop system.

Added new inputs:
- PUREDD to turn on optimization by pure balance relative drawdown %.
- PUREPFW weight of PF in PUREDD mode.

Various bullet proofing.

- New optimized default settings for EUR M5.

Optimization paragraph on product page should now read:
Mostly profitable results are returned by the tester when these parameters are optimized in this fashion on EUR M5 from the last 8 years:
MINSWINGOUT - 0.5 to 20.5, step 5
MINSWINGSPACE - 50 to 200, step 50
MAXSWINGSPACE - 250 to 2000, step 250
MINSWINGS - 2 to 3, step 1
ALLOWANCE - 0.2 to 1.8, step 0.4
MAXCHANNELWIDTH - 30 to 180, step 30
CHANNEL_LENGTH - 96 to 2400, step 96
CHANNEL_CORE - 5 to 10, step 1
NOCHANNELBARS - 10 to 510, step 100
STOP_LOSS - 1 to 5, step 1
TAKE_PROFIT - 25 to 45, step 5
TRAILING_STOP - 2 to 18, step 4
STEP - 0.1 to 0.3, step 0.1
CUSHION - -0.5 to 1, step 0.25
BRNSTOP - true
BRN - 0.0005 to 0.001, step 0.0005
BRNSTOPLOSS - 1 to 6, step 1
LOT - 0.1
LOT_TYPE - Percent

This is a very coarse optimization for minimal curve fitting.