ivchannel_breakout_basic
Download scriptThis technical tool is designed to identify significant price movements by monitoring the interaction between market prices and three distinct "channels" or boundaries. By analyzing price behavior over different time horizons, the script helps traders identify breakout points and automatically suggests protective safety levels (Stop Losses).
Core Logic Overview
1. Multi-Layered Channel Monitoring The script tracks the highest highs and lowest lows of the market across three different lookback periods (defined by the user as 10, 20, and 55 bars). This creates a nested visual structure:
- Short-term: Captures immediate price fluctuations.
- Medium-term: Identifies the primary trading range.
- Long-term: Represents the broader market trend or "macro" boundaries.
2. Breakout Detection The logic is specifically designed to detect "Breakouts." It monitors whether the current price has moved beyond the established boundaries of the medium and long-term channels. When the price crosses one of these lines, it signals a potential shift in market momentum—moving from a consolidation phase into a trending phase.
3. Dynamic Stop Loss Calculation One of the most professional features of this script is how it handles risk management. Rather than using a fixed number of pips for a safety net, it utilizes the ATR (Average True Range). The ATR measures market volatility—essentially telling the tool how much the price typically "wiggles" on average.
When a breakout occurs, the script calculates a specific Stop Loss based on that volatility:
- If the price breaks upward, the script sets a safety floor below the breakout point, adjusted by a multiplier of the current volatility.
- If the price breaks downward, it sets a safety ceiling above the breakout point.
Summary for the Trader
This script automates the "Turtle Trading" style of analysis. It visually maps out where the market is currently contained and alerts you when the price escapes those boundaries. By combining these breakouts with volatility-based calculations, it provides a structured way to enter a trade at a significant turning point while placing your safety net in a position that accounts for how fast or slow the market is moving at that specific moment.
//+------------------------------------------------------------------+
//| channel_breakout_entry.mq4 |
//| with ATR Stop Loss calculation |
//| use this one for drawing channel |
//| and the place for placing initial SL |
//| as described the turtle trading rules |
//+------------------------------------------------------------------+
#property copyright "darmasdt"
#property link "http://indotraders.org"
//----
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 DarkGray
#property indicator_color2 DarkGray
#property indicator_color3 DodgerBlue
#property indicator_color4 DodgerBlue
#property indicator_color5 Tomato
#property indicator_color6 Tomato
#property indicator_color7 LightSkyBlue
#property indicator_color8 Plum
//---- input parameters
extern int Range1=10;
extern int Range2=20;
extern int Range3=55;
extern double atr_factor=2;
extern int atr_range=14;
//---- buffers
double UpBuffer1[];
double DnBuffer1[];
double UpBuffer2[];
double DnBuffer2[];
double UpBuffer3[];
double DnBuffer3[];
double atr_b2[];
double atr_b3[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- indicator line
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);
SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1);
SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,1);
SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,1);
SetIndexStyle(5,DRAW_LINE,STYLE_SOLID,1);
//SetIndexStyle(6,DRAW_ARROW,STYLE_DOT,1);
SetIndexStyle(6,DRAW_ARROW);
SetIndexArrow(6,249);
//SetIndexStyle(7,DRAW_ARROW,STYLE_DOT,1);
SetIndexStyle(7,DRAW_ARROW);
SetIndexArrow(7,249);
SetIndexBuffer(0,UpBuffer1);
SetIndexBuffer(1,DnBuffer1);
SetIndexLabel(0,"trailing_Up");
SetIndexLabel(1,"trailing_Dn");
SetIndexBuffer(2,UpBuffer2);
SetIndexBuffer(3,DnBuffer2);
SetIndexLabel(2,"sys1_Up");
SetIndexLabel(3,"sys1_Dn");
SetIndexBuffer(4,UpBuffer3);
SetIndexBuffer(5,DnBuffer3);
SetIndexLabel(4,"failsafe_Up");
SetIndexLabel(5,"failsafe_Dn");
SetIndexBuffer(6,atr_b2);
SetIndexBuffer(7,atr_b3);
SetIndexLabel(6,"Sys 1 Stp");
SetIndexLabel(7,"Sys 2 Stp");
//---- name for DataWindow and indicator subwindow label
short_name="CBO_entry("+Range1+","+Range2+","+Range3+")";
IndicatorShortName(short_name);
//----
SetIndexDrawBegin(0,0);
SetIndexDrawBegin(1,0);
SetIndexDrawBegin(2,0);
SetIndexDrawBegin(3,0);
SetIndexDrawBegin(4,0);
SetIndexDrawBegin(5,0);
SetIndexDrawBegin(6,0);
SetIndexDrawBegin(7,0);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Channel Trend System |
//+------------------------------------------------------------------+
int start()
{
int i;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;
if(counted_bars==0) limit-=1+Range1+1;
//----
for(i=limit;i>=0;i--)
{
//Calculating Channel
UpBuffer1[i]=High[Highest(NULL,0,MODE_HIGH,Range1,i+1)];
DnBuffer1[i]=Low[Lowest(NULL,0,MODE_LOW,Range1,i+1)];
//
UpBuffer2[i]=High[Highest(NULL,0,MODE_HIGH,Range2,i+1)];
DnBuffer2[i]=Low[Lowest(NULL,0,MODE_LOW,Range2,i+1)];
//
UpBuffer3[i]=High[Highest(NULL,0,MODE_HIGH,Range3,i+1)];
DnBuffer3[i]=Low[Lowest(NULL,0,MODE_LOW,Range3,i+1)];
//Calculating ATR Stops
if(High[i+1]<=UpBuffer2[i+1] && High[i]>UpBuffer2[i])
{
atr_b2[i]=UpBuffer2[i]-(iATR(NULL,0,atr_range,i+1)*atr_factor);
}
if(High[i+1]<=UpBuffer3[i+1] && High[i]>UpBuffer3[i])
{
atr_b3[i]=UpBuffer3[i]-(iATR(NULL,0,atr_range,i+1)*atr_factor);
}
if(Low[i+1]>=DnBuffer2[i+1] && Low[i]<DnBuffer2[i])
{
atr_b2[i]=DnBuffer2[i]+(iATR(NULL,0,atr_range,i+1)*atr_factor);
}
if(Low[i+1]>=DnBuffer3[i+1] && Low[i]<DnBuffer3[i])
{
atr_b3[i]=DnBuffer3[i]+(iATR(NULL,0,atr_range,i+1)*atr_factor);
}
}
return(0);
}
//+------------------------------------------------------------------+
Comments