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

fx5_divergence_v2[1].1.mq5

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

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

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

О программе

Индикатор FX5 Divergence V2.1 для MetaTrader 4 рассчитывает осциллятор OsMA и отображает его в отдельном окне в виде гистограммы. Основан на двух экспоненциальных скользящих средних и сигнальной линии. Индикатор автоматически определяет классические и обратные расхождения между ценой и осциллятором OsMA, выделяя бычьи и медвежьи сигналы.

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

НастройкаОписание
separator1 Разделитель настроек OsMA — Текстовый заголовок группы параметров осциллятора OsMA
fastEMA Быстрая EMA — Период быстрой экспоненциальной скользящей средней, используемой при расчёте OsMA
slowEMA Медленная EMA — Период медленной экспоненциальной скользящей средней, используемой при расчёте OsMA
signal Сигнальная линия — Период сигнальной линии, применяемой при расчёте OsMA
separator2 Разделитель настроек индикатора — Текстовый заголовок группы параметров отображения
drawDivergenceLines Рисовать линии расхождения — Включает или отключает построение трендовых линий на графике цены и в окне индикатора при обнаружении расхождения
displayAlert Отображать оповещения — Включает или отключает вывод алертов при обнаружении расхождения на текущем графике
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 clrLime
#property indicator_color2 clrOrange
#property indicator_color3 clrLime
#property indicator_color4 clrOrange

extern string    separator1 = "*** OSMA Settings ***";
extern int       fastEMA = 12;
extern int       slowEMA = 26;
extern int       signal = 9;
extern string    separator2 = "*** Indicator Settings ***";
extern bool      drawDivergenceLines = true;
extern bool      displayAlert = false;

double upOsMA[];
double downOsMA[];
double bullishDivergence[];
double bearishDivergence[];
double OsMA[];

static datetime lastAlertTime;

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

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

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

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

void CalculateOsMA(int i)
  {
   OsMA[i] = iOsMA(NULL, 0, fastEMA, slowEMA, signal, PRICE_CLOSE, i);

   if(OsMA[i] > 0)
     {
       upOsMA[i] = OsMA[i];
       downOsMA[i] = 0;
     }
   else 
       if(OsMA[i] < 0)
         {
           downOsMA[i] = OsMA[i];
           upOsMA[i] = 0;   
         }
       else
         {
           upOsMA[i] = 0;
           downOsMA[i] = 0;   
         }         
  }

void CatchBullishDivergence(int shift)//на два бара вправо от текущего
  {
   if(IsIndicatorTrough(shift) == false)
       return;
   int currentTrough = shift;
   int lastTrough = GetIndicatorLastTrough(shift);
   if(OsMA[currentTrough] > OsMA[lastTrough] && Low[currentTrough] < Low[lastTrough])
     {
      bullishDivergence[currentTrough] = OsMA[currentTrough];
      if(drawDivergenceLines == true)
        {
          DrawPriceTrendLine(Time[currentTrough], Time[lastTrough], Low[currentTrough], 
                             Low[lastTrough], Green, STYLE_SOLID);
          DrawIndicatorTrendLine(Time[currentTrough], Time[lastTrough], OsMA[currentTrough],
                                 OsMA[lastTrough], Green, STYLE_SOLID);
        }
      if(displayAlert == true)
          DisplayAlert("Classical bullish divergence on: ", currentTrough);  
     }
   if(OsMA[currentTrough] < OsMA[lastTrough] && Low[currentTrough] > Low[lastTrough])
     {
      bullishDivergence[currentTrough] = OsMA[currentTrough];
      if(drawDivergenceLines == true)
        {
          DrawPriceTrendLine(Time[currentTrough], Time[lastTrough], Low[currentTrough], 
                             Low[lastTrough], Green, STYLE_DOT);
          DrawIndicatorTrendLine(Time[currentTrough], Time[lastTrough], OsMA[currentTrough],
                                 OsMA[lastTrough], Green, STYLE_DOT);
        }
      if(displayAlert == true)
          DisplayAlert("Reverse bullish divergence on: ", curr

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

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

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

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

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

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

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