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

Level Trading

level trading 123.mq5
Вы автор или правообладатель?

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

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

О программе

Данный файл является пользовательским индикатором для MetaTrader 5, написанным на языке MQL5. Он предназначен для отображения на графике ценовых уровней и линий тренда, построенных на основе анализа фракталов. Индикатор не выполняет торговых операций и не даёт рекомендаций, а лишь визуализирует рыночную структуру.

Входные параметры позволяют настраивать номер индикатора для одновременного использования нескольких копий, цвета линий тренда и уровней, а также пороги подтверждения уровней по ширине. Дополнительно можно включить автоматическую подстройку значений под текущий таймфрейм, задать количество баров по обе стороны от фрактала, ограничить глубину истории и управлять привязкой экстремумов к уровням.

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

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

НастройкаОписание
IndicatorNumber Номер индикатора — Уникальный номер индикатора, позволяющий запускать несколько копий на одном графике без конфликтов имён объектов.
TrendUpColor Цвет восходящего тренда — Цвет восходящих линий тренда, соединяющих нижние фракталы.
TrendDownColor Цвет нисходящего тренда — Цвет нисходящих линий тренда, соединяющих верхние фракталы.
LevelColor Цвет уровня — Цвет отображения горизонтальных ценовых уровней на графике.
Width2LevelConfirmation Порог подтверждения уровня шириной 2 — Пороговое значение ширины уровня, при котором уровень отображается линией толщиной 2.
Width3LevelConfirmation Порог подтверждения уровня шириной 3 — Пороговое значение ширины уровня, при котором уровень отображается линией толщиной 3.
Width4LevelConfirmation Порог подтверждения уровня шириной 4 — Пороговое значение ширины уровня, при котором уровень отображается линией толщиной 4.
Width5LevelConfirmation Порог подтверждения уровня шириной 5 — Пороговое значение ширины уровня, при котором уровень отображается линией толщиной 5.
SnapExtremumsToLevelOnChar Привязывать экстремумы к уровню — Если включено, экстремумы привязываются к ценовому уровню, что влияет на отображение линий тренда.
FractalBarsOnEachSide Баров по обе стороны фрактала — Количество баров слева и справа от бара, необходимое для подтверждения фрактала.
ProceedMaxHistoryBars Максимум обрабатываемых баров истории — Максимальное количество исторических баров, обрабатываемых индикатором для расчёта уровней и трендов.
LevelActuality Актуальность уровня — Максимальное количество баров, в течение которых уровень остаётся актуальным для объединения с другими уровнями.
RestDefaultTimeframeValues Использовать значения по умолчанию для таймфрейма — Если включено, значения параметров ExtremumToLevelMaxGap и PriceDeltaFor1Bar автоматически устанавливаются в соответствии с текущим таймфреймом.
ExtremumToLevelMaxGap Максимальный разрыв между экстремумом и уровнем — Максимальное расстояние в пунктах между экстремумом и уровнем, при котором они считаются совпадающими для объединения.
PriceDeltaFor1Bar Дельта цены на 1 бар — Величина изменения цены в пунктах, приходящаяся на один бар, используется для построения наклонных линий уровней.
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue

extern int     IndicatorNumber=1;
extern color   TrendUpColor=Blue;
extern color   TrendDownColor=Red;
extern color   LevelColor=DarkGray;
extern int     Width2LevelConfirmation=3;
extern int     Width3LevelConfirmation=5;
extern int     Width4LevelConfirmation=7;
extern int     Width5LevelConfirmation=10;
extern bool    SnapExtremumsToLevelOnChar=True;
extern int     FractalBarsOnEachSide=7;
extern int     ProceedMaxHistoryBars=2000;
extern int     LevelActuality=200;
extern bool    RestDefaultTimeframeValues=True;
extern int     ExtremumToLevelMaxGap=15;
extern double  PriceDeltaFor1Bar=0.4;

int LevelLength[];
int LevelWidth[];
int PriceCrossedLevel;
double Long[];
double Short[];

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

int deinit()
  {
   int i=0;

   for(i=Bars-1;i>=0;i--)
      if (ObjectFind(StringConcatenate("Level_",IndicatorNumber,"_",i))!=-1)
         ObjectDelete(StringConcatenate("Level_",IndicatorNumber,"_",i));
   for(i=Bars-1;i>=0;i--)
      if (ObjectFind(StringConcatenate("Trend_",IndicatorNumber,"_",i))!=-1)
         ObjectDelete(StringConcatenate("Trend_",IndicatorNumber,"_",i));
   return(0);
  }

int LastBarWasHighLow(int LELB, int LEHB)
  {
   if (LELB==-1 && LEHB!=-1)
      return(1);
   if (LELB!=-1 && LEHB==-1)
      return(-1);
   if (LELB!=-1 && LEHB!=-1 && LELB>LEHB)
      return(1);
   if (LELB!=-1 && LEHB!=-1 && LELB<LEHB)
      return(-1);
   return(0);
  }

int start()
  {
      // код доступен только после оплаты
   }
   int i,j;
   int BarsToCheck;
   int Stop;
   int CurrState; //CurrState=0 - не нашли пересечения, 1-пересечение вверх, -1-пересечение вниз
   int LastExtremumHighBar=-1;
   int LastExtremumLowBar=-1;
   int LastExtremumBar=-1;
   double iFractalValue=0,jFractalValue=0;

   if (IndicatorCounted()<0)
      return(-1);
   if (Bars-IndicatorCounted()==1)
      return(0);

   deinit();
   SetIndexStyle(0,DRAW_ARROW,0,3);
   SetIndexArrow(0,251);
   SetIndexStyle(1,DRAW_ARROW,0,3);
   SetIndexArrow(1,251);
   ArrayInitialize(Long,0);
   ArrayInitialize(Short,0);

   if (RestDefaultTimeframeValues==1)
     {
      switch(Period())
        {
         case 1: //M1
           {
            ExtremumToLevelMaxGap=2;
            PriceDeltaFor1Bar=0.05;
            break;
           }
         case 5: //M5
           {
            ExtremumToLevelMaxGap=5;
            PriceDeltaFor1Bar=0.1;
            break;
           }
         case 15: //M15
           {
            ExtremumToLevelMaxGap=8;
            PriceDeltaFor1Bar=0.2;
            break;
           }
         case 30: //M30
           {
            ExtremumToLevelMaxGap=10;
            PriceDeltaFor1Bar=0.3;
            break;
           }
         case 60: //H1
           {
            ExtremumToLevelMaxGap=15;
            PriceDeltaFor1Bar=0.4;
            break;
           }
         case 240: //H4
           {
            ExtremumToLevelMaxGap=25;
            PriceDeltaFor1Bar=0.4;
            break;
           }
         case 1440: //D1
           {
            ExtremumToLevelMaxGap=75;
            PriceDeltaFor1Bar=1.5;
            break;
           }
         case 10080: //W1
           {
            ExtremumToLevelMaxGap=150;
            PriceDeltaFor1Bar=5;
            break;
           }
         case 43200: //MN
           {
            ExtremumToLevelMaxGap=300;
            PriceDeltaFor1Bar=24;
            break;
           }
        }
     }
   if (Width2LevelConfirmation<=1)
      Width2LevelConfirmation=2;
   if (Width3LevelConfirmation<=Width2LevelConfirmation)
      Width3LevelConfirmation=Width2LevelConfirmation+1;
   if (Width4LevelConfirmation<=Width3LevelConfirmation)
      Width4LevelConfirmation=Width3LevelConfirmation+1;
   if (Width5LevelConfirmation<=Width4LevelConfirmation)
      Width5LevelConfirmation=Width4LevelConfirmation+1;

   PriceCrossedLevel=ExtremumToLevelMaxGap*2;
   ArrayResize(LevelLength,Bars);
   ArrayInitialize(LevelLength,0);
   ArrayResize(LevelWidth,Bars);
   ArrayInitialize(LevelWidth,1);

   if (FractalBarsOnEachSide<=0)
      FractalBarsOnEachSide=1;

   for(i=MathMin(ProceedMaxHistoryBars,Bars-FractalBarsOnEachSide-1);i>=FractalBarsOnEachSide;i--)
     {

      if (i==Lowest(Symbol(),Period(),MODE_LOW,FractalBarsOnEachSide*2+1,i-FractalBarsOnEachSide))
        {
         switch(LastBarWasHighLow(LastExtremumLowBar,LastExtremumHighBar))
           {
            case -1:
              {
               if (Low[i]<Low[LastExtremumLowBar])
                 {
                  Long[i]=Low[i];
                  Long[LastExtremumLowBar]=0;
                  LastExtremumLowBar=i;
                 }
               break;
              }
            case 1:
              {
               if (Low[i]<High[LastExtremumHighBar])
                 {
                  Long[i]=Low[i];
                  LastExtremumLowBar=i;
                 }
               break;
              }
            case 0:
              {
               Long[i]=Low[i];
               LastExtremumLowBar=i;
               break;
              }
           }
        }

      if (i==Highest(Symbol(),Period(),MODE_HIGH,FractalBarsOnEachSide*2+1,i-FractalBarsOnEachSide) && Long[i]==0)
        {
         switch(LastBarWasHighLow(LastExtremumLowBar,LastExtremumHighBar))
           {
            case 1:
              {
               if (High[i]>High[LastExtremumHighBar])
                 {
                  Short[i]=High[i];
                  Short[LastExtremumHighBar]=0;
                  LastExtremumHighBar=i;
                 }
               break;
              }
            case -1:
              {
               if (High[i]>Low[LastExtremumL

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

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

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

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

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

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

Стоимость полного кода
764,70₽ ≈ $9.35