VSAc WSD HISTOGRAM

Author: Copyright � 2008, FOREXflash Software Corp.
Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each barSeries array that contains open prices of each barSeries array that contains close prices for each bar
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
1 Views
0 Downloads
0 Favorites
VSAc WSD HISTOGRAM
//+------------------------------------------------------------------+
//|                                  VSA© WICK/SPREAD/DIVERGENCE.mq4 |
//|                                    Copyright © 2008, FOREXflash. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, FOREXflash Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 8
#property indicator_color1 White
#property indicator_color2 Lime
#property indicator_color3 Red
#property indicator_color4 Black
#property indicator_color5 Gray
#property indicator_color6 Gray
#property indicator_color7 Red
#property indicator_color8 Lime



#property indicator_width1  2
#property indicator_width2  3
#property indicator_width3  3
#property indicator_width4  1
#property indicator_width5  1
#property indicator_width6  0.2
#property indicator_width7  0.2
#property indicator_width8  0.2


extern bool    ShowText=true;
extern int     Corner=1;
extern int     MA_Length= 100; 
extern color   Trending=C'35,35,35';
extern color   Ranging= Black ;

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer1a[];
double ExtMapBuffer2a[];
double Volumes[];
double AvgVolumes[];
double white1[];
double green1[];
double red1[];


int PipFactor = 1;
string WindowName;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{

//---- indicators
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexLabel(0,"Spread(High-Low)");

SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexBuffer(1,ExtMapBuffer1a);
SetIndexLabel(1,"UpperWick");

SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexBuffer(2,ExtMapBuffer2a);
SetIndexLabel(2,"LowerWick");
   //
   SetIndexBuffer(3,Volumes);
   SetIndexStyle(3,DRAW_NONE);
   // MA of Volume
   SetIndexBuffer(4,AvgVolumes);     
   SetIndexStyle(4,DRAW_LINE,STYLE_DOT);
   SetIndexLabel(4,"AverageSpread");
   
      SetIndexBuffer(5,white1);
      SetIndexStyle(5,DRAW_ARROW,STYLE_SOLID);
      SetIndexArrow(5,117);
      SetIndexLabel(5,"DivergenceNone");
      SetIndexBuffer(6,green1);
      SetIndexStyle(6,DRAW_ARROW,STYLE_SOLID);
      SetIndexArrow(6,117);
      SetIndexLabel(6,"DivergenceTrending");
      SetIndexBuffer(7,red1);
      SetIndexStyle(7,DRAW_ARROW,STYLE_SOLID);
      SetIndexArrow(7,117);
      SetIndexLabel(7,"DivergenceBearish");
   


string short_name = "VSA© WICK/SPREAD/DIVERGENCE";     
IndicatorShortName(short_name);
WindowName = short_name;

ObjectDelete("Spread(High-Low)");
IndicatorDigits(1);
//----
return(1);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
   for(int i = ObjectsTotal() - 1; i >= 0; i--) {
      string Label = ObjectName(i);
      if(StringSubstr(Label, 0, 8) != "RSXTrend")
         continue;
     ObjectDelete(Label);   
   }
//----
ObjectsDeleteAll(0,OBJ_LABEL);
//----
return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

int start()
{

   if (ShowText==True)
   {

   draw_objects();
   }

AVGVolume();
Div();

double tempv;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if (counted_bars<0) return(-1);
//---- last counted bar will be recounted
if (counted_bars>0) counted_bars--;
int pos=Bars-counted_bars;

//---- main calculation loop
double Result;
double dResult1;
double dResult2;

while(pos>=0)
{
Result = iHigh(NULL, 0, pos) - iLow(NULL, 0, pos); 
ExtMapBuffer1[pos]= (Result/Point)/PipFactor ;


if (iOpen(NULL, 0, pos) > iClose(NULL, 0, pos)){
   dResult1 = iHigh(NULL, 0, pos) - iOpen(NULL, 0, pos);
   }
if (iOpen(NULL, 0, pos) <= iClose(NULL, 0, pos)){
   dResult1 = iHigh(NULL, 0, pos) - iClose(NULL, 0, pos);
   }
if (iOpen(NULL, 0, pos) > iClose(NULL, 0, pos)){
   dResult2 = iLow(NULL, 0, pos) - iClose(NULL, 0, pos);
   }
if (iOpen(NULL, 0, pos) <= iClose(NULL, 0, pos)){
   dResult2 = iLow(NULL, 0, pos) - iOpen(NULL, 0, pos);
   }
   ExtMapBuffer1a[pos]= (dResult1/Point)/PipFactor ;
   ExtMapBuffer2a[pos]= (dResult2/Point)/PipFactor ;

pos--;
}

//----
return(0);
}
//+------------------------------------------------------------------+
//| avgVolumes                                                       |
//+------------------------------------------------------------------+
int AVGVolume()
{  
   int Window=WindowFind("VSA© WICK/SPREAD/DIVERGENCE");
   int    i,nLimit,nCountedBars;
//---- bars count that does not changed after last indicator launch.
   nCountedBars=IndicatorCounted();
//---- last counted bar will be recounted
   if(nCountedBars>0) nCountedBars--;
   nLimit=Bars-nCountedBars;
//----


   for(i=0; i<nLimit; i++) Volumes[i] =  ((iHigh(NULL, 0, i) - iLow(NULL, 0, i))/Point)/PipFactor;
   
   for(i=0; i<nLimit; i++)
   {
   AvgVolumes[i] = iMAOnArray(Volumes,0,MA_Length,0,MODE_EMA,i);
          
   } 
   
   
   
   string Label;
   int cnt=0;   
   for(i=nLimit-1;i>0;i--) 
   {
      if(Volumes[i]>AvgVolumes[i]) { // If its a cross point
         cnt++; // calculate the number of crosses.
         Label="RSXTrend" + cnt;
         if(ObjectFind(Label)==-1)
            ObjectCreate(Label,OBJ_RECTANGLE,Window,0,0);
         ObjectSet(Label,OBJPROP_COLOR,Ranging);
         ObjectSet(Label,OBJPROP_PRICE1,100000);
         ObjectSet(Label,OBJPROP_PRICE2,-100000);
         ObjectSet(Label,OBJPROP_TIME1,Time[i]);
         ObjectSet(Label,OBJPROP_TIME2,Time[i-1]);
    }
    else 
    {
         if(Volumes[i]<AvgVolumes[i]) { // If its a cross point
            cnt++; // calculate the number of crosses.
            Label="RSXTrend" + cnt;
            if(ObjectFind(Label)==-1)
               ObjectCreate(Label,OBJ_RECTANGLE,Window,0,0);
            ObjectSet(Label,OBJPROP_COLOR,Trending);
            ObjectSet(Label,OBJPROP_PRICE1,100000);
            ObjectSet(Label,OBJPROP_PRICE2,-100000);
            ObjectSet(Label,OBJPROP_TIME1,Time[i]);
            ObjectSet(Label,OBJPROP_TIME2,Time[i-1]);
     }
     else 
            
            ObjectSet(Label,OBJPROP_TIME2,Time[i-1]); // drag the current shadow
     }
   }       
//---- done
   return(0);
}
//+------------------------------------------------------------------+

void Div()
{
   int i;
//----
   for(i=0; i<500; i++)
     { 
                                                                                                           {white1[i] = ExtMapBuffer1[i];}
if (Close[i] > Open[i+1] && Volume[i]<Volume[i+1] )    {green1[i] = ExtMapBuffer1[i];}
if (Close[i] < Open[i+1] && Volume[i]<Volume[i+1] )    {red1[i]   = ExtMapBuffer1[i];}
}
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| VOID DRAW OBJECTS                                                |
//+------------------------------------------------------------------+

void draw_objects()
{
//+--------------
   ObjectCreate("Box", OBJ_LABEL, WindowFind(WindowName), 0, 0);
   ObjectSetText("Box","V  S  A  ®",14, "Trebuchet MS", Orange);
   ObjectSet("Box", OBJPROP_CORNER, Corner);
   ObjectSet("Box", OBJPROP_XDISTANCE, 15);
   ObjectSet("Box", OBJPROP_YDISTANCE, 1);
   
   ObjectCreate("Box1", OBJ_LABEL, WindowFind(WindowName), 0, 0);
   ObjectSetText("Box1","Spread/Wick/Candle",8, "Trebuchet MS", Gray);
   ObjectSet("Box1", OBJPROP_CORNER, Corner);
   ObjectSet("Box1", OBJPROP_XDISTANCE, 15);
   ObjectSet("Box1", OBJPROP_YDISTANCE, 18);
//+--------------  


   string SPREAD=DoubleToStr(ExtMapBuffer1[0],1);
   ObjectCreate("Spread(High-Low)", OBJ_LABEL, WindowFind(WindowName), 0, 0);
   ObjectSetText("Spread(High-Low)","Spread(H-L):"+SPREAD,13, "Trebuchet MS", White);
   ObjectSet("Spread(High-Low)", OBJPROP_CORNER, Corner);
   ObjectSet("Spread(High-Low)", OBJPROP_XDISTANCE, 15);
   ObjectSet("Spread(High-Low)", OBJPROP_YDISTANCE, 34);
   
   ObjectCreate("BA_Spread(High-Low)", OBJ_LABEL, WindowFind(WindowName), 0, 0);
   ObjectSetText("BA_Spread(High-Low)","SPREAD IS BELOW AVERAGE.",8, "Trebuchet MS", White);
   ObjectSet("BA_Spread(High-Low)", OBJPROP_CORNER, Corner);
   ObjectSet("BA_Spread(High-Low)", OBJPROP_XDISTANCE, 15);
   ObjectSet("BA_Spread(High-Low)", OBJPROP_YDISTANCE, 54);
   
if (ExtMapBuffer1[0]>AvgVolumes[0])

{ 
ObjectSetText("BA_Spread(High-Low)","SPREAD IS ABOVE AVERAGE!!!", 8,"Trebuchet MS",Red);                                                          
}
//+--------------   
   
   string UPWICK=DoubleToStr(ExtMapBuffer1a[0],1);
   ObjectCreate("UpWick", OBJ_LABEL, WindowFind(WindowName), 0, 0);
   ObjectSetText("UpWick","WICK: "+UPWICK,9, "Trebuchet MS", Lime);
   ObjectSet("UpWick", OBJPROP_CORNER, Corner);
   ObjectSet("UpWick", OBJPROP_XDISTANCE, 85);
   ObjectSet("UpWick", OBJPROP_YDISTANCE, 70);
   
//+--------------      
   
   string DNWICK=DoubleToStr(ExtMapBuffer2a[0],1);
   ObjectCreate("DnWick", OBJ_LABEL, WindowFind(WindowName), 0, 0);
   ObjectSetText("DnWick","WICK:"+DNWICK,9, "Trebuchet MS", Red);
   ObjectSet("DnWick", OBJPROP_CORNER, Corner);
   ObjectSet("DnWick", OBJPROP_XDISTANCE, 15);
   ObjectSet("DnWick", OBJPROP_YDISTANCE, 70);
   
   ObjectCreate("Div", OBJ_LABEL, WindowFind(WindowName), 0, 0);
   ObjectSetText("Div","Divergance:None",13, "Trebuchet MS", White);
   ObjectSet("Div", OBJPROP_CORNER, Corner);
   ObjectSet("Div", OBJPROP_XDISTANCE, 15);
   ObjectSet("Div", OBJPROP_YDISTANCE, 85);
   
   if (Close[1] > Open[2] && Volume[1]<Volume[2] )    
   {   ObjectSetText("Div","Divergance:Bearish" ,13, "Trebuchet MS", Red);}
   if (Close[1] < Open[2] && Volume[1]<Volume[2] )    
   {   ObjectSetText("Div","Divergance:Bullish",13, "Trebuchet MS", Lime);}
}

//+------------------------------------------------------------------+

Comments