//+------------------------------------------------------------------+ //| | //| Copyright © 2000-2007, MetaQuotes Software Corp. | //| http://www.metaquotes.ru | //+------------------------------------------------------------------+ /* original formula) WH:=HHV(HIGH,5); WL:=LLV(LOW,5); //WRD:=(( HHV( WH,36 )-c ) /( HHV(WH,36 ) - LLV( WL,36) ) ) *- 100, //WDo:=WRD+50; //WU:=IF(WDo>0,WDo,0); //WD:=IF(WDo<0,WDo,0); //{- this will give you the william's when it is below zero and it is plotted red} //LN:=0; */ #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 LimeGreen #property indicator_color2 Red #property indicator_color3 Gray #property indicator_maximum 50 #property indicator_minimum -50 #property indicator_level1 0 #property indicator_level2 15 #property indicator_level3 -15 //---- input parameters //---- buffers double WU[],WD[],W[],Zero[]; int Ssw=0,Bsw=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; //---- 3 additional buffers are used for counting. IndicatorBuffers(4); SetIndexBuffer(3,W); //---- indicator lines SetIndexStyle(0,DRAW_HISTOGRAM,0,3); SetIndexBuffer(0,WU); SetIndexStyle(1,DRAW_HISTOGRAM,0,3); SetIndexBuffer(1,WD); SetIndexStyle(2,DRAW_LINE,0,2); SetIndexBuffer(2,Zero); //---- name for DataWindow and indicator subwindow label short_name="William%R36 With Alert"; IndicatorShortName(short_name); //---- indicator lines //---- SetIndexDrawBegin(0,40); //---- return(0); } //+------------------------------------------------------------------+ //| BSPVolume //+------------------------------------------------------------------+ int start() { int i,counted_bars=IndicatorCounted(); if(Bars<=40) return(0); //---- initial zero /* if(counted_bars<1) { for(i=1;i<=CCIPeriod;i++) CCIBuffer[Bars-i]=0.0; for(i=1;i<=CCIPeriod;i++) DevBuffer[Bars-i]=0.0; for(i=1;i<=CCIPeriod;i++) MovBuffer[Bars-i]=0.0; } */ //---- last counted bar will be recounted if(counted_bars < 0) return(-1); if(counted_bars>0) counted_bars--; int limit=Bars-counted_bars; if(counted_bars==0) limit--; if(counted_bars>0) limit++; else if(limit>300) limit=300; //---- for(i=0; i0 && i<2) { Ssw=1; Bsw=0; } if(W[i]>0 && W[i+1]<0 && i<2) { Ssw=0; Bsw=1; } if(Bsw==1 && i<2 && W[i]>=15) { Ssw=0; Bsw=0; Alert(Symbol()," ",Period()," Willy Says B U Y"); } if(Ssw==1 && i<2 && W[i]<=-15) { Ssw=0; Bsw=0; Alert(Symbol()," ",Period()," Willy Says S E L L"); } if(Ssw==1) Comment ("SELL SWITCH ON","i ",i,"W[i] ",W[i],"W[i+1] ",W[i+1]); if(Bsw==1) Comment ("BUY SWITCH ON","i ",i,"W[i] ",W[i],"W[i+1] ",W[i+1]); if(Bsw==0 && Ssw==0) Comment ("NO SWITCH ON","i ",i,"W[i] ",W[i],"W[i+1] ",W[i+1]); if(W[i]>0) {WU[i]=W[i];WD[i]=0;} //---- else if(W[i]<0) {WU[i]=0;WD[i]=W[i];} else {WU[i]=0;WD[i]=0;} } return(0); } //+------------------------------------------------------------------+