Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 405

 
Leanid Aladzyeu:

Hier ist der Code:

if(OrderStopLoss()>Ask+(TrailingStop+TrailingStep)*Point)

Sie berücksichtigen nicht die Möglichkeit, dass OrderStopLoss() gleich Null ist. Und Null wird in jedem Fall kleiner sein als der AusdruckAsk+(TrailingStop+TrailingStep)*Point, und die Bedingung wird falsch zurückgeben.

 
if((OrderStopLoss()>Ask+(TrailingStop+TrailingStep)*Point)||OrderStopLoss()==0)
Probieren Sie es aus und sehen Sie, ob es funktioniert. Ich habe mich nicht wirklich mit dem Code beschäftigt.
 

Vielen Dank,Vitalii Ananev,Vladimir Zubov!

Ich schreibe einen EA, der auf dem RSI-Indikator basiert. Das Prinzip des EA wird sein, Aufträge durch den Indikator zu öffnen, aber es wird auch durch den gleichen Indikator schließen (ich weiß nicht, Schlusskurs)

if(OrderType()==OP_BUY && irsa <=20 || irsa >=40 )

OrderClose(Ticket,Lot,Ask,Slippage,Blue);

zurück(0);

Diese Bedingung ist nicht erfüllt. Und warum? (Er öffnet und schließt den Auftrag sofort wieder, und so weiter in der Schleife).

Das ist die wichtigste Frage. Mein Expert Advisor wird mit einer großen Anzahl von Aufträgen arbeiten, und ich muss den Durchschnitts-, Höchst- und Tiefstpreis für alle Aufträge auf dem Markt berechnen. Wie finde ich die Schlusskurse aller Aufträge, um einen Gesamtgewinn und andere ähnliche Operationen zu erzielen?

 
Leanid Aladzyeu:

Wie in der Referenz angegeben, gibt es einen Fehler.

Ja!? Und welche Art von Fehlermeldung erhalten Sie? Was sagt der Compiler dazu?

 
Leanid Aladzyeu:

Vielen Dank,Vitalii Ananev,Vladimir Zubov!

Ich schreibe einen EA, der auf dem RSI-Indikator basiert. Das Prinzip des EA wird sein, Aufträge durch den Indikator zu öffnen, aber es wird auch durch den gleichen Indikator schließen (ich weiß nicht, Schlusskurs)

if(OrderType()==OP_BUY && irsa <=20 || irsa >=40 )

OrderClose(Ticket,Lot,Ask,Slippage,Blue);

zurück(0);

Diese Bedingung ist nicht erfüllt. Und warum? (Er öffnet und schließt den Auftrag sofort wieder, und so weiter in der Schleife).

Das ist die wichtigste Frage. Mein Expert Advisor wird mit einer großen Anzahl von Aufträgen arbeiten, und ich muss den Durchschnitts-, Höchst- und Tiefstpreis für alle Aufträge auf dem Markt berechnen. Wie finde ich die Schlusskurse aller Aufträge, um einen Gesamtgewinn und andere ähnliche Operationen zu erzielen?

Der Schlusskurs einer Position ist erst dann bekannt, wenn die Position geschlossen wird. Danach können Sie den Schlusskurs in der Historie der Trades mit der Funktion OrderClosePrice() ermitteln.

Er öffnet und schließt die Position sofort, da die Schließungsbedingung erfüllt ist. Überprüfen Sie die Logik der Schließbedingung. Versuchen Sie, ihn anfangs so zu schreiben:

if(OrderType()==OP_BUY && (irsa <=20 || irsa >=40))
{
  OrderClose(ticket,Lot,Ask,Slippage,Blue);

 return(0); 
}

Lesen Sie den Hinweis auf die Priorität von Berechnungen logischer Ausdrücke.

"Sie müssen den Durchschnitts-, Höchst- und Tiefstpreis für alle Aufträge auf dem Markt berechnen" - Entschuldigung, von welchem Preis ist die Rede? Der Preis des offenen Auftrags? Der aktuelle Kurs eines Währungspaares? Der Preis, bei dem der Gesamtgewinn aller offenen Positionen ohne Verluste erreicht wird?

 
Tapochun:

Ja!? Und welche Art von Fehlermeldung gibt sie aus? Was sagt der Compiler dazu?

Entschuldigung, kein Fehler, aber die Beispielmethode funktioniert bei mir nicht (ich bekomme Fehler beim Schleppnetzfahren).
 
Vitalii Ananev:

Der Schlusskurs der Position ist erst bekannt, wenn die Position geschlossen wird. Die Funktion OrderClosePrice() ist dann in der Transaktionshistorie zu finden.

Er öffnet und schließt die Positionen sofort, da die Schließungsbedingung erfüllt ist. Überprüfen Sie die Logik der Schließbedingung. Versuchen Sie, ihn anfangs so zu schreiben:

Lesen Sie die Hilfe zur Priorität von Berechnungen logischer Ausdrücke.

Nun, wie in zum Beispiel mit einem Raster, es brauchen eine insgesamt TP oder (und) der Gesamtpreis.

Vielleicht gibt es einen Zwischenspeicher, in dem der Preis gespeichert werden sollte, oder der Indikator selbst hat einen Zwischenspeicher, in dem der offene Preis des letzten Auftrags gespeichert wird (und Sie können den Preis von dort in unseren globalen Zwischenspeicher übernehmen und speichern).

 
Leanid Aladzyeu:

Wenn wir ein Raster festlegen, benötigen wir einen Gesamt-TP oder (und) einen Gesamtpreis.

Vielleicht gibt es einen oder mehrere Puffer, um den Preis zu speichern, oder im Indikator selbst gibt es einen Puffer, in dem der Eröffnungskurs der letzten Bestellung gespeichert wird (und von dort können wir ihn in unseren globalen Puffer übernehmen und speichern).

Ich empfehle, das Studium der Sprache mit dem Lehrbuch Kovalev zu beginnen (Sie können es auf unserer Website finden). Es ist natürlich ein bisschen veraltet, aber in Kombination mit der Dokumentation ist es in Ordnung!
 
Leanid Aladzyeu:

Vielen Dank,Vitalii Ananev,Vladimir Zubov!

Ich schreibe einen EA, der auf dem RSI-Indikator basiert. Das Prinzip des EA wird sein, Aufträge durch den Indikator zu öffnen, aber es wird auch durch den gleichen Indikator schließen (ich weiß nicht, Schlusskurs)

if(OrderType()==OP_BUY && irsa <=20 || irsa >=40 )

OrderClose(Ticket,Lot,Ask,Slippage,Blue);

zurück(0);

Diese Bedingung ist nicht erfüllt. Und warum? (Er öffnet und schließt den Auftrag sofort wieder, und so weiter in der Schleife).

Das ist die wichtigste Frage. Wenn Ihr EA mit einer großen Anzahl von Aufträgen arbeitet und Sie den Durchschnitts-, Höchst- und Tiefstpreis für alle Aufträge auf dem Markt berechnen müssen, wie finden Sie den Schlusspreis aller Aufträge, um einen Gesamtgewinn und andere ähnliche Operationen zu erzielen?

Sie versuchen, einen Kaufauftrag für einen asc zu schließen. Wenn Sie die grundlegenden Dinge nicht verstehen, lesen Sie die Dokumentation.

Oder sind Sie an die Faustformel gewöhnt?

 
Leanid Aladzyeu:

Wenn wir ein Raster festlegen, benötigen wir einen Gesamt-TP oder (und) einen Gesamtpreis.

Vielleicht gibt es einen oder mehrere Puffer, um den Preis zu speichern, oder im Indikator selbst gibt es einen Puffer, in dem der Eröffnungskurs der letzten Bestellung gespeichert wird (und von dort können wir ihn in unseren globalen Puffer übernehmen und speichern).

Sie sollten den durchschnittlichen offenen Preis für alle Positionen berechnen. Berechnen Sie auf dieser Grundlage den gesamten Take Profit für alle Positionen. Der offene Preis der Positionen ist bekannt (OrderOpenPrice()). Addieren Sie alles und teilen Sie es durch die Anzahl der offenen Stellen.