#property copyright "Copyright © 2012, Zhaslan" #property link "" //---- #property indicator_separate_window #property indicator_buffers 2 //---- extern int MA_Period=14; extern color Color1 = Blue; extern color Color2 = Red; //---- double Bulls[]; double Bears[]; double TempBulls[]; double TempBears[]; int ExtCountedBars=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(4); IndicatorShortName("Bulls&Bears"); //---- indicators SetIndexStyle(0, DRAW_LINE, EMPTY, 2, Color1); SetIndexBuffer(0, Bulls); SetIndexLabel(0, "Bulls"); SetIndexStyle(1, DRAW_LINE,EMPTY, 2, Color2); SetIndexBuffer(1, Bears); SetIndexLabel(1, "Bears"); SetIndexBuffer(2, TempBulls); SetIndexBuffer(3, TempBears); return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i, j, counted_bars=IndicatorCounted(); double razmer_tika, ravenstvo; if(Bars<=MA_Period) return(0); //---- int limit=Bars-counted_bars; if(counted_bars>0) limit++; for(i=0; i Close[i]) ravenstvo=((High[i]-Low[i])-(Open[i]-Close[i]))/(2*razmer_tika); if (Open[i] < Close[i]) ravenstvo=((High[i]-Low[i])-(Close[i]-Open[i]))/(2*razmer_tika); if (Open[i] > Close[i]) TempBulls[i] = (Open[i]-Close[i])/razmer_tika + ravenstvo; else TempBulls[i] = ravenstvo; if (Open[i] < Close[i]) TempBears[i] = (Close[i]-Open[i])/razmer_tika + ravenstvo; else TempBears[i] = ravenstvo; } ExtCountedBars=IndicatorCounted(); //---- check for possible errors if (ExtCountedBars<0) return(-1); //---- last counted bar will be recounted if (ExtCountedBars>0) ExtCountedBars--; //---- lwma1(); lwma2(); return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Linear Weighted Moving Average for Bulls | //+------------------------------------------------------------------+ void lwma1() { double sum=0.0,lsum=0.0; double price; int i,weight=0,pos=Bars-ExtCountedBars-1; //---- initial accumulation if(pos=0) { Bulls[pos]=sum/weight; if(pos==0) break; pos--; i--; price=TempBulls[pos]; sum=sum-lsum+price*MA_Period; lsum-=TempBulls[i]; lsum+=price; } //---- zero initial bars if(ExtCountedBars<1) for(i=1;i=0) { Bears[pos]=sum/weight; if(pos==0) break; pos--; i--; price=TempBears[pos]; sum=sum-lsum+price*MA_Period; lsum-=TempBears[i]; lsum+=price; } //---- zero initial bars if(ExtCountedBars<1) for(i=1;i