[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 121 из 141«12119120121122123140141»
Форум Трейдеров » Скрипты Советники Индикаторы для Metatrader4/Metatrader5 » MT 4 MQL программирование, помощь. » Аллерт в Индикатор Alert() Alert Arrow (Алерт на экране после сигнала индикатора + уведомления почта)
Аллерт в Индикатор Alert() Alert Arrow
Дата: Среда, 03.04.2013, 18:22 | Сообщение # 1 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: Online


Алерт в индикатор. Как вставить Alert и Arrow в индикатор?

Внимание: Если Вы хотите чтобы Вам помогли в данной теме, пожалуйста:
1. Прикрепите индикатор, в который требуется вставить алерт. Открытый код!
2. Прикрепите картинку с данного индикатора, где ВЫ добавили стрелки и показали когда должен вознкиать алерт
3. Опишите словами подробно когда должен звучать алерт.

4. Сделайте краткое описание индикатора!

Наиболее частыми запросами в поисковике и в темах разных форумах встречаются фразы:
"Индикатора алерт","индикатор alert","Как добавить в индикатор звуковой сигнал?","Помогите вставить звуковой сигнал в индикатор", "Как вставить Alert и Стрелки ", "Как отправить сообщение на почту или телефон при сигнале от индикатора?"
В данной статье я попытаюсь максимально подробно рассказать легкий путь добавления Alert Mail Push Arrow в любой индикатор от www.expforex.com




Предисловие

Для того, чтобы начать правильную установку Алертов в Ваш индикатор, необходимо иметь открытый код Вашего индикатора. Декомпилированный код нежелателен, потому , что для новичка декомпилированный код представляет минимум информации. В нем трудно разобраться. А также у
Вас после редактирования могут возникнуть проблемы с компиляцией.


Начало работы

В первую очередь Вам необходимо выяснить, какие индикаторные буферы дают тот или иной сигнал, какова цель создания алерта, Каковы условия определения сигнала на индикаторе.
Важно: В индикаторах могут показываться только внешние буферы, определенные вначале кода переменной:
#property indicator_buffers 1
Но также в индикаторе могут быть скрытые буферы, которые задаются в функции init() и объявляются переменной:
IndicatorBuffers(7);
Нам нужны только первые буферы. Если например у Вас стоит 1 внешний буфер, то смотрим на переменную:
SetIndexBuffer(0,SarBuffer);
0 - это первый буфер
1 - это второй буфер .........



Настройки Алертов:
extern string Alerts="Алерты и стрелки от www.expforex.com";
extern bool AlerT=true;  // Выдавать алерт на экран
extern bool Mail=true;   // Посылать сообщение
extern bool Push=true;   // Посылать ПУШ на телефон
extern bool Arrow=true;  // Ставить стрелки на сигналах
extern int shift=1;      // На каком баре считать сигнал 0 - на текущем 1 - на закрытом


Внимание!
Данная ветка создана для ПОМОЩИ, а не для редактирования Вашего кода. Если Вы желаете каких то особых алертов  - обращайтесь в раздел программирование.
Просьбы выполняются с наиболее интересными индикаторами, без доработок, в свободное время и под хорошее настроение.


Прикрепите индикатор и картинку с сигналами.
Прикрепления: DT-ZigZag-Lauer.mq4(3Kb)


Мы лучшие
 
Дата: Вторник, 30.08.2016, 09:20 | Сообщение # 1201 Написал: Ed71
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 18
Награды: 0
Статус: Offline
Спасибо. Т.е. вот так нужно?

PlaySound("GOOD13.wav");
MessageBox("WPR Over Sold "+Symbol()+" TF: "+Period());
 
Дата: Вторник, 30.08.2016, 10:34 | Сообщение # 1202 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: Online
совсем забыл что это индикатор, а MessageBox только для экспертов

Мы лучшие
 
Дата: Вторник, 30.08.2016, 10:54 | Сообщение # 1203 Написал: Oleginov
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 2
Награды: 0
Статус: Offline
Добрый день. Нужен сигнал Алерт по стрелкам (вверх, вниз), для индикатора ao divergence
Прикрепления: aodivergence.ex4(33Kb) · aodivergence.mq4(17Kb)


Сообщение отредактировал Oleginov - Вторник, 30.08.2016, 10:58
 
Дата: Вторник, 30.08.2016, 11:02 | Сообщение # 1204 Написал: Ed71
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 18
Награды: 0
Статус: Offline
Цитата
совсем забыл что это индикатор, а MessageBox только для экспертов
А для индикаторов есть какая-нибудь схожая функция?


Сообщение отредактировал Ed71 - Вторник, 30.08.2016, 11:03
 
Дата: Вторник, 30.08.2016, 20:07 | Сообщение # 1205 Написал: Ed71
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 18
Награды: 0
Статус: Offline
А вот как в этом коде нельзя сделать выбор звукового файла? Посмотрите, пожалуйста
#property copyright ""
#property link      ""

#property indicator_separate_window
#property indicator_buffers    4
#property indicator_color1     Red
#property indicator_color2     Blue
#property indicator_color3     Gray
#property indicator_color4     Gray
#property indicator_levelcolor MediumOrchid

extern int Processed        = 2000;
extern int Control_Period   = 14;

extern int Signal_Period    = 5;
extern int Signal_Method    = MODE_SMA;

extern int BB_Up_Period     = 12;
extern int BB_Up_Deviation  = 2;

extern int BB_Dn_Period     = 12;
extern int BB_Dn_Deviation  = 2;

extern double levelOb                  = 6;
extern double levelOs                  = -6;
extern double extremelevelOb           = 10;
extern double extremelevelOs           = -10;

extern bool   alertsOn                 = true;
extern bool   alertsOnObOs             = false;
extern bool   alertsOnExtremeObOs      = true;
extern bool   alertsOnCurrent          = false;
extern bool   alertsMessage            = true;
extern bool   alertsSound              = true;
extern bool   alertsEmail              = false;
extern bool   alertsNotify             = false;
extern string soundfile                = "alert2.wav";

extern bool   arrowsVisible            = true;
extern string arrowsIdentifier         = "vertex arrows1";
extern double arrowsUpperGap           = 1.0;
extern double arrowsLowerGap           = 1.0;

extern bool   arrowsOnObOs             = true;
extern color  arrowsObOsUpColor        = LimeGreen;
extern color  arrowsObOsDnColor        = Red;
extern int    arrowsObOsUpCode         = 241;
extern int    arrowsObOsDnCode         = 242;
extern int    arrowsObOsUpSize         = 1;
extern int    arrowsObOsDnSize         = 1;

extern bool   arrowsOnExtremeObOs      = true;
extern color  arrowsExtremeObOsUpColor = DeepSkyBlue;
extern color  arrowsExtremeObOsDnColor = PaleVioletRed;
extern int    arrowsExtremeObOsUpCode  = 159;
extern int    arrowsExtremeObOsDnCode  = 159;
extern int    arrowsExtremeObOsUpSize  = 5;
extern int    arrowsExtremeObOsDnSize  = 5;

double values[];
double signal[];
double band_up[];
double band_dn[];
double trend1[];
double trend2[];

int init() 
{
  IndicatorBuffers(6);
  SetIndexBuffer(0, values);
  SetIndexBuffer(1, signal);
  SetIndexBuffer(2, band_up);
  SetIndexBuffer(3, band_dn);  
  SetIndexBuffer(4, trend1);
  SetIndexBuffer(5, trend2);  
  SetLevelValue(0,levelOb);
  SetLevelValue(1,levelOs);
  SetLevelValue(2,extremelevelOb);
  SetLevelValue(3,extremelevelOs);
  return (0);
}

int deinit()
{
   deleteArrows();

return(0);
}

//
//
//
//
//

int start()
{
  datetime bar_time;
  int idx, counter, offset, bar_shft, bar_cont;
  double price_high, price_close, price_low, trigger_high, trigger_low;
  double sum_up, sum_dn, complex_up, complex_dn;

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

  for (idx = limit; idx>= 0; idx--) {
    counter = 0;
    complex_up = 0; complex_dn = 0;
    trigger_high = -999999; trigger_low  = 999999;

    while (counter < Control_Period) {
      sum_up = 0; sum_dn = 0;
         
      offset = idx + counter;
      bar_time = iTime(Symbol(), 0, offset);
      bar_shft = iBarShift(Symbol(), 0, bar_time, FALSE);
      bar_cont = bar_shft - Period(); if (bar_cont < 0) bar_cont = 0;
         
      for (int jdx = bar_shft; jdx>= bar_cont; jdx--) {   
        price_high  = iHigh(Symbol(), 0, jdx); 
        price_close = iClose(Symbol(), 0, jdx); 
        price_low   = iLow(Symbol(), 0, jdx);
        if (price_high> trigger_high) {trigger_high = price_high; sum_up += price_close;}
        if (price_low  < trigger_low ) {trigger_low  = price_low;  sum_dn += price_close;}
      }
     
      counter++;
      complex_up += sum_up; complex_dn += sum_dn;        
    }
    if (complex_dn != 0.0 && complex_up != 0.0) 
      values [idx]= complex_dn / complex_up - complex_up / complex_dn;
  }
  
  for (idx = limit; idx>= 0; idx--) 
  { 
    signal  [idx]= iMAOnArray(values, 0, Signal_Period, 0, Signal_Method, idx); 
    band_up [idx]= iBandsOnArray(values, 0, BB_Up_Period, BB_Up_Deviation, 0, MODE_UPPER, idx); 
    band_dn [idx]= iBandsOnArray(values, 0, BB_Dn_Period, BB_Dn_Deviation, 0, MODE_LOWER, idx); 
    trend1  [idx]= trend1[idx+1];
    trend2  [idx]= trend2[idx+1];
    if (values[idx]>levelOb)        trend1 [idx]=-1;
    if (values[idx]<levelOs)        trend1 [idx]= 1;
    if (values[idx]>extremelevelOb) trend2 [idx]=-1;
    if (values[idx]<extremelevelOs) trend2 [idx]= 1;
    
    //
    //
    //
    //
    //
    
    if (arrowsVisible)
    {
      ObjectDelete(arrowsIdentifier+":1:"+Time[idx]);
      ObjectDelete(arrowsIdentifier+":2:"+Time[idx]);
      string lookFor = arrowsIdentifier+":"+Time[idx]; ObjectDelete(lookFor);
      if (arrowsOnObOs && trend1 [idx]!= trend1[idx+1])
      {
         if (trend1 [idx]== 1) drawArrow("1",0.5,idx,arrowsObOsUpColor,arrowsObOsUpCode,arrowsObOsUpSize,false);
         if (trend1 [idx]==-1) drawArrow("1",0.5,idx,arrowsObOsDnColor,arrowsObOsDnCode,arrowsObOsDnSize, true);
      } 
      if (arrowsOnExtremeObOs && trend2 [idx]!= trend2[idx+1])
      {
         if (trend2 [idx]== 1) drawArrow("2",1,idx,arrowsExtremeObOsUpColor,arrowsExtremeObOsUpCode,arrowsExtremeObOsUpSize,false);
         if (trend2 [idx]==-1) drawArrow("2",1,idx,arrowsExtremeObOsDnColor,arrowsExtremeObOsDnCode,arrowsExtremeObOsDnSize, true);
      }                              
    }    
  }
  
  //
  //
  //
  //
  // 
  
  if (alertsOn)
  {
      if (alertsOnCurrent)
           int whichBar = 0;
      else     whichBar = 1; 

      //
      //
      //
      //
      //
            
      static datetime time1 = 0;
      static string   mess1 = "";
      if (alertsOnObOs && trend1 [whichBar]!= trend1[whichBar+1])
      {
         if (trend1 [whichBar]==  1) doAlert(time1,mess1,whichBar,"crossing oversold");
         if (trend1 [whichBar]== -1) doAlert(time1,mess1,whichBar,"crossing overbought");
      }
      static datetime time2 = 0;
      static string   mess2 = "";
      if (alertsOnExtremeObOs && trend2 [whichBar]!= trend2[whichBar+1])
      {
         if (trend2 [whichBar]==  1) doAlert(time2,mess2,whichBar,"crossing extreme oversold");
         if (trend2 [whichBar]== -1) doAlert(time2,mess2,whichBar,"crossing extreme overbought");
      }
   }
return (0);
}

//
//
//
//
//

void drawArrow(string nameAdd, double gapMul, int i,color theColor,int theCode,int theWidth,bool up)
{
   string name = arrowsIdentifier+":"+nameAdd+":"+Time;
   double gap  = iATR(NULL,0,20,i)*gapMul;   
   
      //
      //
      //
      //
      //
      
      ObjectCreate(name,OBJ_ARROW,0,Time,0);
         ObjectSet(name,OBJPROP_ARROWCODE,theCode);
         ObjectSet(name,OBJPROP_COLOR,theColor);
         ObjectSet(name,OBJPROP_WIDTH,theWidth);
         if (up)
               ObjectSet(name,OBJPROP_PRICE1,High + arrowsUpperGap * gap);
         else  ObjectSet(name,OBJPROP_PRICE1,Low  - arrowsLowerGap * gap);
}

//
//
//
//
//

void deleteArrows()
{
   string lookFor       = arrowsIdentifier+":";
   int    lookForLength = StringLen(lookFor);
   for (int i=ObjectsTotal()-1; i>=0; i--)
   {
      string objectName = ObjectName(i);
         if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);
   }
}
   
//
//
//
//
//

void doAlert(datetime& previousTime, string& previousAlert, int forBar, string doWhat)
{
   string message;
   
   if (previousAlert != doWhat || previousTime != Time[forBar]) {
       previousAlert  = doWhat;
       previousTime   = Time[forBar];

       //
       //
       //
       //
       //

        message =  StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," Vertex ",doWhat);
          if (alertsMessage) Alert(message);
          if (alertsNotify)  SendNotification(message);
          if (alertsEmail)   SendMail(StringConcatenate(Symbol()," Vertex "),message);
          if (alertsSound)   PlaySound(soundfile);
   }
}
 
Дата: Среда, 31.08.2016, 19:45 | Сообщение # 1206 Написал: nbt
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 1
Награды: 0
Статус: Offline
Нужен алерт к индикатору tlb oc, причем только к сильным уровням, то есть сплошным линиям, чтобы звучал он при подходе к уровню.
Прикрепления: TLB_OC_v02.mq4(21Kb)
 
Дата: Среда, 31.08.2016, 20:12 | Сообщение # 1207 Написал: Oleginov
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 2
Награды: 0
Статус: Offline
По моемому здесь ответа не дождаться...разводом попахивает, регят себе людишек, чтобы сайт статистики побольше набрал.
 
Дата: Среда, 31.08.2016, 21:04 | Сообщение # 1208 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: Online
Oleginov, однозначно.
Вот вы первый зареганный людишка.
и в этой теме я ничего не обещал. читайте тему.

Вы даже элементарных требований по "ПОМОЩИ" не можете выполнить, куда Вам еще ? 

Внимание!
Данная ветка создана для ПОМОЩИ, а не для редактирования Вашего кода. Если Вы желаете каких то особых алертов  - обращайтесь в разделпрограммирование.
Просьбы выполняются с наиболее интересными индикаторами, без доработок, в свободное время и под хорошее настроение.


Мы лучшие
 
Дата: Среда, 31.08.2016, 21:14 | Сообщение # 1209 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: Online
Ed71, не могу понять почему звук не перебивает алерт, 
но сделал таким образом:

Код
//+------------------------------------------------------------------+
//|                    |
//|                         www.forexdyr.com                         |
//|                         King_Prog                    |
//+------------------------------------------------------------------+

#property copyright "King_Brog"
#property link      "www.forexdyr.com"

#property indicator_separate_window
#property indicator_minimum -100
#property indicator_maximum 0
#property indicator_buffers 1
#property indicator_color1 Aqua

extern int period=14;
extern bool EnableAlert=true;
extern double OverSold=-80;
extern double OverBought=-20;
extern bool EnableSendMail=false;
extern bool EnableComment=true;

datetime Timee;
double WPR_Line[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexBuffer(0,WPR_Line);
   SetIndexStyle(0,DRAW_LINE);

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   Comment("");
   return(0);
  }
int timesound;
//+------------------------------------------------------------------+
//| Custom indicator iteration function                    |
//+------------------------------------------------------------------+
int start()
  {
   if(EnableComment)Comment("King_Prog"+"\n"+"www.forexdyr.com");

   int bars=Bars-IndicatorCounted();

   for(int i=0;i<=bars;i++)
     {
      WPR_Line[i]=iWPR(Symbol(),0,period,i);
     }

   if(WPR_Line[1]>=OverBought && WPR_Line[2]<OverBought && Timee!=Time[0])
     {
      if(EnableAlert)Alert("WPR Over Bought "+Symbol()+" TF: "+Period());
      if(EnableSendMail)SendMail("WPR Over Bought","WPR Over Bought "+Symbol()+" period: "+Period());
      Timee=Time[0];
      timesound=TimeCurrent();
     }

   if(WPR_Line[1]<=OverSold && WPR_Line[2]>OverSold && Timee!=Time[0])
     {
      if(EnableAlert)Alert("WPR Over Sold "+Symbol()+" TF: "+Period());
      if(EnableSendMail)SendMail("WPR Over Sold","WPR Over Sold "+Symbol()+" period: "+Period());
      Timee=Time[0];
      timesound=TimeCurrent();
     }
   if(timesound!=0 && TimeCurrent()>=timesound+1)
     {
      timesound=0;
      PlaySound("Sirena.wav");

     }
  }
//+------------------------------------------------------------------+


вкратце : звук происходит через 1 секунду (по приходу тика) после сигнала
Прикрепления: 4242834.mq4(3Kb)


Мы лучшие
 
Дата: Четверг, 01.09.2016, 06:40 | Сообщение # 1210 Написал: Ed71
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 18
Награды: 0
Статус: Offline
Спасибо. Буду сегодня тестировать.
 
Форум Трейдеров » Скрипты Советники Индикаторы для Metatrader4/Metatrader5 » MT 4 MQL программирование, помощь. » Аллерт в Индикатор Alert() Alert Arrow (Алерт на экране после сигнала индикатора + уведомления почта)
Страница 121 из 141«12119120121122123140141»
Поиск: