경고를 몇 초 지연 - 페이지 2

 
OnTimer()
 
eevviill 에게 감사 하지만 내 기술 너무 복잡 합니다. 저는 프로그래밍을 시작하고 있는데, 그들은 독학으로 배웠고 일부 내용 을 이해하기 가 어렵 습니다 .
모든 것에 감사합니다 , Massimo .
 
omissamf :
eevviill 에게 감사 하지만 내 기술 너무 복잡 합니다. 저는 프로그래밍을 시작하고 있는데, 그들은 독학으로 배웠고 일부 내용 을 이해하기 가 어렵 습니다 .
모든 것에 감사합니다 , 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 ;
        }
     }
  
  }
 
감사 합니다 eevviill , 귀하의 코드는 작동 하지만 촛불 3초 후 신호 에서 온 것이 아닙니다 . 하지만 들어 RSI촛불 이 열린 30초 후에 레벨 70 이상인 경우 코드 아직 3/2 을 허용합니다. 그런 다음 화살표 표시 합니다.
현재 가장 가까운 코드 I GumRai를 제안한 코드입니다. , 하지만 나에게 신호를 주고 3 후에가 아니라 촛불열림설정합니다 .

모든 것에 감사합니다 , 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.
 

하지만 난 아니야   ~에서   신호 후   3초   열린   촛불

"3초마다 경고가 필요합니다"가 아니라 먼저 작성하는 것이 좋습니다.

 
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
     }

이것은 바 오픈 시간 으로부터 최소 3초 후인 첫 번째 수신된 틱에서 확인해야 합니다.

표시기가 초기화될 때 막대가 n초 동안 열려 있고 n이 >3인 경우 해당 시간에 확인됩니다. 또한 분명히 역사적인 막대에서는 작동하지 않습니다.

 
GumRai :

이것은 바 오픈 시간으로부터 최소 3초 후인 첫 번째 수신된 틱에서 확인해야 합니다.

표시기가 초기화될 때 막대가 n초 동안 열려 있고 n이 >3인 경우 해당 시간에 확인됩니다. 또한 분명히 역사적인 막대에서는 작동하지 않습니다.

:)))))

1) 이 코드를 수정하여 양초가 열릴 때 경고가 표시되는 대신 몇 초 후에 조건을 감지하도록 하고 싶습니다.

2) 하지만 난 아니야   ~에서   신호 후   3초   열린   촛불

PS 시간[0]을 사용하지 않고 막대 를 사용합니다.

 
eevviill :

:)))))

1) 이 코드를 수정하여 양초가 열릴 때 경고가 표시되는 대신 몇 초 후에 조건을 감지하도록 하고 싶습니다.

2) 하지만 난 아니야   ~에서   신호 후   3초   열린   촛불


당신의 요점은 무엇입니까?

이브빌 :

:)))))


PS 시간[0]을 사용하지 않고 막대를 사용합니다.

왜 안 돼? 새 막대를 감지하기 위해 Time[0]을 사용하는 데는 아무런 문제가 없습니다.

 
안녕하세요 여러분 , 당신은 훌륭 합니다 !!!
협조 해 주셔서 감사 합니다 .
eevviill 에 게시 된 코드매우 잘 작동 합니다 .
GumRai 코드 RSI 30/70 레벨 을 넘을 때마다 다시 하고 신호 보냅니다 .
나는 eevviill 제안 따라 작업 코드 를 삽입하고, 그것이 도움 이 되기를 바랍니다 .

모든 것에 감사합니다 , 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 ;
        }
     }
     }
 //-----------------------------------------------------------------------------------------------------------------------------