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

macddivergence_ea_stub.mq4

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

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

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

О программе

Программа написана на языке MQL4 для платформы MetaTrader 4 и представляет собой торгового советника. Она предназначена для обнаружения расхождений между ценой и осциллятором OsMA, основанным на индикаторе MACD. Советник анализирует классические и инверсионные дивергенции на минимумах и максимумах, а также запускает пользовательские сценарии обработки и отправляет уведомления. Функция открытия сделок реализована как заглушка и не выполняет реальных торговых операций.

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

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

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

#include <stdlib.mqh>
#include <stderror.mqh> 

#define LONG 1
#define SHORT -1
#define FLAT 0

#define BULLISH 1
#define BEARISH 2

extern string    separator1 = "*** OSMA Settings ***";
extern int       fastEMA = 12;
extern int       slowEMA = 26;
extern int       signal = 9;
extern bool      displayAlert = true;
extern bool      sendEmail = true;
static datetime lastAlertTime, lastEmailTime;

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

int deinit()
{
 return(0);
}

double OsMA(int pos)
{
   double val;
   val = iOsMA(NULL, 0, fastEMA, slowEMA, signal, PRICE_CLOSE, pos);

   return(val);
}

int GetSignal()
{
   int bull = FLAT, bear = FLAT;
   double myOsMA;

   if(Volume[0]>1) return;

   myOsMA = OsMA(0);
   bull = CatchBullishDivergence(0 + 2);
   if (bull != FLAT) return(LONG);
   bear = CatchBearishDivergence(0 + 2);
   if (bear != FLAT) return(SHORT);

   return (FLAT);
}

int CatchBullishDivergence(int shift)
  {
   double OsMAcurrentTrough, OsMAlastTrough, LowCurrentTrough, LowLastTrough; 
   if(IsIndicatorTrough(shift) == false)
       return(FLAT);
   int currentTrough = shift;
   int lastTrough = GetIndicatorLastTrough(shift);
   OsMAcurrentTrough = OsMA(currentTrough);
   OsMAlastTrough = OsMA(lastTrough);
   LowCurrentTrough = iLow(NULL, 0, currentTrough);
   LowLastTrough = iLow(NULL, 0, lastTrough);
   if(OsMAcurrentTrough > OsMAlastTrough && LowCurrentTrough < LowLastTrough)
     {
      if(displayAlert == true)
          DisplayAlert("Classical bullish divergence on: ", currentTrough);  
      if(sendEmail == true)
          SendAnEmail("Classical bullish divergence on: ", currentTrough);  
      return(BULLISH);
     }
   if(OsMAcurrentTrough < OsMAlastTrough && LowCurrentTrough > LowLastTrough)
     {
      if(displayAlert == true)
          DisplayAlert("Reverse bullish divergence on: ", currentTrough);   
      if(sendEmail == true)
          SendAnEmail("Reverse bullish divergence on: ", currentTrough);   
      return(BULLISH);
     } 

     return(FLAT);     
  }

int CatchBearishDivergence(int shift)
  {
   double OsMAcurrentPeak, OsMAlastPeak, HighCurrentPeak, HighLastPeak; 
   if(IsIndicatorPeak(shift) == false)
       return;
   int currentPeak = shift;
   int lastPeak = GetIndicatorLastPeak(shift);

   OsMAcurrentPeak = OsMA(currentPeak);
   OsMAlastPeak = OsMA(lastPeak);
   HighCurrentPeak = iHigh(NULL, 0, currentPeak);
   HighLastPeak = iHigh(NULL, 0, lastPeak);
   if(OsMAcurrentPeak < OsMAlastPeak && HighCurrentPeak > HighLastPeak)
     {
       if(displayAlert == true)
           DisplayAlert("Classical bearish divergence on: ", currentPeak);  
       if(sendEmail == true)
           SendAnEmail("Classical bearish divergence on: ", currentPeak);
       return(BEARISH);  
     }
   if(OsMAcurrentPeak > OsMAlastPeak && HighCurrentPeak < HighLastPeak)
     {
       if(displayAlert == true)
           DisplayAlert("Reverse bearish divergence on: ", currentPeak);   
       if(sendEmail == true)
           SendAnEmail("Reverse bearish divergence on: ", currentPeak); 
       return(BEARISH);  
     }   
  }

bool IsIndicatorPeak(int shift)
  {

  double OsMAshift, OsMAshift1, OsMAshiftm1, OsMAcurrent;
  OsMAshift = OsMA(shift);
  OsMAshift1 = OsMA(sh

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

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

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

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

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

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

Стоимость полного кода
463,90₽ ≈ $5.67