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

averages_ao_alertdivergence_2.mq5

Похожие материалы по тегам

#__slope direction line.mq5MQL5 / MetaTrader 5 · 1 общих теговrange breakout @meowforex1.pineTradingView · 1 общих тегов#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit3.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit2.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Индикатор рассчитывает AO-подобное значение как разницу между двумя скользящими средними с настраиваемыми периодами и методами. Результат отображается в пяти гистограммных буферах, разделённых по направлению тренда и наклону. Поддерживается 20 типов скользящих средних, мног таймфреймовый анализ и интерполяция между барами.

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

Функция уведомлений включает текстовые сообщения, звуковые сигналы, email и платёжные уведомления, срабатывающие при смене наклона или пересечении нуля. Все визуальные элементы и оповещения настраиваются через параметры.

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

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

НастройкаОписание
TimeFrame Таймфрейм — Таймфрейм для анализа
FastMaPeriod Период быстрой СС — Период быстрой скользящей средней
FastMaMode Метод быстрой СС — Метод быстрой скользящей средней
SlowMaPeriod Период медленной СС — Период медленной скользящей средней
SlowMaMode Метод медленной СС — Метод медленной скользящей средней
AoPrice Тип цены AO — Тип цены для расчёта AO-значения
divergenceVisible Дивергенции включены — Включение обнаружения дивергенций
divergenceOnValuesVisible Дивергенция на значениях — Отображение дивергенции на значениях индикатора
divergenceOnChartVisible Дивергенция на графике — Отображение дивергенции на графике цены
divergenceBullishColor Цвет бычьей дивергенции — Цвет бычьей дивергенции
divergenceBearishColor Цвет медвежьей дивергенции — Цвет медвежьей дивергенции
divergenceUniqueID Идентификатор дивергенции — Уникальный идентификатор объектов дивергенции
HistogramOnSlope Гистограмма по наклону — Отображение гистограммы, разделённой по наклону
Interpolate Интерполяция — Интерполяция значений между барами
MaModes Методы СС — Таблица доступных методов скользящих средних
__0 Метод SMA — Название метода скользящей средней SMA
__1 Метод EMA — Название метода скользящей средней EMA
__2 Метод Double smoothed EMA — Название метода скользящей средней Double smoothed EMA
__3 Метод DEMA — Название метода скользящей средней Double EMA (DEMA)
__4 Метод TEMA — Название метода скользящей средней Triple EMA (TEMA)
__5 Метод Smoothed MA — Название метода скользящей средней Smoothed MA
__6 Метод Linear weighted MA — Название метода скользящей средней Linear weighted MA
__7 Метод Parabolic weighted MA — Название метода скользящей средней Parabolic weighted MA
__8 Метод Alexander MA — Название метода скользящей средней Alexander MA
__9 Метод Volume weighted MA — Название метода скользящей средней Volume weighted MA
__10 Метод Hull MA — Название метода скользящей средней Hull MA
__11 Метод Triangular MA — Название метода скользящей средней Triangular MA
__12 Метод Sine weighted MA — Название метода скользящей средней Sine weighted MA
__13 Метод Linear regression — Название метода скользящей средней Linear regression
__14 Метод IE/2 — Название метода скользящей средней IE/2
__15 Метод NonLag MA — Название метода скользящей средней NonLag MA
__16 Метод Zero lag EMA — Название метода скользящей средней Zero lag EMA
__17 Метод Leader EMA — Название метода скользящей средней Leader EMA
__18 Метод Super smoother — Название метода скользящей средней Super smoother
__19 Метод Smoother — Название метода скользящей средней Smoother
alertsOn Уведомления включены — Включение всех уведомлений
alertsOnSlope Уведомление при смене наклона — Уведомление при смене наклона
alertsOnZeroCross Уведомление при пересечении нуля — Уведомление при пересечении нуля
alertsOnCurrent Уведомление на текущем баре — Уведомление на текущем баре
alertsMessage Всплывающие сообщения — Отображение всплывающих сообщений
alertsSound Звуковое уведомление — Звуковое уведомление
alertsEmail Email-уведомления — Отправка email-уведомлений
alertsNotify Push-уведомления — Отправка push-уведомлений
arrowsVisible Стрелки видны — Отображение стрелок на графике
arrowsIdentifier Идентификатор стрелок — Идентификатор объектов стрелок на графике
arrowsDisplacement Смещение стрелок — Смещение стрелок от цены
arrowsOnSlope Стрелки при смене наклона — Отображение стрелок при смене наклона
arrowsOnSlopeUpColor Цвет стрелки вверх (наклон) — Цвет стрелки вверх при смене наклона
arrowsOnSlopeDnColor Цвет стрелки вниз (наклон) — Цвет стрелки вниз при смене наклона
arrowsOnSlopeUpCode Код стрелки вверх (наклон) — Код стрелки вверх при смене наклона
arrowsOnSlopeDnCode Код стрелки вниз (наклон) — Код стрелки вниз при смене наклона
arrowsOnSlopeUpSize Размер стрелки вверх (наклон) — Размер стрелки вверх при смене наклона
arrowsOnSlopeDnSize Размер стрелки вниз (наклон) — Размер стрелки вниз при смене наклона
arrowsOnZeroCross Стрелки при пересечении нуля — Отображение стрелок при пересечении нуля
arrowsOnZeroCrossUpColor Цвет стрелки вверх (нуль) — Цвет стрелки вверх при пересечении нуля
arrowsOnZeroCrossDnColor Цвет стрелки вниз (нуль) — Цвет стрелки вниз при пересечении нуля
arrowsOnZeroCrossUpCode Код стрелки вверх (нуль) — Код стрелки вверх при пересечении нуля
arrowsOnZeroCrossDnCode Код стрелки вниз (нуль) — Код стрелки вниз при пересечении нуля
arrowsOnZeroCrossUpSize Размер стрелки вверх (нуль) — Размер стрелки вверх при пересечении нуля
arrowsOnZeroCrossDnSize Размер стрелки вниз (нуль) — Размер стрелки вниз при пересечении нуля
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers    5
#property indicator_color1     MediumVioletRed
#property indicator_color2     MediumVioletRed
#property indicator_color3     LimeGreen
#property indicator_color4     LimeGreen
#property indicator_color5     Gold
#property indicator_width1     2
#property indicator_width3     2
#property indicator_width5     2
#property indicator_levelcolor DarkSlateGray

extern string TimeFrame                 = "Current time frame";
extern int    FastMaPeriod              = 5;
extern int    FastMaMode                = MODE_EMA;
extern int    SlowMaPeriod              = 34;
extern int    SlowMaMode                = MODE_EMA;
extern int    AoPrice                   = PRICE_MEDIAN;
extern bool   divergenceVisible         = true;
extern bool   divergenceOnValuesVisible = true;
extern bool   divergenceOnChartVisible  = true;
extern color  divergenceBullishColor    = Green;
extern color  divergenceBearishColor    = Red;
extern string divergenceUniqueID        = "AO divergence1";
extern bool   HistogramOnSlope          = true;
extern bool   Interpolate               = true;

extern string MaModes                   = "";
extern string __0                       = "SMA";
extern string __1                       = "EMA";
extern string __2                       = "Double smoothed EMA";
extern string __3                       = "Double EMA (DEMA)";
extern string __4                       = "Triple EMA (TEMA)";
extern string __5                       = "Smoothed MA";
extern string __6                       = "Linear weighted MA";
extern string __7                       = "Parabolic weighted MA";
extern string __8                       = "Alexander MA";
extern string __9                       = "Volume weghted MA";
extern string __10                      = "Hull MA";
extern string __11                      = "Triangular MA";
extern string __12                      = "Sine weighted MA";
extern string __13                      = "Linear regression";
extern string __14                      = "IE/2";
extern string __15                      = "NonLag MA";
extern string __16                      = "Zero lag EMA";
extern string __17                      = "Leader EMA";
extern string __18                      = "Super smoother";
extern string __19                      = "Smoother";

extern string note                      = "turn on Alert = true; turn off = false";
extern bool   alertsOn                  = true;
extern bool   alertsOnSlope             = false;
extern bool   alertsOnZeroCross         = true;
extern bool   alertsOnCurrent           = true;
extern bool   alertsMessage             = true;
extern bool   alertsSound               = false;
extern bool   alertsEmail               = false;
extern bool   alertsNotify              = false;

extern bool   arrowsVisible             = true;
extern string arrowsIdentifier          = "AO Arrows1";
extern double arrowsDisplacement        = 1.0;

extern bool   arrowsOnSlope             = false;
extern color  arrowsOnSlopeUpColor      = LimeGreen;
extern color  arrowsOnSlopeDnColor      = Red;
extern int    arrowsOnSlopeUpCode       = 241;
extern int    arrowsOnSlopeDnCode       = 242;
extern int    arrowsOnSlopeUpSize       = 1;
extern int    arrowsOnSlopeDnSize       = 1;

extern bool   arrowsOnZeroCross         = true;
extern color  arrowsOnZeroCrossUpColor  = LimeGreen;
extern color  arrowsOnZeroCrossDnColor  = Red;
extern int    arrowsOnZeroCrossUpCode   = 119;
extern int    arrowsOnZeroCrossDnCode   = 119;
extern int    arrowsOnZeroCrossUpSize   = 3;
extern int    arrowsOnZeroCrossDnSize   = 3;

double Upa[];
double Upb[];
double Dna[];
double Dnb[];
double ao[];
double trend[];
double slope[];

string indicatorFileName;
bool   returnBars;
bool   calculateValue;
int    timeFrame;
string shortName;

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

int deinit()
{

   int lookForLength = StringLen(divergenceUniqueID);

   for (int i=ObjectsTotal()-1; i>=0; i--) {

   string objectName = ObjectName(i);
   if (StringSubstr(objectName,0,lookForLength) == divergenceUniqueID) ObjectDelete(objectName);

   }

   if (!calculateValue && arrowsVisible) deleteArrows();

return(0);
}

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

double getPrice(int type, int i)
{
   switch (type)
   {
      case 7:     return((Open[i]+Close[i])/2.0);
      case 8:     return((Open[i]+High[i]+Low[i]+Close[i])/4.0);
      default :   return(iMA(NULL,0,1,0,MODE_SMA,type,i));
   }      
}

string methodNames[] = {"SMA","EMA","Double smoothed EMA","Double EMA","Triple EMA","Smoothed MA","Linear weighted MA","Parabolic weighted MA","Alexander MA","Volume weghted MA","Hull MA","Triangular MA","Sine weighted MA","Linear regression","IE/2","NonLag MA","Zero lag EMA","Leader EMA","Super smoother","Smoothed"};
string getAverageName(int& method)
{
   int max = ArraySize(methodNames)-1;
      method=MathMax(MathMin(method,max),0); return(methodNames[method]);
}

#define _maWorkBufferx1 2
#define _maWorkBufferx2 4
#define _maWorkBufferx3 6
#define _maWorkBufferx5 10

double iCustomMa(int mode, double price, double length, int i, int instanceNo=0)
{
   int r = Bars-i-1;
   switch (mode)
   {
      case 0  : return(iSma(price,length,r,instanceNo));
      case 1  : return(iEma(price,length,r,instanceNo));
      case 2  : return(iDsema(price,length,r,instanceNo));
      case 3  : return(iDema(price,length,r,instanceNo));
      case 4  : return(iTema(price,length,r,instanceNo));
      case 5  : return(iSmma(price,length,r,instanceNo));
      case 6  : return(iLwma(price,length,r,instanceNo));
      case 7  : return(iLwmp(price,length,r,instanceNo));
      case 8  : return(iAlex(price,length,r,instanceNo));
      case 9  : return(iWwma(price,length,r,instanceNo));
      case 10 : return(iHull(price,length,r,instanceNo));
      case 11 : return(iTma(price,length,r,instanceNo));
      case 12 : return(iSineWMA(price,length,r,instanceNo));
      case 13 : return(iLinr(price,length,r,instanceNo));
      case 14 : return(iIe2(price,length,r,instanceNo));
      case 15 : return(iNonLagMa(price,length,r,instanceNo));
      case 16 : return(iZeroLag(price,length,r,instanceNo));
      case 17 : return(iLeader(price,length,r,instanceNo));
      case 18 : return(iSsm(price,length,r,instanceNo));
      case 19 : return(iSmooth(price,length,r,instanceNo));
      default : return(0);
   }
}

double workSma[][_maWorkBufferx2];
double iSma(double price, int period, int r, int instanceNo=0)
{
   if (ArrayRange(workSma,0)!= Bars) ArrayResize(workSma,Bars); instanceNo *= 2;

   workSma[r][instanceNo] = price;
   if (r>=period)
          workSma[r][instanceNo+1] = workSma[r-1][instanceNo+1]+(workSma[r][instanceNo]-workSma[r-period][instanceNo])/period;
   else { workSma[r][instanceNo+1] = 0; for(int k=0; k<period && (r-k)>=0; k++) workSma[r][instanceNo+1] += workSma[r-k][instanceNo];  
          workSma[r][instanceNo+1] /= k; }
   return(workSma[r][instanceNo+1]);
}

double workEma[][_maWorkBufferx1];
double iEma(double price, double period, int r, int instanceNo=0)
{
   if (ArrayRange(workEma,0)!= Bars) ArrayResize(workEma,Bars);

   double alpha = 2.0 / (1.0+period);
          workEma[r][instanceNo] = workEma[r-1][instanceNo]+alpha*(price-workEma[r-1][instanceNo]);
   return(workEma[r][instanceNo]);
}

double workDsema[][_maWorkBufferx2];
#define _ema1 0
#define _ema2 1

double iDsema(double price, double period, int r, int instanceNo=0)
{
   if (ArrayRange(workDsema,0)!= Bars) ArrayResize(workDsema,Bars); instanceNo*=2;

   double alpha = 2.0 /(1.0+MathSqrt(period));
          workDsema[r][_ema1+instanceNo] = workDsema[r-1][_ema1+instanceNo]+alpha*(price                         -workDsema[r-1][_ema1+instanceNo]);
          workDsema[r][_ema2+instanceNo] = workDsema[r-1][_ema2+instanceNo]+alpha*(workDsema[r][_ema1+instanceNo]-workDsema[r-1][_ema2+instanceNo]);
   return(workDsema[r][_ema2+instanceNo]);
}

double workDema[][_maWorkBufferx2];
#define _dema1 0
#define _dema2 1

double iDema(double price, double period, int r, int instanceNo=0)
{
   if (ArrayRange(workDema,0)!= Bars) ArrayResize(workDema,Bars); instanceNo*=2;

   double alpha = 2.0 / (1.0+period);
          workDema[r][_dema1+instanceNo] = workDema[r-1][_dema1+instanceNo]+alpha*(price                         -workDema[r-1][_dema1+instanceNo]);
          workDema[r][_dema2+instanceNo] = workDema[r-1][_dema2+instanceNo]+alpha*(workDema[r][_dema1+instanceNo]-workDema[r-1][_dema2+instanceNo]);
   return(workDema[r][_dema1+instanceNo]*2.0-workDema[r][_dema2+instanceNo]);
}

double workTema[][_maWorkBufferx3];
#define _tema1 0
#define _tema2 1
#define _tema3 2

double iTema(double price, double period, int r, int instanceNo=0)
{
   if (ArrayRange(workTema,0)!= Bars) ArrayResize(workTema,Bars); instanceNo*=3;

   double alpha = 2.0 / (1.0+period);
          workTema[r][_tema1+instanceNo] = workTema[r-1][_tema1+instanceNo]+alpha*(price                         -workTema[r-1][_tema1+instanceNo]);
          workTema[r][_tema2+instanceNo] = workTema[r-1][_tema2+instanceNo]+alpha*(workTema[r][_tema1+instanceNo]-workTema[r-1][_tema2+instanceNo]);
          workTema[r][_tema3+instanceNo] = workTema[r-1][_tema3+instanceNo]+alpha*(workTema[r][_tema2+instanceNo]-workTema[r-1][_tema3+instanceNo]);
   return(workTema[r][_tema3+instanceNo]+3.0*(workTema[r][_tema1+instanceNo]-workTema[r][_tema2+instanceNo]));
}

double workSmma[][_maWorkBufferx1];
double iSmma(double price, double period, int r, int instanceNo=0)
{
   if (ArrayRange(workSmma,0)!= Bars) ArrayResize(workSmma,Bars);

   if (r<period)
         workSmma[r][instanceNo] = price;
   else  workSmma[r][instanceNo] = workSmma[r-1][instanceNo]+(price-workSmma[r-1][instanceNo])/period;
   return(workSmma[r][instanceNo]);
}

double workLwma[][_maWorkBufferx1];
double iLwma(double price, double period, int r, int instanceNo=0)
{
   if (ArrayRange(workLwma,0)!= Bars) ArrayResize(workLwma,Bars);

   workLwma[r][instanceNo] = price;
      double sumw = period;
      double sum  = period*price;

      for(int k=1; k<period && (r-k)>=0; k++)
      {
         double weight = period-k;
                sumw  += weight;
                sum   += weight*workLwma[r-k][instanceNo];  
      }             
      return(sum/sumw);
}

double workLwmp[][_maWorkBufferx1];
double iLwmp(double price, double period, int r, int instanceNo=0)
{
   if (ArrayRange(workLwmp,0)!= Bars) ArrayResize(workLwmp,Bars);

   workLwmp[r][instanceNo] = price;
      double sumw = period*period;
      double sum  = sumw*price;

      for(int k=1; k<period && (r-k)>=0; k++)
      {
         double weight = (period-k)*(period-k);
                sumw  += weight;
                sum   += weight*workLwmp[r-k][instanceNo];  
      }             
      return(sum/sumw);
}

double workAlex[][_maWorkBufferx1];
double iAlex(double price, double period, int r, int instanceNo=0)
{
   if (ArrayRange(workAlex,0)!= Bars) ArrayResize(workAlex,Bars);
   if (period<4) return(price);

   workAlex[r][instanceNo] = price;
      double sumw = period-2;
      double sum  = sumw*price;

      for(int k=1; k<period && (r-k)>=0; k++)
      {
         double weight = period-k-2;
                sumw  += weight;
                sum   += weight*workAlex[r-k][instanceNo];  
      }             
      return(sum/sumw);
}

double workTma[][_maWorkBufferx1];
double iTma(double price, double period, int r, int instanceNo=0)
{
   if (ArrayRange(workTma,0)!= Bars) ArrayResize(workTma,Bars);

   workTma[r][instanceNo] = price;

      double half = (period+1.0)/2.0;
      double sum  = price;
      double sumw = 1;

      for(int k=1; k<period && (r-k)>=0; k++)
      {
         double weight = k+1; if (weight > half) weight = period-k;
                sumw  += weight;
                sum   += weight*workTma[r-k][instanceNo];  
      }             
      return(sum/sumw);
}

double workSineWMA[][_maWorkBufferx1];
#define Pi 3.14159265358979323846264338327950288

double iSineWMA(double price, int period, int r, int instanceNo=0)
{
   if (period<1) return(price);
   if (ArrayRange(workSineWMA,0)!= Bars) ArrayResize(workSineWMA,Bars);

   workSineWMA[r][instanceNo] = price;
      double sum  = 0;
      double sumw = 0;

      for(int k=0; k<period && (r-k

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

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

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

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

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

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

Стоимость полного кода
2 595,70₽ ≈ $31.72