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

 
Krokus:

Das mag sein:

Andere Gedanken kommen mir nicht...




Sie lesen zwischen den Zeilen. Wie auch immer, schauen Sie sich an, was Sie überhaupt in die Schleife gelegt haben. Die Aktionszone der Schleife...
 
Hallo, in mt4 android für Tablet müssen das Terminal für jeden Server separat herunterladen ? Login wie auf PC über Datei-Login ist nicht möglich ? Auch, wissen Sie, wenn autoclick kann auf einem Android-Tablet installiert werden, um in mt4 Handel?
 

Guten Tag, ich kann diese Bedingung nicht erfüllen:

OrderCloseTime()!=hour()

Ich möchte, dass in einer Stunde nicht mehr als eine Bestellung geöffnet wird!

Es werden alle die gleichen Aufträge eröffnet!

 
lowech:

Guten Tag, ich kann diese Bedingung nicht erfüllen:

OrderCloseTime()!=hour()

Ich möchte, dass in einer Stunde nicht mehr als eine Bestellung geöffnet wird!

Aber es werden alle die gleichen Aufträge eröffnet!

Erstens: OrderCloseTime() - dies ist der Zeitpunkt des Auftragsabschlusses. Wenn der Auftrag nicht abgeschlossen ist, ist der Wert gleich Null. Sie müssen auf den Zeitpunkt der Öffnung achten.

Zweitens: Hour() - dies ist die Stunde des Starts des EA, und diese Stunde ändert sich während der Ausführung des Programms nicht. Sie müssen sie mit der Zeit der letzten Kursankunft vergleichen - TimeCurrent()

Diese Funktion gibt die Anzahl der Sekunden zurück, nachdem die letzte Position des aktuellen Symbols geöffnet wurde:

//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+

D.h., um die Anzahl der Sekunden nach der Eröffnung der letzten Kaufposition mit Magic zu überprüfen, benötigen Sie

if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
   // Можно открывать следующий
   }
 
Hallo, wenn Sie das Terminal nach dem Wochenende wieder öffnen, sind alle Charts, einschließlich der Arbeitscharts mit EAs, auf einem Cent-Konto verschwunden. Anstelle des Diagramms gibt es ein graues Feld, obwohl die offenen Positionen, der Saldo und die Fonds unten gespeichert wurden. Ich musste das Terminal neu herunterladen und funktionierende Diagramme mit Expert Advisors neu installieren. Danach war alles in Ordnung. Bitte sagen Sie mir, was es damit auf sich hat und wie ich dieses Problem in Zukunft möglichst schmerzlos beseitigen kann.
 

Erstens: OrderCloseTime() ist der Zeitpunkt, zu dem der Auftrag geschlossen wird. Wenn der Auftrag nicht abgeschlossen ist, ist der Wert gleich Null. Sie müssen die Öffnungszeit beachten.

Zweitens: Hour() - dies ist die Stunde des Starts des Expert Advisors, und diese Stunde ändert sich nicht während der Ausführung des Programms. Sie müssen sie mit der Zeit der letzten Kursankunft vergleichen - TimeCurrent()

Diese Funktion gibt die Anzahl der Sekunden zurück, nachdem die letzte Position des aktuellen Symbols geöffnet wurde:

//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+

D.h., um die Anzahl der Sekunden nach der Eröffnung der letzten Kaufposition mit Magic zu überprüfen, benötigen Sie

if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
   // Можно открывать следующий
   }
Vielen Dank für die Funktion! Haben Sie nicht noch eine andere, so dass nur eine Bestellung pro Takt geöffnet wird?
 
lowech:
Danke für die Funktion! Gibt es nicht noch eine andere, so dass nur eine Bestellung pro Bar geöffnet wird?
//+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+

das Gleiche, nur die Anzahl der Takte, nicht die Sekunden

 
//+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+

das Gleiche, nur die Anzahl der Takte, nicht die Sekunden


Es funktioniert, aber wenn ich eine Bestellung mit TP schließe, wird sofort eine neue eröffnet!
 
Warum werden die Handelsebenen nicht auf der Plattform angezeigt und warum funktioniert der EA nicht?
 
lowech:

das Gleiche, nur die Anzahl der Takte, nicht die Sekunden


Es funktioniert, aber wenn eine Bestellung auf TP geschlossen wird, wird sofort eine neue eröffnet! Wie können wir das beheben?

Wir müssen also eine weitere Prüfung vornehmen: die Anzahl der Takte nach Abschluss der letzten Bestellung:

//+----------------------------------------------------------------------------+
int BarsAfterCloseLastPos (int fi_MG, int fi_Type = -1)
{
    datetime ldt_Time = 0;
    int      li_Total = OrdersTotal();
//----
    for (int li_pos = 0; li_pos < li_Total; li_pos++)
    {
        if (!OrderSelect (li_pos, SELECT_BY_POS, MODE_HISTORY)) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (fi_Type >= 0) if (OrderType() != fi_Type) continue;
        if (OrderMagicNumber() != fi_MG) continue;
        if (ldt_Time >= OrderCloseTime()) continue;
        ldt_Time = OrderCloseTime();
    }
    //---- Обрабатываем событие - отсутствие своих ордеров
    if (ldt_Time == 0) return (-1);
//----
    return (iBarShift (NULL, 0, ldt_Time));
}
//+----------------------------------------------------------------------------+
Grund der Beschwerde: