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

dual stoch - divergences 2.1 (alerts).mq5

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

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

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

О программе

Данный пользовательский индикатор для MetaTrader 4 рассчитывает сравнительный стохастический осциллятор между текущим символом и заданной базовой парой. Для каждого символа строятся сглаженные скользящие средние, на основе которых нормализуются значения в диапазон 0–1; разница между ними дополнительно сглаживается и отображается в отдельном окне.

Индикатор выделяет точки при пересечении верхнего и нижнего пороговых значений, задаваемых пользователем. Доступна фильтрация по волатильности или изменению цены, а также несколько типов уведомлений: всплывающие сообщения, звуковые сигналы, push-уведомления и email-рассылка. Встроенная система алертов срабатывает при смене состояния осциллятора на текущем или предыдущем баре.

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

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

НастройкаОписание
Period (Length) Период — Период расчёта сглаживающей скользящей средней и нормализации значений.
Price (Price) Цена — Тип цены, используемой в расчётах (например, закрытие, открытие и т. д.).
Symbol to compare to (BaseSymbol) Базовый символ — Символ, с которым сравнивается текущий инструмент при расчёте сравнительного стохастика.
Upper treshlod (TresholdUp) Верхний порог — Верхний пороговый уровень, при пересечении которого осциллятор отмечается как пересечение верхней границы.
Lower treshlod (TresholdDn) Нижний порог — Нижний пороговый уровень, при пересечении которого осциллятор отмечается как пересечение нижней границы.
Price smoothing period (PreSmooth) Период сглаживания цены — Период сглаживания ценовых данных перед расчётом.
Price smoothing phase (PreSmoothPhase) Фаза сглаживания цены — Фаза сглаживания ценовых данных.
Result smoothing period (PosSmooth) Период сглаживания результата — Период дополнительной сглаживания итогового осциллятора.
Result smoothing phase (PosSmoothPhase) Фаза сглаживания результата — Фаза сглаживания итогового осциллятора.
Filter to use for filtering (<=0 - no filtering) (Filter) Фильтр — Параметр фильтрации. Если значение ≤ 0, фильтрация не применяется.
Filter on : (FilterWhat) Фильтр по — Определяет, на что применяется фильтр: на цену, на значение или на оба одновременно.
Alerts true/false? (alertsOn) Алерты включены — Включает или отключает систему алертов в целом.
Alerts open bar true/false? (alertsOnCurrent) Алерты на текущем баре — Определяет, на каком баре отслеживать смену состояния: на текущем (0) или на предыдущем (1).
Alerts pop-up message true/false? (alertsMessage) Всплывающие сообщения — Включает или отключает всплывающие сообщения при срабатывании алерта.
Alerts sound true/false? (alertsSound) Звуковой сигнал — Включает или отключает звуковой сигнал при срабатывании алерта.
Alerts push notification true/false? (alertsNotify) Push-уведомления — Включает или отключает push-уведомления при срабатывании алерта.
Alerts email true/false? (alertsEmail) Email-алерт — Включает или отключает отправку email-уведомлений при срабатывании алерта.
Sound file (soundFile) Звуковой файл — Имя звукового файла, воспроизводимого при включённом звуковом алерте.
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers    5
#property indicator_color1     clrDarkGray
#property indicator_color2     clrLimeGreen
#property indicator_color3     clrLimeGreen
#property indicator_color4     clrOrange
#property indicator_color5     clrOrange
#property indicator_width1     2
#property indicator_width2     3
#property indicator_width3     3
#property indicator_width4     3
#property indicator_width5     3
#property indicator_minimum   -0.1
#property indicator_maximum    1.1
#property strict

#define _fltPrc 0x01
#define _fltVal 0x10
enum enFltWhat
{
   flt_01 = _fltPrc,        // Filter the price
   flt_02 = _fltVal,        // Filter the value
   flt_03 = _fltPrc+_fltVal // Filter the price and the value
};
input int                 Length          = 30;           // Period
input ENUM_APPLIED_PRICE  Price           = PRICE_CLOSE;  // Price
input string              BaseSymbol      = "GBPUSD";     // Symbol to compare to
input double              TresholdUp      = 0.8;          // Upper treshlod
input double              TresholdDn      = 0.2;          // Lower treshlod
input int                 PreSmooth       = 8;            // Price smoothing period
input int                 PreSmoothPhase  = 0;            // Price smoothing phase
input int                 PosSmooth       = 0;            // Result smoothing period
input int                 PosSmoothPhase  = 0;            // Result smoothing phase
input double              Filter          = 0;            // Filter to use for filtering (<=0 - no filtering)
input enFltWhat           FilterWhat      = _fltVal;      // Filter on :
input bool                alertsOn        = true;         // Alerts true/false?
input bool                alertsOnCurrent = false;        // Alerts open bar true/false?
input bool                alertsMessage   = true;         // Alerts pop-up message true/false?
input bool                alertsSound     = false;        // Alerts sound true/false?
input bool                alertsNotify    = false;        // Alerts push notification true/false?
input bool                alertsEmail     = false;        // Alerts email true/false?
input string              soundFile        = "alert2.wav"; // Sound file

double stoch[],stochua[],stochub[],stochda[],stochdb[],stocha[],stochb[],stochc[],pricesa[],pricesb[],state[];

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

int start()
{
      // код доступен только после оплаты
   }
   int counted_bars=IndicatorCounted();
      if(counted_bars<0) return(-1);
      if(counted_bars>0) counted_bars--;
         int limit = MathMin(Bars-counted_bars,Bars-1);

   double pfilter = ((FilterWhat&_fltPrc)==0) ? 0 : Filter;
   double vfilter = ((FilterWhat&_fltVal)==0) ? 0 : Filter;
   if (state[limit]== 1) CleanPoint(limit,stochua,stochub);
   if (state[limit]==-1) CleanPoint(limit,stochda,stochdb);
   for(int i=limit; i>=0; i--)
   {
      pricesa[i] = iSmooth(iFilter(iMA(NULL      ,0,1,0,MODE_SMA,Price,i),pfilter,Length,i,0),PreSmooth,PreSmoothPhase,i,0);
      pricesb[i] = iSmooth(iFilter(iMA(BaseSymbol,0,1,0,MODE_SMA,Price,i),pfilter,Length,i,1),PreSmooth,PreSmoothPhase,i,1);
      stochda[i] = stochdb[i] = EMPTY_VALUE;
      stochua[i] = stochub[i] = EMPTY_VALUE;
      double min=0,max=0;
         max = pricesa[ArrayMaximum(pricesa,Length,i)];
         min = pricesa[ArrayMinimum(pricesa,Length,i)];
            stocha[i] = (max!=min) ? (pricesa[i]-min)/(max-min) : 0.5;
         max = pricesb[ArrayMaximum(pricesb,Length,i)];
         min = pricesb[ArrayMinimum(pricesb,Length,i)];
            stochb[i] = (max!=min) ? (pricesb[i]-min)/(max-min) : 0.5;
            stochc[i] = stocha[i]-stochb[i];
         max = stochc[ArrayMaximum(stochc,Length*10,i)];
         min = stochc[ArrayMinimum(stochc,Length*10,i)];
            stoch[i] = (max!=min) ? iFilter(fmax(fmin(iSmooth((stochc[i]-min)/(max-min),PosSmooth,PosSmoothPhase,i,2),1),0),vfilter,Length,i,2) :
                                    iFilter(fmax(fmin(iSmooth(0.5                      ,PosSmooth,PosSmoothPhase,i,2),1),0),vfilter,Length,i,2);
            state[i] = (stoch[i]>TresholdUp) ? 1 : (stoch[i]<TresholdDn) ? -1 : 0;
        if (state[i] ==  1) PlotPoint(i,stochua,stochub,stoch);
        if (state[i] == -1) PlotPoint(i,stochda,stochdb,stoch);
   }
   if (alertsOn)
   {
      int whichBar = (alertsOnCurrent) ? 0 : 1;
      if (state[whichBar] != state[whichBar+1])
      {
         if (state[whichBar] == 1) doAlert(" crossing upper threshold");
         if (state[whichBar] ==-1) doAlert(" crossing lower threshold");       
      }

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

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

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

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

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

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

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