[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 577

 
Ekburg:

Was sind das für Funktionen, wozu dienen sie? Ich habe noch nie eine gesehen oder benutzt.


Es handelt sich nicht um eine Funktion, sondern um eine Möglichkeit, nicht normierte Zahlen zu vergleichen. Sie können nicht miteinander verglichen werden, aber das Ergebnis der Subtraktion der einen von der anderen kann mit Null verglichen werden.

Und der Scheck, den ich habe, sieht so aus:

//+------------------------------------------------------------------+ 
 double ND(double nd){return(NormalizeDouble(nd,Digits));}
//+------------------------------------------------------------------+ 
if(ND(price)!=OrderOpenPrice()||ND(SL)!=OrderStopLoss()||ND(TP)!=OrderTakeProfit()||Expiration!=OrderExpiration())
   {
   OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE);
}
else return;
     
 
lottamer:

Hallo Forumsmitglieder,

Ich habe beschlossen, einen EA für mich selbst zu schreiben. Ich lese gerade ein mql4-Tutorial, da ich mit MT4 handle. Und jetzt kommt das Interessante. Die aus diesem Tutorial heruntergeladenen mqh-Dateien öffnen sich (automatisch) in MetaEditor 5 (ich habe auch Mt5 installiert)! Heißt das, dass sie nicht mit Mt4 funktionieren?


Versuchen Sie, es zu kompilieren, und Sie werden es herausfinden.
 
rigonich:


Dies ist keine Funktion, sondern eine Möglichkeit, nicht normierte Zahlen zu vergleichen. Sie können nicht miteinander verglichen werden, aber das Ergebnis der Subtraktion der einen von der anderen kann mit Null verglichen werden.

Und meine Rechnung sieht so aus:

Du sagst es richtig, aber du machst es "auf deine Art"... Und sie ist (immerhin) gebildeter:

//+------------------------------------------------------------------+ 
 double ND(double nd){return(NormalizeDouble(nd,Digits));}
//+------------------------------------------------------------------+ 
if (ND (price - OrderOpenPrice()) != 0.0 || ND (SL - OrderStopLoss()) != 0.0 || ND (TP - OrderTakeProfit()) != 0.0 || Expiration != OrderExpiration())
{OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE);}

...obwohl ich nicht mit allen Vergleichsbedingungen einverstanden bin. Sie können die Bedingungen hier nachlesen.

 
rigonich:

Versuchen Sie zu kompilieren und Sie werden es herausfinden.

ja... Sie müssen diese mqh-Dateien nur mit 4Editor öffnen...
 
Desead:

Sie müssen das Preisdiagramm normalisieren, ein beliebiges Währungspaar Ihrer Wahl. Ich brauche sie für einen Indikator. Ich habe versucht, den aktuellen Wert durch den vorherigen zu dividieren - ich erhalte eine Art Oszillator um 1. Ich bin auf die Idee gekommen, das Diagramm von absoluten in relative Werte umzuwandeln, d.h. in diesem Fall kann ich die prozentuale Veränderung des Kurses sehen. Sie wurde bereits umgesetzt. Es ist bereits besser und praktisch das, was wir brauchen. Letztendlich möchte ich jedoch die Kurse im Bereich [0:1] normalisieren.Übrigens, hier ist, was ich brauche, aber in bürgerlicher Sprache - ich möchte das gleiche in russischer Sprache: http://people.revoledu.com/kardi/tutorial/Similarity/Normalization.html

Ich habe es schon satt, damit zu kämpfen. Normalerweise kann ich nicht alle ausstehenden Aufträge löschen, ich komme einfach nicht damit zurecht:

Ich habe sogar der Schleife FOR WHILE hinzugefügt, dass die gelöschten Aufträge noch da sind, aber ich habe sie immer noch nicht gelöscht. Ich habe viele ausstehende Aufträge zu löschen, d.h. etwa 20, vielleicht ist es etwas kompliziert?


Es scheint, dass das Problem des Löschens der Bestellungen gelöst wurde. Ich verwende eine separate Funktion, um die Anzahl der "notwendigen" (zu entfernenden) Aufträge, Total, zu zählen, rufe diese Funktion und while mit einer Bedingung (Total>0) auf, dann den Zyklus des Entfernens for (int i=Total-1 ;i<=0l; i--), wieder f-Art der"notwendigen", Zähler der Entfernungsversuche mit Beenden vonwhile, wenn das gegebene Niveau erreicht ist. Auf diese Weise werden sie alle gelöscht.
 
TarasBY:

Hier ein Beispiel für die Löschung von Aufträgen, einschließlich schwebender Aufträge (ich habe mit diesem Auftrag gelöscht):

In Ihrem Code (im Auswahlfilter) sind nicht alle schwebenden Aufträge vorhanden. Eine weitere Fehlervariante: Prüfen Sie die Magick, die die schwebenden Aufträge erhalten, wenn sie geöffnet werden (in Ihrem eigenen Code).

Ich danke Ihnen für Ihre Antwort. Ich brauche nicht alle Pending Orders, nur Bylimit und Selllimit und die setze ich nur, die Magie ist überall die gleiche. Wenn ich das Problem nicht mit meinen eigenen Bemühungen lösen kann, muss ich mir Ihre Skripte ansehen, sonst kann ich es nicht tun, es lässt sich einfach nicht löschen.

Ich habe über etwas nachgedacht. Ich habe die Löschung aller ausstehenden Roboter nur an einer Stelle eingestellt - wenn ich meinen Roboter entlade, wird er in deinit gesetzt. Wenn ich nur ein paar Aufträge lösche, ist alles in Ordnung, aber wenn ich ein ganzes Raster entlade, bleibt immer ein Dutzend Aufträge übrig, und es gibt keine Möglichkeit, sie manuell zu löschen.

 
rigonich:

Hurra, es scheint, dass ich das Problem des Löschens von Aufträgen gelöst habe. Ich berechnete die Anzahl der "notwendigen" (zu entfernenden) Aufträge in einer separaten Funktion, rief diese Funktion auf, dann while mit einer Bedingung (Total>0), dann der Zyklus des Entfernens for(int i=Total-1 ;i<=0l; i--), wieder die Funktion des Zählens der "notwendigen", Zähler der Entfernungsversuche mit dem Ausstieg auswhile, wenn das angegebene Niveau erreicht ist. Auf diese Weise wird alles gelöscht.
Übrigens, das ist eine gute Alternative, lassen Sie dieses while bis zum Ende der Welt in der Schleife laufen, danke, ich werde es jetzt versuchen.
 

Sie müssen die Begriffe HABEN einen offenen Handel (einen, ohne Majors) in einer Zeile einfügen, zum Beispiel mit einem Crossover von Durchschnitten.

fand dies

==============================================

int start()

{

for(int i=0; i<OrdersTotal(); i++)

{

wenn ((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) )

PlaySound ("alert.wav");

zurück(0);

}}

==============================================

Es gibteine offene Stelle, aber keinen Ton.

Können Sie mir sagen, was los ist?

Oder wie einfach es ist, die Bedingung zu schreiben:

WENN MA 5 die MA 10 kreuzt und eine offene Position besteht - schließen Sie diese Position.

Dies scheint der Punkt zu sein, an dem void.... benötigt wird.

 
lottamer:

Ja...Sie müssen diese mqh-Dateien nur mit 4Editor öffnen...

Wenn sie aus dem MQL4-Tutorial stammen, werden sie von4thEditor geöffnet. Legen Sie sie in den Include-Ordner oder benennen Sie sie inmq4 umund legen Sie sie in den Expert-Ordner, den Hauptordner, wenn es sich um einen EA handelt, oder in den Skript- bzw. Indikatoren-Ordner, und öffnen Sie sie.
 
Desead:
Gute Option übrigens, und lassen Sie dies, während sein Zyklus bis zum Ende der Welt rennen, bis es die Aufträge löscht, danke, ich werde es jetzt versuchen.


Die Ausführung in mt4 dauert 2,5 Sekunden.