Es sollte erwähnt werden, dass StructToTime, TimeToStruct und insbesondere TimeToString und StringToTime eher "teure" Operationen sind und in zeitkritischen Situationen manchmal durch einfachere ersetzt werden können.
Insbesondere ist es nicht empfehlenswert, den Tagesbeginn auf direktem Wege zu ermitteln:
StringToTime(TimeToString(TimeCurrent(),TIME_DATE))
besser tun:
TimeCurrent() / 86400 * 86400
Wegen der ganzzahligen Arithmetik wird der Rest aus der Division verworfen.
Manchmal reicht es auch aus, die seit dem Tagesbeginn verstrichene Zeit zu kennen, und das Jahr, der Monat, die Zahl und der Wochentag sind nicht wichtig (oder können einmalig zu Beginn eines neuen Tages ermittelt werden).
In Sekunden: Zeit % 86400
Stunden: Zeit % 86400 / 3600
Minuten: Zeit % 3600 / 60
Sekunden: Zeit % 60
Bei der Lösung des Problems der Zuweisung eindeutiger Namen an Objekte (vom Typ PFEIL) verwenden wir die Zeit in Sekunden:
//+------------------------------------------------------------------+
int TimeInSec(datetime date)
{
MqlDateTime tm;
TimeToStruct(date, tm);
int sec_int = tm.day * 24 *3600 + tm.hour * 3600 + tm.min * 60 + tm.sec * 1;
return(sec_int);
}
//+------------------------------------------------------------------+
int TimeMinute(datetime date)
{
MqlDateTime tm;
TimeToStruct(date, tm);
return(tm.min);
}
Das ist genau das, worüber ich gesprochen habe. Ineffiziente Verwendung der "teuren" TimeToStruct-Funktion.
Nur diese eine ist genug:
int TimeMinute(datetime date) { return((int)(date % 3600 / 60)); }
int sec_int = tm.day * 24 *3600 + tm.hour * 3600 + tm.min * 60 + tm.sec * 1;
return(sec_int);
}
//+------------------------------------------------------------------+
int TimeMinute(datetime date)
{
MqlDateTime tm;
TimeToStruct(date, tm);
return(tm.min);
}
alles ist viel einfacher - datetime ist Sekunden. Es muss nicht durch TimeToStruct geparst werden, um die Felder anschließend zu multiplizieren und zu addieren
long timeIsSeconds = (long)TimeCurrent();
wenn Ihr Algorithmus die Abwesenheit von zwei Pfeilen in einer Sekunde garantiert, wird er funktionieren.
Um die Zahl zu verkürzen, werden offenbar die Sekunden vom Monatsanfang genommen.
Obwohl man mit fast dem gleichen Ergebnis (wenn man den Objektnamen nicht auf den Tag des Monats umrechnen muss) den Rest der Division von TimeCurrent() durch eine Zahl nahe der durchschnittlichen Anzahl von Sekunden im Monat nehmen kann.
Er nimmt die Sekunden vom Anfang des Monats, um die Zahl zu verkürzen.
Obwohl man mit fast dem gleichen Ergebnis (wenn man den Objektnamen nicht auf den Tag des Monats umrechnen muss) den Rest der Division von TimeCurrent() durch eine Zahl nahe der durchschnittlichen Anzahl der Sekunden im Monat nehmen kann.
und subtrahieren von einem Datum ein anderes Datum (der Anfang des Monats) nicht erlauben einige schlaue Religion ? :-)
In der Praxis - wenn man irgendwo den genauen Anfang des Monats, des Tages, der Woche wissen muss, werden sie einmal gezählt und gespeichert. Damit man sie nicht bei jedem Niesen neu berechnen muss.
datetime thisDayTime, nextDayTime;
datetime thisYearTime,thisMonTime;
int thisYear, thisMon;
// вызывать внутри всех обработчиков OnXXX терминала- это прототип службы времени
void TimeService() {
datetime now=TimeCurrent();
if (now>=nextDayTime) {
MqlDateTime dt; TimeToStruct(dt,now);
dt.hour=dt.min=dt.sec=0;
thisDayTime=StructToTime(dt);
nextDayTime=thisDayTime+24*60*60;
OnDay(); /// обработчик "начало дня"
if (dt.month!=thisMon|| dt.year!=thisYear) {
thisMon=dt.month;
dt.day=0; thisMon=StructToTime(dt);
OnMon(); /// обработчик "начало месяца"
}
if ( dt.year!=thisYear ) {
thisYear=dt.year;
dt.month=0; thisYearTime=StructToTime(dt);
OnYear(); /// обработчик "начало года"
}
}
}
Entschuldigung, mir fällt gerade etwas zu diesem Thema ein:
Фредерик Браун Конец начал Профессор Джонс долгое время работал над теорией времени. - И сегодня я нашел ключевое уравнение, - сказал он своей дочери как-то утром. - Время это поле. Я создал машину, которая способна управлять этим полем. Он протянул руку и, нажимая кнопку, сказал: - Это заставит время идти назад идти время заставит это - :сказал, кнопку нажимая, и руку протянул он. - Полем этим управлять способна которая, машину создал я. Поле это время, - утром как-то дочери своей он сказал. - Уравнение ключевое нашел я сегодня и. Времени теорией над работал время долгое Джонс профессор. Начал конец Браун Фредерик
Ich erinnerte mich an eine sowjetische Science-Fiction-Geschichte, in der die Tochter vor dem Experiment ihres Vaters im damaligen Institut immer wieder "ukponk imzhan" zu ihm sagte, und er verstand ihre kindische Verwöhnung nicht.
Und sie hat ihn damit gerettet.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Lernen Sie, wie man mit Datum und Uhrzeit in MQL5 umgeht :
Ein neuer Artikel über ein neues wichtiges Thema, das sich mit Datum und Zeit beschäftigt. Als Händler oder Programmierer von Handelsinstrumenten ist es sehr wichtig zu verstehen, wie man mit diesen beiden Aspekten Datum und Zeit sehr gut und effektiv umgehen kann. Ich werde also einige wichtige Informationen darüber weitergeben, wie wir mit Datum und Zeit umgehen können, um effektive Handelsinstrumente reibungslos und einfach zu erstellen, ohne dass es zu Komplikationen kommt.
Niemandem im Finanzmarktbereich bleibt es verborgen, wie wichtig die Zeit ist und wie sie Handelsentscheidungen und -ergebnisse beeinflussen kann. MQL5 (MetaQuotes Language 5) bietet eine erstaunliche Lösung, um effektiv mit Datum und Uhrzeit umzugehen, und das werden wir in diesem Artikel lernen, denn wir werden sehen, wie wir mit diesem wichtigen Thema durch viele Anwendungen umgehen können, die als Teil unseres Handelssystems codiert werden können, nachdem wir die wichtigsten Aspekte dieses Themas in der Programmiersprache MQL5 verstanden haben.
Autor: Mohamed Abdelmaaboud