Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
BrainTrend1_all_in_one
//+------------------------------------------------------------------+
//| BrainTrend1-all-in-one.mq4 |
//| BrainTrading Inc. System 7.0 |
//| http://www.braintrading.com |
//| Modified by Serge skhorouji@gmail.com|
//+------------------------------------------------------------------+
/* Serge: This indicator includes all 4 original BrainTrend1 indicators as I am 2 lazy to apply
them all one by one on a chart:
BrainTrend1Stop, BrainTrend1StopLine, BrainTrend1Sig, TrainTrend1.
It has customised 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 "http://www.braintrading.comt"
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Magenta
#property indicator_color2 Aqua
#property indicator_color3 Magenta
#property indicator_color4 Aqua
#property indicator_color5 Magenta
#property indicator_color6 Aqua
#property indicator_color7 Magenta
#property indicator_color8 Aqua
//---- input parameters
extern double stoch_period=9;
extern double stoch_max=53;
extern double stoch_min=47;
extern double atr_current_norm_factor=0.435;
extern double atr_before_norm_factor=1.5;
extern double atr_period=7;
extern int atr_before_step=1;
extern int NumBars=10000; //If you want to display ALL indicator values, set this to 0 - will use more memory of cause
//---- buffers
double sell_stop_dot_buf[]; //Sell stop dots, aka BrainTrend1Stop
double buy_stop_dot_buf[]; //Buy stop dots
double sell_stop_line_buf[]; //Sell stop line
double buy_stop_line_buf[]; //Buy stop line
double sell_signal_buf[]; //Sell signal dots
double buy_signal_buf[]; //Buy signal dots
double down_buf[]; //Down trend bars
double up_buf[]; //Up trend bars
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,108);
SetIndexBuffer(4,sell_signal_buf);
SetIndexLabel(4,"sell_signal");
SetIndexEmptyValue(4, EMPTY_VALUE);
SetIndexStyle(5,DRAW_ARROW);
SetIndexArrow(5,108);
SetIndexBuffer(5,buy_signal_buf);
SetIndexLabel(5,"buy_signal");
SetIndexEmptyValue(5, EMPTY_VALUE);
SetIndexStyle(6,DRAW_HISTOGRAM);
SetIndexBuffer(6,down_buf);
SetIndexLabel(6,"down_trend");
SetIndexStyle(7,DRAW_HISTOGRAM);
SetIndexBuffer(7,up_buf);
SetIndexLabel(7,"up_trend");
}
int start()
{ double stoch_current,
atr_current_normalised,
atr_before_normalised;
double value3,value4,value5,
val1,val2,
close_diff, r;
int flag1, flag2; //flags=1 when pair drops down quickly. Stoch is below stoch_min and diff in Closes exceeds atr_current_normalised.
//flags=2 when pair goes up quickly. Stoch is above stoch_max and diff in Closes exceeds atr_current_normalised.
if (NumBars == 0)
int shift = Bars - MathMax(stoch_period,atr_period);
else
shift = MathMax(Bars,NumBars) - MathMax(stoch_period,atr_period);
while(shift>=0)
{ atr_current_normalised = iATR(NULL,0,atr_period,shift)*atr_current_norm_factor;
atr_before_normalised = atr_before_norm_factor*iATR(NULL,0,atr_period+atr_before_step,shift);
stoch_current = iStochastic(NULL,0,stoch_period,stoch_period,1,0,0,0,shift);
val1 = 0; val2 = 0;
value4 = High[shift] + atr_before_normalised;
value5 = Low[shift] - atr_before_normalised;
close_diff = MathAbs(Close[shift] - Close[shift + 2]);
//Process Sharp Drops & Rises
if (close_diff > atr_current_normalised)
if (stoch_current < stoch_min && flag1 != 1 ) //pair drops down quickly
{ value3 = High[shift] + atr_before_normalised/4;
flag1 = 1;
val1 = value3;
r = value3;
sell_signal_buf[shift]=value3;
sell_stop_line_buf[shift]=value3;
}
else if (stoch_current > stoch_max && flag1 != 2 ) //pair goes up quickly
{ value3 = Low[shift] - atr_before_normalised/4;
flag1 = 2;
val2 = value3;
r = value3;
buy_signal_buf[shift]=value3;
buy_stop_line_buf[shift]=value3;
}
//Process small Drops & Rises
if (val1 == 0 && val2 == 0) //
switch(flag1)
{ case 1:
if (value4 < r)
{ r = value4;
}
sell_stop_dot_buf[shift]=r;
sell_stop_line_buf[shift]=r;
break;
case 2:
if (value5 > r)
{ r = value5;
}
buy_stop_dot_buf[shift]=r;
buy_stop_line_buf[shift]=r;
break;
}
//------This piece of code calculates BrainTrend1 params and draws them as histogram
if ( close_diff > atr_current_normalised )
{ if (stoch_current < stoch_min)
flag2 = 1;
else if (stoch_current > stoch_max)
flag2 = 2;
}
if ( (stoch_current < stoch_min && flag2 == 1) || (stoch_current < stoch_min && flag2 == 0) )
{ if ( close_diff > atr_current_normalised )
{ down_buf[shift] = High[shift];
up_buf[shift] = Low[shift];
}
}
else if ( (stoch_current > stoch_max && flag2 == 2) || (stoch_current > stoch_max && flag2 == 0) )
{ up_buf[shift] = High[shift];
down_buf[shift] = Low[shift];
}
//------------------------------------------
shift--;
}
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---