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

 
hoz:

Ich habe bereits verstanden, dass das Array hier vorzuziehen ist))) Und in dieser Variante, die ich oben beschrieben habe, ist nicht korrekt? (Rein interessehalber. Ich denke, es ist bereits alles klar)

So etwas in der Art hatte ich auch im Sinn. Also... die Richtung zu denken...

int i_magic=123;
int OrdersMassive[7];
//+----------------------------------------------------------------------------+
int start() {
   FindOrders(OrdersMassive);
   int i, num=0;
   for (i=0; i<=7; i++) {
      Print("Количество "+GetNameOP(i)+" = "+OrdersMassive[i]);
      num+=OrdersMassive[i];
      }
   Print("Всего ордеров = "+(num-OrdersMassive[6]));
   return(0);
}
//+----------------------------------------------------------------------------+
void FindOrders(int &mass[]) {
   int i, t, k=OrdersTotal()-1;
   ArrayInitialize(mass,0);
   for (i=k; i>=0; i--) {
      if (!OrderSelect(i,SELECT_BY_POS))  continue;
      if (OrderMagicNumber()!=i_magic)    continue;
      if (OrderSymbol()!=Symbol())        continue;
      t=OrderType();
      mass[t]=mass[t]+1;
      }
}   
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
   switch (op) {
      case OP_BUY      : return("Buy");
      case OP_SELL     : return("Sell");
      case OP_BUYLIMIT : return("Buy Limit");
      case OP_SELLLIMIT: return("Sell Limit");
      case OP_BUYSTOP  : return("Buy Stop");
      case OP_SELLSTOP : return("Sell Stop");
      case 6           : return("Неторговое изменение баланса");
      default          : return("Не знаю, чё за тип такой...");
   }
}
//+----------------------------------------------------------------------------+

Und was Sie da haben, habe ich nicht wirklich gesehen ...

 
r772ra:

Wie wäre es damit?

Meine Version der Funktion ist kürzer ... :)

//+----------------------------------------------------------------------------+
void FindOrders(int &mass[]) {
   int i, t, k=OrdersTotal()-1;
   ArrayInitialize(mass,0);   
   for (i=k; i>=0; i--) {
      if (!OrderSelect(i,SELECT_BY_POS))  continue;
      if (OrderMagicNumber()!=i_magic)    continue;
      if (OrderSymbol()!=Symbol())        continue;
      t=OrderType();
      mass[t]=mass[t]+1;
      }
}   
//+----------------------------------------------------------------------------+
 
r772ra:

Das mag sein.

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
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);
}

Es funktioniert auch nicht. Ich hatte da einen Fehler. Jetzt ist es so:

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
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++;
      else 
      {
         pr("Позиций в рвнке нет!");
      }
      
      pr ("FindOrders(): " + "t = " + t);
      pr ("FindOrders(): " + "p = " + p);
   }
}

Wenn es keine Aufträge auf dem Markt gibt, gehen die Zähler nicht auf Null. Das ist Blödsinn. Was ist hier falsch? Ich werde mir ansehen, was Artem geschrieben hat.

 
hoz:

Es funktioniert auch nicht. Ich hatte da einen Fehler. So ist es nun einmal:

Wenn es keine Aufträge auf dem Markt gibt, werden die Zähler nicht auf Null gesetzt. Das ist Blödsinn. Was ist hier falsch? Ich werde mir ansehen, was Artem geschrieben hat.


Nehmen Sie das aus der Schleife heraus.

pr ("FindOrders(): " + "t = " + t);
pr ("FindOrders(): " + "p = " + p);
Ich nehme an, dass dies die Ausgabe der Informationen ist.
 
r772ra:


Nehmen Sie dies aus der Schleife heraus

Ich nehme an, dass dies die Ausgabe der Informationen ist.


Richtig. (gluckst) Nun, was mir passiert ist. Einige dumme Fehler. Ich habe einen Monat lang in C++ gegraben. Und jetzt habe ich solche dummen Fehler in µl. Mein Gehirn muss ausgebrannt sein :(
 
Ist es im Allgemeinen in Ordnung, bei jedem Tick nach Aufträgen zu suchen? Oder ist es besser, bei jedem Takt auszuführen? Ich habe immer noch nicht im Kopf, was in dem einen Fall besser ist und was in dem anderen.
 
hoz:
Ist es im Allgemeinen in Ordnung, bei jedem Tick nach Aufträgen zu suchen? Oder ist es besser, bei jedem Takt auszuführen? Ich weiß immer noch nicht, was in dem einen Fall besser ist und was in dem anderen nicht.
Wenn eine Position innerhalb eines Balkens während der Überwachung durch die Balkeneröffnung geschlossen wird, erfährt der Expert Advisor erst bei der nächsten Balkeneröffnung von den Änderungen in der Anzahl der Positionen.
 
hoz:


t ist die Anzahl aller Aufträge.

p ist die Anzahl der anhängigen Aufträge

Wenn die Bedingung erfüllt ist:

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

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


t = OrdersTotal();

warum zählt???????

 

Hallo! Ich suche nach Fehlern in dieser Funktion.

Die Idee ist, dass schwebende Aufträge, die nicht eröffnet wurden, zwei Tage nach ihrer Erteilung gelöscht werden sollten.

min=1440;

if(OrdersTotal()<1)
{return;
 }
  for(int i=OrdersTotal()-1;i>=0;i--)
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderSymbol()==Symbol())
       {
        if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
        {
          if(TimeCurrent()-OrderOpenTime()>min)            
            {
            OrderDelete(OrderTicket());
          return;
          }
        }
      }
    }
return;}
 
pako:



Vielen Dank, pako.

Grund der Beschwerde: