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
Angenommen, der Preis steigt um 600 Punkte ab OrderOpenprice(), = StartTraillingStop (200) + 8(xai)*50
Der Code steht hier:
aber der Code wird alle xai von 0 bis 8 machen, sagen wir, der Code ist bei xai = 4; ist diese Bedingung wahr?
if ( ( ( OrderClosePrice() - OrderOpenPrice() ) / Figure ) >= ( StartTrailingStop + ( CummulativeValue * xai ) ) )
ja, dann wird der SL gesetzt auf : StartTraillinStop (200) + 4(xai)*50 ( absteigend vom vorherigen)
dann xai 5, der SL wird gesetzt auf : StartTraillinStop (200) + 5(xai)*50
und so weiter, so dass es nicht möglich ist, eine Pause zu setzen, sobald der SL gesetzt ist;
juniorlcq Ihr Code ist jetzt, da Sie ihn neu formatiert haben, viel leichter zu lesen. Ich habe ihn ein wenig umformatiert, um ihn für die Veröffentlichung kleiner zu machen, und ich habe mögliche Probleme hervorgehoben. Ich denke, Sie haben vielleicht ein "double == calculated double"-Problem, das Ihren Code daran hindert, einige der Trails auszuführen. Haben Sie jemals den Thread über can price != price gelesen ?
Am verdächtigsten finde ich die 2. und 4., da es sich um kompliziertere Berechnungen handelt.
Fügen Sie Print()-Anweisungen nach diesen Berechnungen ein, um zu sehen, ob sie wirklich == sind oder nicht.
Der Fehler, der als Fließkommafehler bekannt ist, könnte sie != machen, auch wenn es so aussieht, als sollten sie == sein.
== ist wirklich nur bei ganzen Zahlen zu 100% sicher, also könnten Sie das == testweise in <= oder >= ändern.
Nebenbei bemerkt: Ihr Code wäre wesentlich effizienter, wenn Sie OrderOpenPrice(), OrderStopLoss() und OrderClosePrice() einmal zu Beginn der OrderSelect()-Schleife aufrufen und ihre Werte lokalen Variablen zuweisen würden, die im restlichen Code verwendet werden. Auf lokale Variablen kann viel schneller zugegriffen werden als auf Funktionsaufrufe, so dass Sie wiederholte Funktionsaufrufe für das gleiche Ergebnis vermeiden sollten... Als Faustregel gilt: Je mehr rosa Schrift Sie in Ihrem Code haben, desto langsamer wird die Leistung des EAs sein.
Ich verstehe, ich kann es nicht zum Laufen bringen, das kann mit Order Buy funktionieren, SL gehen wie erklärt runter:
Ohhhhhh, das wusste ich gar nicht. Danke WHRoeder :) .
Heißt das also, dass ,
sagen wir mal OrdersTotal() == 3 , mit der Countdown-For-Schleife for ( int x = ( OrdersTotal() - 1 ) ; x >= 0 ; x-- ) , x speichert den ersten Wert als 2, dann wird die for-Schleife von 2 an fortgesetzt, ohne OrdersTotal() erneut zu durchlaufen?
juniorlcq Ihr Code ist jetzt, da Sie ihn neu formatiert haben, viel leichter zu lesen. Ich habe ihn ein wenig umformatiert, um ihn für die Veröffentlichung kleiner zu machen, und ich habe mögliche Probleme hervorgehoben. Ich denke, Sie haben vielleicht ein "double == calculated double"-Problem, das Ihren Code daran hindert, einige der Trails auszuführen. Haben Sie jemals den Thread über can price != price gelesen ?
Ich bin am meisten misstrauisch gegenüber der 2. und 4. da sie kompliziertere Berechnungen sind.
Setzen Sie Print()-Anweisungen nach diesen Berechnungen, um zu sehen, ob sie wirklich == tun oder nicht.
Der Fehler, der als Fließkommafehler bekannt ist, könnte sie != machen, auch wenn es so aussieht, als sollten sie == sein.
== ist wirklich nur bei ganzen Zahlen zu 100% sicher, also könnten Sie das == testweise in <= oder >= ändern.
Nein, ich habe diesen Thread nicht gelesen . Habe es gerade erst getan .
Was Sie vorgeschlagen haben, klingt logisch. Ein zweiter Gedanke: Wenn man auf MT4 Linien auf den Preiseigenschaften zeichnet, zeigt es nicht wirklich einen 5-stelligen Preis, sondern manchmal etwas mehr als das an.
Aber hier ist einer meiner schwimmenden Handel auf der einen der vorherigen Konto, ich druckte es aus, um zu sehen, was war das Doppel wie mit einem einfachen Druck Codierung. Seltsam MQL4 ich denke @.@ ?
Ich bin immer noch am Überlegen, wie ich den Double == Double-Teil ändern sollte .....
Nebenbei bemerkt: Ihr Code wäre viel effizienter, wenn Sie OrderOpenPrice(), OrderStopLoss(), OrderClosePrice() einmal zu Beginn Ihrer OrderSelect()-Schleife aufrufen und ihre Werte lokalen Variablen zuweisen würden, die Sie im restlichen Code verwenden. Auf lokale Variablen kann viel schneller zugegriffen werden als auf Funktionsaufrufe, so dass Sie wiederholte Funktionsaufrufe für das gleiche Ergebnis vermeiden sollten... Als Faustregel gilt: Je mehr rosa Schrift in Ihrem Code, desto langsamer ist die Leistung des EA.
Ohhh ich wusste nicht, dass es einen großen Unterschied in der Ausführungsgeschwindigkeit gibt, danke für die Anleitung SDC. Wird nach Ihrem Leitfaden geändert, nachdem die Spur zu stoppen begann zu arbeiten.
Versuchen Sie, den letzten Codeblock durch diese Debug-Version zu ersetzen. Überprüfen Sie meinen Code, ich habe ihn nicht kompiliert.
Das könnte etwas aufdecken, Sie könnten etwas ähnliches mit den anderen == Bedingungen tun.
Versuchen Sie, den letzten Codeblock durch diese Debug-Version zu ersetzen. Sie könnten etwas Ähnliches mit der xa machen
Vielleicht bringt das etwas, man könnte auch mit den anderen == Bedingungen etwas Ähnliches machen.
Ja, das Problem taucht auf, es ist das " double == calculated double Problem ". Danke für den Hinweis auf das Problem SDC .
Vielen Dank für den Hinweis auf das gleiche Problem vorhin, aber ich habe es nicht richtig bearbeitet und dachte, es sei nicht das Problem.
Ich habe eine Frage und brauche eine Anregung, für das 2. und 3. if in der 2. for-Schleife, ist es besser, eine "between"-Anweisung einzufügen? Wie OrderStopLoss() >= x + 1 && x - 1 ?? Oder sollte ich einfach >= oder <= verwenden?
Ich hoffe, WHR liest das nicht, er wird einen Anfall bekommen, aber ich werde Ihnen raten, NormalizeDouble() .... zu versuchen, das sollte diese Bedingungen gleich machen, wenn sie gleich sein sollen. Es sollte nicht notwendig sein, dies auch für die OrderStopLoss()-Seite zu tun, aber wenn es immer noch nicht gleich ist, wenn es sein sollte, könnten Sie versuchen, es für beide Seiten der Bedingung zu tun....