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

 
Alexey Kozitsyn:
Unter der Annahme, dass die letzte Bestellung nach Zeit nicht die letzte Bestellung in der Liste ist, ist Ihr Beispiel nicht korrekt, da es die allererste Bestellung (#0) nicht berücksichtigt.

Zuerst wird das Ticket der letzten Bestellung gefunden, und dann wird ein Zyklus mit Änderungen durchgeführt. Wenn in der Schleife ein bereits gefundenes Ticket der letzten Bestellung auftaucht, wird es übersprungen.

Um das Ticket der letzten Bestellung zu finden, müssen wir nicht die gesamte Historie aller Bestellungen durchsuchen - wir können die Größe der gesuchten Historie festlegen - einen Tag, zwei, drei, eine Woche... "Und überspringe alle Aufträge mit der Uhrzeit, die vor dem Suchbereich liegt. Zum Beispiel: Die Größe der Suchhistorie ist auf 1 Tag eingestellt - alle Aufträge, die vor dem aktuellen Zeitpunkt - einem Tag - liegen, werden übersprungen. Aber wir brauchen den Zyklus noch. Wenn wir nur den letzten Auftrag in der Liste nehmen, kann es Kaufen sein, und wir brauchen Verkaufen. Es ist die vorletzte. Daher werden wir seine Daten nicht erhalten.

 
Artyom Trishkin:

Zuerst wird das Ticket der letzten Bestellung gefunden, und dann wird ein Zyklus mit Änderungen durchgeführt. Wenn in der Schleife ein bereits gefundenes Ticket der letzten Bestellung auftaucht, wird es übersprungen.

Um nach dem Ticket der letzten Bestellung zu suchen, müssen Sie nicht den gesamten Verlauf aller Bestellungen durchlaufen - Sie können den Umfang des durchsuchten Verlaufs festlegen - einen Tag, zwei, drei, eine Woche... "Und überspringe alle Aufträge mit der Uhrzeit, die vor dem Suchbereich liegt. Zum Beispiel: Die Größe der Suchhistorie ist auf 1 Tag eingestellt - alle Aufträge, die vor dem aktuellen Zeitpunkt - einem Tag - liegen, werden übersprungen. Aber die Schleife wird weiterhin benötigt. Wenn wir nur den letzten Auftrag in der Liste nehmen, kann es Kaufen sein, und wir brauchen Verkaufen. Es ist die vorletzte. Daher werden wir seine Daten nicht erhalten.

Artem, natürlich danke für die Erklärung, aber ich weiß, wie ich die Reihenfolge in der Liste finden kann. Und meine Antwort richtete sich nicht an Sie, sondern an Alexej zu seinem Beispiel (insbesondere, dass die Bedingung "> 0" nicht funktionieren wird).

Sie sollten besser richtig schreiben (nur mit Code). Ich bin faul :)

 
Alexey Kozitsyn:
Wenn wir davon ausgehen, dass der letzte Auftrag nicht der letzte in der Liste ist, ist Ihr Beispiel falsch, weil es den allerersten Auftrag (Auftrag 0) nicht berücksichtigt.

Wie könnte es anders sein?

Alexey Viktorov:

Eine weitere Variante: Vor der Schleife schreiben Sie in die Variable _1 ein Ticket, z.B. der Ordnung Null, und dann

/********************Script program start function********************/
void OnStart()
{
  int i, t1, t2, modTicket , total = OrdersTotal();
   datetime d1, d2;
    if(OrderSelect(0, SELECT_BY_POS))
     {
      t1 = OrderTicket();
       d1 = OrderOpenTime();
     }    
    for(i = 1; i < total; i++)
     {
      if(OrderSelect(i, SELECT_BY_POS))
       {
        t2 = OrderTicket();
         d2 = OrderOpenTime();
          modOrder((d1 < d2) ? t1 : t2);
         t1 = d1 < d2 ? t2 : t1;
        d1 = d1 < d2 ? t2 : t1;
       }
     }
}/********************************************************************/

void modOrder(int ticket);
{
// здесь код модификации ордера.
}/********************************************************************/
Ich hoffe, ich habe sonst nichts falsch gemacht.
 
Alexey Viktorov:

Wie könnte es anders sein?

/********************Script program start function********************/
void OnStart()
{
  int i, t1, t2, modTicket , total = OrdersTotal();
   datetime d1, d2;
    if(OrderSelect(0, SELECT_BY_POS))
     {
      t1 = OrderTicket();
       d1 = OrderOpenTime();
     }    
    for(i = 1; i < total; i++)
     {
      if(OrderSelect(i, SELECT_BY_POS))
       {
        t2 = OrderTicket();
         d2 = OrderOpenTime();
          modOrder((d1 < d2) ? t1 : t2);
         t1 = d1 < d2 ? t2 : t1;
        d1 = d1 < d2 ? t2 : t1;
       }
     }
}/********************************************************************/

void modOrder(int ticket);
{
// здесь код модификации ордера.
}/********************************************************************/
Ich hoffe, ich habe sonst nichts falsch gemacht, ich habe es nicht noch einmal überprüft...
Für den Anfang ist es in Ordnung, aber es ist besser, es vom Ende her zu machen... Allerdings ist es auch in Ordnung, wenn Sie keine Aufträge löschen.
 
Alexey Kozitsyn:
Wenn man es als Startvariante nimmt, ist es ausreichend, aber es ist besser, es vom Ende her zu machen... Aber wenn wir keine Aufträge löschen müssen, ist das auch in Ordnung.

Um mehrere Aufträge zu ändern, müssen Sie sie in einer Schleife durchgehen. Es zeigt sich also, dass zusätzliche Mikrosekunden nur für den Vergleich der offenen Zeit der Bestellung aufgewendet werden. Dies wird eine optimale Variante sein.

Die Richtung des Zyklus ... Das spielt eigentlich keine Rolle, denn es geht nicht um den Abschluss von Aufträgen. Ich habe meine vorherige Version verwechselt und "close" geschrieben, also war die Schleife auch dort entsprechend...

 

Guten Tag!

Ich versuche mich an der Erstellung eines Indikators. Ich möchte visuell das bekommen, was ich wollte, aber ich möchte, dass der Indikator die erforderlichen Informationen sendet, zum Beispiel Textinformationen oder den Typ int. Wie kann ich das machen, wenn ich 10 Puffer habe, nach denen die Linien gezeichnet werden? Danke!

 

Guten Tag, treten Sie mich nicht, aber ich fand diese Überschrift und beschlossen, ein paar Fragen zu stellen ... Ich habe ein Terminal ... Ich von einem Broker MT4 (1) heruntergeladen ... lief die Demo ... nach einiger Zeit bei einem anderen registriert, auch

Ich wurde angeboten, um das Terminal herunterzuladen ... heruntergeladen (2) als Ergebnis, 2 Terminal nicht gehen ... und 1 erschien Profil 2 Broker ... in der Regel alle verwirrt ... dann von binären kommt ein Brief, dass sie zu MT5 bewegen ... installiert und auf den ersten Blick, alles viel besser als die MT4 . Meine Frage ist, ob es möglich ist, ein Konto bei verschiedenen Brokern an einem Terminal zu eröffnen? und kann ich alle von ihnen zu mt5 übertragen? und wenn Indikatoren von MT4 zu 5 passen ?

Danke ...

 

Eine so aktive Hilfe, vielen Dank.

Bereits mit einem neuen Problem zu kämpfen)

Bitte helfen Sie mir, die Ursache für das Auftreten der neuen Zickzack-Scheitelpunkte herauszufinden.

Ich habe versucht, in einer Variablen den Preis des ersten Scheitelpunktes zu speichern, dann vergleichen Sie es, wenn der Preis geändert hat, eine Flagge zu erhöhen, gibt es einen neuen Scheitelpunkt.
if(newZZH1_PR!=GetExtremumZZPrice(Symbol(),T_F_,1))
{
   newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1);
   newZZH1=true;
}

Es stellte sich jedoch heraus, dass die Funktion im Laufe der Zeit chaotisch den Preis des ersten Scheitelpunkts, dann den des zweiten zurückgibt.

Es stellt sich heraus, dass die neue Spitze nicht gebildet wird und die Flagge gehisst wird.
double GetExtremumZZPrice(string sy="", int tf=0, int ne=0)
{

  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=1; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
Idealerweise sollte die Funktion so angepasst werden, dass sie immer den Preis des ersten Scheitelpunkts liefert, aber ich wäre mit jeder Lösung zufrieden.
 
mila.com:

Eine so aktive Hilfe, vielen Dank.

Bereits mit einem neuen Problem zu kämpfen)

Bitte helfen Sie mir, die Ursache für das Auftreten der neuen Zickzack-Scheitelpunkte herauszufinden.

Versucht, in einer Variablen den Preis des ersten Scheitelpunktes zu merken, dann zu vergleichen, wenn sich der Preis geändert hat, ein Flag zu setzen, gibt es einen neuen Scheitelpunkt.
if(newZZH1_PR!=GetExtremumZZPrice(Symbol(),T_F_,1))
{
   newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1);
   newZZH1=true;
}

Es stellte sich jedoch heraus, dass die Funktion im Laufe der Zeit chaotisch den Preis des ersten Scheitelpunkts, dann den des zweiten zurückgibt.

Es stellt sich heraus, dass kein neuer Scheitelpunkt gebildet wird, aber die Flagge wird angehoben.
double GetExtremumZZPrice(string sy="", int tf=0, int ne=0)
{

  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=1; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
Idealerweise sollte die Funktion so angepasst werden, dass sie immer den Preis des ersten Scheitelpunkts liefert, aber ich wäre mit jeder Lösung zufrieden.

Der Zickzackkurs hat eigentlich drei Puffer - 0 insgesamt, 1 - das obere Extremum, 2 - das untere Extremum.

Bei der Nullleiste befindet sich immer ein Wert in einem der Puffer - entweder im ersten (wenn das Knie oben ist) oder im zweiten (wenn es unten ist). Dementsprechend hat der Nullpuffer der aktuellen Kerze immer einen Wert - entweder aus dem ersten oder aus dem zweiten Puffer.

Um ein klares oberes Extremum zu finden, sollten wir nach dem ersten nicht leeren Wert des ersten Puffers suchen, beginnend mit Takt 1. Für das untere Extremum müssen wir den ersten nicht-leeren Wert des zweiten Puffers finden, beginnend mit Takt 1.

Um zu wissen, ob es sich um ein neues Top oder einen neuen Boden handelt, müssen wir uns an die Zeit des vorherigen Tops/Tops erinnern und sie mit dem vergleichen, was wir bisher gefunden haben.

Es ist weitschweifig, aber ich hoffe, Sie verstehen es...

 
Es gibt zwei MT5-Terminals. Problem: Kann ich Skripte schreiben, um in einem Terminal nur Long-Trades und im anderen nur Short-Trades zuzulassen?
Grund der Beschwerde: