Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 379

 
ALXIMIKS:


...

4) Warum müssen Sie die Pausen mitmachen?

...


О! Können Sie mir zeigen, wie ich sie nicht durchlaufen muss?

Natürlich ist die Frage interessant: Ist es besser, OrderProfit() + OrderCommission() + OrderSwap() hinzuzufügen, die zusammen 0 ergeben und nichts ändern, oder müssen wir das für jede Bestellung tun?

 
Example2:


Es ist egal, wie sie zusammengebaut wird, Hauptsache, sie funktioniert.


In einigen Fällen gibt es einen gewissen Unterschied. Wenn for (int i = 0; i < OrdersTotal(); i++), wird die Funktion OrdersTotal() in jeder Schleife aufgerufen, und wenn for (int i = OrdersTotal()-1; i>=0; i--), dann wird die Funktion OrdersTotal() nur einmal aufgerufen. Ich habe noch nicht mit der Ausführungsgeschwindigkeit von mql experimentiert. Einmal hat die Funktion count() in php 17 Sekunden lang in einer Vorwärtsschleife und 0,01 Sekunden lang in einer Rückwärtsschleife funktioniert.
 
Gemessen wurde die Geschwindigkeit des Vorwärts- und Rückwärtslaufs. 100 Aufträgen ist der Rückwärtszyklus 5 Mal schneller. Aber es gibt nie so viele Aufträge, höchstens 10. Bei 10 Aufträgen ist die Geschwindigkeit 3-mal so hoch. Es liegt auf der Hand, den umgekehrten Weg zu wählen.
 
Integer:
Gemessen wurde die Geschwindigkeit des Vorwärts- und Rückwärtslaufs. 100 Aufträgen ist der Rücklauf 5 Mal schneller. Aber es gibt nie so viele Aufträge, höchstens 10. Bei 10 Aufträgen ist die Geschwindigkeit 3-mal so hoch. Es ist durchaus sinnvoll, einen umgekehrten Zyklus zu wählen.


Können Sie mir sagen, wie ich den Preis normalisieren kann (siehe meinen Beitrag oben)?

 
Example2:


Können Sie mir sagen, wie ich den Preis normalisieren kann (siehe meinen Beitrag oben)?

Es gibt die Funktion NormalizeDouble().

NormalizeDouble(_High+Point*20,Digits);

Beim Multiplizieren ist es besser, zuerst double und dann int zu verwenden, da sonst in manchen Fällen der Bruchteil verloren geht.

 
if(Line_7 > Lines_1 > Line_6)
{
Alert("Сигнал на покупку");
OrderSend(Symbol(),OP_BUY,Lots_Typ,Ask,5,SL_Typ,TP_Typ);
}
return;}
Ist es möglich, die Eröffnung eines Auftrags auf diese Weise festzulegen?
 
Link_x:
Ist es möglich, die Eröffnung eines Auftrags auf diese Weise festzulegen?


Nein.

So sollte es gemacht werden:

if(Line_7 > Lines_1 && Lines_1 > Line_6)
 

Ich habe auch die Geschwindigkeit der Gewinnberechnung überprüft, indem ich die Gewinne aller Aufträge addiert und nur Marktaufträge ausgewählt habe:

Prof1+=OrderProfit()+OrderSwap()+OrderCommission();

и

if(OrderType()==OP_BUY || OrderType()==OP_SELL){
 Prof2+=OrderProfit()+OrderSwap()+OrderCommission();
}
Die erste Option ist ein wenig schneller, aber nicht wesentlich. Das Geschwindigkeitsverhältnis beträgt etwa 1/1,1
 
Integer:

Es gibt die Funktion NormalizeDouble().

Beim Multiplizieren ist es besser, zuerst double und dann int zu verwenden, da sonst in manchen Fällen der Bruchteil verloren geht.


Jetzt erhalte ich Fehler 3: "Es wurden falsche Parameter an die Handelsfunktion gesendet, z. B. falsches Symbol, nicht identifizierter Handelsvorgang, negative Preistoleranz, nicht vorhandene Ticketnummer usw. Die Programmlogik muss geändert werden".

 
Example2:


Jetzt erhalte ich den Fehler 3: "Es wurden falsche Parameter an die Handelsfunktion gesendet, z.B. falsches Symbol, nicht identifiziertes Geschäft, negative Preistoleranz, nicht vorhandene Ticketnummer, etc. Die Programmlogik muss geändert werden".


Bewegen Sie den Cursor auf die erste öffnende Klammer nach OrderSend, löschen Sie diese Klammer, geben Sie erneut ein, dies öffnet eine Eingabeaufforderung für den Parametertyp, überprüfen Sie, ob alle Parameter vom richtigen Typ sind.