Требуется добавить алерты в готовый индикатор-стрелочник

MQL5 Индикаторы

Работа завершена

Время выполнения 11 минут
Отзыв от заказчика
Работа была не сложная, но выполнена быстро и без замечаний. Результатом доволен.
Отзыв от исполнителя
Отличный заказчик! Спасибо за заказ!

Техническое задание

Требуется добавить алерты (всплывающее окно, звуковой сигнал, пуш-уведомление, e-mail)  в готовый индикатор-стрелочник (tma centered  bands arr) при появлении стрелок
//------------------------------------------------------------------

   #property copyright "mladen"
   #property link      "www.forex-tsd.com"

// Inserted by Ale: rebound arrows and TMA angle caution

//------------------------------------------------------------------

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_plots   6

#property indicator_label1  "Centered TMA"
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_color1  clrLightSkyBlue,clrPink
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
#property indicator_label2  "Centered TMA upper band"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrLightSkyBlue
#property indicator_style2  STYLE_DOT
#property indicator_label3  "Centered TMA lower band"
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrPink
#property indicator_style3  STYLE_DOT
// ** inserted code:
#property indicator_label4  "Rebound down"
#property indicator_type4   DRAW_ARROW
#property indicator_color4  clrPink
#property indicator_width4  2
#property indicator_label5  "Rebound up"
#property indicator_type5   DRAW_ARROW
#property indicator_color5  clrLightSkyBlue
#property indicator_width5  2
#property indicator_label6  "Centered TMA angle caution"
#property indicator_type6   DRAW_ARROW
#property indicator_color6  clrGold
#property indicator_width6  3
// **

//
//
//
//
//

enum enPrices
{
   pr_close,      // Close
   pr_open,       // Open
   pr_high,       // High
   pr_low,        // Low
   pr_median,     // Median
   pr_typical,    // Typical
   pr_weighted,   // Weighted
   pr_average,    // Average (high+low+oprn+close)/4
   pr_haclose,    // Heiken ashi close
   pr_haopen ,    // Heiken ashi open
   pr_hahigh,     // Heiken ashi high
   pr_halow,      // Heiken ashi low
   pr_hamedian,   // Heiken ashi median
   pr_hatypical,  // Heiken ashi typical
   pr_haweighted, // Heiken ashi weighted
   pr_haaverage   // Heiken ashi average
};

//
//
//
//
//

input int       HalfLength    = 12;       // Centered TMA half period
input enPrices  Price         = pr_weighted; // Price to use
input int       AtrPeriod     = 100;      // Average true range period 
input double    AtrMultiplier = 2;        // Average true range multiplier
// ** inserted code:
input int                               TMAangle                        = 4;                            // Centered TMA angle caution. In pips
// **

//
//
//
//
//

double tmac[];
double tmau[];
double tmad[];
double colorBuffer[];
// ** inserted code:
double
        ReboundD[], ReboundU[],
        Caution[]
;
// **

//------------------------------------------------------------------
//                                                                  
//------------------------------------------------------------------
//
//
//
//
//

int OnInit()
{
   SetIndexBuffer(0,tmac,INDICATOR_DATA); 
   SetIndexBuffer(1,colorBuffer,INDICATOR_COLOR_INDEX); 
   SetIndexBuffer(2,tmau,INDICATOR_DATA); 
   SetIndexBuffer(3,tmad,INDICATOR_DATA); 
// ** inserted code:
        SetIndexBuffer(4,ReboundD,INDICATOR_DATA); PlotIndexSetInteger(3, PLOT_ARROW, 226);
        SetIndexBuffer(5,ReboundU,INDICATOR_DATA); PlotIndexSetInteger(4, PLOT_ARROW, 225);
        SetIndexBuffer(6,Caution,INDICATOR_DATA); PlotIndexSetInteger(5, PLOT_ARROW, 251);
// **

   //
   //
   //
   //
   //
            
   IndicatorSetString(INDICATOR_SHORTNAME," TMA centered ("+string(HalfLength)+")");
   return(0);
}

//------------------------------------------------------------------
//                                                                  
//------------------------------------------------------------------
//
//
//
//
//

double prices[];

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
{
   //
   //
   //
   //
   //

   if (ArraySize(prices)!=rates_total) ArrayResize(prices,rates_total);
   for (int i=(int)MathMax(prev_calculated-1,         0); i<rates_total; i++) prices[i] = getPrice(Price,open,close,high,low,i,rates_total);
   for (int i=(int)MathMax(prev_calculated-HalfLength,0); i<rates_total; i++)
   {
      double atr = 0;
         for (int j=0; j<AtrPeriod && (i-j-11)>=0; j++) atr += MathMax(high[i-j-10],close[i-j-11])-MathMin(low[i-j-10],close[i-j-11]);
                                                        atr /= AtrPeriod;
      
      double sum  = (HalfLength+1)*prices[i];
      double sumw = (HalfLength+1);
      for(int j=1, k=HalfLength; j<=HalfLength; j++, k--)
      {
         if ((i-j)>=0)
         {
            sum  += k*prices[i-j];
            sumw += k;
         }            
         if ((i+j)<rates_total)
         {
            sum  += k*prices[i+j];
            sumw += k;
         }
      }
      tmac[i] = sum/sumw;   
      if (i>0)
      {
         colorBuffer[i] = colorBuffer[i-1];
           if (tmac[i] > tmac[i-1]) colorBuffer[i]= 0;
           if (tmac[i] < tmac[i-1]) colorBuffer[i]= 1;
      }                     
      tmau[i] = tmac[i]+AtrMultiplier*atr;
      tmad[i] = tmac[i]-AtrMultiplier*atr;


// ** inserted code:
                ReboundD[i] = ReboundU[i] = Caution[i] = EMPTY_VALUE;
                
                if(i > 0) {
                        if(high[i-1] > tmau[i-1] && close[i-1] > open[i-1] && close[i] < open[i]) {
                                ReboundD[i] = high[i] + AtrMultiplier*atr/2;
                                if(tmac[i] - tmac[i-1] > TMAangle*_Point) Caution[i] = ReboundD[i] + 10*_Point;
                        }
                        if(low[i-1] < tmad[i-1] && close[i-1] < open[i-1] && close[i] > open[i]) {
                                ReboundU[i] = low[i] - AtrMultiplier*atr/2;
                                if(tmac[i-1] - tmac[i] > TMAangle*_Point) Caution[i] = ReboundU[i] - 10*_Point;
                        }
                }
// **

   }
        
   return(rates_total);
}



//------------------------------------------------------------------
//                                                                  
//------------------------------------------------------------------
//
//
//
//
//


double workHa[][4];
double getPrice(enPrices price, const double& open[], const double& close[], const double& high[], const double& low[], int i, int bars)
{
  if (price>=pr_haclose && price<=pr_haaverage)
   {
      if (ArrayRange(workHa,0)!= bars) ArrayResize(workHa,bars);

         //
         //
         //
         //
         //
         
         double haOpen;
         if (i>0)
                haOpen  = (workHa[i-1][2] + workHa[i-1][3])/2.0;
         else   haOpen  = open[i]+close[i];
         double haClose = (open[i] + high[i] + low[i] + close[i]) / 4.0;
         double haHigh  = MathMax(high[i], MathMax(haOpen,haClose));
         double haLow   = MathMin(low[i] , MathMin(haOpen,haClose));

         if(haOpen  <haClose) { workHa[i][0] = haLow;  workHa[i][1] = haHigh; } 
         else                 { workHa[i][0] = haHigh; workHa[i][1] = haLow;  } 
                                workHa[i][2] = haOpen;
                                workHa[i][3] = haClose;
         //
         //
         //
         //
         //
         
         switch (price)
         {
            case pr_haclose:     return(haClose);
            case pr_haopen:      return(haOpen);
            case pr_hahigh:      return(haHigh);
            case pr_halow:       return(haLow);
            case pr_hamedian:    return((haHigh+haLow)/2.0);
            case pr_hatypical:   return((haHigh+haLow+haClose)/3.0);
            case pr_haweighted:  return((haHigh+haLow+haClose+haClose)/4.0);
            case pr_haaverage:   return((haHigh+haLow+haClose+haOpen)/4.0);
         }
   }
   
   //
   //
   //
   //
   //
   
   switch (price)
   {
      case pr_close:     return(close[i]);
      case pr_open:      return(open[i]);
      case pr_high:      return(high[i]);
      case pr_low:       return(low[i]);
      case pr_median:    return((high[i]+low[i])/2.0);
      case pr_typical:   return((high[i]+low[i]+close[i])/3.0);
      case pr_weighted:  return((high[i]+low[i]+close[i]+close[i])/4.0);
      case pr_average:   return((high[i]+low[i]+close[i]+open[i])/4.0);
   }
   return(0);
}

Откликнулись

1
Разработчик 1
Оценка
(430)
Проекты
488
33%
Арбитраж
25
40% / 44%
Просрочено
7
1%
Загружен
2
Разработчик 2
Оценка
(356)
Проекты
632
26%
Арбитраж
89
73% / 13%
Просрочено
12
2%
Свободен
3
Разработчик 3
Оценка
(156)
Проекты
167
34%
Арбитраж
3
33% / 33%
Просрочено
3
2%
Свободен
4
Разработчик 4
Оценка
(319)
Проекты
377
33%
Арбитраж
2
100% / 0%
Просрочено
0
Работает
5
Разработчик 5
Оценка
(43)
Проекты
50
28%
Арбитраж
2
0% / 0%
Просрочено
0
Свободен
6
Разработчик 6
Оценка
(338)
Проекты
531
32%
Арбитраж
23
65% / 9%
Просрочено
15
3%
Свободен
7
Разработчик 7
Оценка
(6)
Проекты
11
27%
Арбитраж
0
Просрочено
0
Свободен
8
Разработчик 8
Оценка
(9)
Проекты
21
19%
Арбитраж
3
67% / 0%
Просрочено
3
14%
Работает
9
Разработчик 9
Оценка
(714)
Проекты
1033
39%
Арбитраж
47
49% / 23%
Просрочено
84
8%
Свободен
10
Разработчик 10
Оценка
(122)
Проекты
178
54%
Арбитраж
3
33% / 33%
Просрочено
6
3%
Свободен
11
Разработчик 11
Оценка
(37)
Проекты
53
25%
Арбитраж
0
Просрочено
5
9%
Работает
12
Разработчик 12
Оценка
(251)
Проекты
402
38%
Арбитраж
82
41% / 20%
Просрочено
70
17%
Работает
13
Разработчик 13
Оценка
(559)
Проекты
927
48%
Арбитраж
301
59% / 25%
Просрочено
124
13%
Загружен
14
Разработчик 14
Оценка
(66)
Проекты
143
34%
Арбитраж
11
9% / 55%
Просрочено
26
18%
Работает
Похожие заказы
Нужен индикатор , рисующий вертикальную линию через все подокна. Линия рисуется от последней закрытой (завершенной ) свечи и после , закрытия следующей свечи , перерисовывается на нее, а предыдущая линия удаляется автоматически
Есть текущий сеточный советник я хочу его модифицировать либо же создать с нуля новый сеточный мультивалютный советник. Мультивалютность нужна для уменьшения просадки и с целью частичного хеджирования. Нужен человек кто делал что-то подобное и имеет опыт написания мультивалютных советников
Нужно решение которое поможет сокращать просадку когда советник попадает в ситуацию с зависающими убыточными сделками На данный момент алгоритм советника прост это сетка. Нужны варианты которые помогут улучшить стратегию. Пожалуйста пишите ваши реальные варианты из практики
Индикатор оригинала не перерисовывается, соответственно когда будете вносить изменения в алгоритме индикатора, тоже не должен перерисовыватся. Необходимо найти в алгоритме индикатора, где есть условия, при которой индикатор выдает уведомления. Нужно посмотреть с расчетом на одну свечу назад на уже закрытой свече на каких условиях находится когда свеча открывалась, и на основание этого создать новое условие, чтобы
Нужно сконвертировать индикатор на языке MQL5( платформа MT5) в Pine Script(платформа Tradingview) Нужно сконвертировать индикатор на языке MQL5( платформа MT5) в Pine Script(платформа Tradingview) Добавить отображение сигнала стрелкой: Пробой канала вверх - стрелка вверх Пробой канала вниз - стрелка вниз
rewrite the macd(trading view) code on mt5 // @version= 5 indicator ( title = "Moving Average Convergence Divergence" , shorttitle = "MACD" , timeframe = "" , timeframe_gaps = true ) // Getting inputs fast_length = input ( title = "Fast Length" , defval = 12 ) slow_length = input ( title = "Slow Length" , defval = 26 ) src = input ( title = "Source" , defval = close ) signal_length = input.int ( title = "Signal
Необходимо адаптировать утилиту для отправки сообщений из платформы MetaTrader 4 (MT4) в мессенджер Discord. Утилита уже написана и функционирует успешно для отправки сообщений в Telegram. Интеграция с API Discord для отправки сообщений. Поддержка различных типов сообщений (текстовых, текст со скриншотами)
Есть советник ZIgZag (исходники предоставлю), который открывает/закрывает ордера на экстремумах текущего таймфрейма. Нужно добавить поддержку других таймфреймов и сделать MTF. То есть, чтобы можно было выбрать открытие/закрытие при совпадении эстремумов на не нескольких выбранных таймфреймах. Выбрали, например, 5М и 1H значит открываем/закрываем ордера, если экстремумы совпали на этих ТФ. Или сразу три, например, 15M
Сигнал бай: гистограмма пересекает 0 уровень цвет зеленый гистограмма выше 0, после красного 1-ая гистограмма цвет зеленый Сигнал Селл: Гистограмма пересекает 0 цвет красный Гистограмма ниже 0, после зеленого цвета 1-ая гистограмма красного цвета. Сигнал выдается после закрытия свечи
Приветствую Есть индикатор в трейдинг вью. Нужно чтоб индикатор присылал уведомления (либо в телеграмм, либо еще куда то) если найдет ситуацию. Привожу примерное ТЗ : https://i.gyazo.com/9144b0882344d06b1b35dd20d2728e44.png тут есть синий прямоугольник. Это (FVG) (FVB). Вот когда это он нашел, нужно присылать уведомления в ТГ. Причем нужно чтоб он это делал на 10(50) инструментах. еще надо на этом примере - мы видим

Информация о проекте

Бюджет
30+ USD
Исполнителю
27 USD