Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 578

 
PolarSeaman:

Ich bin nicht selbst darauf gekommen"Stellen Sie einfach sicher, dass Sie die Daten in OnTimer() aktualisieren, damit Ihr Code funktioniert. "

Wie soll ich das machen?

Haben Sie einen Offline-Zeitplan?

 
Können Sie mir sagen, wie ich die unteren Indikatoren von einem anderen Zeitrahmen als dem, auf dem die Eule schwebt, erhalten kann?
 
Galim_V:
Können Sie mir sagen, wie man die unteren Indikatoren von einem anderen Zeitrahmen als dem, auf dem die Eule schwebt, erhält?

1. Warum haben Sie den Vogel aufgehängt? Ist das nicht bedauerlich?

2. Haben Sie jemals die Hilfe geöffnet? Das Empfangen von Indikatordaten im Expert Advisor von einem beliebigen Zeitrahmen ist überhaupt kein Problem, da die ersten beiden Parameter der Funktionen zum Empfangen von Indikatordaten verwendet werden, um das Symbol und die Periode des Charts anzugeben, von dem Sie Werte empfangen möchten.

Schon bei der Eingabe des Codes im Editor wird die Liste der formalen Variablen der Funktion geöffnet, und ein Tooltip zeigt dort das Symbol und den Zeitrahmen an. Seltsam, dass Sie ihnen keine Beachtung geschenkt haben.

 
Artyom Trishkin:

Haben Sie einen Offline-Zeitplan?

Nein.

 
PolarSeaman:

Nein.

Warum dann die ständige Aktualisierung ohne Not?

Brauchen Sie Zeit? Sie können die Zeit des letzten Ticks abfragen: TimeCurrent(), oder die letzte lokale Zeit: TimeLocal().

Wenn Sie die Zeit des letzten Ticks am Wochenende erhalten, hilft Ihnen der Timer nicht weiter - die Zeit ist dann der letzte Tick am Freitag oder der letzte Tick des letzten Arbeitstages. Und TimeLocal() liefert Ihnen keine Serverzeit - Sie müssen sie mit einem Offset neu berechnen.

Ich weiß allerdings nicht genau, was Sie am Ende erreichen wollen.

 
Artyom Trishkin:

1. Warum haben Sie den Vogel aufgehängt? Ist das nicht bedauerlich?

2. Haben Sie jemals die Hilfe geöffnet? Das Empfangen von Indikatordaten im Expert Advisor von einem beliebigen Zeitrahmen ist überhaupt kein Problem, da die ersten beiden Parameter der Funktionen zum Empfangen von Indikatordaten verwendet werden, um das Symbol und die Periode des Charts anzugeben, von dem Sie Werte empfangen möchten.

Schon bei der Eingabe des Codes im Editor wird die Liste der formalen Variablen der Funktion geöffnet, und ein Tooltip zeigt dort das Symbol und den Zeitrahmen an. Seltsam, dass Sie sie nicht beachtet haben.

2018.07.04 22:17:38.398 2016.11.10 13:00:00 Arap01 EURUSD,H1: Rundung 44.53781512605145 45.0 Dies sind stochastische Daten im "normalen" Modus. d.h.:

2=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,2);

Hier frage ich M5 2=iStochastic(NULL,5,K,D,slowing,Average_method,price_field,MODE_MAIN,2);

Ich erhalte 2018.07.04 22:23:05.680 2016.11.10 13:00:00 Arap01 EURUSD,H1: Rundung 0.0 0.0



 
Artyom Trishkin:

Ich weiß aber nicht genau, was Sie am Ende haben wollen.

Ich möchte zwei Sekunden, bevor der Balken schließt, alarmiert werden. Ich werde am Wochenende nicht arbeiten.

 
PolarSeaman:

Ich brauche also eine Warnung zwei Sekunden bevor der Balken ohne Tick schließt.

Das ist nicht einfach, man muss einen genaueren Timer laufen lassen (mindestens 500 ms) und vorher eine Synchronisation der lokalen Zeit mit der Serverzeit durchführen.
Ich habe Ihnen bereits davon erzählt:

Zum Zeitpunkt des Eintreffens des Ticks wird die Differenz TimeCurrent()-TimeLocal()
gezählt (dies wird einmalig durchgeführt, um die lokale und die Serverzeit zu synchronisieren)

- Dies ist der Offset in Bezug auf den Broker. Wenn sich dieser Offset später ändert, sollte die Zeit neu berechnet werden;
- Beim Start des Expert Advisors (oderbeim Erscheinen von TaktD1) berechnen wir alle notwendigen Zeiten erneut, in der lokalen Zeit, unter Berücksichtigung des Offsets;
- Warten auf das, was wir im Timer "gezählt" haben, Überprüfung auf Desynchronisation, Verlust der Verbindung mit dem Broker, Übersetzung der lokalen Hände.

Sie können +/- 1 Sekunde auffangen
 
Taras Slobodyanik:

Das ist nicht einfach, man muss einen genaueren Timer laufen lassen (mindestens 500ms) und die lokale Zeit mit der Serverzeit vorsynchronisieren.
Ich habe Ihnen bereits davon erzählt:

Sie können +/- 1 Sekunde auffangen

Ich danke Ihnen. So stellen Sie die Zeit in Sekunden ein, bevor sich der M5-Balken schließt. Im Moment wird H1 angezeigt.

#property strict
#property indicator_chart_window
//--- input parameters
#define  MILLISEC_TIMER_INTERVAL         500 
int            timeOffset;
datetime       ServerLocalOffset;
datetime       prevTime,myTime,localtime;
bool           newBar = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   EventSetMillisecondTimer(MILLISEC_TIMER_INTERVAL);
   
  datetime srvtime,tmpOffset;
   RefreshRates();
   srvtime = TimeCurrent();
   // Modified
   localtime = TimeLocal()+TimeGMTOffset();
   if(TimeHour(srvtime)>TimeHour(localtime)){
      // Server Time is still ahead of us
      int newOffset = TimeHour(srvtime)-TimeHour(localtime);
      ServerLocalOffset = (newOffset*60*60);
   }else if(TimeHour(srvtime)<TimeHour(localtime)){
      // Server Time is Behind us
      int newOffset = TimeHour(localtime)-TimeHour(srvtime);
      ServerLocalOffset = (newOffset*60*60);
   }else{
      // No modification required
      ServerLocalOffset = srvtime;
   }
   localtime = TimeLocal()-ServerLocalOffset;
   
   tmpOffset = TimeSeconds(srvtime) - TimeSeconds(localtime);
   if(tmpOffset < 30 && tmpOffset >= 0){
      timeOffset = TimeSeconds(srvtime) - TimeSeconds(localtime);
   }
   return(INIT_SUCCEEDED);
  }
  
void OnDeinit(const int reason)
  {
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
datetime sec;
   datetime localtime;
   localtime = TimeLocal()+(TimeGMTOffset()+(60*60));
 sec=Time[0]-localtime-timeOffset;
 if(sec<=2){Alert("время откр. бара ",Time[0]);}
      Comment(TimeToStr(sec,TIME_SECONDS ));
  }
//+------------------------------------------------------------------+
 
Ich habe noch nicht herausgefunden, wie ich die Sekunden zählen kann, bis der Balken in der aktuellen Periode geschlossen wird. Hilfe.
Grund der Beschwerde: