Wünsche für MQL5 - Seite 117

 
HideYourRichess писал(а) >>
Mit einem iPod handeln?! - Tut mir leid, ich hätte Sie sofort warnen müssen. Bitte schreiben Sie, nennen Sie jeden Unsinn - ich werde kein Wort sagen. Nun, da alles geklärt ist, werde ich es mit Verständnis und Geduld hinnehmen. Tausche gegen einen iPod! - aaaaaghit....

Vielen Dank für Ihr Mitgefühl und viel Glück für Sie, damit Sie zumindest keine Fortschritte machen.

 

Ich bin gerade auf ein Problem in MT4 gestoßen. Bitte stellen Sie sicher, dass dieses Problem nicht in MT5 auftritt (ich habe es nicht überprüft).


Ganz am Anfang (vor init) wurden Arrays gesetzt:

xsell[3];

xbuy[3];


Davor eine externe Variable:

extern int Max_Array_Size = 13;


In der start()-Schleife:

ArrayResize(xsell, Max_Array_Size);

ArrayResize(xbuy, Max_Array_Size);


Und dann die Schleife for():


for(int kss= Max_Array_Size; kss>0; kss--) {

xbuy[kss] = . . . ;

. . .

}


Das gleiche Schema wurde sowohl im Modul Verkäufe(benutzerdefinierter Indikator) als auch im Modul Käufe verwendet, d. h. die Variablen sind unterschiedlich,

aber das Prinzip ist das gleiche. Zuerst habe ich alles für den Verkauf geschrieben, zusammengestellt - alles in Ordnung, keine Probleme. Dann habe ich kopiert

Die Kompilierung dauerte viel länger und der Wechsel zwischen

Die Umstellung des Zeitrahmens dauerte auch viel länger. Behinderte Verkäufe - nichts hat sich geändert, Bremsen.

Links nur der Verkauf - läuft schnell. Der Compiler beschwerte sich nicht, brauchte nur viel länger für die Ausführung.

Ich habe alles, was mir verdächtig vorkam, noch einmal durchgesehen und einige Teile im Einkauf umgeschrieben - Lags!...

Es stellte sich heraus, dass das Problem in der Array-Dimension lag: 13 => 0-12, und in der for-Schleife versuchte ich, sie auch mit 13 zu füttern!


Nach der Reparatur:

ArrayResize(xsell, Max_Array_Size+1);

ArrayResize(xbuy, Max_Array_Size+1);


Sowohl die Verkäufe als auch die Käufe wurden so zusammengestellt, wie sie sein sollten, und der Zeitrahmenwechsel wurde beschleunigt.

Der Fehler sollte aber schon bei der Kompilierung aufgetreten sein. Die Suche nach der Ursache in solchen Fällen

Es ist gar nicht so einfach, die Ursache zu finden (vielleicht ist Ihnen das Problem gar nicht bewusst).

Und es ist nicht klar, warum im Verkaufsmodul alles reibungslos funktionierte.

 
chief2000 писал(а) >>

Der Fehler hätte jedoch bei der Kompilierung entdeckt werden müssen. In solchen Fällen ist es gar nicht so einfach, die Ursache zu finden (vielleicht haben Sie gar nicht gewusst, dass es ein Problem gibt).

Der Compiler kann und soll die Variablenwerte nicht per Definition verfolgen.

Und es ist auch nicht klar, warum im Verkaufsmodul alles reibungslos funktionierte.

Denn ein Fehler ist schneller zu bearbeiten als zwei oder mehr.

 
fwiq >> :

Der Compiler kann und sollte die Werte von Variablen nicht per Definition verfolgen.

Es ist schlimm, wenn es wirklich so ist.

Das ist praktisch dasselbe wie der Zugriff auf eine Variable, die nicht vordefiniert wurde.

fwiq schrieb >>

Denn ein Fehler ist schneller zu bearbeiten als zwei oder mehr.

Nein, es ist etwas anderes - ich habe Ihnen gesagt, dass es kein Problem gab, als nur das Verkaufsmodul übrig war,

und als ich die Verkäufe entfernte und nur die Käufe übrig ließ, gab es ein Problem. Der Unterschied war sehr deutlich, obwohl beide Module

sind absolut identisch, abgesehen von einigen Operationen, die umgekehrt sind (>/<, High[]/Low[] usw.).

 
chief2000 писал(а) >>

Nein, es ist etwas anderes - ich habe Ihnen gesagt, dass es kein Problem gab, als nur das Verkaufsmodul übrig war, aber als ich die Verkäufe entfernte und nur die Käufe übrig ließ, gab es ein Problem. Der Unterschied war deutlich spürbar, und beide Module sind absolut identisch, abgesehen von einigen Operationen, die umgekehrt sind (>/<, High[]/Low[] usw.).

Vielleicht liegt es nicht an der Definition von Variablen oder Arrays. Bei den MT4-Indikatoren sollten Sie die Momente, in denen Sie programmatisch Linien hinzufügen und die Namen der reflektierten Arrays ändern, sorgfältig und aufmerksam beobachten. Manchmal kommt es zu Verwechslungen, und die Leitung wird nicht gespiegelt oder die Berechnung legt auf, wie in diesem Fall. Es gibt nur ein Heilmittel, wie in dem Witz "Du musst nur rausgehen und reinkommen und alles wird gut".

 

Wenn man es wörtlich nimmt, hat die Überlastung auch nicht geholfen.

Jedenfalls war es die Unterscheidung zwischen Verkaufen und Kaufen, die mir half zu erkennen, dass es ein Problem gab...

Das Glück war ein Segen im Verborgenen :)

 
Ich habe eine weitere Frage. Ich kann den MQL5-Debugger bei Indikatoren nicht ausführen. Es funktioniert bei Skripten und Expert Advisors, aber es stoppt nicht bei einem Indikator und kann die Schritte nicht durchlaufen. Ich bin mir nicht sicher, ob es irgendwelche nicht dokumentierten Besonderheiten gibt; wenn Sie sie kennen, lassen Sie es mich bitte wissen.
 
fwiq >> :
Ich habe eine weitere Frage. Ich kann den MQL5-Debugger bei Indikatoren nicht ausführen. Bei Skripten und Expert Advisors funktioniert alles, aber bei einem Indikator hält er nicht an und kann die Schritte nicht durchlaufen. Ich habe nicht mit dieser Art von Dingen gearbeitet, ich habe mit dieser Art von Dingen angefangen zu arbeiten.

Vor einer Woche schrieb die Handler, dass dies war die Idee und Debugging auf den Debugger Indizes wird später funktionieren

 

In MT4 gab es immer Fehler, weil Ask oder Bid oder andere (Close, Open, etc.) nach dem Komma gesammelt wurden

eine große Anzahl von Zahlen (z. B. 1,43231111111111111111). Infolgedessen mussten wir "NormalizeDouble(Bid,Digits);" hinzufügen.

Und das kann einmal auf MT-Ebene gelöst werden.

 

Bitte ergänzen Sie die Funktionen ObjectFind und ObjectDeleteum die Möglichkeit, mit Masken wie : *,?

Im Prinzip kann natürlich nur ObjectFind verwendet werden .Wenn es notwendig ist, die Abwärtskompatibilität zu wahren, sollte die frühere Funktion unverändert bleiben und die Menge z. B. durch ObjectFindM (Mehrfachsuche)ergänzt werden .

Beispiel: Wir müssen Textbeschriftungen finden, die mit "Signal" beginnen.

Implementierung: Gibt den Namen des ersten gefundenen Objekts zurück (oder ein Handle, aber das erfordert andere Funktionen, die damit umgehen können).

Notation: ObjectFindM("Signal*");

Beispiel: Sie müssen aus dem Fenster "0" nur die Textbeschriftungen entfernen, die mit "Signal" beginnen.

Notation: ObjectDelete(0,"Signal*");