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

 

Wie überprüfe ich die Bedingung zu einem bestimmten Zeitpunkt? z.B. auf dem M5-Chart um 22:59 Uhr, d.h. eine Minute bevor der Balken schließt. überprüfe für die ganze Minute.

      //22:59
      if(open[i]>close[i] && high[i]-low[i]>=100*Point)
        {
         BufferUP[i]=low[i]-distance*Point;
        }
 
PolarSeaman:

Wie kann man die Bedingung zu einem bestimmten Zeitpunkt überprüfen? z.B. auf dem M5-Chart um 22:59 Uhr, d.h. eine Minute bevor der Balken schließt.

In dem Indikator auf der Geschichte - nur durch das Lesen der Daten aus dem jüngeren TF (in diesem Fall M1), müssen wir zu umgehen. Aber für die Nullleiste:

  1. Berechnen Sie die verbleibende Zeit bis zum Schließen des Balkens.
  2. Wenn es 1 Minute oder weniger ist, tun wir, was nötig ist.

 
Ihor Herasko:

...also für den Null-Balken:

  1. Berechnen Sie die Zeit bis zur Schließung des Balkens.
  2. Wenn nur noch 1 Minute oder weniger verbleibt, dann tun Sie das Nötige.

Das heißt, die aktuelle Zeit subtrahiert die Öffnungszeit der Bar?

Vielleicht sollten wir die Iteration überspringen, wenn die Zeit nicht im Bereich von 22:59, 23:00 liegt

Wie schreibt man diese Bedingung richtig?

 
PolarSeaman:

Handelt es sich um die aktuelle Zeit, die von der Öffnungszeit der Bar abgezogen wird, oder zählt sie weniger als eine Minute?

Überspringen Sie die Iteration, wenn die Zeit nicht im Bereich 22:59, 23:00 liegt.

Wie schreibe ich diese Bedingung richtig?

Wenn die Zeit explizit festgelegt wird, ist es dasselbe wie im obigen Schema:

input uint i_uHoursStart = 22; // Час начала действия диапазона
input uint i_uMinutesStart = 59; // Минуты начала действия диапазона
input uint i_uHoursEnd = 23; // Час окончания действия диапазона
input uint i_uMinutesEnd = 00; // Минуты окончания действия диапазона

uint g_uTimeStart, g_uTimeEnd;

int OnInit()
{
...
   g_uTimeStart = i_uHoursStart * 60 + i_uMinutesStart;
   g_uTimeEnd = i_uHoursEnd * 60 + i_uMinutesEnd;
...

}

...
uint uCurDayMinutes = Hour() * 60 + Minute();
if (uCurDayMinutes >= g_uTimeStart && uCurDayMinute < g_uTimeEnd)
{
   // Время от 22:59 до 23:00
}

Ich habe den Code nicht überprüft. Es kann zu Druckfehlern und einigen Irrtümern kommen. Die Hauptsache ist hier die Richtung des Denkens.

Sie müssen auch überprüfen, ob die Werte für Stunden und Minuten korrekt sind. Immerhin kann der Nutzer Werte wie 38 Stunden und 112 Minuten eingeben.

 
Ihor Herasko:

Wenn die Zeit explizit eingestellt ist, gilt das Gleiche wie oben:

Ich habe den Code nicht überprüft. Es kann Tippfehler und einige Irrtümer geben. Die Hauptsache ist hier die Richtung des Denkens.

Sie sollten auch überprüfen, ob die Werte für Stunden und Minuten korrekt sind. Schließlich kann ein Benutzer Werte wie 38 Stunden und 112 Minuten eingeben.

Im Auge, Benutzer, für 112 Minuten)

warum kann es nicht so sein?

if (TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)>="22:59"&&TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)<"23:00")

wird nicht zur angegebenen Zeit angezeigt

Es wird mehrere Bereiche geben, die jeweils ausgeschaltet werden müssen

 

die Anführungszeichen können für eine Minute "einschlafen" und Sie werden die Zeit verpassen)

Richtig wäre es, einen Timer zu erstellen, die lokale und die aktuelle Zeit zu synchronisieren und im Timer die richtige Zeit zu "erwischen".

 
PolarSeaman:

Im Auge des Betrachters, für den Benutzer, in 112 Minuten)

Warum können Sie es nicht auf diese Weise tun?

Das ist genau die falsche Lösung, denn Sie vergleichen Zeichenfolgen und keine Zahlen. Allerdings kann man auch etwas mit TimeToStr machen. Aber dieser Ansatz ist dazu verdammt, langsamer zu sein als die Arbeit mit Zahlen. Schließlich benötigen String-Operationen viel mehr Zeit als die einfachsten arithmetischen Operationen (+, -, /, *).

Es wird mehrere Bereiche geben, die jeweils deaktiviert werden müssen.

Dies geschieht durch die Speicherung der Werte der gewünschten Bereiche in Arrays. Zugegeben, es ist nicht klar, wie dies in den Konfigurationsparametern aussehen würde - zu viele davon müssten gemacht werden. Es gibt jedoch Lösungen. Nicht einfach, aber sie sind verfügbar.

 
Taras Slobodyanik:

die Anführungszeichen können für eine Minute "einschlafen" und Sie werden die Zeit verpassen)

Der richtige Weg ist, einen Timer zu erstellen, die lokale Zeit mit der aktuellen Zeit zu synchronisieren und die richtige Zeit im Timer "einzufangen".

Nun, Sie müssen nichts zu einer bestimmten Zeit tun. Es ist also in Ordnung))

 
Taras Slobodyanik:

die Anführungszeichen können für eine Minute "einschlafen" und die Zeit verpassen)

einen Timer korrekt erstellen, lokale und aktuelle Zeit synchronisieren und im Timer die richtige Zeit "einfangen"

können Sie OnCalculate() in OnTimer() einfügen?

Ich weiß nicht, wie ich die lokale und dieaktuelle Zeit synchronisieren kann, ich kann es in der Hilfe nicht finden.

 
Ihor Herasko:

Nun, das ist es, was man braucht, um zu einem bestimmten Zeitpunkt nichts zu tun. Es ist also in Ordnung ))

wie, nichts tun? nur diese Minute ist erforderlich, um zu überprüfen, und schlafen für 24 Stunden)