BrainTrend2_all_in_one

Author: Copyright � 2005, MetaQuotes Software Corp.
BrainTrend2_all_in_one
Indicators Used
Indicator of the average true range
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
BrainTrend2_all_in_one
//+------------------------------------------------------------------+
//|                                       BrainTrend2-all-in-one.mq4 |
//|                                                www.forex-tsd.com |
//|                                                Nick Bilak        |
//|                             Modified by Serge skhorouji@gmail.com|     
//+------------------------------------------------------------------+
/* Serge: This indicator includes 3 original BrainTrend2 indicators as I am 2 lazy to apply 
   them all one by one on a chart:
   BrainTrend2Stop, BrainTrend2StopLine, BrainTrend2Sig
   Note: BrainTrend2 indicator is not included as we use BrainTrend1 indicator for trend direction
   It has customisable external variables that can be played with during optimisation
   Also I renamed variables, simplified & logically re-arranged the codes of the original indicators 
   to make them more understandable (I mean for myself :-)
*/   
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "www.forex-tsd.com"

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Red
#property indicator_color4 Blue
#property indicator_color5 Red
#property indicator_color6 Blue

//---- input parameters
extern int     NumBars=0;         //If 0, all indicator will be drawn on the whole chart (from 1st bar)
extern bool    spread_eq_0=false;   //if true, we will use spread=0 in all our calculations, if false we will use spread from the broker

//---- buffers
double sell_stop_dot_buf[];   //Sell stop dots, aka BrainTrend2Stop
double buy_stop_dot_buf[];    //Buy stop dots
double sell_stop_line_buf[];  //Sell stop line, aka BrainTrend2StopLine
double buy_stop_line_buf[];   //Buy stop line
double sell_signal_buf[];     //Sell signal dots, aka BrainTrend2Sig
double buy_signal_buf[];      //Buy signal dots

double spread;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{  SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,115);
   SetIndexBuffer(0,sell_stop_dot_buf);
   SetIndexLabel(0,"sell_stop_dot");
   SetIndexEmptyValue(0, EMPTY_VALUE);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,115);
   SetIndexBuffer(1,buy_stop_dot_buf);
   SetIndexLabel(1,"buy_stop_dot");
   SetIndexEmptyValue(1, EMPTY_VALUE);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,sell_stop_line_buf);
   SetIndexLabel(2,"sell_stop_line");
   SetIndexEmptyValue(2, EMPTY_VALUE);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,buy_stop_line_buf);
   SetIndexLabel(3,"buy_stop_line");
   SetIndexEmptyValue(3, EMPTY_VALUE);
   SetIndexStyle(4,DRAW_ARROW);
   SetIndexArrow(4,234);
   SetIndexBuffer(4,sell_signal_buf);
   SetIndexLabel(4,"sell_signal");
   SetIndexEmptyValue(4, EMPTY_VALUE);
   SetIndexStyle(5,DRAW_ARROW);
   SetIndexArrow(5,233);
   SetIndexBuffer(5,buy_signal_buf);
   SetIndexLabel(5,"buy_signal");
   SetIndexEmptyValue(5, EMPTY_VALUE);
   
   if (spread_eq_0 == false)
      spread=MarketInfo(Symbol(),MODE_SPREAD)*Point;
   else
      spread=0;
}

int start() 
{
   double true_range;
   int artp=7;
	bool river=True;
	double Emaxtra=0;
	double  Values[100];
	double ATR=0;
	int glava=0;
	double Weight=0;
	int Curr=0;
	double widcha=0;
   double cecf=0.7;
	double Range1=0;
	double r=0;
	double r1=0;
	int p=0;
	double s=2;
		
   if (NumBars == 0)
      NumBars = Bars;
   else
      NumBars = MathMin(Bars,NumBars);

   if (Close[NumBars - 2] > Close[NumBars - 1]) 
      river = True; 
   else 
      river = False;
   Emaxtra = Close[NumBars - 2];

   true_range = MathMax(spread + High[NumBars-3] - Low[NumBars-3],
                   MathMax(MathAbs(spread+High[NumBars-3]-Close[NumBars-2]),
                           MathAbs(spread+High[NumBars-3]-Close[NumBars-3])));
   for (int i = 0; i <= artp-1; i++) 
      Values[i] = true_range;

   for (int shift=NumBars-3; shift>=0; shift--) 
   {  true_range = MathMax(spread + High[shift] - Low[shift],
         MathMax(MathAbs(spread+High[shift]-Close[shift+1]),MathAbs(spread+High[shift]-Close[shift+1])));
      Values[glava] = true_range;
      ATR = 0;
      Weight = artp;       // 7
      Curr = glava;        // 0
      for (i = 0; i<=artp-1; i++) 
      {  ATR += Values[Curr] * Weight;
         Weight -= 1;
         Curr -= 1;
         if (Curr == -1) 
            Curr = artp - 1;
      }
      ATR = 2.0 * ATR / (artp * (artp + 1.0));
      glava += 1;
      if (glava == artp) 
         glava = 0;
      widcha = cecf * ATR;    //cecf = 0.7
      if (river && Low[shift] < Emaxtra - widcha) 
      {  river = False;
         Emaxtra = spread + High[shift];
      }
      if (river && Low[shift] > Emaxtra)
      {  Emaxtra = Low[shift];
      }
      if (!river && spread + High[shift] > Emaxtra + widcha) 
      {  river = True;
         Emaxtra = Low[shift];
      }
      if (!river && spread + High[shift] < Emaxtra)
      {  Emaxtra = spread + High[shift];
      }
      
      Range1 = iATR(NULL,0,10,shift)+spread/10.0;
      if (river) 
      {  if (Low[shift] - Range1 * s < r && r != 0)  
            r1 = r; 
         else 
            r1 = Low[shift] - Range1 * s / 3.0;
         if (p == 2) 
         {  r1 = Low[shift] - Range1 * s / 3.0;
            buy_signal_buf[shift]=r1;
         }
         buy_stop_dot_buf[shift]=r1;
         buy_stop_line_buf[shift]=r1;
         r = r1;
         p = 1;
      } else 
      {  if (spread + High[shift] + Range1 * s > r && r != 0) 
            r1 = r; 
         else 
            r1 = spread + High[shift] + Range1 * s / 3.0;
         if (p == 1) 
         {  r1 = spread + High[shift] + Range1 * s / 3.0;
            sell_signal_buf[shift]=r1;
         }
         sell_stop_dot_buf[shift]=r1; 
         sell_stop_line_buf[shift]=r1; 
         r = r1;
         p = 2;
      }
   }
}

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 ---