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

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
Оценка
(431)
Проекты
488
33%
Арбитраж
25
40% / 48%
Просрочено
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)
Проекты
378
33%
Арбитраж
2
100% / 0%
Просрочено
0
Работает
5
Разработчик 5
Оценка
(47)
Проекты
54
30%
Арбитраж
2
0% / 0%
Просрочено
0
Работает
6
Разработчик 6
Оценка
(338)
Проекты
532
32%
Арбитраж
23
65% / 9%
Просрочено
15
3%
Свободен
7
Разработчик 7
Оценка
(6)
Проекты
12
25%
Арбитраж
0
Просрочено
0
Свободен
8
Разработчик 8
Оценка
(10)
Проекты
22
18%
Арбитраж
3
67% / 0%
Просрочено
4
18%
Свободен
9
Разработчик 9
Оценка
(715)
Проекты
1034
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
Оценка
(561)
Проекты
928
48%
Арбитраж
301
59% / 25%
Просрочено
123
13%
Загружен
14
Разработчик 14
Оценка
(66)
Проекты
143
34%
Арбитраж
11
9% / 55%
Просрочено
26
18%
Работает
Похожие заказы
Мне нужен робот, работающий на МТ4, требования такие: 1) суточная просадка не должна быть меньше 1-2%! 2) дневная минимальная прибыль? 3) открытые ежедневно позиции должны быть закрыты в тот же день! 4) инструменты, используемые для открытия сделки, должны быть XAU/USD, GBP/USD, EURO/USD и т. д
Добрый день. Необходимо перенести или написать индикатор в платформу TradingView под язык программирования pinescript. Индикатор простой. Строит уровни по предыдущим месяцам. Индикатор предоставлю при выборе кандидата. Исходный год необходимо предоставить заказчику
Есть код советника (mql4 - будет предоставлен в личных сообщениях совместно с подробным ТЗ). Нужно добавить в него следующие изменения: 1. Добавить четкие комментарии во все ордера советника (типа Sell 01, Sell 02 ... Sell 30 или Buy 01 и т.п.) В текущем советнике комментарии одинаковые и регулируются переменной. 2. Добавить в советника время торговли по времени (интервал времени указывается в настройках). 3
Нужен индикатор , рисующий вертикальную линию через все подокна. Линия рисуется от последней закрытой (завершенной ) свечи и после , закрытия следующей свечи , перерисовывается на нее, а предыдущая линия удаляется автоматически
Есть текущий сеточный советник я хочу его модифицировать либо же создать с нуля новый сеточный мультивалютный советник. Мультивалютность нужна для уменьшения просадки и с целью частичного хеджирования. Нужен человек кто делал что-то подобное и имеет опыт написания мультивалютных советников
Нужно решение которое поможет сокращать просадку когда советник попадает в ситуацию с зависающими убыточными сделками На данный момент алгоритм советника прост это сетка. Нужны варианты которые помогут улучшить стратегию. Пожалуйста пишите ваши реальные варианты из практики
Индикатор оригинала не перерисовывается, соответственно когда будете вносить изменения в алгоритме индикатора, тоже не должен перерисовыватся. Необходимо найти в алгоритме индикатора, где есть условия, при которой индикатор выдает уведомления. Нужно посмотреть с расчетом на одну свечу назад на уже закрытой свече на каких условиях находится когда свеча открывалась, и на основание этого создать новое условие, чтобы
Необходимо адаптировать утилиту для отправки сообщений из платформы MetaTrader 4 (MT4) в мессенджер Discord. Утилита уже написана и функционирует успешно для отправки сообщений в Telegram. Интеграция с API Discord для отправки сообщений. Поддержка различных типов сообщений (текстовых, текст со скриншотами)
Нужен МСР индикатор показывающий стрелками совпадение сигналов на линейном графике у нескольких валютных пар. Сигналом служит пересечение max / min второй волны. Сам сигнал выглядит так инструменты задаются пользователем информация выводиться в виде стрелки на графике . размер и положение стрелки на графике (ближе – дальше к графику ) задается. при одновременном пересечении основания 2 волны подается

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

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