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

m_tlb_oc_v02.mq5

Вы автор или правообладатель?

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

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

О программе

Индикатор для платформы MetaTrader 4, отображающий уровни поддержки и сопротивления на графике цены на основе логики Three Line Break. Работает с нескольких таймфреймов (M1, M5, M15, M30, H1, H4, D1, W1, MN1), применяя расчёт максимумов и минимумов закрытий свечей заданного старшего таймфрейма и отрисовывая горизонтальные линии на текущем графике.

Для каждого включённого таймфрейма индикатор вычисляет два набора уровней: основные (сплошные линии — синяя для поддержки, красная для сопротивления) и дополнительные (штрих-пунктирные линии). Обновление уровней происходит при смене бара на соответствующем старшем таймфрейме. Уровни удаляются, если расчётные значения обнуляются.

Визуализация реализуется через объекты OBJ_HLINE и OBJ_TEXT на графике. Индикатор не использует торговые функции и не содержит внутренних буферов индикатора — вся информация выводится в виде графических объектов.

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

НастройкаОписание
LB LB — Число линий разрыва (Line Break), используемое при расчёте уровней. Определяет чувствительность фильтрации ценовых движений.
maxBarsForPeriod maxBarsForPeriod — Максимальное количество баров для обработки на каждом таймфрейме. Если значение больше нуля и превышает доступное количество баров, используется это ограничение.
showM01 showM01 — Переключатель отображения уровней старшего таймфрейма M1 (1-минутный) на графике.
showM05 showM05 — Переключатель отображения уровней старшего таймфрейма M5 (5-минутный) на графике.
showM15 showM15 — Переключатель отображения уровней старшего таймфрейма M15 (15-минутный) на графике.
showM30 showM30 — Переключатель отображения уровней старшего таймфрейма M30 (30-минутный) на графике.
showH01 showH01 — Переключатель отображения уровней старшего таймфрейма H1 (часовой) на графике.
showH04 showH04 — Переключатель отображения уровней старшего таймфрейма H4 (4-часовой) на графике.
showD01 showD01 — Переключатель отображения уровней старшего таймфрейма D1 (дневной) на графике.
showW01 showW01 — Переключатель отображения уровней старшего таймфрейма W1 (недельный) на графике.
showMN1 showMN1 — Переключатель отображения уровней старшего таймфрейма MN1 (месячный) на графике.
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers 0

extern int LB=3;
extern int maxBarsForPeriod=1000;
extern bool showM01 = true;
extern bool showM05 = true;
extern bool showM15 = true;
extern bool showM30 = true;
extern bool showH01 = true;
extern bool showH04 = true;
extern bool showD01 = true;
extern bool showW01 = true;
extern bool showMN1 = true;

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

int deinit()
  {

   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M1)," Sup"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M1)," Res"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M1)," Sup C"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M1)," Res C"));

   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M5)," Sup"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M5)," Res"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M5)," Sup C"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M5)," Res C"));

   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M15)," Sup"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M15)," Res"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M15)," Sup C"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M15)," Res C"));

   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M30)," Sup"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M30)," Res"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M30)," Sup C"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M30)," Res C"));

   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H1)," Sup"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H1)," Res"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H1)," Sup C"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H1)," Res C"));

   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H4)," Sup"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H4)," Res"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H4)," Sup C"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H4)," Res C"));

   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_D1)," Sup"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_D1)," Res"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_D1)," Sup C"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_D1)," Res C"));

   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_W1)," Sup"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_W1)," Res"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_W1)," Sup C"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_W1)," Res C"));

   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_MN1)," Sup"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_MN1)," Res"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_MN1)," Sup C"));
   DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_MN1)," Res C"));

   return(0);
  }

double Diap(int mt4Period,bool up,int C,int shift)
  {
   int i;
   double MM=0;
   if(up)
     {
      MM=get_max(mt4Period,shift);
      for(i=1; i<C; i++)
         if(get_max(mt4Period,shift-i)>MM)
            MM=get_max(mt4Period,shift-i);
     }
   if(!up)
     {
      MM=get_min(mt4Period,shift);
      for(i=1; i<C; i++)
         if(get_min(mt4Period,shift-i)<MM)
            MM=get_min(mt4Period,shift-i);
     }
   return(MM);
  }

void EmulateDoubleBuffer(double &buffer[],int numBars)
  {

   if(ArraySize(buffer)<numBars)
     {
      ArraySetAsSeries(buffer,false);

      ArrayResize(buffer,numBars);

      ArraySetAsSeries(buffer,true);
     }
  }

void DeleteHLineObject(string name)
  {
   ObjectDelete(name);
   ObjectDelete(name+"_Label");
  }

void ShowHLineObject(string name,color clr,int style,double dValue,int shift)
  {
   if(ObjectFind(name)!=0)
     {
      CreateHLineObject(name,clr,style,dValue,shift);
     }

     {
      ObjectSet(name+"_Label",OBJPROP_PRICE1,dValue);
      ObjectSet(name+"_Label",OBJPROP_TIME1,Time[0]+Period()*shift);
      ObjectSet(name+"_Label",OBJPROP_STYLE,style);
     }

   ObjectSet(name,OBJPROP_PRICE1,dValue);
  }

void CreateHLineObject(string name,color clr,int style,double dValue,int shift)
  {

     {
      ObjectCreate(name+"_Label",OBJ_TEXT,0,Time[0]+Period()*shift,dValue);
      ObjectSetText(name+"_Label",name,7,"Verdana",clr);
     }

   ObjectCreate(name,OBJ_HLINE,0,Time[0],dValue);
   ObjectSet(name,OBJPROP_STYLE,style);
   ObjectSet(name,OBJPROP_COLOR,clr);
   ObjectSet(name,OBJPROP_WIDTH,1);
  }

string getPeriodAsString(int mt4Period)
  {
   string periodname;
   switch(mt4Period)
     {
      case PERIOD_M1:  { periodname = "M1"; break; }
      case PERIOD_M5:  { periodname = "M5"; break; }
      case PERIOD_M15: { periodname = "M15"; break; }
      case PERIOD_M30: { periodname = "M30"; break; }
      case PERIOD_H1:  { periodname = "H1"; break; }
      case PERIOD_H4:  { periodname = "H4"; break; }
      case PERIOD_D1:  { periodname = "D1"; break; }
      case PERIOD_W1:  { periodname = "W1"; break; }
      case PERIOD_MN1: { periodname = "MN1"; break; }
     }

   return(periodname);
  }

static datetime prevBarTime_M01 = NULL;
static datetime prevBarTime_M05 = NULL;
static datetime prevBarTime_M15 = NULL;
static datetime prevBarTime_M30 = NULL;
static datetime prevBarTime_H01 = NULL;
static datetime prevBarTime_H04 = NULL;
static datetime prevBarTime_D01 = NULL;
static datetime prevBarTime_W01 = NULL;
static datetime prevBarTime_MN1 = NULL;

void set_prevBarTime(int mt4Period,datetime value)
  {
   switch(mt4Period)
     {
      case PERIOD_M1:  { prevBarTime_M01 = value; break; }
      case PERIOD_M5:  { prevBarTime_M05 = value; break; }
      case PERIOD_M15: { prevBarTime_M15 = value; break; }
      case PERIOD_M30: { prevBarTime_M30 = value; break; }
      case PERIOD_H1:  { prevBarTime_H01 = value; break; }
      case PERIOD_H4:  { prevBarTime_H04 = value; break; }
      case PERIOD_D1:  { prevBarTime_D01 = value; break; }
      case PERIOD_W1:  { prevBarTime_W01 = value; break; }
      case PERIOD_MN1: { prevBarTime_MN1 = value; break; }
     }
  }

datetime get_prevBarTime(int mt4Period)
  {
   switch(mt4Period)
     {
      case PERIOD_M1:  { return(prevBarTime_M01); break; }
      case PERIOD_M5:  { return(prevBarTime_M05); break; }
      case PERIOD_M15: { return(prevBarTime_M15); break; }
      case PERIOD_M30: { return(prevBarTime_M30); break; }
      case PERIOD_H1:  { return(prevBarTime_H01); break; }
      case PERIOD_H4:  { return(prevBarTime_H04); break; }
      case PERIOD_D1:  { return(prevBarTime_D01); break; }
      case PERIOD_W1:  { return(prevBarTime_W01); break; }
      case PERIOD_MN1: { return(prevBarTime_MN1); break; }
     }
  }

static datetime prevBarCount_M01 = NULL;
static datetime prevBarCount_M05 = NULL;
static datetime prevBarCount_M15 = NULL;
static datetime prevBarCount_M30 = NULL;
static datetime prevBarCount_H01 = NULL;
static datetime prevBarCount_H04 = NULL;
static datetime prevBarCount_D01 = NULL;
static datetime prevBarCount_W01 = NULL;
static datetime prevBarCount_MN1 = NULL;

void set_prevBarCount(int mt4Period,int value)
  {
   switch(mt4Period)
     {
      case PERIOD_M1:  { prevBarCount_M01 = value; break; }
      case PERIOD_M5:  { prevBarCount_M05 = value; break; }
      case PERIOD_M15: { prevBarCount_M15 = value; break; }
      case PERIOD_M30: { prevBarCount_M30 = value; break; }
      case PERIOD_H1:  { prevBarCount_H01 = value; break; }
      case PERIOD_H4:  { prevBarCount_H04 = value; break; }
      case PERIOD_D1:  { prevBarCount_D01 = value; break; }
      case PERIOD_W1:  { prevBarCount_W01 = value; break; }
      case PERIOD_MN1: { prevBarCount_MN1 = value; break; }
     }
  }

int get_prevBarCount(int mt4Period)
  {
   switch(mt4Period)
     {
      case PERIOD_M1:  { return(prevBarCount_M01); break; }
      case PERIOD_M5:  { return(prevBarCount_M05); break; }
      case PERIOD_M15: { return(prevBarCount_M15); break; }
      case PERIOD_M30: { return(prevBarCount_M30); break; }
      case PERIOD_H1:  { return(prevBarCount_H01); break; }
      case PERIOD_H4:  { return(prevBarCount_H04); break; }
      case PERIOD_D1:  { return(prevBarCount_D01); break; }
      case PERIOD_W1:  { return(prevBarCount_W01); break; }
      case PERIOD_MN1: { return(prevBarCount_MN1); break; }
     }
  }

double TLBMax_M01[];
double TLBMax_M05[];
double TLBMax_M15[];
double TLBMax_M3

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

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

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

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

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

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

Стоимость полного кода
1 478,30₽ ≈ $18.07