Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 532

 
-Aleks-:
Wir werden die Sekunden bekommen, die wir zum Aufrunden brauchen - das Runden ist das Problem.

duh

datetime Day00=86400*(time[n]/86400);//начало дня
und es wird auf den Tagesbeginn gerundet. 86400=24*60*60
 
-Aleks-:

Ich kann nicht herausfinden, wie man es benutzt.

Der zweite Wert erfordert"MqlDateTime&dt_struct// structure for taking values" und ich verstehe nicht, wie man diese MqlDateTime verwendet.

Es gibt eine Zeit. Die Zeit hat Parameter wie: Jahr, Monat, Tag, Stunden, Minuten, Sekunden usw. Mit der Funktion TimeToStruct() zerlegen Sie die Zeit in diese Komponenten. Dann können Sie z. B. Stunden, Minuten und Sekunden auf Null setzen - Sie erhalten den Tagesbeginn.

MqlDateTime ist ein Datentyp, genau wie int, bool, usw. Es ist nur ein zusammengesetzter Typ, d.h. um Zugriff auf seine Felder (Stunden, Minuten, Sekunden...) zu erhalten, müssen Sie einen Punkt verwenden. Zum Beispiel: dt_struct.hour - Stundenwert. Lesen Sie mehr über Strukturen unter https://www.mql5.com/ru/docs/basis/types/classes.

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Was bedeutet diese Bemerkung über die Reihenfolge im Logbuch, die nichts ändert?

 
Aleksey Lebedev:

gut

und es erfolgt eine Abrundung auf den Tagesbeginn. 86400=24*60*60
Nach Ihrer Formel erhalten wir die Anzahl der Tage zwischen dem aktuellen Balken und der Fernbedienung, aber diese Tage sind bedingt, es könnte 9 Uhr an diesem Tag und 1 Stunde am Vortag sein, dann wird der Unterschied in Sekunden 122400 sein, die 1,42 Tage ist - wenn auf 1 Tag gerundet, und die Notwendigkeit, 2 sein.
 
Alexey Kozitsyn:

Wir haben Zeit. Die Zeit hat Parameter wie: Jahr, Monat, Tag, Stunden, Minuten, Sekunden usw. Durch den Aufruf der Funktion TimeToStruct() zerlegen Sie die Zeit in diese Komponenten. Dann können Sie z. B. Stunden, Minuten und Sekunden auf Null setzen - Sie erhalten den Tagesbeginn.

MqlDateTime ist ein Datentyp, genau wie int, bool, usw. Es ist nur ein zusammengesetzter Typ, d.h. um Zugriff auf seine Felder (Stunden, Minuten, Sekunden...) zu erhalten, müssen Sie einen Punkt verwenden. Zum Beispiel: dt_struct.hour - Stundenwert. Lesen Sie mehr über Strukturen unter https://www.mql5.com/ru/docs/basis/types/classes.

Und wie, bitte schön, führt man diesen Nullabgleich durch?
 
-Aleks-:
Nach Ihrer Formel erhalten wir die Anzahl der Tage zwischen dem aktuellen Balken und der Fernbedienung, aber diese Tage sind bedingt, d.h. es kann 9 Uhr am aktuellen Tag und 1 Stunde am Vortag sein. Dann wird die Differenz in Sekunden 122400 sein, was 1,42 Tagen entspricht - wenn auf 1 Tag gerundet, während wir brauchen, was 2 sein würde.

ein verlorener Tag, 23h+24h+9h=2 Tage 8h... Ich brauche diese Formel nicht, wenn ich sie brauche:

Ich muss für jedes Diagramm des aktuellen Zeitrahmens Berechnungen durchführen. Für die Berechnung muss ich das Datum des oberen Zeitraums (Tage) kennen. Oben habe ich den Code angehängt - es geht darum, für jeden Balken den maximalen Preis des oberen TF im Moment der Balkeneröffnung im aktuellen Zeitrahmen zu kennen.

Nochmals:
datetime Day00=86400*(time[n]/86400);//начало дня для time[n]



Und Sie sagen Struktur... :)

 
Aleksey Lebedev:

ein verlorener Tag, 23h+24h+9h=2 Tage 8h... Sie brauchen diese Formel nicht, wenn Sie sie brauchen:

Nochmals:



Und Sie sagen Struktur... :)

Warum haben Sie 23 Stunden - ich habe 1 Stunde geschrieben, aber das ändert nichts an der Sache.

24 (vorgestern - eine Stunde gestern)+24 (gestern - eine Stunde heute)+8 (nach einer Stunde heute - minus eine Stunde)=56/24=2,33, also zwei Tage, nicht wahr?

 
-Aleks-:

Warum haben Sie 23 Stunden - ich schrieb 1 Stunde, aber die Essenz ändert sich nicht

24 (vorgestern - gestern zur vollen Stunde)+24 (gestern - heute zur vollen Stunde)+8 (heute nach einer Stunde - minus eine Stunde) =56/24 = 2,33 d.h. es sind zwei Tage, nicht wahr?

23h vor gestern +

24h gestern +

9h heute=

2 Tage 8h=2,(33)Tage

Das ist der richtige Weg, um es zu tun:

int DayN=time[0]/86400-time[163]/86400;

Macht nichts, das ist nicht nötig)
 
Aleksey Lebedev:

23h vor gestern+

24h gestern+

9h heute=

2 Tage 8h=2,(33)Tage

Der richtige Weg ist etwa so:

Macht nichts, das ist nicht nötig)

Stellen wir uns nun vor, es ist nicht 9 Uhr, sondern 19 Uhr.

24(vorgestern +24(gestern - 1h heute)+18(nach 1h heute - minus 1h)=66/24=2,75 d.h. es sind drei Tage, stimmt's?

Als ob sich der Bereich nicht täglich geändert hat, und die Berechnung während des Tages ergibt dann 2, dann 3 Tage - darin liegt das Problem.

Die Variante

 int DayN=time[0]/86400-time[163]/86400;

Es ist auch nicht gut, wenn wir annehmen, dass der aktuelle Balken 1 Stunde und der berechnete 23 Stunden beträgt, in diesem Fall wird das Ergebnis der Berechnung Null sein, während es 1 sein sollte.
 
-Aleks-:
Dies funktioniert auch nicht, wenn wir davon ausgehen, dass der aktuelle Balken 1 Stunde und der geschätzte Balken 23 Stunden beträgt; in diesem Fall ist das Ergebnis der Berechnung Null und sollte 1 sein.

Es wird 1 sein, beide Zeiten werden zunächst auf einen ganzen Tag aufgerundet und dann subtrahiert.

Grund der Beschwerde: