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

XP Moving Average

cheeta xpma.mq5
Вы автор или правообладатель?

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

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

О программе

xpMA — это пользовательский индикатор для MetaTrader 4, рассчитывающий и отображающий на графике различные типы скользящих средних: SMA, EMA, SMMA, LWMA, DEMA, TEMA, T3MA, JMA, HMA, DECEMA и SALT. В зависимости от выбранного типа и параметров индикатор строит основную линию и сравнивает её со средним значением за заданный шаг, определяя направление тренда.

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

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

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

НастройкаОписание
TimeFrame Таймфрейм — Целочисленный параметр, задаёт таймфрейм, на котором выполняется расчёт индикатора (0 — текущий таймфрейм).
MA_Period Период скользящей средней — Целочисленный параметр, задаёт период расчёта скользящей средней.
MA_Type Тип скользящей средней — Целочисленный параметр, выбирает тип скользящей средней: SMA (0), EMA (1), SMMA (2), LWMA (3), DEMA (4), TEMA (5), T3MA (6), JMA (7), HMA (8), DECEMA (9), SALT (10).
MA_Applied Применяемая цена — Целочисленный параметр, определяет тип цены, используемой при расчёте скользящей средней (Close, Open, High, Low, Median, Typical, Weighted).
T3MA_VolumeFactor Коэффициент объёма T3MA — Числовой параметр (double), задаёт коэффициент объёма для расчёта индикатора T3MA при соответствующем типе скользящей средней.
JMA_Phase Фаза JMA — Числовой параметр (double), задаёт фазу для расчёта индикатора JMA при соответствующем типе скользящей средней.
Step_Period Период шага — Целочисленный параметр, задаёт количество последующих баров, используемых для расчёта сравнительного среднего значения при определении направления.
DebugMode Режим отладки — Логический переключатель. При значении true при каждом запуске индикатора делает снимок экрана и сохраняет его в файл.
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Yellow
#property indicator_color2 Crimson
#property indicator_color3 Green

#define MODE_DEMA    4
#define MODE_TEMA    5
#define MODE_T3MA    6
#define MODE_JMA     7
#define MODE_HMA     8
#define MODE_DECEMA  9
#define MODE_SALT    10

/* Moving average types constants:
------------------------------------
MODE_SMA       0     Simple moving average, 
MODE_EMA       1     Exponential moving average, 
MODE_SMMA      2     Smoothed moving average, 
MODE_LWMA      3     Linear weighted moving average.
MODE_DEMA      4     Double Exponential Moving Average. 
MODE_TEMA      5     Triple Exponential Moving Average.
MODE_T3MA      6     T3 Moving Average. 
MODE_JMA       7     Jurik Moving Average. 
MODE_HMA       8     Hull Moving Average. 
MODE_DECEMA    9     DECEMA Moving Average. 
MODE_SALT      10    SALT Indicator. 

------------------------------------*/

/* Applied price constants:
-------------------------------
PRICE_CLOSE    0     Close price. 
PRICE_OPEN     1     Open price. 
PRICE_HIGH     2     High price. 
PRICE_LOW      3     Low price. 
PRICE_MEDIAN   4     Median price, (high+low)/2. 
PRICE_TYPICAL  5     Typical price, (high+low+close)/3. 
PRICE_WEIGHTED 6     Weighted close price, (high+low+close+close)/4.
--------------------------------- */

extern   int      TimeFrame               = 0;
extern   int      MA_Period               = 60;
extern   int      MA_Type                 = 3;
extern   int      MA_Applied              = 4;
extern   double   T3MA_VolumeFactor       = 0.8;
extern   double   JMA_Phase               = 0;
extern   int      Step_Period             = 4;

extern   bool     DebugMode               = false;

bool     Alert_On                = true;
bool     Arrows_On               = true;
int      UpArrowCode             = 159;
int      DownArrowCode           = 159;
color    UpArrowColor            = Lime;
color    DownArrowColor          = Red;
int      UpArrowSize             = 1;
int      DownArrowSize           = 1;
bool     Email_Alert             = false;
string   pro  = "xpMA_v9";
string   ver  = "";

double UpBuffer[];
double DownBuffer[];
double Buffer3[];
double buffer[];
double tempbuffer[];
double matriple[];
double signal[];

int    nShift;   

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

int deinit()
{
   DeleteStamp();
   DeleteAllObjects();
   return(0);
}

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

   StampVersion(pro,ver,5,20);

   int limit;
   int i = 0;

   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

   switch (MA_Type)
   {
      case 0:
      case 1:
      case 2:
      case 3:
            {
                  for(i=0; i<limit; i++)
                  {
                     buffer[i] = iMA(NULL,TimeFrame,MA_Period,0,MA_Type,MA_Applied,i);
                  }
            }
            break;

      case 4:
            {
                  for(i=0; i<limit; i++)
                  {
                     tempbuffer[i] = iMA(NULL,TimeFrame,MA_Period,0,MODE_EMA,MA_Applied,i);
                  }
                  for(i=0; i<limit; i++)
                  {
                     matriple[i] = iMAOnArray(tempbuffer,0,MA_Period,0,MODE_EMA,i);
                  }
                  for(i=0; i<limit; i++)
                  {
                     buffer[i] = iMAOnArray(matriple,0,MA_Period,0,MODE_EMA,i);
                  }
            }
            break;

      case 5:
            {
                  for(i=0; i<limit; i++)
                  {
                     tempbuffer[i] = iMA(NULL,TimeFrame,MA_Period,0,MODE_EMA,MA_Applied,i);
                  }
                  for(i=0; i<limit; i++)
                  {
                     buffer[i] = iMAOnArray(tempbuffer,0,MA_Period,0,MODE_EMA,i);
                  }
            }
            break;

      case 6:
            {
                  for(i=0; i<limit; i++)
                  {
                     buffer[i] = iCustom(NULL,TimeFrame,"T3MA",MA_Period,T3MA_VolumeFactor,0,i);
                  }
            }
            break;
      case 7:
            {
                  for(i=0; i<limit; i++)
                  {
                     buffer[i] = iCustom(NULL,TimeFrame,"JMA",MA_Period,JMA_Phase,0,i);
                  }
            }
            break;

      case 8:
            {
                  for(i=0; i<limit; i++)
                  {
                     buffer[i] = iCustom(NULL,TimeFrame,"HMA",MA_Period,0,i);
                  }
            }
            break;

      case 9:
            {
                  for(i=0; i<limit; i++)
                  {
                     buffer[i] = iCustom(NULL,TimeFrame,"DECEMA_v1",MA_Period,MA_Applied,0,i);
                  }
            }
            break;

      case 10:
            {
                  for(i=0; i<limit; i++)
                  {
                     buffer[i] = iCustom(NULL,TimeFrame,"SATL",0,i);
                  }
            }
            break;

   }

   for(int shift=0; shift<limit; shift++)
   {
       UpBuffer[shift] = buffer[shift];
       DownBuffer[shift] = buffer[shift];
       Buffer3[shift] = buffer[shift];
   }                   

   /*for(shift=0; shift<limit; shift++)
   {
      if (buffer[shift]<buffer[shift+1])
      {
         UpBuffer[shift] = EMPTY_VALUE;
      }
      else if (buffer[shift]>buffer[shift+1] )
      {
         DownBuffer[shift] = EMPTY_VALUE;
      } 
     else
      {
         UpBuffer[shift] = CLR_NONE;
         DownBuffer[shift] = CLR_NONE;
      }
   }*/

   for(shift=0; shift<limit; shift++)
   {
      double dMA = 0;
      for(int k = shift+1; k <= shift+Step_Period; k++){
         dMA += buffer[k];
      }
      dMA = dMA / Step_Period;

      if (buffer[shift] < dMA)
      {
         UpBuffer[shift] = EMPTY_VALUE;
      }
      else if (buffer[shift]>dMA)
      {
         DownBuffer[shift] = EMPTY_VALUE;
      } 
      else
      {
         UpBuffer[shift] = EMPTY_VALUE;
         DownBuffer[shift] = EMPTY_VALUE;
      }
   }
   for(shift=0; shift<limit; shift++)
   {
         signal[shift]=0;
         if(UpBuffer[shift+1] == EMPTY_VALUE &&  UpBuffer[shift] != EMPTY_VALUE && Buffer3[shift+1] != UpBuffer[shift] )
            {
               if(Arrows_On && shift !=0) DrawObject(1,shift, buffer[shift] - nShift*Point);
               if(Arrows_On && shift ==0) DrawOnce(1,shift, buffer[shift] - nShift*Point,1);
               signal[shift] = 1;
            }

         if(DownBuffer[shift+1] == EMPTY_VALUE &&  DownBuffer[shift] != EMPTY_VALUE && Buffer3[shift+1] != DownBuffer[shift])
           {
               if(Arrows_On && shift !=0

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

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

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

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

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

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

Стоимость полного кода
970,60₽ ≈ $11.86