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

 
Alexandr Nevadovschi:

Liebe Programmierer, bitte helfen Sie einem Neuling in diesem Geschäft.

Der EA öffnet Kauf- und Verkaufsaufträge nach einer bestimmten Zeitspanne nacheinander. Ich möchte, dass alle früheren Aufträge geändert werden (insbesondere sollen alle früheren Aufträge durch Take Profit des letzten Auftrags geschlossen werden). D.h. wenn der letzte Kaufauftrag und der vorherige Verkaufsauftrag, dann wird der Stop-Loss des vorherigen Auftrags auf das Take-Profit-Niveau des letzten Auftrags gesetzt,

Wenn der vorherige Kauf kauft, dann wird sein TakeProfit auf das Niveau des letzten TakeProfit gesetzt. usw. Der Punkt ist, dass bei der Gewinnmitnahme des letzten Auftrags alle Aufträge geschlossen werden müssen).

Ich hoffe, ich habe es klar und deutlich erklärt, auch wenn es schwer zu verstehen ist, wie es umgesetzt werden soll. Ich danke Ihnen im Voraus.

Ich verstehe, dass wir alle offenen Aufträge durchgehen und sie ändern können, aber wie können wir den letzten Auftrag auslassen?

Das Wichtigste bei all dem ist zu verstehen, was geschehen soll.

Was ist die "letzte Bestellung"? Wird es bis zur Öffnungszeit dauern? Oder nach dem Eröffnungspreisniveau?

Was ist, wenn wir "die letzte" Bestellung als "KAUFEN" betrachten, der Preis aber in die Höhe schießen wird? Oder umgekehrt, der letzte Auftrag wird VERKAUFEN, aber der Preis geht nach Norden? Welcher ist dann der letzte? Das müssen wir erkennen.

 

Hallo. Wenn Sie vorher nicht wissen, wie viele Elemente das Array enthalten wird, wie können Sie das Array so deklarieren, dass das Array mit jedem neuen Element größer wird?

Ein Beispiel, um es deutlicher zu machen:

double HighA[]; // ??????????????????

for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
 
Nauris Zukas:

Hallo. Wenn Sie vorher nicht wissen, wie viele Elemente das Array enthalten wird, wie können Sie das Array so deklarieren, dass das Array mit jedem neuen Element größer wird?

Ein Beispiel, um es deutlicher zu machen:

double HighA[]; // ??????????????????

for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));

Sie sollten die Dokumentation öfters lesen.
ArrayResize - Операции с массивами - Справочник MQL4
ArrayResize - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArrayResize - Операции с массивами - Справочник MQL4
 
Alexey Viktorov:
Sie sollten die Dokumentation öfters lesen.

Ich habe gelesen und versucht, aber ich erhalte eine Fehlermeldung "array out of range". In dem Beispiel sah das so aus:

      double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines);
            HighA[i]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
 
Nauris Zukas:

Ich habe gelesen und versucht, aber ich erhalte eine Fehlermeldung "array out of range". In dem Beispiel sah das so aus:

      double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines);
            HighA[i]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));

Wenn die Bedingung A[i] < B[i] nicht erfüllt ist, bleibt die Array-Größe unverändert und der Schleifenzähler wird inkrementiert. Deshalb liegt sie außerhalb der Reichweite.

Versuchen Sie es auf diese Weise.

      double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            int size = ArraySize(HighA);
            ArrayResize(HighA, size+1);
            HighA[size]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
 
Alexey Viktorov:

Wenn die Bedingung A[i] < B[i] nicht erfüllt ist, bleibt die Array-Größe unverändert und der Schleifenzähler wird erhöht. Deshalb ist sie nicht zulässig.

Versuchen Sie es auf diese Weise.

      double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            int size = ArraySize(HighA);
            ArrayResize(HighA, size+1);
            HighA[size]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));


Ich danke Ihnen! Jetzt funktioniert alles !
 
Nauris Zukas:

Ich habe gelesen und versucht, aber ich erhalte die Fehlermeldung "array out of range". In dem Beispiel sah das so aus:

      double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines);
            HighA[i]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));

Nun, das würde schneller gehen

  int countHlines=0;
  double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines);
            HighA[countHlines-1]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));


// Вариант №2
  int countHlines=-1;
  double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines+1);
            HighA[countHlines]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
 
Vitaly Muzichenko:

Nun, so geht es schneller

  int countHlines=0;
  double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines);
            HighA[countHlines-1]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));


// Вариант №2
  int countHlines=-1;
  double HighA[];
      for(int i=0; i<1000; i++)
        {
         if(A[i]<B[i])
           {
            countHlines++;
            ArrayResize(HighA,countHlines+1);
            HighA[countHlines]=A[i];
           }
        }
      Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Danke, ich verstehe! Es wird schneller sein, weil der ArraySize, tut es irgendwie verlangsamen?
 
Nauris Zukas:
Danke, ich verstehe! Es wird schneller sein, weil der ArraySize, verlangsamt es irgendwie?
Nicht viel, aber es ist klar und fehlerfrei.
 
Alexey Viktorov:
Nicht viel, aber es ist klar und fehlerfrei.
Ich danke Ihnen!