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

 

Und dann wird er auch die Ausgabe von Nachrichten nicht über Kommentare, sondern über Objekte und in größerem Umfang vornehmen müssen...

Ein Mensch wird nie lernen, selbst so zu denken.

 
artmedia70:
Denken Sie nur daran, dass die Variable beim Neustart neu initialisiert wird. Dieser Ansatz ist also für einen Tester akzeptabel, aber nicht für den echten Handel.


Vielen Dank für die Informationen, was ist dann zu tun? Soll ich den Wert einfach in GV schreiben? Oder gibt es eine andere Möglichkeit für echten Handel...

 
ALXIMIKS:

Danke für die Informationen, was soll ich dann tun? Bewerten Sie den Wert in GV? Oder gibt es eine andere Möglichkeit für echte...
Vergessen Sie die globalen Flaggen. Ich weiß nicht, warum man Flaggen braucht und was sie anzeigen. Deshalb ist es schwierig, in Bezug auf Ihre Situation Ratschläge zu erteilen.
 
Zolotai:
Leute, könnt ihr einen Indikator vorschlagen? Sie basiert auf zwei Folien. Und wenn er sich kreuzt, gibt er die Richtung als Pfeile an. Ich kann es nicht finden, danke.
i-PSI@MA_Signal von hier aus.
 
ALXIMIKS:

Guten Tag, wenn es nicht zu schwierig ist, bitte beraten Sie einen Neuling:

1) Wie kann man ein Array deklarieren, dessen Größe dem Wert einer Variablen entspricht? (bei i=7 Array double Muss[7] deklarieren und so weiter);

bereits beantwortet

2) Warum wird ein Array in einer Benutzerfunktion als angemessen deklariert und verwendet, wenn die Bedingung immer falsch ist?

while (false){

Alert("aaaaaaaaaaa" );

static double Buf_max [9000000];

static double Buf_min [9000000];}

weil sie als statisch deklariert wurde. In MQL werden alle statischen Variablen vor dem Aufruf der Funktion init() initialisiert

3) Gibt es einen Unterschied zwischen einem einfachen Array und einem statischen Array in einer Benutzerfunktion und im Allgemeinen?

ein einfaches Array wird beim ersten Aufruf der Funktion, in der es deklariert ist, initialisiert. Beim Beenden der Funktion wird der neue Wert jedoch nicht zurückgesetzt, wenn Sie die Größe zuvor geändert haben, und beim nächsten Aufruf der Funktion hat das Array die gleiche Größe wie beim letzten Mal.

Das heißt, im Großen und Ganzen besteht der Unterschied zwischen einfach und statisch nur im Moment der Initialisierung.

 
Was kann bei Fehler "1"-->(kein Fehler, aber Ergebnis unbekannt) getan werden?
 

Ich habe hier eine Funktion zum Löschen von ausstehenden Aufträgen geschrieben. Aber aus irgendeinem Grund werden sie nicht gelöscht. Hier ist der Code:

void DeletePendingOrders()
{
    int NumberOfTry = 0,
        err,
        ticket;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1)
      {
         ticket = OrderTicket();
      
         while (NumberOfTry < 3)
         {
            while (!IsTradeAllowed()) Sleep(5000);
      
            if (OrderDelete(ticket, Red))
                NumberOfTry = 3;
            else
                err = GetLastError();
      
            if (err > 0)
            { 
              Print(NumberOfTry," #",ticket," Error modifing order: (", err , ") ");
              Sleep(5000); RefreshRates(); NumberOfTry++;
            }
         }
      }
   }
}

Warum funktioniert es nicht richtig? Ich verstehe, dass er anders geschrieben werden kann, aber ich möchte verstehen, warum dieser Code seinen Zweck nicht erfüllt.

 
hoz:

Ich habe hier eine Funktion zum Löschen von ausstehenden Aufträgen geschrieben. Aber aus irgendeinem Grund werden sie nicht gelöscht. Hier ist der Code:

Warum funktioniert es nicht richtig? Ich verstehe, dass er anders geschrieben werden kann, aber ich möchte verstehen, warum dieser Code nicht wie vorgesehen funktioniert.

Ich möchte eine Zeile einfügen, damit ich den Code nicht besonders ändern muss:

            while (!IsTradeAllowed()) Sleep(5000);
            err=0;
            if (OrderDelete(ticket, Red))
                NumberOfTry = 3;
            else
                err = GetLastError();
      
            if (err > 0)
 
Sepulca:

Ich hätte eine Zeile eingefügt, um den Code nicht besonders zu verändern:


Und was wird uns das bringen? Immer noch keine abgeschlossenen Aufträge und keine Fehler.

Der Code wurde geändert:

void DeletePendingOrders()
{
    int NumberOfTry = 0,
        err,
        ticket;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1)
      {
         ticket = OrderTicket();
      
         while (NumberOfTry < 3)
         {
            while (!IsTradeAllowed()) Sleep(5000);
                err = 0;
              Print("IsTradeAllowed() = ", IsTradeAllowed());
              Print("err = ", err);

            if (OrderDelete(ticket, Red))
            {
                NumberOfTry = 3;
                Print("NumberOfTry", NumberOfTry);
            }
            else
            {
                err = GetLastError();
                Print("err = ", err);
            }
      
            if (err > 0)
            { 
              Print(NumberOfTry," #",ticket," Error modifing order: (", err , ") ");
              Sleep(5000); RefreshRates(); NumberOfTry++;
            }
         }
      }
   }
}

Der rechte Teil des Logbuchs:

2013.09.11 22:24:19     2012.01.02 08:05  Perevorot EURUSD,M5: modify #10 sell stop 0.01 EURUSD at 1.29279 sl: 0.00000 tp: 1.29179 ok
2013.09.11 22:24:19     2012.01.02 08:05  Perevorot EURUSD,M5: open #10 sell stop 0.01 EURUSD at 1.29279 ok
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: Ôóíêöèÿ DeletePendingOrders çàâåðøåíà
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: NumberOfTry3
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: delete #9 sell stop 0.64 EURUSD at 1.29279 sl: 0.00000 tp: 1.29179 ok
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: err = 0
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: IsTradeAllowed() = 1
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: Ôóíêöèÿ ClosePosBySortLots çàêðûëà âñå ðûíî÷íûå îðäåðà
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #3 sell 0.01 EURUSD at 1.29303 tp: 1.29203 at price 1.29487
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #4 buy 0.02 EURUSD at 1.29403 tp: 1.29503 at price 1.29480
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #5 sell 0.04 EURUSD at 1.29286 tp: 1.29186 at price 1.29487
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #6 buy 0.08 EURUSD at 1.29386 tp: 1.29486 at price 1.29480
Es stellt sich heraus, dass der Auftrag gelöscht ist. Aber eins. Es gab noch einen, noch einen. Sie wurde jedoch nicht gelöscht. Aber der Zyklus gilt für alle Aufträge.
 

Achten Sie auf Ihre NumberOfTry-Variable

muss für jedes Ticket auf Null gesetzt werden, andernfalls wird er auf 3 oder mehr gesetzt und weitere Bedingungen gelten nicht für alle Tickets.

nur einer erfüllt die Bedingung