!!channel_breakout_basic

Author: darmasdt
!!channel_breakout_basic

This script is designed to help traders identify potential entry points for trades based on channel breakouts, a concept borrowed from the Turtle Trading system. It also calculates potential stop-loss levels using the Average True Range (ATR) indicator.

Here's the breakdown:

  1. Channel Creation: The script calculates and displays three different channels on the price chart. Each channel is defined by a "high" line and a "low" line. The high line represents the highest price reached during a specific period (Range1, Range2, and Range3), while the low line represents the lowest price during the same period. In simpler terms, for each of the three ranges, the script identifies the highest high and lowest low over that range, and draws lines based on those values.

  2. Channel Breakout Indication: The script is set to detect when the price "breaks out" of these channels. It is not directly triggering trades, but it is marking points in the chart to visually indicate a breakout.

  3. ATR Stop-Loss Calculation: The script calculates potential stop-loss levels based on the Average True Range (ATR). ATR measures the average price volatility over a specified period. The script uses this ATR value, multiplied by a factor (atr_factor), to determine a suitable distance for placing stop-loss orders. When the price breaks out of a channel, a stop loss level based on the ATR is calculated and displayed.

In essence, this script helps traders visually identify potential trading opportunities by:

  • Drawing channels based on recent price highs and lows.
  • Visually indicating when the price breaks out of these channels.
  • Suggesting potential stop-loss levels based on market volatility, using the ATR indicator.
Indicators Used
Indicator of the average true range
Miscellaneous
Implements a curve of type %1
4 Views
0 Downloads
0 Favorites
!!channel_breakout_basic
//+------------------------------------------------------------------+
//|                                       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

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---