//+-----------------------------------------------------------------------+ //| BrainTrend1Stop.mq4 | //| Copyright © 2005. Alejandro Galindo | //| http://elCactus.com | //+-----------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 Blue //---- input parameters extern int AveragePeriod= 10; extern int Reg= 1; //---- buffers double Buffer1[]; double Buffer2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicator line IndicatorBuffers(2); SetIndexStyle(0,DRAW_ARROW); SetIndexBuffer(0,Buffer1); SetIndexArrow(0,158); SetIndexStyle(1,DRAW_ARROW); SetIndexBuffer(1,Buffer2); SetIndexArrow(1,158); //---- return(0); } //+------------------------------------------------------------------+ //| BrainTrend1Stop | //+------------------------------------------------------------------+ int start() { int i,shift,counted_bars=IndicatorCounted(); double value=0, price=0, trend=0, dK=0, AvgRange=0, WATR=0; int bar=0; int CountBars= 500; if (CountBars>=Bars) CountBars=Bars; SetIndexDrawBegin(0,Bars-CountBars+11+1); SetIndexDrawBegin(1,Bars-CountBars+11+1); //---- initial zero AvgRange=0; for (i=1;i<=AveragePeriod;i++) { dK = 1+(AveragePeriod-i)/AveragePeriod; AvgRange=AvgRange+ dK*MathAbs(High[i]-Low[i]); } if (Point>=0.01) { WATR = (AvgRange/AveragePeriod)*Point; } else { WATR = AvgRange/AveragePeriod; } if (Close[Bars-1] > Open[Bars-1]) { value = Close[Bars - 1] * (1 - WATR); trend = 1; Buffer2[Bars-1]=value; } if (Close[Bars-1] < Open[Bars-1]) { value = Close[Bars - 1] * (1 + WATR); trend = -1; Buffer1[Bars-1]=value; } bar=CountBars-11-1; while(bar>=0) { Buffer1[bar]=0; // fixed, was: Buffer1[shift]=0; Buffer2[bar]=0; // fixed, was: Buffer2[shift]=0; if (Reg==2) { AvgRange=0; for (i=1;i<=AveragePeriod;i++) { dK = 1+(AveragePeriod-i)/AveragePeriod; AvgRange=AvgRange+ dK*MathAbs(High[bar + i]-Low[bar + i]); } if (Point>=0.01) { WATR = (AvgRange/AveragePeriod)*Point; } else { WATR = AvgRange/AveragePeriod; } } if (trend >= 0) { if (Close[bar] > price) { price = Close[bar]; } value = price * (1 - WATR); if (Close[bar] < value) { price = Close[bar]; value = price * (1 + WATR); trend = -1; } } else if (trend <= 0) { if (Close[bar] < price) { price = Close[bar]; } value = price * (1 + WATR); if (Close[bar] > value) { price = Close[bar]; value = price * (1 - WATR); trend = 1; } } if (trend == -1) { Buffer1[bar]=value; } if (trend == 1) { Buffer2[bar]=value; } bar--; } return(0); } //+------------------------------------------------------------------+