VM_Price_Action_1.2





//+------------------------------------------------------------------+
//|                                            VM_Price_action v 1.2 |
//|                               Copyright © 2007, Victor Maranhão. |
//|                                              vmaranhao@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, Victor Maranhão."
#property link      "vmaranhao@gmail.com"

/*============================================================
==============================================================

HISTORY

v. 1.2 

- TBL, TBH stars not showing fixed

v. 1.1

- OB changed to Bearish Outside Vertical Bar (BeOVB) and
                Bullish Outside Vertical Bar (BuOVB)

- Market Structure High / Low included

==============================================================
============================================================*/

#property indicator_chart_window
#property indicator_buffers 6

#define cIX_BF_DBHLC   0
#define cIX_BF_PINUPDN 1
#define cIX_BF_IBIBS4  2
#define cIX_BF_BOVB    3
#define cIX_BF_MSHL    4
#define cIX_BF_TBHTBL  5

#define cINDICNUM 12

#define cIX_IB     0
#define cIX_IBS4   1
#define cIX_MSL    2
#define cIX_MSH    3
#define cIX_TBH    4
#define cIX_TBL    5
#define cIX_DBHLC  6
#define cIX_DBLHC  7
#define cIX_PINUP  8
#define cIX_PINDN  9
#define cIX_BuOVB 10
#define cIX_BeOVB 11

extern bool  pDBHLC_Show        =        TRUE;
extern int   pDBHLC_Max_Delta   =           0;  // pip
extern color pDBHLC_Color       =      Yellow;
extern int   pDBHLC_Width       =           2; 

extern bool  pDBLHC_Show        =        TRUE;
extern int   pDBLHC_Max_Delta   =           0;  // pip

extern bool  pPINUP_Show        =        TRUE;
extern int   pPINUP_Min_Delta   =           5;  // pip
extern int   pPINUP_Top_Precent =          10;  // percent
extern color pPINUP_Color       =        Gold;
extern int   pPINUP_Width       =           2; 

extern bool  pPINDN_Show        =        TRUE;
extern int   pPINDN_Min_Delta   =           5;  // pip
extern int   pPINDN_Top_Precent =          10;  // percent

extern bool  pIBS4_Show         =        TRUE;
extern int   pIBS4_Min_Delta    =           0;  // pip
extern color pIBS4_Color        =   OrangeRed;
extern int   pIBS4_Width        =           2; 

extern bool  pIB_Show           =        TRUE;
extern int   pIB_Min_Delta      =           0;  // pip

extern bool  pBuOVB_Show        =        TRUE;
extern int   pBuOVB_Min_Delta   =           0;  // pip
extern color pBuOVB_Color       = NavajoWhite;
extern int   pBuOVB_Width       =           2; 

extern bool  pBeOVB_Show        =        TRUE;
extern int   pBeOVB_Min_Delta   =           0;  // pip

extern bool  pMSH_Show          =        TRUE;
extern color pMSH_Color         =  Aquamarine;
extern int   pMSH_Width         =           2; 

extern bool  pMSL_Show          =        TRUE;

extern bool  pTBH_Show          =        TRUE;
extern int   pTBH_Max_Delta     =           0;  // pip
extern color pTBH_Color         =     Magenta;
extern int   pTBH_Width         =           2; 

extern bool  pTBL_Show          =        TRUE;
extern int   pTBL_Max_Delta     =           0;  // pip

extern bool  pStats_Show        =        TRUE;
extern int   pStats_Pos         =          13;

double buffBOVB   [];
double buffMSHL   [];
double buffDBHLC  [];
double buffIBIBS4 [];
double buffTBHTBL [];
double buffPINUPDN[];

static string lblName [cINDICNUM];
static bool   lblShow [cINDICNUM]; 
static string lblText [cINDICNUM];
static color  lblColor[cINDICNUM];
static int    lblCount[cINDICNUM];
static string alrtText[cINDICNUM];

static double gDistArrow =    0;
static bool   gFirstTime = TRUE;
static int    gTimeFrame =    0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int init()

  {

   string title = "Price Action 1";

   gFirstTime = TRUE;
      
   gDistArrow = Point * (0 + MathSqrt(Period()));
   
   IndicatorBuffers(6);
   
   IndicatorShortName(title);

   SetIndexBuffer    (cIX_BF_BOVB   , buffBOVB   );
   SetIndexBuffer    (cIX_BF_MSHL   , buffMSHL   );
   SetIndexBuffer    (cIX_BF_DBHLC  , buffDBHLC  );
   SetIndexBuffer    (cIX_BF_IBIBS4 , buffIBIBS4 );
   SetIndexBuffer    (cIX_BF_TBHTBL , buffTBHTBL );
   SetIndexBuffer    (cIX_BF_PINUPDN, buffPINUPDN);
 
   SetIndexStyle     (cIX_BF_BOVB   , DRAW_ARROW, EMPTY, pBuOVB_Width, pBuOVB_Color);
   SetIndexStyle     (cIX_BF_MSHL   , DRAW_ARROW, EMPTY, pMSH_Width  , pMSH_Color  );
   SetIndexStyle     (cIX_BF_DBHLC  , DRAW_ARROW, EMPTY, pDBHLC_Width, pDBHLC_Color);
   SetIndexStyle     (cIX_BF_IBIBS4 , DRAW_ARROW, EMPTY, pIBS4_Width , pIBS4_Color );
   SetIndexStyle     (cIX_BF_TBHTBL , DRAW_ARROW, EMPTY, pTBH_Width  , pTBH_Color  );
   SetIndexStyle     (cIX_BF_PINUPDN, DRAW_ARROW, EMPTY, pPINUP_Width, pPINUP_Color);

   SetIndexArrow     (cIX_BF_BOVB   , 171);
   SetIndexArrow     (cIX_BF_MSHL   , 171);
   SetIndexArrow     (cIX_BF_DBHLC  , 171);
   SetIndexArrow     (cIX_BF_IBIBS4 , 171);
   SetIndexArrow     (cIX_BF_TBHTBL , 171);
   SetIndexArrow     (cIX_BF_PINUPDN, 171);
 
   SetIndexLabel     (cIX_BF_BOVB   , "Bullish/Bearish Outside V Bar");
   SetIndexLabel     (cIX_BF_MSHL   , "Market Structure High / Low");
   SetIndexLabel     (cIX_BF_DBHLC  , "DBHLC / DBLHC"                );
   SetIndexLabel     (cIX_BF_IBIBS4 , "Inside Bar / IB Smallest of 4");
   SetIndexLabel     (cIX_BF_TBHTBL , "Two Bars High / Low"          );
   SetIndexLabel     (cIX_BF_PINUPDN, "PIN Up / Down"                );
 
   SetIndexDrawBegin (cIX_BF_BOVB   , 0);
   SetIndexDrawBegin (cIX_BF_MSHL   , 0);
   SetIndexDrawBegin (cIX_BF_DBHLC  , 0);
   SetIndexDrawBegin (cIX_BF_IBIBS4 , 0);
   SetIndexDrawBegin (cIX_BF_TBHTBL , 0);
   SetIndexDrawBegin (cIX_BF_PINUPDN, 0);
   
   Set_Label_Objects_Alerts();

   return(0);

  }

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int deinit()

  {

   for (int ix = 0; ix < cINDICNUM; ix++)
     if (ObjectFind(lblName[ix]) != -1)
       ObjectDelete(lblName[ix]);

   return(0);
      
  }
  
//+------------------------------------------------------------------+
//| Start
//+------------------------------------------------------------------+

int start()
  {
  
          int      limit;
          int      found;
          int      countedBars = IndicatorCounted();
   static datetime prevTime    = 0;
   static double   deltaIB     = 0;
   static double   deltaTBH    = 0;
   static double   deltaTBL    = 0;
   static double   deltaIBS4   = 0;
   static double   deltaDBHLC  = 0;
   static double   deltaDBLHC  = 0;
   static double   deltaPINUP  = 0;
   static double   deltaPINDN  = 0;
   static double   deltaBuOVB  = 0;
   static double   deltaBeOVB  = 0;
   
   if (countedBars < 0) return(-1);
   if (countedBars > 0) countedBars--;
   if (Period() != gTimeFrame) 
     {
      gFirstTime = TRUE;
      prevTime = 0;
     }
     
   if (prevTime == Time[0]) return (0);
   
   prevTime = Time[0];
           
   if (countedBars > 0) countedBars--; 

   if (gFirstTime) 
     {
      Define_Min_PIN (deltaPINUP, deltaPINDN);
      deltaIB    = pIB_Min_Delta    * Point;
      deltaTBH   = pTBH_Max_Delta   * Point;
      deltaTBL   = pTBL_Max_Delta   * Point;
      deltaIBS4  = pIBS4_Min_Delta  * Point;
      deltaDBHLC = pDBHLC_Max_Delta * Point;
      deltaDBLHC = pDBLHC_Max_Delta * Point;
      deltaBuOVB = pBuOVB_Min_Delta * Point;
      deltaBeOVB = pBeOVB_Min_Delta * Point;
     }

   limit = Bars - countedBars;
   
   for (int ix1 = 1; ix1 <= limit; ix1++)
     {
      found = -1;
      if (                  pDBHLC_Show ) found = Find_DBHLC (ix1, deltaDBHLC);
      if ((found == -1) && (pDBLHC_Show)) found = Find_DBLHC (ix1, deltaDBLHC);
      if ((found == -1) && (pPINUP_Show)) found = Find_PINUp (ix1, deltaPINUP);
      if ((found == -1) && (pPINDN_Show)) found = Find_PINDn (ix1, deltaPINDN);
      if ((found == -1) && (pMSH_Show  )) found = Find_MSH   (ix1            );
      if ((found == -1) && (pMSL_Show  )) found = Find_MSL   (ix1            );
      if ((found == -1) && (pIBS4_Show )) found = Find_IBS4  (ix1, deltaIBS4 );
      if ((found == -1) && (pIB_Show   )) found = Find_IB    (ix1, deltaIB   );
      if ((found == -1) && (pBuOVB_Show)) found = Find_BuOVB (ix1, deltaBuOVB);
      if ((found == -1) && (pBeOVB_Show)) found = Find_BeOVB (ix1, deltaBeOVB);
      if ((found == -1) && (pTBH_Show  )) found = Find_TBH   (ix1, deltaTBH  );
      if ((found == -1) && (pTBL_Show  )) found = Find_TBL   (ix1, deltaTBL  );
      if  (found != -1)                   lblCount[found]++;
      if  (gFirstTime )                   continue;
      if ((found != -1) && (ix1 < 2    )) 
        Alert(Symbol()," (",Period(),") - ", alrtText[found]);
     }

   Set_Labels();
     
   gFirstTime = FALSE;

   gTimeFrame = Period();
   
   return(0);

  }

//+------------------------------------------------------------------+
//+  Find Double Bar High, Lower Close (DBHLC)
//+------------------------------------------------------------------+

int Find_DBHLC(int ix1, double delta)

  {

   double dif;
   
   dif = MathAbs(iHigh (NULL,0,ix1) - iHigh(NULL,0,ix1+1));
   
   if (dif > delta) return (-1);

   if (iClose(NULL,0,ix1) >= iLow(NULL,0,ix1+1)) return (-1);
   
   buffDBHLC[ix1] = iHigh(NULL,0,ix1) + gDistArrow;

   return (cIX_DBHLC);
   
  }

//+------------------------------------------------------------------+
//+  Find Double Bar Low, Higher Close (DBLHC)
//+------------------------------------------------------------------+

int Find_DBLHC(int ix1, double delta)

  {

   double dif;
   
   dif = MathAbs(iLow (NULL,0,ix1) - iLow(NULL,0,ix1+1));

   if (dif > delta) return (-1);

   if (iClose(NULL,0,ix1) <= iHigh(NULL,0,ix1+1)) return (-1);

   buffDBHLC[ix1] = iLow(NULL,0,ix1) - gDistArrow;

   return (cIX_DBLHC);
   
  }

//+------------------------------------------------------------------+
//+  Find PIN Up (PinUp)
//+------------------------------------------------------------------+

int Find_PINUp (int ix1, double delta)

  {

   if (iOpen (NULL,0,ix1) > iHigh(NULL,0,ix1+1)        ) return (-1);
   if (iOpen (NULL,0,ix1) < iLow (NULL,0,ix1+1)        ) return (-1);
   if (iClose(NULL,0,ix1) > iHigh(NULL,0,ix1+1)        ) return (-1);
   if (iClose(NULL,0,ix1) < iLow (NULL,0,ix1+1)        ) return (-1);
   if (iLow  (NULL,0,ix1) < iLow (NULL,0,ix1+1)        ) return (-1);
   if (iHigh (NULL,0,ix1) < iHigh(NULL,0,ix1+1) + delta) return (-1);
   
   buffPINUPDN[ix1] = iHigh(NULL,0,ix1) + gDistArrow;
   
   return (cIX_PINUP);
   
  }

//+------------------------------------------------------------------+
//+  Find PIN Up (PinDn)
//+------------------------------------------------------------------+

int Find_PINDn(int ix1, double delta)

  {

   if (iOpen (NULL,0,ix1) > iHigh(NULL,0,ix1+1)        ) return (-1);
   if (iOpen (NULL,0,ix1) < iLow (NULL,0,ix1+1)        ) return (-1);
   if (iClose(NULL,0,ix1) > iHigh(NULL,0,ix1+1)        ) return (-1);
   if (iClose(NULL,0,ix1) < iLow (NULL,0,ix1+1)        ) return (-1);
   if (iHigh (NULL,0,ix1) > iHigh(NULL,0,ix1+1)        ) return (-1);
   if (iLow  (NULL,0,ix1) > iLow (NULL,0,ix1+1) - delta) return (-1);
   
   buffPINUPDN[ix1] = iLow(NULL,0,ix1) - gDistArrow;
   
   return (cIX_PINDN);
   
  }

//+------------------------------------------------------------------+
//+  Find Inside Bar, Smallest of 4 (IBS4)
//+------------------------------------------------------------------+
  
int Find_IBS4(int ix1, double delta)
  
  {
   
   double range = iHigh(NULL,0,ix1) - iLow(NULL,0,ix1) + delta;
   
   if (range > iHigh(NULL,0,ix1+3) - iLow(NULL,0,ix1+3)) return (-1);
    
   if (range > iHigh(NULL,0,ix1+2) - iLow(NULL,0,ix1+2)) return (-1);

   if (range > iHigh(NULL,0,ix1+1) - iLow(NULL,0,ix1+1)) return (-1);

   if (iHigh(NULL,0,ix1) > iHigh(NULL,0,ix1+1)) return (-1);

   if (iLow (NULL,0,ix1) < iLow (NULL,0,ix1+1)) return (-1);
   
   buffIBIBS4[ix1] = iHigh(NULL,0,ix1) + gDistArrow;
   
   return (cIX_IBS4);
   
  }
  
//+------------------------------------------------------------------+
//+  Find Inside Bar (IB)
//+------------------------------------------------------------------+
  
int Find_IB(int ix1, double delta)
  
  {
   
   if (iHigh(NULL,0,ix1) + delta >= iHigh(NULL,0,ix1+1)) return (-1);
   
   if (iLow (NULL,0,ix1) - delta <= iLow (NULL,0,ix1+1)) return (-1);
    
   buffIBIBS4[ix1] = iLow(NULL,0,ix1) - gDistArrow;
   
   return (cIX_IB);
   
  }
  
//+------------------------------------------------------------------+
//+  Find Bullish Outside Vertical Bar (BuOVB)
//+------------------------------------------------------------------+
  
int Find_BuOVB (int ix1, double delta)
  
  {
   
   if (iHigh (NULL,0,ix1) <= iHigh (NULL,0,ix1+1) + delta) return (-1);

   if (iLow  (NULL,0,ix1) >= iLow  (NULL,0,ix1+1) - delta) return (-1);

   if (iClose(NULL,0,ix1) <= iClose(NULL,0,ix1+1)        ) return (-1);
   
   buffBOVB[ix1] = iHigh(NULL,0,ix1) + gDistArrow;
   
   return (cIX_BuOVB);
   
  }
  
//+------------------------------------------------------------------+
//+  Find Bearish Outside Vertical Bar (BeOVB)
//+------------------------------------------------------------------+
  
int Find_BeOVB (int ix1, double delta)
  
  {
   
   if (iHigh (NULL,0,ix1) <= iHigh (NULL,0,ix1+1) + delta) return (-1);

   if (iLow  (NULL,0,ix1) >= iLow  (NULL,0,ix1+1) - delta) return (-1);

   if (iClose(NULL,0,ix1) >= iClose(NULL,0,ix1+1)        ) return (-1);
       
   buffBOVB[ix1] = iLow(NULL,0,ix1) - gDistArrow;
   
   return (cIX_BeOVB);
   
  }
  
//+------------------------------------------------------------------+
//+  Find Market Structure High (MSH)
//+------------------------------------------------------------------+
  
int Find_MSH (int ix1)
  
  {
   
   if (iClose (NULL,0,ix1+2) <= iOpen  (NULL,0,ix1+2)) return (-1);
   if (iClose (NULL,0,ix1+1) <= iOpen  (NULL,0,ix1+1)) return (-1);
   if (iClose (NULL,0,ix1  ) >= iOpen  (NULL,0,ix1  )) return (-1);
   
   if (iHigh  (NULL,0,ix1+2) >= iHigh  (NULL,0,ix1+1)) return (-1);
   if (iLow   (NULL,0,ix1+2) >= iLow   (NULL,0,ix1+1)) return (-1);

   if (iHigh  (NULL,0,ix1+1) <= iHigh  (NULL,0,ix1  )) return (-1);

   buffMSHL[ix1] = iHigh(NULL,0,ix1) + gDistArrow;
   
   return (cIX_MSH);
   
  }
  
//+------------------------------------------------------------------+
//+  Find Market Structure High (MSL)
//+------------------------------------------------------------------+
  
int Find_MSL (int ix1)
  
  {
   
   if (iClose (NULL,0,ix1+2) >= iOpen  (NULL,0,ix1+2)) return (-1);
   if (iClose (NULL,0,ix1+1) >= iOpen  (NULL,0,ix1+1)) return (-1);
   if (iClose (NULL,0,ix1  ) <= iOpen  (NULL,0,ix1  )) return (-1);
   
   if (iHigh  (NULL,0,ix1+2) <= iHigh  (NULL,0,ix1+1)) return (-1);
   if (iLow   (NULL,0,ix1+2) <= iLow   (NULL,0,ix1+1)) return (-1);

   if (iLow   (NULL,0,ix1+1) >= iLow   (NULL,0,ix1  )) return (-1);

   buffMSHL[ix1] = iLow(NULL,0,ix1) - gDistArrow;
   
   return (cIX_MSL);
   
  }
  
//+------------------------------------------------------------------+
//+  Find Two Bars High (TBH)
//+------------------------------------------------------------------+
  
int Find_TBH(int ix1, double delta)
  
  {
   
   double dif;
   
   dif = MathAbs(iHigh(NULL,0,ix1) - iHigh(NULL,0,ix1+1));

   if (dif > delta) return (-1);
    
   buffTBHTBL[ix1] = iHigh(NULL,0,ix1) + gDistArrow;
   
   return (cIX_TBH);
   
  }
  
//+------------------------------------------------------------------+
//+  Find Two Bars Low (TBH)
//+------------------------------------------------------------------+
  
int Find_TBL(int ix1, double delta)
  
  {
   
   double dif;
   
   dif = MathAbs(iLow(NULL,0,ix1) - iLow(NULL,0,ix1+1));

   if (dif > delta) return (-1);
    
   buffTBHTBL[ix1] = iLow(NULL,0,ix1) - gDistArrow;
   
   return (cIX_TBL);
   
  }
  
//+------------------------------------------------------------------+
//+  Define Minimum PIN Up and Down
//+------------------------------------------------------------------+
  
void Define_Min_PIN(double& resultUp, double& resultDn)
  
  {
   int    contUp[500];
   int    contDn[500];
   int    contaUp;
   int    contaDn;
   int    totalUp;
   int    totalDn;
   double deltaUp = pPINUP_Min_Delta * Point;
   double deltaDn = pPINDN_Min_Delta * Point;
   int    fator = MathPow(10,Digits);
   int    contIx;
   int    limit;
   int    countedBars = IndicatorCounted();
    
   ArrayInitialize(contUp,0);
   
   limit = Bars - countedBars;
   
   for (int ix1 = 0; ix1 < limit; ix1++)
     { 
      if (iOpen (NULL,0,ix1) > iHigh(NULL,0,ix1+1)) continue;
      if (iOpen (NULL,0,ix1) < iLow (NULL,0,ix1+1)) continue;
      if (iClose(NULL,0,ix1) > iHigh(NULL,0,ix1+1)) continue;
      if (iClose(NULL,0,ix1) < iLow (NULL,0,ix1+1)) continue;
      
      if ((iLow  (NULL,0,ix1) >= iLow (NULL,0,ix1+1)) &&
          (iHigh (NULL,0,ix1) >= iHigh(NULL,0,ix1+1) + deltaUp))
        {
         contIx = (iHigh(NULL,0,ix1)-iHigh(NULL,0,ix1+1)) * fator;
         contUp[contIx]++;
         totalUp++;
         continue;
        }
       
      if ((iHigh(NULL,0,ix1) <= iHigh(NULL,0,ix1+1)) &&
          (iLow (NULL,0,ix1) <= iLow (NULL,0,ix1+1) - deltaDn))
        {
         contIx = (iLow(NULL,0,ix1+1)-iLow(NULL,0,ix1)) * fator;
         contDn[contIx]++;
         totalDn++;
        }
     } 

   totalUp = (totalUp / 100) * pPINUP_Top_Precent;
   totalDn = (totalDn / 100) * pPINDN_Top_Precent;
   
   for (int ix2 = ArrayRange(contUp,0); ix2 >= 0; ix2--)
     {
      contaUp = contaUp + contUp[ix2];
      if (contaUp >= totalUp)
        {
         resultUp = ix2 * Point;
         break;
        }
      }
   
   for (int ix3 = ArrayRange(contDn,0); ix3 >= 0; ix3--)
     {
      contaDn = contaDn + contDn[ix3];
      if (contaDn >= totalDn)
        {
         resultDn = ix3 * Point;
         break;
        }
      }

  }

//+------------------------------------------------------------------+
//+  Set Labels
//+------------------------------------------------------------------+

void Set_Labels ()

  {
   
   string txt;
   
   for (int ix = 0; ix < cINDICNUM; ix++)
     if (lblShow[ix])
       {
        txt = lblText[ix] + lblCount[ix] + ")";
        ObjectSetText(lblName[ix],txt,9,"Verdana",lblColor[ix]);
       }
    
  }
  
//+------------------------------------------------------------------+
//+  Set Label Objects and Alert Texts
//+------------------------------------------------------------------+

void Set_Label_Objects_Alerts()

  {
  
   int ix;
   int dst = pStats_Pos;
   
   for (ix = 0; ix < cINDICNUM; ix++)
     lblName[ix] = "VMPA" + ix;

   for (ix = 0; ix < cINDICNUM; ix++)
     if (ObjectFind(lblName[ix]) != -1)
       ObjectDelete(lblName[ix]);

   if (!pStats_Show) return;
   
   lblShow[cIX_IB   ] =    pIB_Show;
   lblShow[cIX_MSL  ] =   pMSL_Show;
   lblShow[cIX_MSH  ] =   pMSH_Show;
   lblShow[cIX_TBH  ] =   pTBH_Show;
   lblShow[cIX_TBL  ] =   pTBL_Show;
   lblShow[cIX_IBS4 ] =  pIBS4_Show;
   lblShow[cIX_BuOVB] = pBuOVB_Show;
   lblShow[cIX_BeOVB] = pBeOVB_Show;
   lblShow[cIX_DBHLC] = pDBHLC_Show;
   lblShow[cIX_DBLHC] = pDBLHC_Show;
   lblShow[cIX_PINUP] = pPINUP_Show;
   lblShow[cIX_PINDN] = pPINDN_Show;

   lblColor[cIX_IB   ] =  pIBS4_Color;
   lblColor[cIX_MSL  ] =   pMSH_Color;
   lblColor[cIX_MSH  ] =   pMSH_Color;
   lblColor[cIX_TBH  ] =   pTBH_Color;
   lblColor[cIX_TBL  ] =   pTBH_Color;
   lblColor[cIX_IBS4 ] =  pIBS4_Color;
   lblColor[cIX_BuOVB] = pBuOVB_Color;
   lblColor[cIX_BeOVB] = pBuOVB_Color;
   lblColor[cIX_DBHLC] = pDBHLC_Color;
   lblColor[cIX_DBLHC] = pDBHLC_Color;
   lblColor[cIX_PINUP] = pPINUP_Color;
   lblColor[cIX_PINDN] = pPINUP_Color;

   lblText[cIX_IB   ] =     "IB (";
   lblText[cIX_MSL  ] =    "MSL (";
   lblText[cIX_MSH  ] =    "MSH (";
   lblText[cIX_TBH  ] =    "TBH (";
   lblText[cIX_TBL  ] =    "TBL (";
   lblText[cIX_IBS4 ] =   "IBS4 (";
   lblText[cIX_BuOVB] =  "BuOVB (";
   lblText[cIX_BeOVB] =  "BeOVB (";
   lblText[cIX_DBHLC] =  "DBHLC (";
   lblText[cIX_DBLHC] =  "DBLHC (";
   lblText[cIX_PINUP] = "Pin Up (";
   lblText[cIX_PINDN] = "Pin Dn (";

   alrtText[cIX_IB   ] = " Inside Bar.";
   alrtText[cIX_MSL  ] = " Market Structure Low.";
   alrtText[cIX_MSH  ] = " Market Structure High.";
   alrtText[cIX_TBH  ] = " Two Bar High.";
   alrtText[cIX_TBL  ] = " Two Bar low.";
   alrtText[cIX_IBS4 ] = " Inside Bar Smallest of 4.";
   alrtText[cIX_BuOVB] = " Bullish Outside Vertical Bar.";
   alrtText[cIX_BeOVB] = " Bearish Outside Vertical Bar.";
   alrtText[cIX_DBHLC] = " Double Bars High Lower Close.";
   alrtText[cIX_DBLHC] = " Double Bars Low Higher Close.";
   alrtText[cIX_PINUP] = " Pin Up.";
   alrtText[cIX_PINDN] = " Pin Dn.";

   for (ix = 0; ix < cINDICNUM; ix++)
     if (lblShow[ix])
       {
        dst = dst + 13;
        ObjectCreate (lblName[ix],OBJ_LABEL        ,  0,0,0);
        ObjectSet    (lblName[ix],OBJPROP_CORNER   ,  0);
        ObjectSet    (lblName[ix],OBJPROP_XDISTANCE, 10);
        ObjectSet    (lblName[ix],OBJPROP_YDISTANCE, dst);
        ObjectSetText(lblName[ix],lblText[ix],9,"Verdana",lblColor[ix]);
       }
    
   }



Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features:

It issuies visual alerts to the screen