Fehler, Irrtümer, Fragen - Seite 2888

 
Denis Diakonov:

Bitte um Rat!

Warum wird die Serverzeit nicht aktualisiert, wenn neue Ticks eintreffen?

In dem Moment, in dem EA startet, funktioniert alles wie es sollte, aber dann geht die Zeit, aber der neue Wert der aktuellen Minute kommt nicht in die Variable.

D.h. der Expert Advisor arbeitet in Abhängigkeit von der in der Variablen int M = TimeMinute(TimeCurrent()) erhaltenen Zahl;

Diese Codezeile stammt aus der Referenz, und sie funktioniert nicht.

Ich starte sie z.B. um 12 Uhr - die vom Server zurückgegebene aktuelle Zeit entspricht der Zeit in der Variablen, aber die Variable bleibt immer noch auf 12 stehen, obwohl es bereits 15-20 Minuten auf der Uhr sind

TimeMinute() ist in MQL5 nicht verfügbar.

Fragen zu MQL4 sollten in der entsprechenden MetaTrader 4 Abteilung gestellt werden.

Wenn Sie eine plattformübergreifende Lösung wünschen, verwenden Sie MqlDateTime.

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура даты
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура даты
  • www.mql5.com
Порядковый номер в году day_of_year в високосном году, начиная с марта, будет отличаться от порядкового номера соответствующего дня в невисокосном году.
 
Das ist eine zweifelhafte Warnung:
void OnStart()
{
    for ( int i = 0, j; i < 10; i = j ) //(1) Warning: possible use of uninitialized variable 'j'
    {
        j = i+1;
    }
}

aber das ist in Ordnung:

void OnStart()
{
    for ( int i = 0, j; i < 10;       ) //(2) нормально
    {
        j = i+1;
                                i = j;
    }
}

Was ist der grundlegende Unterschied?

 
A100:
Das ist eine ziemlich zweifelhafte Warnung:

aber das ist in Ordnung:

Was ist der grundlegende Unterschied?

Richtige Warnung. Die Variable j wird nicht vor ihrer ersten Verwendung initialisiert, wenn der Variablen i ein Wert von j zugewiesen wird.

Bei der zweiten Variante wird der Variablen j der Wert i+1 zugewiesen und erst dann ist i = j

So sollte es auch ohne Warnung sein, aber es wurde nicht getestet...

void OnStart()
{
    for ( int i = 0, j = 0; i < 10; i = j )
    {
        j = i+1;
    }
}
 
Alexey Viktorov:

Richtige Warnung.

für die alternativ Begabten sind es identische Zyklen
 
TheXpert:
für die alternativ Begabten sind dies identische Schleifen

Erlaubt diese Identität der Schleifen also die Verwendung von nicht identifizierten Variablen?

 
Alexey Viktorov:

Erlaubt diese Identität der Schleifen also die Verwendung von nicht identifizierten Variablen?

Wenn die Schleifen identisch sind, sollte auch das Verhalten des Compilers gleich sein, was aber nicht der Fall ist. Darin liegt der Fehler. Sie haben erklärt, warum es im Fall (1) eine Warnung gibt, erklären Sie dann, warum es im Fall (2) keine gibt? Was hat sich im Prinzip geändert? Und wenn eine nicht initialisierte Variable verwendet wird, warum ist dann das Endergebnis richtig, wenn der Code ausgeführt wird?

Es gibt eine solche Wissenschaft - die Logik. Wenn A und B gleich sind und A rot ist, dann sollte B auch rot sein, nicht grün

 
A100:

Wenn die Schleifen gleich sind, dann sollte auch das Verhalten des Compilers gleich sein, aber es ist anders. Genau hier liegt der Fehler. Sie haben erklärt, warum es im Fall (1) eine Warnung gibt, erklären Sie dann, warum es im Fall (2) keine gibt? Was hat sich im Prinzip geändert? Und wenn eine nicht initialisierte Variable verwendet wird, warum ist dann das Endergebnis richtig, wenn der Code ausgeführt wird?

Es gibt eine solche Wissenschaft - die Logik. Wenn A und B gleich sind und A rot ist, muss B auch rot sein, nicht grün.

Es gibt dort keine Zufallszahl. Dort gibt es null.
MQ hat es auch behoben ))

void OnStart()
{
   int val;
   
   Print(val);
   Print(IntegerToString(val));
}
 
Roman:

Es gibt dort keine Zufallszahl. Dort steht eine Null.
MQ hat auch das behoben ))

Zuerst müssen Sie prüfen - dann "Bullshit".

void OnStart()
{
        for ( int i = 0, j; i < 10; i++ )
        {
                Print( j );
                break;
        }
}

Ergebnis: -2052256859


 
A100:

Sie müssen sich erst erkundigen - und dann "Blödsinn reden".

Ergebnis: -2052256859


void OnStart()
{
   for ( int i = 0, j; i < 10; i++ )
   {
      Print( j );                
   }
}
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0

Vielleicht liegt es daran, dass ich das Testterminal auf VirtualBox
installiert habe. Außerdem warnt der Compiler nicht, dass die Variable nicht initialisiert ist.

Aber sie warnt wie folgt

void OnStart()
{
   for ( int i = 0, j; i < 10; i++ )
   {
      Print( IntegerToString(j) );                
   }
}
 
Roman:
Wahrscheinlich, weil ich das Testterminal auf VirtualBox installiert habe

Sie haben eine Zufallszahl 0, ich habe 540016640

2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640

aber es sind immer noch Zufallszahlen.

Grund der Beschwerde: