Einteilung der offenen Stellen in Gruppen - Seite 5

 
Alexey Viktorov:

Mit einer Menge was? Array-Elemente, die nicht einmal bei jedem Häkchen gefüllt werden? Wie wird es sich bemerkbar machen?

Dieser Code sticht ins Auge, als wäre er absichtlich schlechter gemacht worden.

Nun, wenn es keinen Unterschied macht, dann machen wir es so:

for(int i = 0; i < 10; i++)
   {
    ArrayResize(arrTest, i+1);
    arrTest[i][0] = iOpen(_Symbol, PERIOD_CURRENT, i);
    arrTest[i][1] = iClose(_Symbol, PERIOD_CURRENT, i);

    for(int j=0;j<100;j++)
    Sleep(1);
   }

Warum nicht?

ArrayResize(arrTest, 10);
for(int i = 0; i < 10; i++)
  {
    arrTest[i][0] = iOpen(_Symbol, PERIOD_CURRENT, i);
    arrTest[i][1] = iClose(_Symbol, PERIOD_CURRENT, i);
  }
 
Aliaksandr Hryshyn:

Dieser Code sticht ins Auge, als wäre er absichtlich schlechter gemacht worden.

Wenn es keinen Unterschied macht, sollten wir es so machen:

Und warum?

ps; Ahh, ich verstehe. Nun, dies ist ein Beispiel. Wenn das Arbeitsfeld gefüllt wird, wird es mit Sicherheit um einen Index aufgefüllt. Nicht die Variante, bei der man auf solche Feinheiten achten muss.
 
Alexey Viktorov:

Und warum?

Das ist wahrscheinlich der Grund, warum Sie das Array innerhalb der Schleife ändern lassen, wenn die Größe im Voraus bekannt ist.

Ich kenne den genauen Grund nicht :).

Sie sind freiberuflich tätig, nicht wahr? Schrecklich :).

 
Aliaksandr Hryshyn:

Das ist wahrscheinlich der Grund, warum Sie das Array innerhalb der Schleife ändern lassen, wenn die Größe im Voraus bekannt ist.

Ich kenne den genauen Grund nicht :).

Sie sind freiberuflich tätig, nicht wahr? Schrecklich :).

Und was ist damit?

 
Alexey Viktorov:

Das ist Blödsinn. Ich habe diese Funktion genutzt, ohne das Handbuch zu lesen. ...

Es hat funktioniert, vielen Dank !!! Was ich schrieb, war in der Tat Unsinn, dieArrayRemove löschen Funktion funktioniert gut auf Arrays von jeder Dimension.

Der Fehler lag an anderer Stelle. Nachdem ich die Funktion angewendet hatte, musste ich sie neu definieren, diesmal in ein kleineres Array, denn im nächsten Schritt wurde diese Variable wieder in der Schleife verwendet, und das Array fiel aus dem Bereich heraus (ich mag mich in der Terminologie irren, aber ich hoffe, ich habe mich klar ausgedrückt).

Ich werde die Arbeitsversion unten und in der angehängten Datei veröffentlichen. Die subtilen Punkte werden hervorgehoben.

//+------------------------------------------------------------------+
int Array_Caste_Positions_Creating(){
   int  n           = 0;
   long ticket      = 0;
   bool new_pos     = true;
//---Запись новых тикетов в массив позиций        
   int All_Position = PositionsTotal();
   int Array_Size   = ArrayRange(Arr_Position,0);
//---  
   for(int i = 0; i < All_Position; i++){
      if(m_position.SelectByIndex(i)){
         ticket  = PositionGetInteger(POSITION_TICKET);
         new_pos = true;}
      for(int e = 0; e < Array_Size; e++){
         if(Arr_Position[e][0]==ticket){
            new_pos = false;
            n++;
            break;}}
      if(new_pos){
         int New_Size = Array_Size+1;
         ArrayResize(Arr_Position,New_Size,0);
            Arr_Position[Array_Size][0] = (int)ticket;//Ticket
            Arr_Position[Array_Size][1] = 0;//Number_Caste (0 = начальные позиции)
            n++;}}                       
//---Удаление из массива мёртвых тикетов 
      Array_Size   = ArrayRange(Arr_Position,0);
      All_Position = PositionsTotal();
//---      
      for(int e = 0; e < Array_Size; e++){
         int  ticket_dead = Arr_Position[e][0];
         bool dead_pos    = true;
         for(int i = 0; i < All_Position; i++){
            if(m_position.SelectByIndex(i)){
                  if(ticket_dead == PositionGetInteger(POSITION_TICKET)){
                        dead_pos = false;
                        n++;
                        break;}}}
         if(dead_pos){
            ArrayRemove(Arr_Position,e,1);
            Array_Size   = ArrayRange(Arr_Position,0);}}
//---     
return(n);}
//+------------------------------------------------------------------+
Dateien:
Sower_1_6.mq5  19 kb
 

Ich fühle mich wie ein unangepasster Schüler, der unwissentlich einem Streit zwischen zwei Lehrern beiwohnt, von denen jeder auf der Richtigkeit seiner Lehrmethode beharrt.

Erlauben Sie mir, meine heiklen drei Cents einzubringen.

Trotz der leichten Unvollkommenheit des Codes desvon Alexey Viktorov geposteten Beispiels waren die von ihm vorgetragenen Gedanken korrekt und halfen uns, es zu verstehen. Und wenn ein Freiberufler bereit ist, unentgeltlich zu helfen und nicht versucht, einen zusätzlichen Cent zu erpressen - dann lobe ich ihn, ich respektiere ihn wirklich. Ich danke Ihnen.

Aliaksandr Hryshyn- Vielen Dank, Sie waren auch nicht gleichgültig und wollten aufrichtig helfen, und Sie haben es getan. Wer weiß, wie sich die Ereignisse ohne Ihre Kritik entwickelt hätten?

 
Sergey Voytsekhovsky:

Es hat funktioniert, vielen Dank !!! Was ich schrieb, war wirklich Unsinn, dieArrayRemove löschen Funktion funktioniert gut auf Arrays von jeder Dimension.

Der Fehler lag an anderer Stelle. Nachdem ich die Funktion angewendet hatte, musste ich sie neu definieren, diesmal in ein kleineres Array, denn im nächsten Schritt wurde diese Variable wieder in der Schleife verwendet, und das Array fiel aus dem Bereich heraus (ich mag mich in der Terminologie irren, aber ich hoffe, ich habe mich klar ausgedrückt).

Ich werde die Arbeitsversion unten und in der angehängten Datei veröffentlichen. Die subtilen Punkte werden hervorgehoben.

Schnelles Tutorial.

Hier ist sie

      if(m_position.SelectByIndex(i)){
         ticket  = PositionGetInteger(POSITION_TICKET);

kann ersetzt werden durch

      t icket = PositionGetTicket(i);
 
Alexey Viktorov:

Ein wenig Alphabetisierung.

Diese

kann ersetzt werden durch.

Großartig, wenn irgendwelche anderen Stellen im Code Ablehnung verursachen - bitte zeigen Sie mir, ich bin ein Homebrew Coder, was ich gegraben, das ist mein, Wissen ist nicht systematisch und fragmentarisch. Ich wäre Ihnen sehr dankbar, wenn Sie mich auf den richtigen Weg führen könnten.

Korrigiert, jetzt ist es so:

//---Запись новых тикетов в массив позиций        
   int All_Position = PositionsTotal();
   int Array_Size   = ArrayRange(Arr_Position,0);
//---  
   for(int i = 0; i < All_Position; i++){
      ticket = (int)PositionGetTicket(i);
      new_pos = true;
      for(int e = 0; e < Array_Size; e++){
         if(Arr_Position[e][0]==ticket){
            new_pos = false;
            n++;
            break;}}
      if(new_pos){
         int New_Size = Array_Size+1;
         ArrayResize(Arr_Position,New_Size,0);
            Arr_Position[Array_Size][0] = (int)ticket;//Ticket
            Arr_Position[Array_Size][1] = 0;//Number_Caste (0 = начальные позиции)
            n++;}}                       
 
Sergey Voytsekhovsky:

Großartig, wenn es irgendwelche anderen Stellen im Code, die Ablehnung verursachen - bitte zeigen Sie mir, ich bin ein Homebrew Coder, was ich gefunden habe, ist mein, das Wissen ist nicht systematisch und bruchstückhaft. Ich wäre Ihnen sehr dankbar, wenn Sie mir den richtigen Weg zeigen könnten.

Nur gelegentlich. Ich werde es nicht weiter verfolgen. Tatsächlich bin ich Autodidakt und auch ein alter Autodidakt.

Tickets in mql5 sind vom Typ ulong

Dann muss man weniger zum Tippen mitbringen

 
Alexey Viktorov:

Nur wenn es einen Anlass gibt. Ich werde nicht zuschauen. Und im Allgemeinen bin ich auch Autodidakt, und zwar ein alter Autodidakt.

Tickets in mql5 sind vom Typ ulong

Dann muss man weniger zum Tippen mitbringen

Danke, ich werde es berücksichtigen und später hier noch einmal wiederholen.