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

CCI_Divergence_v1.1

divergence_v1.1_cci.mq5
Вы автор или правообладатель?

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

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

О программе

Индикатор CCI_Divergence_v1.1 рассчитывает значение Commodity Channel Index (CCI) и выявляет дивергенции между движением цены и индикатором. Он определяет классические и обратные бычьи и медвежьи дивергенции, отображая их в виде стрелок в отдельном оконном режиме отображения.

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

Расчёт CCI выполняется встроенной функцией iCCI с заданным периодом по типичной цене. Поиск пиков и впадин индикатора осуществляется путём сравнения значений CCI в окрестности текущего бара. Дивергенции фиксируются при сравнении направлений изменения цены и индикатора на соответствующих экстремумах.

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

НастройкаОписание
separator1 Текстовый разделитель для группы настроек CCI
period Период расчёта индикатора CCI
separator2 Текстовый разделитель для группы настроек индикатора
drawIndicatorTrendLines Включает отображение трендовых линий в окне индикатора
drawPriceTrendLines Включает отображение трендовых линий на графике цены
displayAlert Включает отображение всплывающих уведомлений при обнаружении дивергенции
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Magenta
#property indicator_color4 Blue
#property indicator_level1  140
#property indicator_level2  0.0
#property indicator_level3 -140
#property indicator_width4     2

#define arrowsDisplacement 0.0001

extern string separator1 = "*** CCI Settings ***";
extern int    period = 14;
extern string separator2 = "*** Indicator Settings ***";
extern bool   drawIndicatorTrendLines = true;
extern bool   drawPriceTrendLines = true;
extern bool   displayAlert = true;

double bullishDivergence[];
double bearishDivergence[];
double CCI[];
double signal[];

static datetime lastAlertTime;
static string   indicatorName;

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

int deinit()
  {
   for(int i = ObjectsTotal() - 1; i >= 0; i--)
     {
       string label = ObjectName(i);
       if(StringSubstr(label, 0, 18) != "CCI_DivergenceLine")
           continue;
       ObjectDelete(label);   
     }
   return(0);
  }

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

void CalculateIndicator(int countedBars)
  {
   for(int i = Bars - countedBars; i >= 0; i--)
     {
       CalculateCCI(i);
       CatchBullishDivergence(i + 2);
       CatchBearishDivergence(i + 2);
     }              
  }

void CalculateCCI(int i)
  {
   CCI[i] = iCCI(Symbol(),0,period,PRICE_TYPICAL,i);

   signal[i] = iCCI(Symbol(),0,period,PRICE_TYPICAL,i);         
  }

void CatchBullishDivergence(int shift)
  {
   if(IsIndicatorTrough(shift) == false)
       return;  
   int currentTrough = shift;
   int lastTrough = GetIndicatorLastTrough(shift);

   if(CCI[currentTrough] > CCI[lastTrough] && 
      Low[currentTrough] < Low[lastTrough])
     {
       bullishDivergence[currentTrough] = CCI[currentTrough] - 
                                          arrowsDisplacement;

       if(drawPriceTrendLines == true)
           DrawPriceTrendLine(Time[currentTrough], Time[lastTrough], 
                              Low[currentTrough], 
                             Low[lastTrough], Green, STYLE_SOLID);

       if(drawIndicatorTrendLines == true)
          DrawIndicatorTrendLine(Time[currentTrough], 
                                 Time[lastTrough], 
                                 CCI[currentTrough],
                                 CCI[lastTrough], 
                                 Green, STYLE_SOLID);

       if(displayAlert == true)
          DisplayAlert("Classical bullish divergence on: ", 
                        currentTrough);  
     }

   if(CCI[currentTrough] < CCI[lastTrough] && 
      Low[currentTrough] > Low[lastTrough])
     {
       bullishDivergence[currentTrough] = CCI[currentTrough] - 
                                          arrowsDisplacement;

       if(drawPriceTrendLines == true)
           DrawPriceTrendLine(Time[currentTrough], Time[lastTrough], 
                              Low[currentTrough], 
                              Low[lastTrough], Green, STYLE_DOT);

       if(drawIndicatorTrendLines == true)                            
           DrawIndicatorTrendLine(Time[currentTrough], 
                                  Time[lastTrough], 
                                  CCI[currentTrough],
                                  CCI[lastTrough], 
                                  Green, STYLE_DOT);

       if(displayAlert == true)
           DisplayAlert("Reverse bullish divergence on: ", 
                        currentTrough);   
     }      
  }

void CatchBearishDivergence(int shift)
  {
   if(IsIndicatorPeak(shift) == false)
       return;
   int currentPeak = s

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

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

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

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

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

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

Стоимость полного кода
568,10₽ ≈ $6.94