//+------------------------------------------------------------------+ //| V-T&B.mq4 | //| Don Lawson (don_forex) | //+------------------------------------------------------------------+ #property copyright "Coded by Don Lawson (don_forex)" #property link "d_n_d_enterprises@sbcglobal.net" //---- #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_width1 2 #property indicator_color2 Green #property indicator_width2 2 //---- extern double WickRatio =0.5; extern double WickPercent =50; extern int JuicePeriod =7; extern int JuiceLevelForAlert=5; extern bool Notify=false; extern bool UseNew=true; //---- double VTop[]; double VBottom[]; double DistanceFromCandle; int Level=5; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_ARROW,EMPTY); SetIndexArrow(0,234); SetIndexBuffer(0,VTop); SetIndexStyle(1,DRAW_ARROW,EMPTY); SetIndexArrow(1,233); SetIndexBuffer(1,VBottom); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void SetVTop(int index) { double Juice,JuiceLevel; // Check for Juice JuiceLevel=Level*Point; if(Period()==5)JuiceLevel=JuiceLevel/2; Juice=iStdDev(NULL,0,JuicePeriod,MODE_EMA,0,PRICE_CLOSE,index)-JuiceLevel; if(Juice>JuiceLevelForAlert*Point) { VTop[index]=High[index]+DistanceFromCandle; if(Notify) PlaySound("V-Top.wav"); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void SetVBottom(int index) { double Juice,JuiceLevel; // Check for Juice JuiceLevel=Level*Point; if(Period()==5)JuiceLevel=JuiceLevel/2; Juice=iStdDev(NULL,0,JuicePeriod,MODE_EMA,0,PRICE_CLOSE,index)-JuiceLevel; if(Juice>JuiceLevelForAlert*Point) { VBottom[index]=Low[index]-DistanceFromCandle; if(Notify) PlaySound("V-Bottom.wav"); } } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int limit,i,State; double WickPenetration; double BullWickPenHi,BullWickPenLow; double BearWickPenHi,BearWickPenLow; double BullWickHi,BullWickLow,BullBody; double BearWickHi,BearWickLow,BearBody; int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; if(counted_bars==0) limit-=1+1; //---- WickPenetration=WickPercent/100.0; DistanceFromCandle=Point*8; for(i=1; i<=limit; i++) { bool CurrentBull=false, CurrentBear =false, Bull =false, Bear =false, HiWick =false, LoWick =false; if(Open[i-1]High[i+1]) { if(Bull) { if((BullWickHi>BullBody*WickRatio))// && (BullWickHi > BullWickLow) HiWick=true; } if(Bear) { if((BearWickHi>BearBody*WickRatio))// && (BearWickHi > BearWickLow) HiWick=true; } } // Check for VBottom if(Low[i]BullBody*WickRatio))// && (BullWickLow > BullWickHi) LoWick=true; } if(Bear) { if((BearWickLow>BearBody*WickRatio))// && (BearWickLow > BearWickHi) LoWick=true; } } // Set up State Table if(CurrentBear && Bull) State=1; if(CurrentBear && Bear) State=2; if(CurrentBull && Bull) State=3; if(CurrentBull && Bear) State=4; // Set Arrow if(HiWick) { BullWickPenHi=Close[i] + BullWickHi * WickPenetration; BearWickPenHi=Open[i] + BearWickHi * WickPenetration; switch(State) { case 1 : // CurrentBear && Bull if(UseNew) { if(Open[i-1]BullWickPenLow) SetVBottom(i); } else { SetVBottom(i); } break; case 2 : // CurrentBear && Bear if(UseNew) { if(Close[i-1]>BearWickPenLow) SetVBottom(i); } else { SetVBottom(i); } break; case 3 : // CurrentBull && Bull if(UseNew) { if(Open[i-1]>BullWickPenLow) SetVBottom(i); } else { SetVBottom(i); } break; case 4 : //CurrentBull && Bear) if(UseNew) { if(Open[i-1]>BearWickPenLow) SetVBottom(i); } else { SetVBottom(i); } break; } } } return(0); } //+------------------------------------------------------------------+