This script is designed to help traders identify potential entry points based on channel breakouts and also suggests stop-loss levels.
Here's the basic idea:
-
Channel Creation: The script calculates three different channels based on different time periods you specify (Range1, Range2, and Range3). For each period, it identifies the highest high and the lowest low over that period. The highest high becomes the upper line of the channel, and the lowest low becomes the lower line. Think of it like drawing boxes around the price action over different lengths of time.
-
Breakout Detection: The script watches for when the price breaks out of these channels. A breakout occurs when the current price moves above the upper channel line or below the lower channel line.
-
Stop-Loss Suggestion: The script calculates a potential stop-loss level using the Average True Range (ATR) indicator. The ATR measures how much the price typically moves over a certain period. The script multiplies the ATR by a factor that you set (atr_factor), and then subtracts this value from the upper channel line after an upwards breakout and adds it to the lower channel after a downwards breakout. The end results are displayed as arrows on the chart.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| 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;
//----
for(i=Bars-1;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