ExCandles





//+------------------------------------------------------------------+
//|                                                    ExCandles.mq4 |
//|                           Copyright © 2006, Alex Sidd (Executer) |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Alex Sidd (Executer)"
#property link      "mailto:work_st@mail.ru"
//----
#property indicator_chart_window
#property indicator_buffers 1
#property  indicator_color1  Black
//---- input parameters
int ExPeriod = 10;
//---- buffers
double CCodeBuffer[];
//+------------------------------------------------------------------+
//| initialization function                                          |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
   IndicatorBuffers(1);
   SetIndexStyle(0, DRAW_NONE);
   SetIndexBuffer(0, CCodeBuffer);
   SetIndexDrawBegin(0, ExPeriod);
   short_name = "ExCandles";
   IndicatorShortName(short_name);
   SetIndexLabel(0, short_name);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| deinitialization function                                        |
//+------------------------------------------------------------------+
int deinit()
  {
   ObjectsDeleteAll(0, OBJ_ARROW); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsViselnik(int i1, int i2)
  {
   if((Open[i1] - Close[i1] > 0) && 
      ((High[i1] - Open[i1])*100 / (Open[i1] - Close[i1] + 0.0000001) < 15) && 
      ((Close[i1] - Low[i1])*100 / (Open[i1] - Close[i1] + 0.0000001) > 200) && 
      (Open[i2] - Close[i2] < 0)) 
       return(true);
   else 
       return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsHummer(int i1, int i2)
  {
   if((Open[i1] - Close[i1] < 0) &&
      ((High[i1] - Close[i1])*100 / (Close[i1] - Open[i1] + 0.0000001) > 200) && 
      ((Open[i1] - Low[i1])*100 / (Close[i1] - Open[i1] + 0.0000001) < 15) && 
      (Open[i2] - Close[i2] > 0)) 
       return(true);
   else 
       return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsBear(int i1, int i2, int i3)
  {
   if((Open[i2] - Close[i2] > 0) &&
      (Open[i2] >= Close[i3]) && 
      (Close[i2] <= Open[i3]) && 
      (Open[i3] - Close[i3] < 0) && 
      ((Open[i2] - Close[i2]) / (Close[i3] - Open[i3] + 0.0000001) > 1.5)) 
       return(true);
   else 
       return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsBull(int i1, int i2, int i3)
  {
   if((Open[i2] - Close[i2] < 0) && 
      (Open[i3] - Close[i3] > 0) && 
      (Close[i2] >= Open[i3]) && 
      (Open[i2] <= Close[i3]) && 
      ((Close[i2] - Open[i2]) / (Open[i3] - Close[i3] + 0.0000001) > 1.5)) 
       return(true);
   else 
       return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool Zavesa_black(int i1, int i2)
  {
   if((Open[i1] - Close[i1] > 0) &&
      (Open[i2] - Close[i2] < 0) && 
      ((Close[i2] - Open[i2]) / (High[i2] - Low[i2]) > 0.6) && 
      (Open[i1] > High[i2]) && 
      (Close[i1] < (Open[i2] + (Close[i2] - Open[i2])/2))) 
       return(true);
   else 
       return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool Prosvet(int i1, int i2, int i3)
  {
   if((Open[i1] - Close[i1] < 0) &&
      (Open[i2] - Close[i2] > 0) && 
      ((Open[i2] - Close[i2]) / (High[i2] - Low[i2]) > 0.6) && 
      (Open[i1] < Low[i2]) && 
      (Close[i1] > (Close[i2] + (Open[i2] - Close[i2]) / 2))) 
       return(true);
   else 
       return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool morning_star(int i1, int i2, int i3)
  {
   if((Open[i3] - Close[i3] > 0) && 
      (Close[i2] - Open[i2] > 0) && 
      (Close[i1] - Open[i1] > 0) && 
      (Close[i2] < Close[i3]) && 
      (Open[i1] > Close[i2]) && 
      (((MathAbs(Open[i3] - Close[i1]) + MathAbs(Open[i1] - Close[i3])) / 
      (Open[i3] - Close[i3] + 0.0000001)) < 0.1) && 
      ((Open[i3] - Close[i3]) / (High[i3] - Low[i3]) > 0.8) && 
      ((Close[i2] - Open[i2]) / (High[i2] - Low[i2]) < 0.3) && 
      (Close[i1] - Open[i1]) / (High[i1] - Low[i1]) > 0.8) 
       return(true);
   else 
       return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool evening_star(int i1, int i2, int i3)
  {
   if((Open[i3] - Close[i3] < 0) && 
      (Close[i2] - Open[i2] < 0) && 
      (Close[i1] - Open[i1] < 0) && 
      (Close[i2] > Close[i3]) && 
      (Open[i1] < Close[i2]) && 
      (((MathAbs(Open[i3] - Close[i1]) + MathAbs(Open[i1] - Close[i3])) / 
      (Close[i3] - Open[i3] + 0.0000001)) < 0.1) && 
      ((Close[i3] - Open[i3]) / (High[i3] - Low[i3]) > 0.8) && 
      ((Open[i2] - Close[i2]) / (High[i2] - Low[i2]) < 0.3) && 
      ((Open[i1] - Close[i1]) / (High[i1] - Low[i1]) > 0.8)) 
       return(true);
   else 
       return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsEveningDodgiStar(int i1, int i2, int i3)
  {
   if((Open[i3] - Close[i3] < 0) && 
      (Close[i2] - Open[i2] == 0) && 
      (Close[i1] - Open[i1] < 0) && 
      (Close[i2] >= Close[i3]) && 
      (Open[i1] <= Close[i2]) && 
      (((MathAbs(Open[i3] - Close[i1]) + MathAbs(Open[i1] - Close[i3])) / 
      (Open[i3] - Close[i3] + 0.0000001)) < 0.1)) 
       return(true);
   else 
       return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsMorningDodgiStar(int i1, int i2, int i3)
  {
   if((Open[i3] - Close[i3] > 0) && 
      (Close[i2] - Open[i2] == 0) && 
      (Close[i1] - Open[i1] > 0) && 
      (Close[i2] <= Close[i3]) && 
      (Open[i1] >= Close[i2]) && 
      (((MathAbs(Open[i3] - Close[i1]) + MathAbs(Open[i1] - Close[i3])) / 
      (Open[i3] - Close[i3] + 0.0000001)) < 0.1)) 
       return(true);
   else 
       return(false);
  }
//+------------------------------------------------------------------+
//| Executer Candles Indicator                                       |
//+------------------------------------------------------------------+
int start()
  {
   int    i, counted_bars = IndicatorCounted();
   double negative = 0, positive = 0;
//----
   if(Bars <= ExPeriod) 
       return(0);
   if(counted_bars < 1)
       for(i = 1; i <= ExPeriod; i++) 
           CCodeBuffer[Bars-i] = 0.0;
//----
   i = Bars - ExPeriod - 1;
   if(counted_bars >= ExPeriod) 
       i = Bars - counted_bars - 1;
   while(i >= 0)
     {
       if(IsViselnik(i, i + 1) == true)
         {
           ObjectCreate("Âèñåëüíèê" + i, OBJ_ARROW, 0, Time[i], High[i] + 20*Point);
           ObjectSet("Âèñåëüíèê" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWDOWN);
           ObjectSet("Âèñåëüíèê" + i, OBJPROP_COLOR, Red);
           CCodeBuffer[i] = 1;
         }
       if(IsHummer(i, i + 1) == true)
         {
           ObjectCreate("Ìîëîò" + i, OBJ_ARROW, 0, Time[i], Low[i] - 20*Point);
           ObjectSet("Ìîëîò" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWUP);
           ObjectSet("Ìîëîò" + i, OBJPROP_COLOR, Blue);
           CCodeBuffer[i] = 2;
         }
       if(IsBear(i - 1, i, i + 1) == true)
         {
           ObjectCreate("Ìåäâåæüå ïîãëîùåíèå" + i, OBJ_ARROW, 0, Time[i], High[i] + 20*Point);
           ObjectSet("Ìåäâåæüå ïîãëîùåíèå" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWDOWN);
           ObjectSet("Ìåäâåæüå ïîãëîùåíèå" + i, OBJPROP_COLOR, Red);
           CCodeBuffer[i] = 3;
         }
       if(IsBull(i - 1, i, i + 1) == true)
         {
           ObjectCreate("Áû÷üå ïîãëîùåíèå" + i, OBJ_ARROW, 0, Time[i], Low[i] - 20*Point);
           ObjectSet("Áû÷üå ïîãëîùåíèå" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWUP);
           ObjectSet("Áû÷üå ïîãëîùåíèå" + i, OBJPROP_COLOR, Blue);
           CCodeBuffer[i] = 4;
         }
       if(Zavesa_black(i, i + 1) == true)
         {
           ObjectCreate("Çàâåñà èç òåìíûõ îáëàêîâ" + i, OBJ_ARROW, 0, Time[i], 
                        High[i] + 20*Point);
           ObjectSet("Çàâåñà èç òåìíûõ îáëàêîâ" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWDOWN);
           ObjectSet("Çàâåñà èç òåìíûõ îáëàêîâ" + i, OBJPROP_COLOR, Red);
           CCodeBuffer[i] = 5;
         }
       if(Prosvet(i - 1, i, i + 1) == true)
         {
           ObjectCreate("Ïðîñâåò â îáëàêàõ" + i, OBJ_ARROW, 0, Time[i], Low[i] - 20*Point);
           ObjectSet("Ïðîñâåò â îáëàêàõ" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWUP);
           ObjectSet("Ïðîñâåò â îáëàêàõ" + i, OBJPROP_COLOR, Blue);
           CCodeBuffer[i] = 6;
         }
       if(evening_star(i - 1, i, i + 1) == true)
         {
           ObjectCreate("Âå÷åðíÿÿ çâåçäà" + i, OBJ_ARROW, 0, Time[i], High[i] + 20*Point);
           ObjectSet("Âå÷åðíÿÿ çâåçäà" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWDOWN);
           ObjectSet("Âå÷åðíÿÿ çâåçäà" + i, OBJPROP_COLOR, Red);
           CCodeBuffer[i] = 7;
         }
       if(morning_star(i - 1, i, i + 1) == true)
         {
           ObjectCreate("Óòðåííÿÿ çâåçäà" + i, OBJ_ARROW, 0, Time[i], Low[i] - 20*Point);
           ObjectSet("Óòðåííÿÿ çâåçäà" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWUP);
           ObjectSet("Óòðåííÿÿ çâåçäà" + i, OBJPROP_COLOR, Blue);
           CCodeBuffer[i] = 8;
         }
       if(IsEveningDodgiStar(i - 1, i, i + 1) == true)
         {
           ObjectCreate("Âå÷åðíÿÿ äîäæè çâåçäà" + i, OBJ_ARROW, 0, Time[i], High[i] + 20*Point);
           ObjectSet("Âå÷åðíÿÿ äîäæè çâåçäà" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWDOWN);
           ObjectSet("Âå÷åðíÿÿ äîäæè çâåçäà" + i, OBJPROP_COLOR, Red);
           CCodeBuffer[i] = 9;
         }
       if(IsMorningDodgiStar(i - 1, i, i + 1) == true)
         {
           ObjectCreate("Óòðåííÿÿ äîäæè çâåçäà" + i, OBJ_ARROW, 0, Time[i], Low[i] - 20*Point);
           ObjectSet("Óòðåííÿÿ äîäæè çâåçäà" + i, OBJPROP_ARROWCODE, SYMBOL_ARROWUP);
           ObjectSet("Óòðåííÿÿ äîäæè çâåçäà" + i, OBJPROP_COLOR, Blue);
           CCodeBuffer[i] = 10;
         }
       i--;
      }
//----
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains close prices for 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
Series array that contains open time of each bar


Indicator Curves created:

Implements a curve of type DRAW_NONE


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: