Uyarıyı birkaç saniye geciktirin - sayfa 2

 
OnTimer()
 
Teşekkürler eevviill , ama becerilerim çok karmaşık . Programlamaya başlıyorum, onlar kendi kendini yetiştiriyor ve bazı şeyleri anlamak benim için zor .
Her şey için teşekkürler Massimo .
 
omissamf :
Teşekkürler eevviill , ama becerilerim çok karmaşık . Programlamaya başlıyorum, onlar kendi kendini yetiştiriyor ve bazı şeyleri anlamak benim için zor .
Her şey için teşekkürler Massimo .
 int seconds= 3 ;

int OnInit ()
  {  
   EventSetTimer (seconds);
 
   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()
{
return ( 0 );
}

void OnTimer (){
     
       //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 ;
        }
     }
  
  }
 
Teşekkürler eevviill , kodunuz çalışıyor , ancak mumu açan üç saniyeden sonraki sinyalden değilim , ancak örneğin , mumun açık olduğu 30 saniyeden sonra RSI 70 seviyesinin üzerindeyse , kod henüz 3/2'ye izin veriyor ve sonra oku getirir .
Şimdilik en yakın gelen kod, I GumRai'yi öneren koddur. , ama bana sinyali verir ve mumun açılmasını ayarlar ve 3 saniye sonra olmaz .

Her şey için teşekkürler Massimo .

 int start(){
if (BarStart !=Time[ 0 ]) 
{
  BarStart = Time[ 0 ]; 
//This is the code suggested by GumRai. This works well, but the arrow appears and fixed the opening of the candle, instead of 3 seconds after its opening.
 

ama ben değilim   itibaren   sinyal sonra   üç saniye   bu açıldı   mum

"Her 3 saniyede bir uyarıya ihtiyacım var" değil, önce yazmak daha iyidir.

 
extern int seconds=3;
int time_dif;
bool current_candle_alert_been;
int prev_bars;

int OnInit()
  { 
prev_bars=Bars;
 
   EventSetTimer(1);
   time_dif=int(TimeLocal()-TimeCurrent());
   ...


void OnTimer()
{
if(Bars!=prev_bars) current_candle_alert_been=false;
prev_bars=Bars;

if(current_candle_alert_been) return;
if(TimeLocal()-time_dif<Time[0]+seconds) return;
current_candle_alert_been=true;



...
 
   static datetime BarStart= 0 ;
   static bool check= false ;
   if (BarStart!=Time[ 0 ])
     {
      BarStart=Time[ 0 ];
      check= true ;
     }
   if (check && TimeCurrent ()>=Time[ 0 ]+ 3 )
     {
      check= false ;
       //Check Condition
     }

Bu, çubuğun açılma zamanından en az 3 saniye sonra alınan ilk onay işaretini kontrol etmelidir.

Gösterge başlatıldığında çubuk n saniye açıksa ve n >3 ise, o anda kontrol edileceğine dikkat edin. Ayrıca, belli ki, tarihi barlarla çalışmayacak.

 
GumRai :

Bu, çubuğun açılma zamanından en az 3 saniye sonra alınan ilk onay işaretini kontrol etmelidir.

Gösterge başlatıldığında çubuk n saniye açıksa ve n >3 ise, o anda kontrol edileceğine dikkat edin. Ayrıca, belli ki, tarihi barlarla çalışmayacak.

:))))

1)Bu kodu, mumun açılışında görünmek yerine uyarının birkaç saniye sonra koşulları algılaması için değiştirmek istiyorum.

2) ama değilim   itibaren   sinyal sonra   üç saniye   bu açıldı   mum

PS Zaman[0] kullanmayın, Çubuklar kullanın

 
eevviill :

:))))

1)Bu kodu, mumun açılışında görünmek yerine uyarının birkaç saniye sonra koşulları algılaması için değiştirmek istiyorum.

2) ama değilim   itibaren   sinyal sonra   üç saniye   bu açıldı   mum


Amacın ne?

eevvill :

:))))


PS Zaman[0] kullanmayın, Çubuklar kullanın

Neden? Yeni bir çubuğu algılamak için Zaman[0] kullanmanın yanlış bir tarafı yoktur.

 
Merhaba arkadaşlar harikasınız !!! _
İşbirliğiniz için size nasıl teşekkür edeceğimi bilmiyorum .
Gönderilen kod eevviill çok iyi çalışıyor , demek istediğim buydu .
GumRai kodu bunun yerine yeniden boyama yapar ve RSI 30/70 seviyelerini geçtiğinde sinyal verir . _
Çalışma kodunu , biraz daha hizmet edeceğini umarak , eevviill önerilerine göre ekliyorum .

Her şey için teşekkürler Massimo .


 //+------------------------------------------------------------------+
//|                                                   Test Delay.mq4 |
//|                                                          Massimo |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Massimo"
#property link        "https://www.mql5.com"
#property version    "1.00"
#property description ""

#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"


extern int seconds = 3 ;
int time_dif;
bool current_candle_alert_been;
int prev_bars;



datetime time_alert; //used when sending alert
//--- indicator buffers
double Buffer1[];
double Buffer2[];

extern int Period1 = 2 ;
double myPoint; //initialized in OnInit

void myAlert( string type, string message)
  {
   if (type == "print" )
       Print (message);
   else if (type == "error" )
     {
       Print (type+ " | Test @ " + Symbol ()+ "," + Period ()+ " | " +message);
     }
   else if (type == "order" )
     {
     }
   else if (type == "modify" )
     {
     }
  }

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {   
   prev_bars= Bars ;
     EventSetTimer ( 1 );
   time_dif= int ( TimeLocal ()- TimeCurrent ());
   
   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()
{
return ( 0 );
}

//_________________________________

void OnTimer (){
{
if ( Bars !=prev_bars) current_candle_alert_been= false ;
prev_bars= Bars ;

if (current_candle_alert_been) return ;
if ( TimeLocal ()-time_dif<Time[ 0 ]+seconds) return ;
current_candle_alert_been= true ;
     
       //Indicator Buffer 1
       if ( iRSI ( NULL , PERIOD_CURRENT , Period1, 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 , Period1, 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 ;
        }
     }
     }
 //-----------------------------------------------------------------------------------------------------------------------------