X_O_serg153_Test





//+------------------------------------------------------------------+
//|                                                X_O_serg153xo.mq4 |
//|                                        Copyright © 2005, Serg153 |
//|                                                               "" |
//|  ïåðåäåëêà 04_2008 ver1 Aleksandr Pak, Alma-Ata, 03.2008         |
//|                                            ekr-ap@mail.ru        |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Serg153" 
#property link      ""
//----
#property indicator_chart_window

#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Red

extern color ColorUp   = Aqua;      // Öâåò "êðåñòèêà"
extern color ColorDown = DarkGoldenrod;   // Öâåò "íîëèêà" 
//---- input parameters 
extern int RazmBox = 20;
extern int count_Alert=3; //÷èñëî ïîâòîðåíèé Àëåðò


//----
int i, p, Lt, Lt1, Tb; 
double RazmBoXO, Cnac; 
int VsegoBarov; 
double up[],down[];
int first=0,count_a=0;
double ftime;
string s;
//+------------------------------------------------------------------+ 
//| Custom indicator deinitialization function                       | 
//+------------------------------------------------------------------+ 
int init()
{
  
  SetIndexBuffer(0,up);          
  SetIndexStyle(0,DRAW_ARROW);
  SetIndexArrow(0,217);     
  SetIndexBuffer(1,down);          
  SetIndexStyle(1,DRAW_ARROW);   
  SetIndexArrow(1,218);
   int tf=Period();
   if(tf>30) s=Symbol()+" H"+tf/60; else s=Symbol()+" M"+tf;
  return (0);
}

int deinit() 
  { 
   for(i = 0; i <= Lt1; i++) 
     {
       ObjectDelete("BodyXO" + i);
       ObjectDelete("BodyX" + i);
     }
//----
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| Êðåñòèêè Íîëèêè                                                  | 
//+------------------------------------------------------------------+ 
int start() 
  { 
   if(ftime!=Time[0]) count_a=0;
   RazmBoXO = RazmBox*Point; 
   VsegoBarov = Bars - 1 ;  
   Lt = 0; 
   Cnac = Open[VsegoBarov]; 
   Tb = 0; 
   p = 0; 
// 1 ïðîãîí ïîäñ÷¸ò âñåõ áàðîâ
   for(i = VsegoBarov; i >= 1; i--)
     { 
       p = 0; 
       while(High[i] >= Cnac + RazmBoXO) 
         { 
           if(Tb == 0) 
               Lt++; 
           Cnac += RazmBoXO; 
           p++; 
           Tb = 1; 
         } 
       if(p > 0) 
           continue; 
       while(Low[i] <= Cnac - RazmBoXO) 
         { 
           if(Tb == 1) 
               Lt++; 
           Cnac -= RazmBoXO; Tb=0;  
         } 
     } 
   Lt = 10 + Lt*2;
// ñäâèãàåì âñå áàðû âïðàâî
// 2 ïðîãîí ðàçðèñîâêà ãðàôèêà
   Cnac = Open[VsegoBarov]; 
   Lt1 = 0;
   for(i = VsegoBarov; i >= 1; i--)
     { 
       p = 0; 
       while (High[i] >= Cnac + RazmBoXO) 
         { 
           if(Tb == 0) 
               Lt -= 2; 
           Lt1++; 
           
           ObjectCreate("BodyXO" + Lt1, OBJ_RECTANGLE, 0, 0, 0, 0, 0);
           ObjectSet("BodyXO" + Lt1, OBJPROP_TIME1, Time[Lt]);
           ObjectSet("BodyXO" + Lt1, OBJPROP_PRICE1, Cnac);
           ObjectSet("BodyXO" + Lt1, OBJPROP_TIME2, Time[Lt-2]);
           ObjectSet("BodyXO" + Lt1, OBJPROP_PRICE2, Cnac + RazmBoXO);
           ObjectSet("BodyXO" + Lt1, OBJPROP_STYLE, STYLE_SOLID);
           ObjectSet("BodyXO" + Lt1, OBJPROP_BACK, False);
           ObjectSet("BodyXO" + Lt1, OBJPROP_COLOR, ColorUp);
           ObjectCreate("BodyX" + Lt1, OBJ_RECTANGLE, 0, 0, 0, 0, 0);
           ObjectSet("BodyX" + Lt1, OBJPROP_TIME1, Time[Lt]);
           ObjectSet("BodyX" + Lt1, OBJPROP_PRICE1, Cnac);
           ObjectSet("BodyX" + Lt1, OBJPROP_TIME2, Time[Lt-2]);
           ObjectSet("BodyX" + Lt1, OBJPROP_PRICE2, Cnac + RazmBoXO);
           ObjectSet("BodyX" + Lt1, OBJPROP_STYLE, STYLE_SOLID);
           ObjectSet("BodyX" + Lt1, OBJPROP_BACK, False);
           ObjectSet("BodyX" + Lt1, OBJPROP_COLOR, Blue);
           Cnac += RazmBoXO; 
           Tb = 1; 
           p++; 
         } 
       if(p > 0) 
           continue; 
        
       while(Low[i] <= Cnac - RazmBoXO) 
         { 
           if(Tb == 1) 
               Lt -= 2; 
           Lt1++;
         
           ObjectCreate("BodyXO" + Lt1, OBJ_RECTANGLE, 0, 0, 0, 0, 0);
           ObjectSet("BodyXO" + Lt1, OBJPROP_TIME1, Time[Lt]);
           ObjectSet("BodyXO" + Lt1, OBJPROP_PRICE1, Cnac);
           ObjectSet("BodyXO" + Lt1, OBJPROP_TIME2, Time[Lt-2]);
           ObjectSet("BodyXO" + Lt1, OBJPROP_PRICE2, Cnac - RazmBoXO);
           ObjectSet("BodyXO" + Lt1, OBJPROP_STYLE, STYLE_SOLID);
           ObjectSet("BodyXO" + Lt1, OBJPROP_BACK, True);
           ObjectSet("BodyXO" + Lt1, OBJPROP_COLOR, ColorDown);
           ObjectCreate("BodyX" + Lt1, OBJ_RECTANGLE, 0, 0, 0, 0, 0);
           ObjectSet("BodyX" + Lt1, OBJPROP_TIME1, Time[Lt]);
           ObjectSet("BodyX" + Lt1, OBJPROP_PRICE1, Cnac);
           ObjectSet("BodyX" + Lt1, OBJPROP_TIME2, Time[Lt-2]);
           ObjectSet("BodyX" + Lt1, OBJPROP_PRICE2, Cnac - RazmBoXO);
           ObjectSet("BodyX" + Lt1, OBJPROP_STYLE, STYLE_SOLID);
           ObjectSet("BodyX" + Lt1, OBJPROP_BACK, False);
           ObjectSet("BodyX" + Lt1, OBJPROP_COLOR, Yellow);
           Cnac -= RazmBoXO; 
           Tb = 0; 
         } 
    }
   
   //*******************************Îïðåäåëåíèå òîðãîâûõ ñèãíàëîâ********************************************
        int Lbd=Lt1;  //last restanle
        double last=ObjectGet("BodyX" + Lbd, OBJPROP_TIME2);
        
        for(i=Lt1; i>0;i--)
        {if(last!=ObjectGet("BodyX" + i, OBJPROP_TIME2)) break;
        }
        int Lbd2=i+1;
        int Pbd=i;
        last=ObjectGet("BodyX" + Pbd, OBJPROP_TIME2);
        for(i=Pbd; i>0;i--)
        {if(last!=ObjectGet("BodyX" + i, OBJPROP_TIME2)) break;
        }
        int Pbd2=i+1;
        int z;   
        int ik2=iBarShift(NULL,0,ObjectGet("BodyX" + Lbd,OBJPROP_TIME2),FALSE);
        
        double price_L0=ObjectGet("BodyX" + Lbd, OBJPROP_PRICE2);
        double price_L1=ObjectGet("BodyX" + Lbd2, OBJPROP_PRICE1);
        double price_P0=ObjectGet("BodyX" + Pbd, OBJPROP_PRICE2);
        double price_P1=ObjectGet("BodyX" + Pbd2, OBJPROP_PRICE1);
        int cL,cP;
        if(price_L0>price_L1) cL=0; else cL=1;
        if(price_P0>price_P1) cP=0; else cP=1;
        
         if(cL==1&&cP==1){down[0]=High[0]+ 25*Point; c_alert(1);}
         if(cL==1&&cP==0&&price_L0<price_P1){down[0]=High[0]+ 25*Point;c_alert(1);}
         
         if(cL==0&&cP==0){up[0]=Low[0]- 25*Point; c_alert(0);}
         if(cL==0&&cP==1&&price_L0>price_P1){up[0]=Low[0]- 25*Point; c_alert(0);}
         
   return(0); 
  }
//+------------------------------------------------------------------+ 

 void c_alert(int w)
 {
 ftime=Time[0];
 if(count_a<count_Alert)
 {count_a+=1;
 if(w==0)  Alert(s,"    Õ-Î BUY"); else Alert( s,"    X-O SELL");
 }
 }



Sample





Analysis



Market Information Used:

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


Indicator Curves created:


Implements a curve of type DRAW_ARROW

Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features:

It issuies visual alerts to the screen