Verzögerung des Alarms um einige Sekunden - Seite 2

 
OnTimer()
 
Danke eevviill, aber meine Kenntnisse sind zu kompliziert. Ich fange mit dem Programmieren an , sie sind autodidaktisch , und es ist schwer für mich, einige Dinge zu verstehen.
Vielen Dank für alles, Massimo.
 
omissamf:
Danke eevviill, aber meine Kenntnisse sind zu kompliziert. Ich fange mit dem Programmieren an , sie sind autodidaktisch , und es ist schwer für mich, einige Dinge zu verstehen.
Vielen Dank für alles, 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;
        }
     }
  
  }
 
Vielen Dank eevviill, Ihr Code funktioniert, aber ich bin nicht aus dem Signal nach drei Sekunden , die die Kerze geöffnet, aber wenn, zum Beispiel, RSI ist über Ebene 70 nach 30 Sekunden , dass die Kerze offen ist, der Code lässt 3/2 noch und dann bringt den Pfeil.
Für jetzt der Code, der am nächsten kommt , ist derjenige , der ich GumRaivorgeschlagen, aber gibt mir das Signal und setzt die Eröffnung der Kerze und nicht nach 3 Sekunden.

Vielen Dank für alles, 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.
 

aber ich bin nicht vondem Signal nachdrei Sekunden, dassdie Kerze geöffnet

Besser, es zuerst zu schreiben und nicht "Ich brauche alle 3 Sekunden Alarm."

 
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
     }

Die Prüfung sollte beim ersten empfangenen Tick erfolgen, der mindestens 3 Sekunden nach der Öffnungszeit des Balkens liegt.

Wenn der Balken bei der Initialisierung des Indikators bereits n Sekunden geöffnet war und n >3 ist, wird er zu diesem Zeitpunkt geprüft. Außerdem funktioniert er natürlich nicht mit historischen Balken.

 
GumRai:

Dies sollte beim ersten empfangenen Tick, der mindestens 3 Sekunden nach der Öffnungszeit des Balkens liegt, überprüft werden

Beachten Sie, dass wenn der Balken bei der Initialisierung des Indikators bereits n Sekunden geöffnet war und n >3 ist, wird er zu diesem Zeitpunkt überprüft. Außerdem funktioniert er natürlich nicht mit historischen Balken.

:))))

1)Ich möchte diesen Code so ändern, dass der Alarm, anstatt bei der Eröffnung der Kerze zu erscheinen, die Bedingungen nach ein paar Sekunden erkennt.

2)aber ich bin nicht von demSignal nachdrei Sekunden, diedie Kerze geöffnet

P.S. Verwenden Sie nicht Time[0], verwenden Sie Bars

 
eevviill:

:))))

1)Ich möchte diesen Code so ändern, dass der Alarm, anstatt bei der Eröffnung der Kerze erscheint, erkennt die Bedingungen nach ein paar Sekunden.

2)aber ich bin nicht von demSignal nachdrei Sekunden, diedie Kerze geöffnet


Was ist Ihr Punkt?

eevviill:

:))))


P.S. Verwenden Sie nicht Time[0], verwenden Sie Bars

Warum nicht? Es ist nichts falsch mit der Verwendung von Time[0], um einen neuen Balken zu erkennen.

 
Hallo Jungs, ihr seid großartig !!!
Ich weiß nicht, wie ich euch für eure Zusammenarbeit danken soll.
Der Code gepostet eevviill funktioniert sehr gut, das ist, was ich meinte.
Die GumRai Code macht stattdessen repaint und geben das Signal , wenn der RSI kreuzt die 30/70 Ebenen.
Ich füge den Arbeitscode nach eevviill Vorschläge, in der Hoffnung, dass es einige mehr dienen wird.

Danke für alles, 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;
        }
     }
     }
 //-----------------------------------------------------------------------------------------------------------------------------