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

 
hoz:


Dies ist bereits ein Zeichen von Schläfrigkeit bei mir.

Aber darum geht es ja auch nicht wirklich. Ich führe die Eule im Testgerät aus. Wie Sie auf dem Screenshot sehen können, gibt es keine schwebenden Aufträge oder Marktaufträge.

Sowohl die separate Funktion als auch der Standardkommentar, mit dem ich die separate Funktion dupliziert habe, um die erforderlichen Werte anzuzeigen, zeigen, dass ständig Marktaufträge und schwebende Aufträge vorhanden sind.

So funktioniert die Funktion:

Ich rufe es von Anfang an auf, wobei ich zunächst auch die Zählerwerte auf Null zurücksetze:

Nun ja, t++ funktioniert so oder so
 
Forexman77:

Habe den EA ein wenig überarbeitet, Kommentare im Code. Beachten Sie die Bildung von Signal und Stopp. Ich setze sie besonders ein, ohne nachzudenken. Ändern Sie sie gegebenenfalls nach Ihrem Geschmack.

Dateien:
 
artmedia70:
Nun, das t++ funktioniert so oder so.


Die einzige Möglichkeit ist diese?

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
void FindOrders(int& t, int& p)
{
   t = 0;
   p = 0;
 
   for (int i=OrdersTotal() - 1; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderType() > 1 && OrderType() < 6)
      {
          p++;
          t++;
      }
      else if (OrderType() < 2)
          t++;
      else 
      {
         Print("Позиций в рвнке нет!");
      }
      
      pr ("FindOrders(): " + "t = " + t);
      pr ("FindOrders(): " + "p = " + p);
   }
}

Es sieht nicht nach viel aus. Sie ist nicht optimiert. Die Wiederholung von t++ ist nicht glücklich...

 
hoz:


Die einzige Möglichkeit ist diese?

Es sieht nicht nach viel aus. Sie ist nicht optimiert. Die Wiederholung von t++ ist nicht glücklich...

Und warum sollten Sie t auf jeden Fall erhöhen wollen? In der Tat, was gibt es überhaupt:

if (OrderType() > 1 && OrderType() < 6)
      {
          p++;
          t++;
      }
      else t++;

Wenn die Auftragsart größer als 1 und kleiner als 6 ist, erhöhen Sie p, erhöhen Sie t

Andernfalls (auch wenn die Auftragsart==6 ist), erhöhen wir wieder t

Es ist schon seltsam, nicht wahr?

 
artmedia70:

Warum sollten Sie t überhaupt erhöhen wollen? Was gibt es da überhaupt?

Wenn der Auftragstyp größer als 1 und kleiner als 6 ist, erhöhen wir p, erhöhen t

Andernfalls (auch wenn die Auftragsart==6) erhöhen wir wieder t

Es ist schon seltsam, nicht wahr?




Während ich Ihren Kommentar schrieb, hatte ich meinen bereits umgeschrieben. Oben ist die korrigierte Fassung zu sehen.
 
hoz:

Während ich Ihren Kommentar schrieb, hatte ich meinen bereits umgeschrieben. Der obige Text ist die korrigierte Fassung.
Warum sollte ich t erhöhen, wenn der Auftrag schwebend ist, und dann wieder erhöhen, wenn der nächste Auftrag ein Marktauftrag ist?
 
Erstellen Sie ein Array mit sechs Elementen. Übergeben Sie es per Referenz an die Funktion. Sobald ein Auftrag ausgewählt wurde und allen Filtern (Symbol, Magie) entspricht, erhöhen Sie die Array-Zelle, die durch den Auftragstyp angesprochen wird. Nachdem die Funktion ausgeführt wurde, haben Sie die Anzahl der Aufträge, sortiert nach ihrem Typ, in einem Array.
 
artmedia70:
Und warum sollten wir t erhöhen, wenn der Auftrag schwebend ist, und dann wieder t erhöhen, wenn der nächste Auftrag ein Marktauftrag ist?


t ist die Anzahl aller Aufträge.

p - Anzahl der schwebenden Aufträge

Wenn die Bedingung:

if (OrderType() > 1 && OrderType() < 6)

wahr ist, werden sowohl t als auch p inkrementiert, da jeder Auftrag vom Typ 2 bis 5 sowohl ein schwebender als auch ein allgemeiner Auftrag ist. Daher sollten beide Zähler inkrementiert werden. Und wenn die Bedingung erfüllt ist:

else if (OrderType() < 2)

Dann gibt es keinen schwebenden Auftrag, aber einen Marktauftrag. Das bedeutet, dass wir den t-Zähler, d.h. den Zähler für die Gesamtzahl der Bestellungen, erhöhen werden.

Und wenn es nichts gibt, dann drucken wir, dass es keine Aufträge gibt.

 
artmedia70:
Erstellen Sie ein Array mit sechs Elementen. Übergeben Sie es per Referenz an die Funktion. Sobald ein Auftrag ausgewählt wurde und allen Filtern (Symbol, Magie) entspricht, erhöhen Sie die Array-Zelle, die durch den Auftragstyp angesprochen wird. Nachdem die Funktion ausgeführt wurde, haben Sie die Anzahl der Aufträge, sortiert nach ihrem Typ, in einem Array.

Ich habe bereits verstanden, dass die Anordnung hier vorzuziehen ist))) Gibt es irgendwelche Ungereimtheiten in der obigen Variante? (Nur interessehalber, jetzt scheint alles klar zu sein).
 
hoz:

Dass hier das Array vorzuziehen sein wird, habe ich bereits verstanden))) Und in dieser Variante, die ich oben beschrieben habe, ist ungenau? (Nur interessehalber. Ich denke, es ist bereits alles klar)

Wie wäre es damit?

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
void FindOrders(int& t, int& p)
{
   t = 0;
   p = 0;
 
   for (int i=OrdersTotal() - 1; i>=0; i--)
      {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderType() > 1 && OrderType() < 6)   p++;
      if (OrderType() < 6)  t++;
       }
  pr ("FindOrders(): " + "t = " + t);
  pr ("FindOrders(): " + "p = " + p);
}