![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Zumindest bei Methodensetttern ist dies gerechtfertigt - der Code kann lesbarer und kompakter werden, man erhält a la benannte Parameter
ChartObject *hline=HLine::New(1.255).Color(clrGreen).Width(2).Selectable(true); // не надо помнить очерёдность параметров и можно писать в одну строку - цепочкой
// получается вот из подобного :
class HLine:public ChartObject {
public:
HLine(double price);
HLine *New(double _price) { return new HLine(_price); } // это чтобы не городить (new HLine(...)).Method1
HLine *Color(color _clr) { fgColor=_clr; return GetPointer(this); } // а это чтобы получались цепочки obj.Method1(..).Method2(..)
};
und ein wenig stört die Qualifizierung von Funktionen durch den zurückgegebenen Typ.
Es steht Ihnen frei, GetPointer(this) von Methoden zurückzugeben.
Auf diese Weise ist &this prägnanter.
Nun, lassen Sie mich zuerst beginnen.
Um einen Auftrag zu schließen, müssen wir nicht die Auftragsart und den Preis, der dieser Art entspricht, definieren. Es reicht aus, in OrderClosePrice() "close at price" zu schreiben!
void OnStart()
{
int i, total = OrdersTotal()-1;
for(i = total; i >= 0; i--)
{
if(OrderType() < OP_SELLSTOP)
{
if(!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100))
printf("***********");
}
}
}/********************************************************************/
Ziemlich cool! ) Vielen Dank.
Dem Beispiel nach zu urteilen, brauchen Sie auch OrderSelect() nicht?
(Cool! ) Danke.
Nach dem Beispiel zu urteilen, ist OrderSelect() auch nicht erforderlich?
Schön! ) Danke.
Erforderlich. Ich habe es nur aus Faulheit verpasst...
Ja, nun... Wirklich verkorkst.
Aber vorher bin ich nicht auf diese Themen gestoßen.
Sie können OrderClosePrice also erst NACH dem entsprechenden OrderSelect verwenden. Da OrderSelect die Daten für Order(const)-Funktionen einmal kopiert, kann RefreshRates sie nicht aktualisieren.
Wenn also z. B. OrderClosePrice nicht geschlossen werden kann, müssen Sie OrderSelect vor dem nächsten Versuch erneut ausführen (RefreshRates ist nicht erforderlich).
ZS Dieses Thema ist von 2005! Hier finden Sie ausführliche Argumente von den Entwicklern.
Offene Aufträge sollten ab einer höheren Zahl ausgewertet werden, d.h. for(int nom=OrdersTotal()-1; nom>=0; nom--)
Es gibt 20 ausstehende Aufträge
Dies ist besonders wichtig bei der Löschung von Aufträgen.
Aber was passiert, wenn wir das Gegenteil tun? for(int nom=0; nom<OrdersTotal(); nom++) ?
Zunächst ist der Index gleich Null und der allererste Auftrag mit der Nummer 0 wird gelöscht.
Dann wird der Index gleich 1. An diesem Punkt werden die übrigen Aufträge verschoben und der Auftrag mit der Nummer 1
die Nullposition einnimmt. Die ehemalige Nummer 2 nimmt Platz 1 ein. Sie wird gelöscht.
Dann wird der Index 2. Und der Auftrag, der zu Beginn Nummer 4 war, wird gelöscht.
So werden die Aufträge, die am Anfang geradzahlige Positionen besetzen, gestrichen. Die ungeraden Zahlen bleiben erhalten. Dies geht aus den Kommentaren zu den Aufträgen und Nummern hervor.
Ich füge ein Skript bei, das beide Optionen des Löschens und Screenshots zeigt