khorosh: Um die Korrektheit des Codes zu beurteilen, muss man genau wissen, was der Autor erreichen wollte. Ihre Informationen sind unzureichend. Was Sie erreichen wollten, ist nicht ganz klar. Wenn Sie den Verlust nach der Schließung des Gitters ausgleichen wollen, indem Sie eine entgegengesetzte Order eröffnen und erwarten, dass der Preis einige Punkte in Richtung der letzten Order geht, hängt der Ausgleichsprozess sowohl von der Menge dieser Order als auch von der Strecke ab, die der Preis in die günstige Richtung geht. Das bedeutet, dass Sie bei der Berechnung des Loses auch die Strecke festlegen sollten, die der Kurs zurücklegen muss, um den Verlust auszugleichen. Aber vielleicht meinen Sie etwas anderes.
Ja, ich hätte mich genauer ausdrücken sollen. Es ist nur so, dass ich bereits zweimal ausführlich dargelegt habe, was diese Funktion tun soll, aber niemand hat geantwortet. Noch einmal, was diese Funktion tun soll. Angenommen, ich habe ein Raster von Aufträgen. Ob sie mit demselben Schritt geöffnet werden oder nicht, spielt keine Rolle. Eine Order wurde früher und eine andere später eröffnet, d.h. jede Position hat eine andere Anzahl von Punkten mit einem anderen Lot überschritten. Das Netz wird unter bestimmten Bedingungen geschlossen, und ich muss die LOT berechnen, die erforderlich ist, um den Verlust zu decken, der durch dieses Netz für TP-Punkte entsteht. Um zu vermeiden, dass zwei Spiegelfunktionen geschrieben werden, habe ich einen otype-Parameter in die Funktion eingeführt.
Allerdings habe ich irgendwo einen Fehler gemacht. Bitte helfen Sie mit, ihn zu korrigieren.
double FindRightLot (int otype) // функция поиска лота, необходимого для выхода из просадки после //закрытия сетки ордеров
{
double Lot=0; double TotalLot=0;
for (int i = OrdersTotal()-1; i>0; i--)
{
if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
{
if (otype == OP_BUY)
{
Lot = NormalizeDouble (((OrderOpenPrice()-Bid)*Point)*OrderLots()/TP,2);
if (Lot>0)
{
TotalLot= TotalLot+Lot;
}
}
elseif (otype == OP_SELL)
{
Lot = NormalizeDouble (((Ask-OrderOpenPrice())*Point)*OrderLots()/TP,2);
if (Lot>0)
{
TotalLot= TotalLot+Lot;
}
}
}
}
}
return (TotalLot);
}
Gibt es eine Möglichkeit, dies korrekt zu implementieren, so dass die Schließung bei Null beginnt? Wenn möglich, bitte eine Code-Zeile.
Gehen Sie die gesamte Liste (der Aufträge) in der gewünschten Richtung durch und legen Sie die Ticket-Werte in einem Array ab, und löschen Sie dann die Aufträge durch rohe Gewalt in diesem Array.
Ja, ich hätte mich genauer ausdrücken sollen. Es ist nur so, dass ich bereits zweimal ausführlich dargelegt habe, was diese Funktion tun soll, aber niemand hat geantwortet. Noch einmal, was diese Funktion tun soll. Angenommen, ich habe ein Raster von Aufträgen. Ob sie mit demselben Schritt geöffnet werden oder nicht, spielt keine Rolle. Eine Order wurde früher und eine andere später eröffnet, d.h. jede Position hat eine andere Anzahl von Punkten mit einem anderen Lot überschritten. Das Netz wird unter bestimmten Bedingungen geschlossen, und ich muss die LOT berechnen, die erforderlich ist, um den Verlust zu decken, der durch dieses Netz für TP-Punkte entsteht. Um nicht zwei Spiegelfunktionen zu schreiben, habe ich einen otype-Parameter in die Funktion eingeführt.
Aber irgendwo ist immer noch ein Fehler. Bitte helfen Sie mir, das Problem zu lösen.
Ich würde einen anderen Weg einschlagen. Zunächst würde ich den Verlust durch das Schließen des Netzes berechnen. Und so einfach ist es dann auch. Verlust = Gewinn aus dem nächsten Auftrag. Drücken Sie den Gewinn aus dem Auftrag durch das Lot und den TP aus und finden Sie das Lot aus der Gleichung.
khorosh: Ich würde einen anderen Weg einschlagen. Zunächst würde ich den Verlust durch das Schließen des Netzes berechnen. Und so einfach ist es dann auch. Verlust = Gewinn aus dem nächsten Auftrag. Drücken Sie den Gewinn aus dem Auftrag durch das Lot und den TP aus und finden Sie das Lot aus der Gleichung.
Wird der Verlust am Ende des Rasters in Geld oder in Pips angegeben?
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Um die Korrektheit des Codes zu beurteilen, muss man genau wissen, was der Autor erreichen wollte. Ihre Informationen sind unzureichend. Was Sie erreichen wollten, ist nicht ganz klar. Wenn Sie den Verlust nach der Schließung des Gitters ausgleichen wollen, indem Sie eine entgegengesetzte Order eröffnen und erwarten, dass der Preis einige Punkte in Richtung der letzten Order geht, hängt der Ausgleichsprozess sowohl von der Menge dieser Order als auch von der Strecke ab, die der Preis in die günstige Richtung geht. Das bedeutet, dass Sie bei der Berechnung des Loses auch die Strecke festlegen sollten, die der Kurs zurücklegen muss, um den Verlust auszugleichen. Aber vielleicht meinen Sie etwas anderes.
Ja, ich hätte mich genauer ausdrücken sollen. Es ist nur so, dass ich bereits zweimal ausführlich dargelegt habe, was diese Funktion tun soll, aber niemand hat geantwortet. Noch einmal, was diese Funktion tun soll. Angenommen, ich habe ein Raster von Aufträgen. Ob sie mit demselben Schritt geöffnet werden oder nicht, spielt keine Rolle. Eine Order wurde früher und eine andere später eröffnet, d.h. jede Position hat eine andere Anzahl von Punkten mit einem anderen Lot überschritten. Das Netz wird unter bestimmten Bedingungen geschlossen, und ich muss die LOT berechnen, die erforderlich ist, um den Verlust zu decken, der durch dieses Netz für TP-Punkte entsteht. Um zu vermeiden, dass zwei Spiegelfunktionen geschrieben werden, habe ich einen otype-Parameter in die Funktion eingeführt.
Allerdings habe ich irgendwo einen Fehler gemacht. Bitte helfen Sie mit, ihn zu korrigieren.
Gibt es eine Möglichkeit, dies korrekt zu implementieren, so dass die Schließung bei Null beginnt? Wenn möglich, bitte eine Code-Zeile.
Gibt es eine Möglichkeit, dies korrekt zu implementieren, so dass die Schließung bei Null beginnt? Wenn möglich, bitte eine Code-Zeile.
Nur eine schnelle Lösung:
Ja, ich hätte mich genauer ausdrücken sollen. Es ist nur so, dass ich bereits zweimal ausführlich dargelegt habe, was diese Funktion tun soll, aber niemand hat geantwortet. Noch einmal, was diese Funktion tun soll. Angenommen, ich habe ein Raster von Aufträgen. Ob sie mit demselben Schritt geöffnet werden oder nicht, spielt keine Rolle. Eine Order wurde früher und eine andere später eröffnet, d.h. jede Position hat eine andere Anzahl von Punkten mit einem anderen Lot überschritten. Das Netz wird unter bestimmten Bedingungen geschlossen, und ich muss die LOT berechnen, die erforderlich ist, um den Verlust zu decken, der durch dieses Netz für TP-Punkte entsteht. Um nicht zwei Spiegelfunktionen zu schreiben, habe ich einen otype-Parameter in die Funktion eingeführt.
Aber irgendwo ist immer noch ein Fehler. Bitte helfen Sie mir, das Problem zu lösen.
Ein schneller Handjob:
Vielen Dank, jetzt funktioniert alles einwandfrei, vielen Dank an alle, die geantwortet haben!
Ich würde einen anderen Weg einschlagen. Zunächst würde ich den Verlust durch das Schließen des Netzes berechnen. Und so einfach ist es dann auch. Verlust = Gewinn aus dem nächsten Auftrag. Drücken Sie den Gewinn aus dem Auftrag durch das Lot und den TP aus und finden Sie das Lot aus der Gleichung.
Wird der Verlust am Ende des Rasters in Geld oder in Pips angegeben?
Ist der Verlust beim Schließen des Rasters in Geld oder in Pips?
Was ist mit der Tatsache, dass jedes Paar einen anderen Punktpreis hat?
Was ist mit der Tatsache, dass jedes Paar einen anderen Punktpreis hat?
Hier können Sie sehen, wie es umgesetzt wird
https://www.mql5.com/ru/code/7275
https://www.mql5.com/ru/forum/113937/page2
https://docs.mql4.com/ru/constants/marketinfo