Задержите сигнал тревоги на несколько секунд

 
Привет всем.
Я хотел бы модифицировать этот код таким образом, чтобы алерт, вместо того, чтобы появляться на открытии свечи, определял условия через несколько секунд.

Спасибо за все, Массимо.


int start(){
if (BarStart !=Time[0]) 
{
  BarStart = Time[0]; 

  //Indicator Buffer 1
     
       if ( iRSI(NULL, PERIOD_CURRENT, 2, PRICE_CLOSE, 0+1) > 70
      
      
      )
        {
         Buffer1[0] = Low[0] - iATR(NULL, PERIOD_CURRENT, 14, 0); //Set indicator value at Candlestick Low - Average True Range
        }
      else
        {
         Buffer1[0] = 0;
        }
      //Indicator Buffer 2
    
      && iRSI(NULL, PERIOD_CURRENT, 2, PRICE_CLOSE, 0) < 30
     
      )
        {
         Buffer2[0] = High[0] + iATR(NULL, PERIOD_CURRENT, 14, 0); //Set indicator value at Candlestick High + Average True Range
        }
      else
        {
         Buffer2[0] = 0;
        }
     }
   return(0);
  }
 
omissamf: Я хотел бы изменить этот код
  1. Так что же вас останавливает. Научитесь кодировать или заплатите кому-нибудь. Мы не собираемся кодировать это за вас. Мы готовы помочь вам, если вы опубликуете свою попытку (используя SRC) и суть вашей проблемы.
  2. Пробовали ли вы
      BarStart = Time[0]; 
      Sleep(3000); RefreshRates();

 
Здравствуйте, WHRoeder, спасибо за ответ. Я прошу прощения за свое поведение, но я не хотел никого обидеть и проявить неуважение. Я весь день пытался изменить код, чтобы добиться этого, но у меня ничего не получилось. Это начало изучения MQL4 . Я снова прошу прощения у администраторов. Приветствую, Массимо
 

Здравствуйте WHRoeder, я пытался, но не получается!!! я пробовал всеми способами, но не понимаю где я ошибаюсь!!!

В любом случае, спасибо за все, Массимо.

 
Я не вижу предупреждения в вашем коде.
 
Здравствуйте GunRai, я вам выслал полный код, поэтому объясню. Я не смог отложить подтверждение условий открытия свечи (как это делает сейчас), но через 3 секунды, даже по предложению WHRoeder. Я не могу понять где я ошибаюсь !!!

Спасибо, Макс.


//+------------------------------------------------------------------+
//|                                                    RSI 70-30.mq4 |
//|                                                          Massimo |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Massimo"
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <stdlib.mqh>
#include <stderror.mqh>

//--- indicator settings
#property indicator_chart_window
#property indicator_buffers 2

#property  indicator_type1 DRAW_ARROW
#property  indicator_width1 1
#property  indicator_color1 0xFFAA00
#property  indicator_label1 "Buy"

#property  indicator_type2 DRAW_ARROW
#property  indicator_width2 1
#property  indicator_color2 0x0000FF
#property  indicator_label2 "Sell"
static datetime BarStart=0;

//--- indicator buffers
double Buffer1[];
double Buffer2[];

datetime time_alert; //used when sending alert
extern bool Audible_Alerts = true;
double myPoint; //initialized in OnInit

void myAlert(string type, string message)
  {
   if(type == "print")
      Print(message);
   else if(type == "error")
     {
      Print(type+" | RSI 30-70 @ "+Symbol()+","+Period()+" | "+message);
     }
   else if(type == "order")
     {
     }
   else if(type == "modify")
     {
     }
   else if(type == "indicator")
     {
      if(Audible_Alerts) Alert(type+" | RSI 30-70 @ "+Symbol()+","+Period()+" | "+message);
     }
  }
  
  //+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {   
   IndicatorBuffers(2);
   SetIndexBuffer(0, Buffer1);
   SetIndexEmptyValue(0, 0);
   SetIndexArrow(0, 241);
   SetIndexBuffer(1, Buffer2);
   SetIndexEmptyValue(1, 0);
   SetIndexArrow(1, 242);
   //initialize myPoint
   myPoint = Point();
   if(Digits() == 5 || Digits() == 3)
     {
      myPoint *= 10;
     }
   return(INIT_SUCCEEDED);
  }
//_____________________________________________
//_____________________________________________


int start(){
if (BarStart !=Time[0]) 
{
  BarStart = Time[0]; 
   Sleep(3000); RefreshRates(); //this code don't work

//
     
      //Indicator Buffer 1
      if(iRSI(NULL, PERIOD_CURRENT, 2, PRICE_CLOSE, 0) < 30
      
      )
        {
         Buffer1[0] = Low[0] - iATR(NULL, PERIOD_CURRENT, 14, 0); //Set indicator value at Candlestick Low - Average True Range
         if(0 == 0 && Time[0] != time_alert) { myAlert("indicator", "Buy"); time_alert = Time[0]; } //Instant alert, only once per bar
        }
      else
        {
         Buffer1[0] = 0;
        }
      //Indicator Buffer 2
      if(iRSI(NULL, PERIOD_CURRENT, 2, PRICE_CLOSE, 0) > 70
     
      )
        {
         Buffer2[0] = High[0] + iATR(NULL, PERIOD_CURRENT, 14, 0); //Set indicator value at Candlestick High + Average True Range
         if(0 == 0 && Time[0] != time_alert) { myAlert("indicator", "Sell"); time_alert = Time[0]; } //Instant alert, only once per bar
        }
      else
        {
         Buffer2[0] = 0;
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
 
Вы правы; вы запускаете индикатор.
int start(){
if (BarStart !=Time[0]) 
{
  BarStart = Time[0]; 
   Sleep(3000); RefreshRates(); //this code don't work
Попробуйте следующее
#define   MAX_DATETIME   D'3000.12.31 23:59:59'  // 32,535,215,999
#define   MIN_DATETIME   D'1970.01.01 00:00:00'  // Zero.

int start(){
static datetime alertTime = MAX_DATETIME;
if(TimeCurrent() > alertTime){ alertTime = MAX_DATETIME; Alert(...); }
if (BarStart !=Time[0]) 
{
  BarStart = Time[0]; 
  :
  if(condition) alertTime = TimeCurrent() + 3; // Delay
 
WHRoeder:
Вы правы; вы запускаете индикатор.
Попробуйте следующее

Спасибо, сейчас я изучу код, который вы мне выложили, а потом сообщу вам.
А пока- бесконечная благодарность, Массимо.
 
WHRoeder:
Вы правы; вы используете индикатор.
y thi

WHRoeder Здравствуйте, я попытался изменить код с помощью ваших инструкций. Я пробовал разные способы и вот то , что вы присылаете это то, что у вас не ошибки, но задержка около пяти секунд есть только звук sull'alert, в то время как стрелки продолжают появляться точное открытие свечи.

Здравствуйте и спасибо, Массимо.

#define   MAX_DATETIME   D'3000.12.31 23:59:59'  // 32,535,215,999
#define   MIN_DATETIME   D'1970.01.01 00:00:00'  // Zero.


int start(){
static datetime alertTime = MAX_DATETIME;
if (TimeCurrent() > alertTime)
{ alertTime = MAX_DATETIME;
 Alert(“ ATTENTION!!!!); }

if (BarStart !=Time[0]) 
{
  BarStart = Time[0]; 
  
//
     
      //Indicator Buffer 1
      if(iRSI(NULL, PERIOD_CURRENT, 2, PRICE_CLOSE, 0) < 30
      
      )
        {
         alertTime = TimeCurrent() + 3;
         Buffer1[0] = Low[0] - iATR(NULL, PERIOD_CURRENT, 14, 0);        }
      else
        {
         Buffer1[0] = 0;
        }
      //Indicator Buffer 2
      if(iRSI(NULL, PERIOD_CURRENT, 2, PRICE_CLOSE, 0) > 70
     
      )
        {
                     alertTime = TimeCurrent() + 3;
         Buffer2[0] = High[0] + iATR(NULL, PERIOD_CURRENT, 14, 0);                }
      else
        {
         Buffer2[0] = 0;
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+





 
omissamf: есть только звук sull'alert,
  1. Не знаю, что вы имели в виду.
  2. Alert( ATTENTION!!!!); }
    Попробуйте/выложите код, который компилируется.
 
WHRoeder:
  1. Не знаю, что вы имели в виду.
  2. Попробуйте/выложите код, который компилируется.
Я поставил ATTENTION !!! потому что именно он появляется при звуковом/визуальном оповещении, но я пытаюсь, с вашей помощью, задержать наступление Стрелки на несколько секунд. В этом случае. Внимание !!! Он появится через 5 секунд, в то время как Стрелки появляются только открыть свечу.
Спасибо за все, Массимо.