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

CFB Channel MTF

cfb channel mtf.mq5
Вы автор или правообладатель?

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

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

О программе

Индикатор CFB Channel MTF рассчитывает аналитические каналы на основе ценовых данных и отображает их на графике. Поддерживает работу на нескольких таймфреймах, что позволяет анализировать данные старших периодов на текущем графике.

Индикатор формирует три буфера: верхнюю границу канала, среднюю линию и нижнюю границу. Расчётные значения проходят сглаживание и нормализацию для построения канала.

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

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

НастройкаОписание
TimeFrame Таймфрейм — Выбранный таймфрейм для расчёта индикатора. Может быть задан как название периода (например, H1, D1) или специальными значениями для режимов расчёта.
ShortLimit Краткий лимит — Нижняя граница диапазона ширины канала, используемая для масштабирования отображения.
LongLimit Длинный лимит — Верхняя граница диапазона ширины канала, используемая для масштабирования отображения.
CfbPrice Тип цены CFB — Тип ценовых данных, используемых для расчёта основного значения индикатора.
CfbDepth Глубина CFB — Глубина расчёта основного показателя, определяющая объём анализируемой истории.
CfbSmooth Сглаживание CFB — Параметр сглаживания, влияющий на стабильность расчётных значений.
CfbNormLength Длина нормализации CFB — Длина нормализационного периода, используемая для определения диапазона канала.
Interpolate Интерполяция — Включает или отключает интерполяцию значений при работе на межтаймфреймах.
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1  PaleVioletRed
#property indicator_color2  Gold
#property indicator_color3  DeepSkyBlue
#property indicator_style1  STYLE_DOT
#property indicator_style2  STYLE_DASH
#property indicator_style3  STYLE_DOT

extern string TimeFrame     = "current time frame";
extern double ShortLimit    = 5;
extern double LongLimit     = 50;
extern int    CfbPrice      = 8;
extern int    CfbDepth      = 5;
extern int    CfbSmooth     = 8;
extern int    CfbNormLength = 50;
extern bool   Interpolate   = true;

double buffer1[];
double buffer2[];
double buffer3[];
double cfb[];

string indicatorFileName;
bool   calculateValue;
bool   returnBars;
int    timeFrame;

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

int deinit() { return(0); }

int start()
{
      // код доступен только после оплаты
   }
   int counted_bars=IndicatorCounted();
   int i,limit;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
         limit = MathMin(Bars-counted_bars,Bars-1);
         if (returnBars)  { buffer1[0] = limit+1; return(0); }

   if (calculateValue || timeFrame==Period())
   {

      for (i=limit; i>=0; i--)
      {
         cfb[i]     = iCfb(getPrice(CfbPrice,i),CfbDepth,CfbSmooth,i);

         double max = cfb[ArrayMaximum(cfb,CfbNormLength,i)];
         double min = cfb[ArrayMinimum(cfb,CfbNormLength,i)];
         double denominator = max-min;
            if (denominator> 0)
                  double ratio = (cfb[i]-min)/denominator;
            else         ratio = 0.5;  
                  double depth = MathCeil(ShortLimit+ratio*(LongLimit-ShortLimit)); 

         if (High[i] > buffer1[i+1])
               buffer1[i] =  High[i];
         else  buffer1[i] = (High[iHighest(NULL,0,MODE_HIGH,depth,i)] + buffer1[i+1])/2.0;

         if (Low[i] < buffer3[i+1])
               buffer3[i] =  Low[i];
         else  buffer3[i] = (Low[iLowest(NULL,0,MODE_LOW,depth,i)]  + buffer3[i+1])/2.0;
               buffer2[i] = (buffer1[i]+buffer3[i])/2.0;
         }
         return(0);
         }

         limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
         for (i=limit; i>=0; i--)
         {
            int y = iBarShift(NULL,timeFrame,Time[i]);
               buffer1[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",ShortLimit,LongLimit,CfbPrice,CfbDepth,CfbSmooth,CfbNormLength,0,y);
               buffer2[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",ShortLimit,LongLimit,CfbPrice,CfbDepth,CfbSmooth,CfbNormLength,1,y);
               buffer3[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",ShortLimit,LongLimit,CfbPrice,CfbDepth,CfbSmooth,CfbNormLength,2,y);

               if (timeFrame <= Period() || y==iBarShift(NULL,timeFrame,Time[i-1])) continue;
               if (!Interpolate) continue;

               datetime time = iTime(NULL,timeFrame,y);
                  for(int n = 1; i+n < Bars && Time[i+n] >= time; n++) continue;	
                  for(int k = 1; k < n; k++)
                  {
                     buffer1[i+k] = buffer1[i] + (buffer1[i+n] - buffer1[i]) * k/n;
                     buffer2[i+k] = buffer2[i] + (buffer2[i+n] - buffer2[i]) * k/n;
              

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

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

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

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

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

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

Стоимость полного кода
546,80₽ ≈ $6.68