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

BB Analyzer

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

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

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

О программе

BB Analyzer — индикатор для MetaTrader 4, который анализирует поведение полос Боллинджера и классифицирует текущее состояние рынка. Он рассчитывает верхнюю, среднюю и нижнюю линии полос на основе стандартной формулы с настраиваемым периодом и отклонением.

После расчёта исходных линий индикатор применяет к ним выбранный метод сглаживания (из 17 доступных вариантов) с дополнительным периодом сглаживания. На основе усреднённых линий определяется направление тренда и рассчитывается наклон верхней и нижней границ.

В зависимости от комбинации сигналов наклона, положения цены и пороговых значений индикатор распределяет текущий бар по одной из пяти фаз: «Пузырь вверх», «Пузырь вниз», «Колбаса вверх», «Колбаса вниз» или «Сжатие». Каждая фаза отображается гистограммными буферами с индивидуальной цветовой настройкой.

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

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

НастройкаОписание
Periods Период расчёта полос Боллинджера
Deviation Отклонение полос Боллинджера от средней линии
Method_to_Smooth Метод сглаживания, применяемый к линиям полос (SMA, EMA, Wilder, LWMA и другие)
Periods_to_Smooth Период сглаживания, применяемый к линиям полос
Comment0 Текстовый параметр для отображения описания параметра наклона в интерфейсе
Slope Пороговое значение наклона для подтверждения начала фазы пузыря
Comment1 Текстовый параметр для отображения описания параметра процента в интерфейсе
Percent Процентный параметр для определения перехода из фазы колбасы в сжатие
Show_BB_Middle_Line Переключатель отображения средней линии полос Боллинджера на графике
Slope_Detection Параметр, используемый для обнаружения изменения наклона линий полос
Bars_to_Calculate_Slope Количество баров, используемых для расчёта наклона линий полос
Color_Bands Цвет линий верхней и нижней границ полос
Color_Middle Цвет средней линии полос Боллинджера
Color_Middle_Up Цвет линии среднего направления вверх
Color_Middle_Dn Цвет линии среднего направления вниз
Color_Bubble_Up Цвет отображения фазы «Пузырь вверх»
Color_Bubble_Down Цвет отображения фазы «Пузырь вниз»
Color_Sausage_Up Цвет отображения фазы «Колбаса вверх»
Color_Sausage_Down Цвет отображения фазы «Колбаса вниз»
Color_Squeeze Цвет отображения фазы «Сжатие»
Получить полный код

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

#property indicator_buffers 15
#property indicator_chart_window

enum e_method{ SMA        =  1,
               EMA        =  2,
               Wilder     =  3,
               LWMA       =  4,
               SineWMA    =  5,
               TriMA      =  6,
               LSMA       =  7,
               SMMA       =  8,
               HMA        =  9,
               ZeroLagEMA = 10,
               ITrend     = 11,
               Median     = 12,
               GeoMean    = 13,
               REMA       = 14,
               ILRS       = 15,
               IE_2       = 16,
               TriMAgen   = 17
             };

extern int      Periods                 = 20;
extern double   Deviation               = 2.0;
input  e_method Method_to_Smooth        = EMA;
extern int      Periods_to_Smooth       = 3;
extern string   Comment0                = "- Slope: Minimum Slope to Confirm Bubble (pip/minute) -";
extern double   Slope                   = 0.18;
extern string   Comment1                = "- Percent: To Confirm end of sausage (%) -";
extern double   Percent                 = 25;
extern bool     Show_BB_Middle_Line     = true;
extern double   Slope_Detection         = 0.5;
extern int      Bars_to_Calculate_Slope = 1;

extern color    Color_Bands             = clrDarkGoldenrod;
extern color    Color_Middle            = clrWhite;
extern color    Color_Middle_Up         = clrLime;
extern color    Color_Middle_Dn         = clrRed;
extern color    Color_Bubble_Up         = clrDarkGreen;
extern color    Color_Bubble_Down       = clrRed;
extern color    Color_Sausage_Up        = clrTeal;
extern color    Color_Sausage_Down      = clrMaroon;
extern color    Color_Squeeze           = C'33,33,33';

double BB_Top[];
double BB_Middle[];
double BB_Bottom[];

double AVG_Top[];
double AVG_Middle[];
double AVG_Bottom[];

double Middle_Up[];
double Middle_Dn[];

double Bubble_Up_min[];  double Bubble_Up_max[];
double Bubble_Dn_min[];  double Bubble_Dn_max[];
double Sausage_Up_min[]; double Sausage_Up_max[];
double Sausage_Dn_min[]; double Sausage_Dn_max[];
double Squeeze_min[];    double Squeeze_max[];

double Signal_AVG_Top[];
double Signal_AVG_Bottom[];

bool StartBubbleUp  = false; 
bool StopBubbleUp   = false;
bool StartBubbleDn  = false;
bool StopBubbleDn   = false;
bool StartSausageUp = false;
bool StartSausageDn = false;

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

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

   int i;
   int counted_bars=IndicatorCounted();
   int limit = Bars-counted_bars-1;

   double EcartConfirmBubbleUp, EcartConfirmBubbleDn, EcartBubble;
   double pipSize = MarketInfo(Symbol(),MODE_POINT);
   if (MarketInfo("EURUSD",MODE_DIGITS)==5) pipSize=pipSize*10; // I take the EURUSD as an example to check if it is 5 digits instead of 4, if so, I multiply it by 10

   for(i=limit; i>=0; i--){

      BB_Top[i]    = iBands(NULL,0,Periods,Deviation,0,PRICE_CLOSE,MODE_UPPER,i);
      BB_Middle[i] = iBands(NULL,0,Periods,Deviation,0,PRICE_CLOSE,MODE_MAIN,i);
      BB_Bottom[i] = iBands(NULL,0,Periods,Deviation,0,PRICE_CLOSE,MODE_LOWER,i);

      switch(Method_to_Smooth){
         case 1 :
            AVG_Top[i] = SMA(BB_Top,Periods_to_Smooth,i);
            AVG_Middle[i] = SMA(BB_Middle,Periods_to_Smooth,i);
            AVG_Bottom[i] = SMA(BB_Bottom,Periods_to_Smooth,i);
            break;
         case 2 :
            AVG_Top[i] = EMA(BB_Top[i],AVG_Top[i+1],Periods_to_Smooth,i);
            AVG_Middle[i] = EMA(BB_Middle[i],AVG_Middle[i+1],Periods_to_Smooth,i);
            AVG_Bottom[i] = EMA(BB_Bottom[i],AVG_Bottom[i+1],Periods_to_Smooth,i);
            break;
         case 3 :
            AVG_Top[i] = Wilder(BB_Top[i],AVG_Top[i+1],Periods_to_Smooth,i);
            AVG_Middle[i] = Wilder(BB_Middle[i],AVG_Middle[i+1],Periods_to_Smooth,i);
            AVG_Bottom[i] = Wilder(BB_Bottom[i],AVG_Bottom[i+1],Periods_to_Smooth,i);
            break;  
         case 4 :
            AVG_Top[i] = LWMA(BB_Top,Periods_to_Smooth,i);
            AVG_Middle[i] = LWMA(BB_Middle,Periods_to_Smooth,i);
            AVG_Bottom[i] = LWMA(BB_Bottom,Periods_to_Smooth,i);
            break;
         case 5 :
            AVG_Top[i] = SineWMA(BB_Top,Periods_to_Smooth,i);
            AVG_Middle[i] = SineWMA(BB_Middle,Periods_to_Smooth,i);
            AVG_Bottom[i] = SineWMA(BB_Bottom,Periods_to_Smooth,i);
            break;
         case 6 :
            AVG_Top[i] = TriMA(BB_Top,Periods_to_Smooth,i);
            AVG_Middle[i] = TriMA(BB_Middle,Periods_to_Smooth,i);
            AVG_Bottom[i] = TriMA(BB_Bottom,Periods_to_Smooth,i);
            break;
         case 7 :
            AVG_Top[i] = LSMA(BB_Top,Periods_to_Smooth,i);
            AVG_Middle[i] = LSMA(BB_Middle,Periods_to_Smooth,i);
            AVG_Bottom[i] = LSMA(BB_Bottom,Periods_to_Smooth,i);
            break;
         case 8 :
            AVG_Top[i] = SMMA(BB_Top,AVG_Top[i+1],Periods_to_Smooth,i);
            AVG_Middle[i] = SMMA(BB_Middle,AVG_Middle[i+1],Periods_to_Smooth,i);
            AVG_Bottom[i] = SMMA(BB_Bottom,AVG_Bottom[i+1],Periods_to_Smooth,i);
            break;
         case 9 :
            AVG_Top[i] = HMA(BB_Top,Periods_to_Smooth,i);
            AVG_Middle[i] = HMA(BB_Middle,Periods_to_Smooth,i);
            AVG_Bottom[i] = HMA(BB_Bottom,Periods_to_Smooth,i);
            break;
         case 10:
            AVG_Top[i] = ZeroLagEMA(BB_Top,AVG_Top[i+1],Periods_to_Smooth,i);
            AVG_Middle[i] = ZeroLagEMA(BB_Middle,AVG_Middle[i+1],Periods_to_Smooth,i);
            AVG_Bottom[i] = ZeroLagEMA(BB_Bottom,AVG_Bottom[i+1],Periods_to_Smooth,i);
            break;
         case 11:
            AVG_Top[i] = ITrend(BB_Top,AVG_Top,Periods_to_Smooth,i);
            AVG_Middle[i] = ITrend(BB_Middle,AVG_Middle,Periods_to_Smooth,i);
            AVG_Bottom[i] = ITrend(BB_Bottom,AVG_Bottom,Periods_to_Smooth,i);
            break;
         case 12:
            AVG_Top[i] = Median(BB_Top,Periods_to_Smooth,i);
            AVG_Middle[i] = Median(BB_Middle,Periods_to_Smooth,i);
            AVG_Bottom[i] = Median(BB_Bottom,Periods_to_Smooth,i);
            break;
         case 13:
            AVG_Top[i] = GeoMean(BB_Top,Periods_to_Smooth,i);
            AVG_Middle[i] = GeoMean(BB_Middle,Periods_to_Smooth,i);
            AVG_Bottom[i] = GeoMean(BB_Bottom,Periods_to_Smooth,i);
            break;
         case 14:
            AVG_Top[i] = REMA(BB_Top[i],AVG_Top,Periods_to_Smooth,0.5,i);
            AVG_Middle[i] = REMA(BB_Middle[i],AVG_Middle,Periods_to_Smooth,0.5,i);
            AVG_Bottom[i] = REMA(BB_Bottom[i],AVG_Bottom,Periods_to_Smooth,0.5,i);
            break;
         case 15:
            AVG_Top[i] = ILRS(BB_Top,Periods_to_Smooth,i);
            AVG_Middle[i] = ILRS(BB_Middle,Periods_to_Smooth,i);
            AVG_Bottom[i] = ILRS(BB_Bottom,Periods_to_Smooth,i);
            break;
         case 16:
            AVG_Top[i] = IE2(BB_Top,Periods_to_Smooth,i);
            AVG_Middle[i] = IE2(BB_Middle,Periods_to_Smooth,i);
            AVG_Bottom[i] = IE2(BB_Bottom,Periods_to_Smooth,i);
            break;
         case 17:
            AVG_Top[i] = TriMA_gen(BB_Top,Periods_to_Smooth,i);
            AVG_Middle[i] = TriMA_gen(BB_Middle,Periods_to_Smooth,i);
            AVG_Bottom[i] = TriMA_gen(BB_Bottom,Periods_to_Smooth,i);
            break;
         default:
            AVG_Top[i] = SMA(BB_Top,Periods_to_Smooth,i);
            AVG_Middle[i] = SMA(BB_Middle,Periods_to_Smooth,i);
            AVG_Bottom[i] = SMA(BB_Bottom,Periods_to_Smooth,i);
            break;
      }

      if (AVG_Middle[i] > AVG_Middle[i+1]) Middle_Up[i] = AVG_Middle[i];
      if (AVG_Middle[i] < AVG_Middle[i+1]) Middle_Dn[i] = AVG_Middle[i];

      EcartConfirmBubbleUp = (AVG_Top[i]     - AVG_Top[i+1] ) / (pipSize*1440*((iTime(NULL,Period(),i)*1.0) - (iTime(NULL,Period(),i+1)*1.0))/(3600*24));
      EcartConfirmBubbleDn = (AVG_Bottom[i+1]- AVG_Bottom[i]) / (pipSize*1440*((iTime(NULL,Period(),i)*1.0) - (iTime(NULL,Period(),i+1)*1.0))/(3600*24));

      Signal_AVG_Top[i] =

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

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

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

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

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

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

Стоимость полного кода
1 502,20₽ ≈ $18.36