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

VOLUME SWINGS & SR LEVELS

volume swings & sr levels@amazing_owner.mq5
Вы автор или правообладатель?

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

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

О программе

Индикатор для MetaTrader 4, отображающий на графике линии тренда, уровни поддержки и сопротивления, а также информацию об объёме. Использует фрактальный анализ для определения экстремумов цены и строит на их основе горизонтальные уровни и наклонные трендовые линии. На графике выводятся стрелки направления движения, текстовые метки с рассчитанным объёмом и уровни с настраиваемым визуальным оформлением.

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

НастройкаОписание
TrendUpColor Цвет бычьего тренда — Задаёт цвет линий тренда, отображающих восходящее движение цены.
TrendDownColor Цвет медвежьего тренда — Задаёт цвет линий тренда, отображающих нисходящее движение цены.
SnapExtremumsToLevelOnChar Привязка экстремумов к уровню — Определяет, следует ли корректировать положение ранее найденных экстремумов при перерисовке уровней.
FractalBarsOnEachSide Баров с каждой стороны фрактала — Количество баров с каждой стороны от проверяемой свечи для определения фрактального экстремума.
ProceedMaxHistoryBars Максимум баров истории — Ограничивает количество обрабатываемых баров исторических данных при расчёте.
LevelActuality Актуальность уровня — Задаёт период актуальности построенного уровня в барах.
RestDefaultTimeframeValues Сброс значений по умолчанию — При включении автоматически подбирает параметры ExtremumToLevelMaxGap и PriceDeltaFor1Bar в зависимости от текущего таймфрейма.
ExtremumToLevelMaxGap Макс. разрыв экстремум–уровень — Максимально допустимое отклонение экстремума от уровня для их объединения.
PriceDeltaFor1Bar Ценовой сдвиг на бар — Величина ценового смещения, применяемая при построении и расчёте уровней.
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_color2 Yellow

extern color   TrendUpColor=Aqua;
extern color   TrendDownColor=Red;
extern bool    SnapExtremumsToLevelOnChar=True;
extern int     FractalBarsOnEachSide=5;
extern int     ProceedMaxHistoryBars=1000;
extern int     LevelActuality=160;
extern bool    RestDefaultTimeframeValues=1;
extern int     ExtremumToLevelMaxGap=100;
extern double  PriceDeltaFor1Bar=20;

int    LevelLength[];
int    LevelWidth[];
int    PriceCrossedLevel;
double longList[];
double shortList[];

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

int deinit()
{
int i=0;

for (i=Bars-1;i>=0;i--)
if (ObjectFind("Level_"+i)!=-1)
    ObjectDelete("Level_"+i);
for (i=Bars-1;i>=0;i--)
if (ObjectFind("Trend_"+i)!=-1)
    ObjectDelete("Trend_"+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; 
int LastExtremumHighBar=-1;
int LastExtremumLowBar=-1;
int LastExtremumBar=-1;
double iFractalValue=0,jFractalValue=0;

SetIndexStyle(0,DRAW_ARROW,0,1);
SetIndexArrow(0,233);
SetIndexStyle(1,DRAW_ARROW,0,1);
SetIndexArrow(1,234);
ArrayInitialize(longList,0);
ArrayInitialize(shortList,0);

if (RestDefaultTimeframeValues==1)
   {
   switch (Period())
      {
      case 1:
         {
         ExtremumToLevelMaxGap=2;
         PriceDeltaFor1Bar=0.2;
         break;
         }      
      case 5:
         {
         ExtremumToLevelMaxGap=5;
         PriceDeltaFor1Bar=0.2;
         break;
         }
      case 15:
         {
         ExtremumToLevelMaxGap=8;
         PriceDeltaFor1Bar=0.2;
         break;
         }
      case 30:
         {
         ExtremumToLevelMaxGap=10;
         PriceDeltaFor1Bar=0.3;
         break;
         }
      case 60:
         {
         ExtremumToLevelMaxGap=15;
         PriceDeltaFor1Bar=0.4;
         break;
         }
      case 240:
         {
         ExtremumToLevelMaxGap=25;
         PriceDeltaFor1Bar=0.4;
         break;
         }
      case 1440:
         {
         ExtremumToLevelMaxGap=75;
         PriceDeltaFor1Bar=1.5;
         break;
         }
      case 10080:
         {
         ExtremumToLevelMaxGap=150;
         PriceDeltaFor1Bar=5;
         break;
         }         
      case 43200:
         {
         ExtremumToLevelMaxGap=300;
         PriceDeltaFor1Bar=24;
         break;
         }
      }
   }

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])
               {
               longList[i]=Low[i];
               longList[LastExtremumLowBar]=0;
               LastExtremumLowBar=i;
               }
            break;
            }
         case 1:
            {
            if (Low[i]<High[LastExtremumHighBar])
               {
               longList[i]=Low[i];
               LastExtremumLowBar=i;
               }
            break;
            }
         case 0:
            {
            longList[i]=Low[i];
            LastExtremumLowBar=i;
            break;
            }
         }
      }

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

for (i=MathMin(ProceedMaxHistoryBars,Bars-FractalBarsOnEachSide-1);i>=FractalBarsOnEachSide;i--)
   {
   if (longList[i]==Low[i])
      {
      Stop=-1;
      CurrState=0;
      for (j=i-1;j>=0 && Stop==-1;j--)
         {
         if (CurrState==-1)
            if (High[j]>Low[i]+(i-j)*PriceDeltaFor1Bar*Point+PriceCrossedLevel*Point)
               Stop=j;
         if (CurrState==0)
            if (Low[j]<Low[i]+(i-j)*PriceDeltaFor1Bar*Point-PriceCrossedLevel*Point)
               CurrState=-1;
         }
      if (Stop!=-1)
         LevelLength[i]=i-Stop;
      else
      

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

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

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

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

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

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

Стоимость полного кода
751,50₽ ≈ $9.18