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

tma+cg mladen nrp_edit_ai.mq5

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

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

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

О программе

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

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

НастройкаОписание
TimeFrame Таймфрейм — Задаёт таймфрейм для расчёта индикатора; поддерживается как текстовое обозначение (например, H1, D1), так и специальное значение для внутренних режимов расчёта.
HalfLength Половина длины — Определяет половину периода сглаживания, используемого при расчёте центральной линии индикатора; минимальное значение ограничено единицей.
Price Тип цены — Задаёт тип ценового значения (например, взвешенная цена), используемого в качестве исходных данных для расчёта.
BandsDeviations Отклонение полос — Множитель отклонения верхней и нижней полос от центральной линии, определяющий ширину канала.
Interpolate Интерполяция — Включает или отключает интерполяцию значений индикатора между барами для более плавного отображения на графике.
alertsOn Уведомления включены — Общий переключатель для включения или отключения системы уведомлений индикатора.
alertsOnCurrent Уведомления по текущему бару — Определяет, проверяются ли условия уведомления на текущем (нулевом) баре или на предыдущем.
alertsOnHighLow Уведомления по High/Low — При включении уведомления срабатывают при пробое полос по максимуму или минимуму свечи; при выключении — по цене закрытия.
Получить полный код

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

#property description "edited by eevviill"
#property description "no repaint"

#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1  clrNONE 
#property indicator_color2  SlateGray
#property indicator_color3  SlateGray
#property indicator_color4  Lime
#property indicator_color5  Red
#property indicator_style1  STYLE_SOLID 
#property indicator_width4  1
#property indicator_width5  1

extern string TimeFrame       = "current time frame";
extern int    HalfLength      = 56;
extern int    Price           = PRICE_WEIGHTED;
extern double BandsDeviations = 1.618;
extern bool   Interpolate     = true;
extern bool   alertsOn        = False;
extern bool   alertsOnCurrent = True;
extern bool   alertsOnHighLow = True;
bool   alertsMessage   = False;
bool   alertsSound     = False;
bool   alertsEmail     = false;

double tmBuffer[];
double upBuffer[];
double dnBuffer[];
double wuBuffer[];
double wdBuffer[];
double upArrow[];
double dnArrow[];

string IndicatorFileName;
bool   calculatingTma = false;
bool   returningBars  = false;
int    timeFrame;

int lastDirection = 0; // 0: no direction, 1: up, -1: down

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

int deinit() { return(0); }

int start()
{
      // код доступен только после оплаты
   }
   int counted_bars=IndicatorCounted();
   int i,limit;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=MathMin(Bars-1,Bars-counted_bars+HalfLength);

   if (returningBars)  { tmBuffer[0] = limit; return(0); }
   if (calculatingTma) { calculateTma(limit); return(0); }
   if (timeFrame > Period()) limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,IndicatorFileName,"returnBars",0,0)*timeFrame/Period()));

   if(limit<Bars-20) limit=1;
   for(i = limit; i >= 0; i--)
   {
      int      shift1 = iBarShift(NULL,timeFrame,Time[i]);
      datetime time1  = iTime    (NULL,timeFrame,shift1);

      tmBuffer[i] = iCustom(NULL,timeFrame,IndicatorFileName,"calculateTma",HalfLength,Price,BandsDeviations,0,shift1);
      upBuffer[i] = iCustom(NULL,timeFrame,IndicatorFileName,"calculateTma",HalfLength,Price,BandsDeviations,1,shift1);
      dnBuffer[i] = iCustom(NULL,timeFrame,IndicatorFileName,"calculateTma",HalfLength,Price,BandsDeviations,2,shift1);

      upArrow[i] = EMPTY_VALUE;
      dnArrow[i] = EMPTY_VALUE;            

      if (High[i+1]>upBuffer[i+1] && Close[i+1]>Open[i+1] && Close[i]<Open[i]) {
         if (lastDirection != 1) {  // Only draw if last direction was not up
            upArrow[i] = High[i]+iATR(NULL,0,20,i);
            lastDirection = 1;
         }
      }
      if (Low[i+1]<dnBuffer[i+1] && Close[i+1]<Open[i+1] && Close[i]>Open[i]) {
         if (lastDirection != -1) {  // Only draw if last direction was not down
            dnArrow[i] = Low[i]-iATR(NULL,0,20,i);
            lastDirection = -1;
         }
      }

      if (timeFrame <= Period() || shift1==iBarShift(NULL,timeFrame,Time[i-1])) continue;
      if (!Interpolate) continue;

      for(int n = 1; i+n < Bars && Time[i+n] >= time1; n++) continue;
      double factor = 1.0 / n;
      for(int k = 1; k < n; k++)
      {
         tmBuffer[i+k] = k*factor*tmBuffer[i+n] + (1.0-k*f

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

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

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

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

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

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

Стоимость полного кода
585,20₽ ≈ $7.15