Пт. Апр 19th, 2024

Функция mql4 определения пин-бара.

int pinBar(int minSizeCandle, ENUM_TIMEFRAMES tf, double percent)
  {
   double size=0, body = 0;

   for(int i = 1; i <= livSignalCandle; i++)
     {
      size = iHigh(Symbol(),tf,i) - iLow(Symbol(),tf,i);

      if(size < minSizeCandle * _Point)
         continue;

      body = MathAbs(iOpen(Symbol(),tf,i) - iClose(Symbol(),tf,i));

      if(size <= 0 || body <= 0)
         continue;

      if(body/size*100 <= percent)
        {
         if(iClose(Symbol(),tf,i) > (iHigh(Symbol(),tf,i) + iLow(Symbol(),tf,i))/2)
           {
            return(i);
           }
         if(iClose(Symbol(),tf,i) < (iHigh(Symbol(),tf,i) + iLow(Symbol(),tf,i))/2)
           {
            return(0-i);
           }
        }
     }
   return(0);
  }

Параметры:

livSignalCandle — Во внешних переменных программы. Определяет, сколько свечей будет «жив» сигнал Пин-Бара.

  • minSizeCandle — Минимальный размер свечи;
  • tf — таймфрейм, на котором определяются пин-бары;
  • percent — Максимальный процент тела свечи по отношению к ее размеру.

Функция возвращает номер бара, а котором зафиксирован последний ПинБар. Если Значение отрицательное — медвежий пинбар, положительное — бычий.

Отрисовка пинбара стрелками на графике

Код в OnTick() для отрисовки пинбара на графике:

      if(pinArrowSize>0)
        {
         if(pin>0)
            SetArrow(241, clrGreen,"PinTrade_" +  iTime(Symbol(),pinBarTF,pin), iTime(Symbol(),pinBarTF,pin), iLow(Symbol(),pinBarTF,pin) - from, pinArrowSize);
         if(pin<0)
            SetArrow(242, clrGreen,"PinTrade_" + iTime(Symbol(),pinBarTF,MathAbs(pin)), iTime(Symbol(),pinBarTF,MathAbs(pin)), iHigh(Symbol(),pinBarTF,MathAbs(pin))+from*3*pinArrowSize, pinArrowSize);
        }

где pinArrowSize — внешний параметр размера стрелки.

Функция вставки любой стрелки на графике:

//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0)
  {
   if(nm=="")
      nm=DoubleToStr(Time[0], 0);
   if(t1<=0)
      t1=Time[0];
   if(p1<=0)
      p1=Bid;
   if(ObjectFind(nm)<0)
      ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
   ObjectSet(nm, OBJPROP_TIME1, t1);
   ObjectSet(nm, OBJPROP_PRICE1, p1);
   ObjectSet(nm, OBJPROP_ARROWCODE, cd);
   ObjectSet(nm, OBJPROP_COLOR, cl);
   ObjectSet(nm, OBJPROP_WIDTH, sz);
  }
Стрелки, указывающие на пинбар

Поделись с друзьями:

от drivermql

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.