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

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
등급
(426)
프로젝트
483
34%
중재
24
42% / 46%
기한 초과
6
1%
로드됨
2
개발자 2
등급
(356)
프로젝트
632
26%
중재
89
73% / 13%
기한 초과
12
2%
무료
3
개발자 3
등급
(156)
프로젝트
167
34%
중재
3
33% / 33%
기한 초과
3
2%
무료
4
개발자 4
등급
(317)
프로젝트
375
33%
중재
2
100% / 0%
기한 초과
0
무료
5
개발자 5
등급
(40)
프로젝트
43
30%
중재
2
0% / 0%
기한 초과
0
바쁜
6
개발자 6
등급
(336)
프로젝트
528
32%
중재
23
65% / 9%
기한 초과
15
3%
무료
7
개발자 7
등급
(5)
프로젝트
10
20%
중재
0
기한 초과
0
무료
8
개발자 8
등급
(9)
프로젝트
20
20%
중재
3
67% / 0%
기한 초과
3
15%
로드됨
9
개발자 9
등급
(713)
프로젝트
1032
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
등급
(558)
프로젝트
925
48%
중재
301
59% / 25%
기한 초과
123
13%
로드됨
14
개발자 14
등급
(66)
프로젝트
143
34%
중재
11
9% / 55%
기한 초과
26
18%
작업중
비슷한 주문
Необходимо адаптировать утилиту для отправки сообщений из платформы 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) инструментах. еще надо на этом примере - мы видим
У меня не сложная задача! Мне нужна исправить ошибку в индикаторе, чтобы после появления стрелки индикатора в терминале мт4 приходило уведомление Алерта в направления стрелки до начала открытие новой свечи за 10 секунд. Ошибку этого индикатора надо исправить таким образом, чтобы приходила уведомления не на открытие третьей свечи, а-на открытие второй свечи за 10 секунд до открытия
Необходимо создать индикатор на основе Moving Average ADX (average directional index) по примеру У индикатора должны быть те же параметры что и у примера выше: Enabled (флаг включенности, true/false) Directional Index (DI) ADX Smoothing ADX MA Active Length Source Timeframe Если флаг включенности = true, то использовать индикатор для получения сигнала на открытие или закрытие заказов. Он может быть включен у всех
Задача. Стоит много ордеров например 50 по 0,01 на разных уровнях в разные стороны Уровень куда придет цена известно. Нужно вычислить лот которых зайти чтоб дойдя до уровня закрылись все ордера
Нужно совместить кастомные индикаторы (3 штуки) и советник в один советник, вывести их параметры изнутри и оптимизировать скорость работы. Индикаторы полностью готовы, но есть некоторые сложности в их совмещении и включении в сам советник. Подробности обсудим в переписке
Необходимо написать скрипт индикатора для tradingview отражающего разницу цен двух инструментов и присылающего уведомления при определенном расхождении/схождении цен. Инструменты выбираем из списка отображаемых на поле графиков. Уведомление высылается по текущим ценам. Частота уведомлений выбирается пользователем

프로젝트 정보

예산
30+ USD
개발자에게
27 USD