[MT4指标]BrainTrend1-all-in-one
指标+止损的集成板
主图指标
mt4指标类型:趋势指标
是否能用在mt4手机版上:否
是否含有未来函数:无
该指标包括所有4原BrainTrend1指标,因为我懒2申请
他们都一一在图表上:
BrainTrend1Stop,BrainTrend1StopLine,BrainTrend1Sig,TrainTrend1。
它定制,可以在优化过程中播放外部变量
此外,我改名为变量,简化
//+------------------------------------------------------------------+
//| BrainTrend1-all-in-one.mq4 |
//| BrainTrading Inc. System 7.0 |
//| http://www.braintrading.com |
//| Modified by Serge [email protected]|
//+------------------------------------------------------------------+
/* 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--;
}
}
BrainTrend1_all_in_one.jpg
