Fehler, Irrtümer, Fragen - Seite 2047

 
Alexey Navoykov:

Ich verstehe nicht, was Sie wollen. Ich sagte, ich spreche von "Variableninitialisierung". Und in diesem Zusammenhang verhalten sich statische und globale Variablen identisch. Ich habe Ihnen sogar einen Link zur Dokumentation gegeben:Variableninitialisierung

Beachten Sie, dass statische und globale Variablen dort überall zusammen vorkommen.

Und wir kritisieren die Initialisierungssequenz nicht, weil sie nichts mit dem vorliegenden Problem zu tun hat. Ich möchte Sie daran erinnern, dass das Problem darin besteht, dass der Compiler an den Stellen, an denen er es sollte, KEINEN Fehler erzeugt. Wenn eine statische Variable noch nicht initialisiert ist, können Sie nicht auf sie zugreifen.

Ändern Sie den Namen der globalen Variablen, wenn es Sie so sehr stört. Das Ergebnis wird dadurch in keiner Weise beeinflusst.

Hallo, jetzt geht's los... Haben Sie den Link selbst gelesen?

Außer mql kenne ich, wenn auch nicht sehr gut, nur VBA und nur dort bin ich auf die Richtlinie gestoßen, die die Initialisierung von Variablen verlangt. Beachten Sie, dass dies allein im Ermessen des Programmierers liegt. Und Sie wollen, dass MQ die Initialisierung absolut aller Variablen erzwingt? Und die Initialisierungssequenz bei jeder Beantragung durch solche Nutzer ändern? Sie hatten die Möglichkeit, von den Regeln abzuweichen und zu verstehen, WAS Sie tun, und Sie fordern, diese Möglichkeit auszuschließen?

Es scheint, als ob Sie nur etwas suchen, um darauf herumzuhacken und die mql-Sprache zu besudeln. Entfernen Sie statisch aus einer Variablen in einer Klasse und Sie werden zufrieden sein.

 

Was passiert, wenn die Systemvariable, die wir von GetTickCount() erhalten, überläuft?

Gibt es eine Standardreaktion des Terminals?

Besteht die Notwendigkeit, diesen Moment programmatisch zu überwachen und eine Reaktion zu implementieren?

 
Alexey Viktorov:

Hallo, jetzt geht's los... Haben Sie diesen Link selbst gelesen?

Abgesehen von mql kenne ich, auch nicht sehr gut, nur VBA und nur dort habe ich die Richtlinie der obligatorischen Variableninitialisierung getroffen. Beachten Sie, dass dies allein im Ermessen des Programmierers liegt. Und Sie wollen, dass MQ die Initialisierung absolut aller Variablen erzwingt?

Darin liegt der Grund. Sie kennen sich nicht nur nicht sehr gut aus (und Sie haben es selbst gesagt, wie oft), Sie kennen auch VBA, das wenig mit dieser Sprache zu tun hat. Ich kenne C++ recht gut. Das ist eine sehr klare und strenge Sprache, da ist kein freier Wille erlaubt, über den Sie fantasieren. Und MQL wurde nach dem Bild und Gleichnis von C++ geschaffen. Also lassen Sie uns damit aufhören. Machen Sie sich erst einmal mit C++ vertraut, dann werden Sie einen Sinn darin sehen, über etwas zu streiten.

P.S. Übrigens wird mir erst jetzt klar, dass Sie das Gespräch ursprünglich in die falsche Richtung geführt haben, denn ich habe schon vergessen, wo alles angefangen hat, und jetzt habe ich meinen ursprünglichen Code wieder gesehen und festgestellt, dass Ihr erster Angriffhier völlig themenfremd war. Und wie könnte ich da nicht sofort aufpassen! In meinem Code wird die statische Variable genau wie eine Konstante initialisiert, wie es in der Dokumentation beschrieben ist. Das Problem ist also, dass es nichts initialisiert hat. Und Sie haben mir gesagt, dass es daran liegt, dass es mit einer Konstante initialisiert werden muss. Und los geht's...

 

Warum kann ich das Array nicht mit Variablen initialisieren?

void (double a, double b,double c )

{

double inp[3]={a,b,c};   // компилятор ругается 'а' - constant expression required      

}

 
Alexey Kochetkov:

Warum kann ich das Array nicht mit Variablen initialisieren?

Denn in MQL können Sie nur mit Konstanten initialisieren.
 
Alexey Navoykov:

Darin liegt der Grund. Sie wissen nicht nur nicht sehr gut Bescheid (und Sie haben es selbst gesagt, wie oft), sondern Sie kennen auch VBA, was wenig mit der betreffenden Sprache zu tun hat. Ich kenne C++ recht gut. Das ist eine sehr klare und strenge Sprache, da ist kein freier Wille erlaubt, über den Sie fantasieren. Und MQL wurde nach dem Bild und Gleichnis von C++ geschaffen. Also lassen Sie uns damit aufhören. Machen Sie sich erst einmal mit C++ vertraut, dann werden Sie einen Sinn darin sehen, über etwas zu streiten.

P.S. Übrigens wird mir erst jetzt klar, dass Sie das Gespräch ursprünglich in die falsche Richtung geführt haben, denn ich habe schon vergessen, wo alles angefangen hat, und jetzt habe ich meinen ursprünglichen Code wieder gesehen und festgestellt, dass Ihr erster Angriffhier völlig themenfremd war. Und wie könnte ich da nicht sofort aufpassen! In meinem Code wird die statische Variable genau wie eine Konstante initialisiert, wie es in der Dokumentation beschrieben ist. Das Problem ist also, dass es nichts initialisiert hat. Und Sie haben mir gesagt, dass es daran liegt, dass es mit einer Konstante initialisiert werden muss. Und schon geht's los...

Ich rufe Sie jetzt ein letztes Mal auf , die Initialisierungssequenz zu studieren. Mir scheint, dass die Fähigkeit, logisch zu denken, wichtiger ist als Wissen. Sie kennen vielleicht alle Programmiersprachen auswendig, aber Sie müssen die Initialisierungssequenz verstehen.

Eine statische Variable kann NICHT vor der globalen Variable initialisiert werden. Und das sagt schon alles.

 
ChartNavigate-Fehler
const bool Init = ChartSetInteger(0, CHART_AUTOSCROLL, false) && EventSetTimer(1);  

void OnTimer()
{  
  Print("----------")  ;
  Print(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));  

  ChartNavigate(0, CHART_BEGIN, 100);
  
  Print(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));
}

Ergebnis auf ICMarkets-Demo EURCHF M1 (max bars = 5000):

2017.10.18 21:16:00.800 ----------
2017.10.18 21:16:00.800 4899
2017.10.18 21:16:00.801 199930
2017.10.18 21:16:01.821 ----------
2017.10.18 21:16:01.821 199930
2017.10.18 21:16:01.821 4899
2017.10.18 21:16:02.836 ----------
2017.10.18 21:16:02.836 4899
2017.10.18 21:16:02.836 199930
2017.10.18 21:16:03.845 ----------
2017.10.18 21:16:03.845 199930
2017.10.18 21:16:03.855 4899
2017.10.18 21:16:04.864 ----------
2017.10.18 21:16:04.864 4899
2017.10.18 21:16:04.864 199930
2017.10.18 21:16:05.876 ----------
2017.10.18 21:16:05.876 4999
2017.10.18 21:16:05.886 199930

Ich verstehe überhaupt nichts mehr. Es sollten dieselben Zahlen sein. Aber am Ende springt das Diagramm immer wieder.

Funktioniert das für jeden?

 
Alexey Viktorov:

Ich bitte Sie ein letztes Mal, sich mit der Initialisierungssequenz vertraut zu machen. Mir scheint, dass die Fähigkeit, logisch zu denken, wichtiger ist als Wissen. Sie kennen vielleicht alle Programmiersprachen auswendig, aber Sie müssen die Initialisierungssequenz verstehen.

Eine statische Variable kann NICHT vor einer globalen Variable initialisiert werden. Und das sagt schon alles.

Es tut mir leid, aber ich werde Ihren sinnlosen Provokationen in einem solchen Tonfall keine Beachtung mehr schenken. Es tut mir jetzt schon leid, dass ich meine Zeit mit einer sinnlosen Diskussion mit einem Dilettanten verschwendet habe. Erstens haben Sie über Konstanten gesprochen, die meine Situation überhaupt nicht betreffen, und zwar mit der gleichen aggressiven Arroganz wie jetzt. Jetzt stellen Sie unbegründete Behauptungen auf, ohne das Thema zu kennen und ohne zu verstehen, wie eine Programmiersprache aufgebaut ist. Behalten Sie Ihre "logischen Gedanken", Mutmaßungen und Phantasien für sich. Ich bin nicht an ihnen interessiert.

 
Kirill Belousov:

Was passiert, wenn die Systemvariable, die wir von GetTickCount() erhalten, überläuft?

Gibt es eine Standardreaktion des Terminals?

Besteht die Notwendigkeit, diesen Moment programmatisch zu verfolgen und eine Reaktion zu implementieren?

Es besteht keine Notwendigkeit, eine Reaktion durchzuführen.

Wenn Sie den von GetTickCount zurückgegebenen Wert in eine Variable vom Typ uint aufnehmen, können Sie die Differenz sicher ermitteln

uint prev_count=GetTickCount();
...
...
uint diff=GetTickCount()-prev_count;

Selbst wenn es zu einem Überlauf kommt, erhalten Sie die richtige Differenz. Dies sind Eigenheiten von Operationen mit vorzeichenlosen Ganzzahlen. Das ist aber nur gut, wenn der vorherige Wert auf genau dieselbe Weise ermittelt wurde (GetTickCount) und wenn der vorherige Wert nicht früher als vor 49 Tagen ermittelt wurde.

Wenn Sie nach mehr oder weniger suchen, benötigen Sie mehr Operationen als nur eine einfache Subtraktion.

 
fxsaber:
Der ChartNavigate-Fehler

Ergebnis auf ICMarkets-Demo EURCHF M1 (max bars = 5000):

Ich verstehe überhaupt nichts mehr. Es sollten dieselben Zahlen sein. Aber am Ende springt das Diagramm immer wieder.

Reproduziert sie sich?

Warum ist es ein Fehler?

Die Navigation in einer Karte erfolgt nicht sofort. Es ist ein asynchroner Befehl. Das Ergebnis der Ausführung ist nicht garantiert.

Es ist, als ob Sie die Taste PageUp drücken und das Diagramm steht still. Und plötzlich ruckte es.

Grund der Beschwerde: