Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 329
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Es besteht keine Notwendigkeit, das Array nach jedem Hinzufügen eines Arrayelements zu sortieren. Es ist besser, die Sortierung zu verschieben
Aus der Referenz
Mas[Blizko2] ist der nächstkleinere Wert in der Matrix
Vielen Dank für Ihre Antwort! Könnten Sie mir bitte sagen, um das nächste Element des Arrays zu bestimmen, habe ich das bereits gefundene Element +1 verwendet, aber der Prüfer gibt an dieser Stelle einen Fehler aus.
Ich muss das nächste Element finden. Offensichtlich ist es +1, aber das Programm gibt mir einen Fehler! Vielleicht gibt es einen anderen Weg oder ich mache es falsch? Bitte geben Sie mir einen Hinweis)
Blizko1 = Mas[Blizko2]+1;
oder so?
aber dann beim Kompilieren die Warnung über möglichen Datenverlust
Mit dieser Konstruktion
Blizko1 = Mas[Blizko2]+1;
Sie addieren 1 zu dem Wert, den Sie aus der Blizko2-Indexzelle erhalten, und dort wird der Preis gespeichert - ein doppelter Wert. Sie addieren eine ganze Zahl 1. Um eine Warnung zu vermeiden, müssen Sie +1.0 schreiben
Aber auch das wird den "Vater der russischen Demokratie" nicht retten, denn Sie addieren 1 nicht zum Index, sondern zu dem Wert, der im Array Mas[] mit dem Index Blizko2 gespeichert ist.
Um einen Wert aus einer benachbarten Zelle des Arrays zu erhalten, müssen Sie natürlich 1 zum Index addieren oder subtrahieren. Aber hier haben wir einen Fehler, über den Sie gestolpert sind: Wenn index auf die äußerste Zelle eines Arrays zeigt - entweder auf 0 oder auf die allerletzte, dann fällt man beim Subtrahieren von 1 (bei 0) oder beim Addieren von 1 (bei der allerletzten) außerhalb des Arrays - eine solche Zelle gibt es nicht. Dementsprechend müssen Sie kontrollieren, dass Blizko2+1 nicht größer ist als ArraySize(Mas)-1, oder Blizko2-1 nicht kleiner als Null ist.
Und... Ihnen wurde gesagt, dass Sie das Array nicht bei jeder Iteration der Schleife sortieren müssen - brauchen Sie Bremsen?
Es sollte sortiert werden, nachdem überprüft wurde, dass die Größe des Arrays größer als 1 ist.
Und dieser Entwurf ist überhaupt nicht klar:
Sehen Sie: In Blizko2 haben Sie den Index der Array-Zelle mit dem Preis.
Dann schreiben Sie in das Array - in die Zelle Blizko2+1 den Wert, der in der Variablen Blizko1 enthalten ist (warum???) - Sie sollten dort Preise haben, aber Sie stopfen sie mit unverständlichen Werten voll.
Sie müssen herausfinden, was Sie im Allgemeinen tun - kommentieren Sie einfach jede Zeile Ihrer Funktion aus. Nachdenklich.
Mit dieser Konstruktion
Sie addieren 1 zu dem Wert, den Sie aus der Blizko2-Indexzelle erhalten, und dort wird der Preis gespeichert - ein doppelter Wert. Sie addieren eine ganze Zahl 1. Sie müssen +1,0 schreiben, um die Warnung zu vermeiden.
Aber auch das wird den "Vater der russischen Demokratie" nicht retten, denn Sie addieren 1 nicht zum Index, sondern zu dem Wert, der im Array Mas[] mit dem Index Blizko2 gespeichert ist.
Um einen Wert aus einer benachbarten Zelle des Arrays zu erhalten, müssen Sie natürlich 1 zum Index addieren oder subtrahieren. Aber hier haben wir einen Fehler, über den Sie gestolpert sind: Wenn index auf die äußerste Zelle eines Arrays zeigt - entweder auf 0 oder auf die allerletzte, dann fällt man beim Subtrahieren von 1 (bei 0) oder beim Addieren von 1 (bei der allerletzten) außerhalb des Arrays - eine solche Zelle gibt es nicht. Dementsprechend müssen Sie kontrollieren, dass Blizko2+1 nicht größer ist als ArraySize(Mas)-1, oder Blizko2-1 nicht kleiner als Null ist.
Und... Ihnen wurde gesagt, dass Sie das Array nicht bei jeder Iteration der Schleife sortieren müssen - brauchen Sie Bremsen?
Um es zu sortieren, müssen wir prüfen, ob die Größe des Arrays größer als 1 ist.
Und diese Konstruktion ist ganz und gar nicht klar:
Siehe: in Blizko2 haben Sie den Index der Array-Zelle mit dem Preis.
Dann schreiben Sie in das Array - in die Zelle Blizko2+1 den Wert, der in der Variablen Blizko1 enthalten ist (warum???) - Sie sollten dort Preise haben, aber Sie stopfen sie mit unverständlichen Werten voll.
Sie müssen herausfinden, was Sie im Allgemeinen tun - kommentieren Sie einfach jede Zeile Ihrer Funktion aus. Nachdenklich.
Vielen Dank für die informative Antwort! Der Zweck, zu dem ich das Array erstellen möchte, besteht darin, die Preise der nächstgelegenen Aufträge unter dem Preis und über dem Preis zu ermitteln, falls es welche gibt. Wenn sie verfügbar sind und der Abstand zwischen ihnen und dem Preis den von mir festgelegten Abstand überschreitet, werden die entsprechenden Aufträge eröffnet. Ich dachte, es würde so aussehen (ich habe die Logik meines Handelns hier so gut wie möglich beschrieben)
Ich würde etwa so aussehen
Ich würde etwa so aussehen
Danke, was bedeutetDBL_MAX auf der obersten Ebene?
Vielen Dank, was bedeutetDBL_MAX?
Die clevere Forumsmaschine hat sogar einen Link eingefügt. Es ist einfacher, sie anzuklicken, als auf eine Antwort zu warten.
Die clevere Forumsmaschine hat sogar einen Link eingefügt. Es ist einfacher, sie anzuklicken, als auf eine Antwort zu warten.
Ich danke Ihnen! Ich wünschte, ich hätte einen solchen Motor)))
Vielen Dank für die informative Antwort! Der Zweck, für den ich das Array erstellen möchte, besteht darin, die Preise der nächstgelegenen Aufträge unterhalb und oberhalb des Preises zu ermitteln, falls es welche gibt. Wenn sie verfügbar sind und der Abstand zwischen ihnen und dem Preis einen bestimmten Abstand überschreitet, werden die entsprechenden Aufträge eröffnet. Ich dachte, es würde so aussehen (ich habe die Logik meines Handelns hier so gut wie möglich beschrieben)
In diesem Zeilenkommentar liegt ein Fehler vor.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien.
Alle MQL4 Anfänger Fragen, Hilfe und Diskussion über Algorithmen und Codes
Alexey Viktorov, 2017.10.04 09:32
Aus der Hilfe
Zurückgegebener Wert
Gibt den Index des ersten gefundenen Elements zurück. Wird der gesuchte Wert nicht gefunden, wird der Index des nächstkleineren Elements zurückgegeben, zwischen denen sich der gesuchte Wert befindet.
Mas[Blizko2] ist der nächst kleinere Wert in der Matrix.
Es bleibt nur noch hinzuzufügen, dass der Verweis nichts über die Abhängigkeit von der Sortierrichtung des Arrays aussagt. Nach der ArrayBsearch ist also keine Manipulation erforderlich. Die Aufgabe ist bereits erledigt.
Artyom hat bereits alles weiter erklärt. Überprüfung der Gleichheit eines Indexes auf Null und der Größe eines Arrays, um nicht aus dem Rahmen zu fallen...
Wie kann ich erreichen, dass die Maus erst dann verfolgt wird, wenn die Schaltfläche angeklickt wird? Aber die Situation geschieht (in der Idee der Übertragung eines Stopps auf alle Aufträge zu einem Punkt durch Mausklick aus dem EA), wenn ich auf die Schaltfläche klicken, ein Stopp auf alle Aufträge zu dem Preis, wo die Schaltfläche geklickt wurde, beginnt auf einmal übertragen werden. Wie kann diese Eigenschaft if(id==CHARTEVENT_CLICK)
if(ObjectGetInteger(0, "cm STOP ALL",OBJPROP_STATE))
Wie kann ich erreichen, dass die Maus erst dann verfolgt wird, wenn die Schaltfläche angeklickt wird? Aber die Situation geschieht (in der Idee der Übertragung eines Stopps auf alle Aufträge zu einem Punkt durch Mausklick aus dem EA), wenn ich auf die Schaltfläche klicken, ein Stopp auf alle Aufträge zu dem Preis, wo die Schaltfläche geklickt wurde, beginnt auf einmal übertragen werden. Wie kann diese Eigenschaft if(id==CHARTEVENT_CLICK)
nur ausgeführt werden, wenn diese Schaltfläche angeklickt wurde if(ObjectGetInteger(0, "cm STOP ALL",OBJPROP_STATE))