Diskussion zum Artikel "Lernen Sie, wie man mit Datum und Uhrzeit in MQL5 umgeht"

 

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

 

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);
}

 
gerien #:

Bei der Lösung des Problems der Zuweisung eindeutiger Namen zu Objekten (vom Typ ARROW) verwenden wir die Zeit in Sekunden:

Ich denke, es ist viel billiger, einen globalen inkrementellen Zähler zu organisieren.

 
gerien #:
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));
  } 
 
gerien 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);
}

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.

 
Maxim Kuznetsov #:

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.

 
JRandomTrader #:

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:

Фредерик Браун
Конец начал

Профессор Джонс долгое время работал над теорией времени.
- И сегодня я нашел ключевое уравнение, - сказал он своей дочери как-то утром.
- Время это поле. Я создал  машину, которая способна управлять этим полем.
Он протянул руку и, нажимая кнопку, сказал:
- Это заставит время идти назад идти время заставит это
- :сказал, кнопку нажимая, и руку протянул он.
- Полем этим управлять способна которая, машину создал я. Поле это время,
- утром как-то дочери своей он сказал. - Уравнение ключевое нашел я сегодня и.
Времени теорией над работал время долгое Джонс профессор.

Начал конец
Браун Фредерик
 
JRandomTrader #:

Entschuldigung, mir fällt gerade etwas zu diesem Thema ein:

Wahrscheinlich hätte ich nicht nur die Wortreihenfolge, sondern auch die Buchstabenreihenfolge umkehren sollen ;)
 
JRandomTrader #:

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.