← К каталогу
Исходный код · ID 1173

OrderBlocks

orderblocks (orgn)@amazing_owner.mq5
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Индикатор MetaTrader 4 для отображения зон Order Block на графике. Он определяет точки фракталов и рисует уровни верхней и нижней границы order block в виде трендовых линий, поддерживая отображение по телу свечи или по теням. Индикатор работает в текущем таймфрейме или на более высоких таймфреймах через мультитаймфреймовый вызов собственного файла.

Настройки программы

НастройкаОписание
TimeFrame Таймфрейм — Выбор таймфрейма для расчёта и отображения уровней Order Block, включая вариант текущего графика и более высокие таймфреймы.
Fractals period (FractalPeriod) Период фрактала — Количество баров, используемых для определения фрактальных точек, служащих базой для построения зон Order Block.
Line on OB Candle (OBLineDraw) Рисовать линии OB — Включает или отключает отрисовку трендовых линий уровней Order Block на свечах, удовлетворяющих условиям OB.
Line only on engulfing OB Candle (OBLineEngulfing) Линии только на поглощающих OB — При включении линии рисуются только на свечах Order Block, которые являются поглощающими (engulfing).
Engulfing type (OBLineEngulfingType) Тип поглощения — Определяет, какой частью свечи проверяется условие поглощающей свечи: по телу или по тени.
OB Line type (OBLineType) Тип линии OB — Задаёт, по какому элементу свечи строятся уровни Order Block: по телу или по тени.
AlertHeader Заголовок оповещений — Текстовый заголовок, добавляемый к сообщениям оповещений для удобной идентификации в логах и уведомлениях.
soundAlert Звуковое оповещение — Включает воспроизведение звукового сигнала при срабатывании условий оповещения.
popupAlert Всплывающее оповещение — Включает отображение всплывающего окна с сообщением при срабатывании условий оповещения.
pushAlert Push-оповещение — Включает отправку push-уведомления на мобильное устройство терминала MetaTrader.
emailAlert Email-оповещение — Включает отправку электронного письма с уведомлением при срабатывании условий оповещения.
VisualizationHeader Заголовок визуализации — Текстовый заголовок раздела настроек визуальных параметров индикатора.
OB Line length, bars (OBLineLength) Длина линии OB — Длина трендовых линий уровней Order Block в барах, определяющая горизонтальный размер отрисовки.
BULL OB Line color (OBLineColorBull) Цвет линии бычьего OB — Цвет трендовых линий для бычьих (восходящих) зон Order Block.
BEAR OB Line color (OBLineColorBear) Цвет линии медвежьего OB — Цвет трендовых линий для медвежьих (нисходящих) зон Order Block.
OB Line width (OBLineWidth) Толщина линии OB — Толщина линий уровней Order Block в пикселях.
OB Line style (OBLineStyle) Стиль линии OB — Стиль отрисовки линий уровней Order Block (сплошной, пунктир и т.д.).
Engulfing Highlight (EngulfingHighlight) Подсветка поглощения — Включает визуальную подсветку прямоугольником области поглощающей свечи внутри зоны Order Block.
Bull engulfing Highlight color (EngulfingHighlightColorBull) Цвет подсветки бычьего поглощения — Цвет прямоугольника подсветки для бычьих поглощающих свечей в зоне Order Block.
Bear engulfing Highlight color (EngulfingHighlightColorBear) Цвет подсветки медвежьего поглощения — Цвет прямоугольника подсветки для медвежьих поглощающих свечей в зоне Order Block.
Получить полный код

Поиск по коду файла

#property version   "1.03"
#property strict

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrAqua
#property indicator_color2 clrMagenta
#property indicator_width1 5
#property indicator_width2 5

const int MAX_LINES=25;
const string PREFIX="JBOB_";
const string NameUpper=PREFIX+"Upper_";
const string NameLower=PREFIX+"Lower_";
const string NameEngulfing=PREFIX+"Engulfing_";

enum ENG_TYPE
{
   engBody=0,//Candle's body
   engWick=1,//Candle's wick
};

enum enTimeFrames
{
   tf_cu  = PERIOD_CURRENT, // Current time frame
   tf_m1  = PERIOD_M1,      // 1 minute
   tf_m5  = PERIOD_M5,      // 5 minutes
   tf_m15 = PERIOD_M15,     // 15 minutes
   tf_m30 = PERIOD_M30,     // 30 minutes
   tf_h1  = PERIOD_H1,      // 1 hour
   tf_h4  = PERIOD_H4,      // 4 hours
   tf_d1  = PERIOD_D1,      // Daily
   tf_w1  = PERIOD_W1,      // Weekly
   tf_mn1 = PERIOD_MN1,     // Monthly
   tf_n1  = -1,             // First higher time frame
   tf_n2  = -2,             // Second higher time frame
   tf_n3  = -3              // Third higher time frame
};

extern enTimeFrames   TimeFrame                   = tf_cu;  
input int             FractalPeriod               = 36;  //Fractals period
input bool            OBLineDraw                  = true;//Line on OB Candle
input bool            OBLineEngulfing             = false;//Line only on engulfing OB Candle
input ENG_TYPE        OBLineEngulfingType         = engBody;//Engulfing type
input ENG_TYPE        OBLineType                  = engWick;//OB Line type
input string          AlertHeader                 = "=== Alerts ===";//-------
input bool            soundAlert                  = false;
input bool            popupAlert                  = false;
input bool            pushAlert                   = false;
input bool            emailAlert                  = false;
input string          VisualizationHeader         = "=== Visualization ===";//-------
input int             OBLineLength                = 15;//OB Line length, bars
input color           OBLineColorBull             = clrAqua;//BULL OB Line color
input color           OBLineColorBear             = clrMagenta;//BEAR OB Line color
input int             OBLineWidth                 = 1;//OB Line width
input ENUM_LINE_STYLE OBLineStyle                 = STYLE_DASH;//OB Line style
input bool            EngulfingHighlight          = false;//Engulfing Highlight
input color           EngulfingHighlightColorBull = clrSkyBlue;//Bull engulfing Highlight color
input color           EngulfingHighlightColorBear = clrTomato;//Bear engulfing Highlight color

double buffUp[],buffDown[],count[],m_level=0.0;
datetime m_level_updated=0;
int m_ind_upper=0,m_ind_lower=0;
string indicatorFileName,short_name="";
#define _mtfCall(_buff,_ind) iCustom(NULL,TimeFrame,indicatorFileName,0,FractalPeriod,OBLineDraw,OBLineEngulfing,OBLineEngulfingType,OBLineType,"",soundAlert,popupAlert,pushAlert,emailAlert,VisualizationHeader,OBLineLength,OBLineColorBull,OBLineColorBear,OBLineWidth,OBLineStyle,EngulfingHighlight,EngulfingHighlightColorBull,EngulfingHighlightColorBear,_buff,_ind)

int OnInit()
{
      // код доступен только после оплаты
   }

void OnDeinit(const int reason)
{
   DeleteObjectsByPrefix(PREFIX);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
      // код доступен только после оплаты
   }
   int limit=fmin(fmax(rates_total-prev_calculated,FractalPeriod),rates_total-2); count[0]=limit; 
   if (TimeFrame != _Period)
   {
      limit = (int)fmax(limit,fmin(Bars-1,_mtfCall(2,0)*TimeFrame/_Period));
      for (int i=limit;i>=0 && !_StopFlag; i--)
      {
          int y = iBarShift(NULL,TimeFrame,time[i]);
          int x = iBarShift(NULL,TimeFrame,time[i-1]); 
          if (x!=y)
          {
             buffUp[i]   = _mtfCall(0,y);
             buffDown[i] = _mtfCall(1,y);
          }
          else
          {
             buffUp[i]   = EMPTY_VALUE;
             buffDown[i] = EMPTY_VALUE; 
          } 
    }   
   return(rates_total);
   }

   if(rates_total<=FractalPeriod) return 0;

   limit=rates_total;
   if(prev_calculated>0)
   {
      limit=rates_total-prev_calculated+FractalPeriod+1;
   }
   ArraySetAsSeries(open,true);
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);
   ArraySetAsSeries(time,true);
   ArraySetAsSeries(buffUp,true);
   ArraySetAsSeries(buffDown,true);

   for(int i=limit-1;i>0;i--)
   {
      bool found_up=true;
      for(int j=i+1;((j<rates_total) && ((j-i)<=FractalPeriod));j++)
      {
         if(low[j]<low[i])
         {
            found_up=false;
            break;  
         }
      }
      if(found_up)
      {
         for(int j=i-1;(j>0 && ((i-j)<=FractalPeriod));j--)
         {
            if(low[j]<low[i])
            {
               found_up=false;
               break;  
            }
         }
      }
      if(found_up)
      {
         buffUp[i]=low[i];
         if(time[i]>m_level_updated && i!=0)
         {
            bool engulfing_ok=false;
            if(OBLineEngulfingType==engBody)
            {
               double L=close[i]<open[i] ? close[i] : open[i];
               double H=close[i]<open[i] ? open[i] : close[i];
               engulfing_ok=close[i-1]>open[i-1] && open[i-1]<=L && close[i-1]>H;
            }
            else if(OBLineEngulfingType==engWick)
            {
               engulfing_ok=low[i-1]<=low[i] && high[i-1]>high[i];
            }

            if(EngulfingHighlight && engulfing_ok)
            {
               DrawRectangle(0,NameEngulfing,time[i+1],MathMin(low[i],low[i-1]),time[i-1]+PeriodSeconds(),MathMax(high[i],high[i-1]),EngulfingHighlightColorBull,1,STYLE_SOLID);
            }

            if(!OBLineEngulfing) engulfing_ok=true;

            if(engulfing_ok)
            {
               m_level_updated=time[i];
               if(OBLineDraw)
               {
                  m_ind_lower++;
                  if(m_ind_lower>MAX_LINES) m_ind_lower=1;

                  if(OBLineType==engBody)
                  {
                     if(close[i]>open[i])
                     {
                        m_level=close[i];
                        if(close[1]>open[i])
                        {
                           DrawTL(0,NameUpper+IntegerToString(m_ind_lower)/*+TimeToString(time[i])*/,time[i],close[i],time[i]+PeriodSeconds()*OBLineLength,close[i],OBLineColorBull,OBLineWidth,OBLineStyle);
                           DrawTL(0,NameLower+IntegerToString(m_ind_lower)/*TimeToString(time[i])*/,time[i],open[i],time[i]+PeriodSeconds()*OBLineLength,open[i],OBLineColorBull,OBLineWidth,OBLineStyle);
                        }
                     }
                     else
                     {
                        m_level=open[i];
                        if(close[1]>close[i])
                        {
                           DrawTL(0,NameUpper+IntegerToString(m_ind_lower)/*TimeToString(time[i])*/,time[i],open[i],time[i]+PeriodSeconds()*OBLineLength,open[i],OBLineColorBull,OBLineWidth,OBLineStyle);
                           DrawTL(0,NameLower+IntegerToString(m_ind_lower)/*TimeToString(time[i])*/,time[i],close[i],time[i]+PeriodSeconds()*OBLineLength,close[i],OBLineColorBull,OBLineWidth,OBLineStyle);
                        }
                     }
                  }
                  else if(OBLineType==engWick)
                  {
                     m_level=high[i];
                     if(close[1]>low[i])
                     {
                        DrawTL(0,NameUpper+IntegerToString(m_ind_lower)/*+TimeToString(time[i])*/,time[i],high[i],time[i]+PeriodSeconds()*OBLineLength,high[i],OBLineColorBull,OBLineWidth,OBLineStyle);
                        DrawTL(0,NameLower+IntegerToString(m_ind_lower)/*+TimeToString(time[i])*/,time[i],low[i],time[i]+PeriodSeconds()*OBLineLength,low[i],OBLineColorBull,OBLineWidth,OBLineStyle);
                     }
                  }
               }
            }
         }
      }
      else 
      {
         buffUp[i]=EMPTY_VALUE;
         string nm=NameUpper+TimeToString(time[i]);
         if(ObjectFind(0,nm)>=0)
         {
            color col=(color)ObjectGetInteger(0,nm,OBJPROP_COLOR);
            if(col==OBLineColorBull) ObjectDelete(0,nm);
         }
         nm=NameLower+TimeToString(time[i]);
         if(ObjectFind(0,nm)>=0)
         {
            color col=(color)ObjectGetInteger(0,nm,OBJPROP_COLOR);
            if(col==OBLineColorBull) ObjectDelete(0,nm);
         }
      }

      bool found_down=true;
      for(int j=i+1;((j<rates_total) && ((j-i)<=FractalPeriod));j++)
      {
         if(high[j]>high[i])
         {
            found_down=false;
            break;  
         }
      }
      if(found_down)
      {
         for(int j=i-1;(j>0 && ((i-j)<=FractalPeriod));j--)
         {
            if(high[j]>high[i])
            {
               found_down=false;
               break;  
            }
         }
      }
      if(found_down)
      {
         buffDown[i]=high[i];
         if(time[i]>m_level_updated && i!=0)
         {
            bool engulfing_ok=false;
            if(OBLineEngulfingType==engBody)
            {
               double L=close[i]<open[i] ? close[i] : open[i];
               double H=close[i]<open[i] ? open[i] : close[i];
               engulfing_ok=close[i-1]<open[i-1] && open[i-1]>=H && close[i-1]<L;
            }
            else if(OBLineEngulfingType==engWick)
            {
               engulfing_ok=low[i-1]<low[i] && high[i-1]>=high[i];
            }
            if(EngulfingHighlight && engulfing_ok)
            {
               DrawRectangle(0,NameEngulfing,time[i+1],MathMin(low[i],low[i-1]),time[i-1]+PeriodSeconds(

Показано первые 50% кода (символов: 13934)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 393,40₽ ≈ $17.03