Açık pozisyonları gruplara ayırma - sayfa 4

 
Alexey Viktorov :

Bir diziyi "kendi içine" kopyalamak, silinmekte olanın yanındaki pozisyondan başlamak ve silinmekte olandan başlayarak yazmak. Ardından Grigori.SB tarafından önerildiği gibi yeniden boyutlandırın

İlginç bir şekilde, sizi doğru anladıysam, bu işlevi kullanmanız gerekiyor mu?

 int    ArrayCopy ( 
   void &        dst_array[],         // куда копируем 
   const void &  src_array[],         // откуда копируем 
   int           dst_start= 0 ,         // с какого индекса пишем в приемник 
   int           src_start= 0 ,         // с какого индекса копируем из источника 
   int           count= WHOLE_ARRAY      // сколько элементов 
   );
 
Sergey Voytsekhovsky :

Günaydın, cevabınız için teşekkürler.

Muhtemelen dikkat etmediniz, yukarıda gördüğünüz gibi, MQL5 ile ilgili tüm sorular.

Farkın bazen temel olmadığını anlıyorum, ama yine de. Verdiğiniz işlev, bir dizinin boyutunu değiştirir, boyut küçülürse muhtemelen gereksiz öğeleri keser.

İhtiyaç duyulan şey bu değil. Öğeyi değerine göre bularak kaldırmanız gerekir. Evet ve bu işlevi kullanmaya çalıştım, #23'te bunun hakkında yazdım. Her durumda - teşekkürler.

Ben de buna dikkat etmedim. mql5, ArrayRemove işlevine sahiptir ve sorun yoktur.

 

Bu durumda ArrayRemove daha uygundur, referans kitabında bir örnek var ve bu şekilde çalışıyor

 //| Script program start function                                    | 
//+------------------------------------------------------------------+ 
void OnStart () 
  { 
//--- объявим массив фиксированного размера и заполним значениями 
   int array[ 10 ]; 
   for ( int i= 0 ;i< 10 ;i++) 
     { 
      array[i]=i; 
     } 
//--- покажем массив до удаления элементов 
   Print ( "До вызова ArrayRemove()" ); 
   ArrayPrint (array); 
//--- удалим 2 элемента из массива и покажем новый состав 
   ArrayRemove (array, 4 , 2 ); 
   Print ( "После вызова ArrayRemove()" ); 
   ArrayPrint (array); 
/* 
   Результат выполнения:  
   До вызова ArrayRemove() 
   0 1 2 3 4 5 6 7 8 9 
   После вызова ArrayRemove() 
   0 1 2 3 6 7 8 9 8 9 
*/

Bu sadece bir görev değil, bu örnekler ve işlevler tek boyutlu diziler için uyarlanmıştır, ancak iki boyutlu dizilerle çalışmak istemezler.

Sanırım çok önemli, temel bir şeyi kaçırıyorum. Bu sadece ne???

Sana söylüyorum, el kitabı çoktan silindi.

 
Sergey Voytsekhovsky :

Bu durumda ArrayRemove daha uygundur, referans kitabında bir örnek var ve bu şekilde çalışıyor

Bu sadece bir görev değil, bu örnekler ve işlevler tek boyutlu diziler için uyarlanmıştır, ancak iki boyutlu dizilerle çalışmak istemezler.

Sanırım çok önemli, temel bir şeyi kaçırıyorum. Bu sadece ne???

Sana söylüyorum, el kitabı çoktan silindi.

Sıra önemli mi?
Son konumdan silinecek olana kopyalayın , dizinin boyutunu değiştirin .
 
Alexey Viktorov :
İki boyutlu bir dizi için, silinecek satır numarasını 2 ile çarpmanız gerekir. 3 boyutlu bir dizi için, 3 ile ...

Burada tam olarak anlamadım, lütfen daha ayrıntılı olarak açıklar mısınız, hatta daha iyisi, düzenlemeyi kodumun bir parçası üzerinde gösterin, yukarıda yayınladım. Rahatsız ediciyse, her neyse, bir şekilde çözeceğim.

 
Aliaksandr Hryshyn :
Sıra önemli mi?
Son konumdan silinecek olana kopyalayın, dizinin boyutunu değiştirin.

Hayır, sıra önemli değil, sadece bilinen (değere göre bulunan, indeks biliniyor) kaydını silmeniz gerekiyor. Dizinin herhangi bir yerinde olabilir (başlangıçta, ortada, sonunda). ArrayRemove harika, her şey yoluna girecek, ancak bu işlevi iki boyutlu bir diziye nasıl uygulayabilirim? kılavuzda bununla ilgili bir kelime yok.

 
Sergey Voytsekhovsky :

Hayır, sıra önemli değil, sadece bilinen (değere göre bulunan, indeks biliniyor) kaydını silmeniz gerekiyor. Dizinin herhangi bir yerinde olabilir (başlangıçta, ortada, sonunda). ArrayRemove harika, her şey yoluna girecek, ancak bu işlevi iki boyutlu bir diziye nasıl uygulayabilirim? kılavuzda bununla ilgili bir kelime yok.

Öyleyse dediğimi yapın, sadece ikinci boyuttaki dizi kopyalanır.
Diziyi yeniden boyutlandırırken üçüncü bir parametre belirtin, örneğin 32.
 
Sergey Voytsekhovsky :

Bu durumda ArrayRemove daha uygundur, referans kitabında bir örneği vardır, bu şekilde çalışır

Bu sadece bir görev değil, bu örnekler ve işlevler tek boyutlu diziler için uyarlanmıştır, ancak iki boyutlu dizilerle çalışmak istemezler.

Sanırım çok önemli, temel bir şeyi kaçırıyorum. Bu sadece ne???

Sana söylüyorum, el kitabı çoktan silindi.

Biraz saçmalık. Bu işlevi kılavuzu okumadan kullandım. Hata ayıklayıcıda, bir elemanın nasıl kaldırıldığını ve dizinin boyutunun anında küçüldüğünü izledim. Kontrol edildi, bir dizi yapıda bile sorunsuz çalışıyor. Şimdi kodla çalışamıyorum, sadece kelimelerle: Örneğin, 2 boyutlu bir diziden 3. dizini kaldırmanız gerekiyor. Beşinci ve altıncı değeri kaldırmanın gerekli olduğu ortaya çıktı. Kopyalama sırasında, fonksiyon tüm değerleri tek boyutlu bir dizide oluşturur ve üçüncü çiftin dizin 5'te başladığı ortaya çıkar. Genel olarak, bu birkaç deneyden sonra anlaşılır.

ArrayRemove'a gelince, elimden geldiğince 2-4 boyutlu dizileri kontrol edeceğim. Gereksiz olarak, hiç kontrol etmedim ve çalışmadığından şüphelenmedim.


Katma:

Kontrol. Statik bir dizinin yeniden boyutlandırılamayacağı unutulmamalıdır. Bu nedenle, belgelerdeki örnekte dizinin boyutu aynı kalır ve son iki satır tekrarlanır. Dinamik bir diziden satırları silerken, boyut sorunsuz bir şekilde değişir.

Dizin, monitördeki deliklere :)))) yazılmalıdır.

 /********************Script program start function*******************/
void OnStart ()
 {
   double arrTest[][ 2 ];
   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);
   }
     Print ( "ArraySize " , ArraySize (arrTest));
     ArrayPrint (arrTest);
     ArrayRemove (arrTest, 3 , 2 );
     Print ( "ArraySize " , ArraySize (arrTest));
     ArrayPrint (arrTest);
         );
 } /******************************************************************/
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)   ArraySize 20
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)          [, 0 ]    [, 1 ]
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 0 ,] 1.16465 1.16084
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 1 ,] 1.17094 1.16461
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 2 ,] 1.16878 1.17084
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 3 ,] 1.16525 1.16876
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 4 ,] 1.16467 1.16525
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 5 ,] 1.16491 1.16467
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 6 ,] 1.16186 1.16498
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 7 ,] 1.15985 1.16185
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 8 ,] 1.16156 1.15985
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 9 ,] 1.15447 1.16156
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)   ArraySize 16
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)          [, 0 ]    [, 1 ]
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 0 ,] 1.16465 1.16084
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 1 ,] 1.17094 1.16461
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 2 ,] 1.16878 1.17084
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 3 ,] 1.16491 1.16467
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 4 ,] 1.16186 1.16498
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 5 ,] 1.15985 1.16185
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 6 ,] 1.16156 1.15985
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 7 ,] 1.15447 1.16156

3 boyutlu bir dizi yaptım ve sonuç:

 2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)   ArraySize 30
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)          [, 0 ]    [, 1 ]    [, 2 ]
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 0 ,] 0.00000 1.16465 1.16255
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 1 ,] 1.00000 1.17094 1.16461
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 2 ,] 2.00000 1.16878 1.17084
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 3 ,] 3.00000 1.16525 1.16876
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 4 ,] 4.00000 1.16467 1.16525
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 5 ,] 5.00000 1.16491 1.16467
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 6 ,] 6.00000 1.16186 1.16498
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 7 ,] 7.00000 1.15985 1.16185
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 8 ,] 8.00000 1.16156 1.15985
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 9 ,] 9.00000 1.15447 1.16156
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)   ArraySize 24
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)          [, 0 ]    [, 1 ]    [, 2 ]
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 0 ,] 0.00000 1.16465 1.16255
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 1 ,] 1.00000 1.17094 1.16461
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 2 ,] 2.00000 1.16878 1.17084
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 3 ,] 5.00000 1.16491 1.16467
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 4 ,] 6.00000 1.16186 1.16498
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 5 ,] 7.00000 1.15985 1.16185
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 6 ,] 8.00000 1.16156 1.15985
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 7 ,] 9.00000 1.15447 1.16156
 
Alexey Viktorov :

Biraz saçmalık. Bu işlevi kılavuzu okumadan kullandım. Hata ayıklayıcıda, bir elemanın nasıl kaldırıldığını ve dizinin boyutunun anında küçüldüğünü izledim. Kontrol edildi, bir dizi yapıda bile sorunsuz çalışıyor. Şimdi kodla çalışamıyorum, sadece kelimelerle: Örneğin, 2 boyutlu bir diziden 3. dizini kaldırmanız gerekiyor. Beşinci ve altıncı değeri kaldırmanın gerekli olduğu ortaya çıktı. Kopyalama sırasında, fonksiyon tüm değerleri tek boyutlu bir dizide oluşturur ve üçüncü çiftin dizin 5'te başladığı ortaya çıkar. Genel olarak, bu birkaç deneyden sonra anlaşılır.

ArrayRemove'a gelince, elimden geldiğince 2-4 boyutlu dizileri kontrol edeceğim. Gereksiz olarak, hiç kontrol etmedim ve çalışmadığından şüphelenmedim.


Katma:

Kontrol. Statik bir dizinin yeniden boyutlandırılamayacağı unutulmamalıdır. Bu nedenle, belgelerdeki örnekte dizinin boyutu aynı kalır ve son iki satır tekrarlanır. Dinamik bir diziden satırları silerken, boyut sorunsuz bir şekilde değişir.

Dizin, monitördeki deliklere :)))) yazılmalıdır.

3 boyutlu bir dizi yaptım ve sonuç:

Örneğiniz çok yavaş, çok sayıda değerle dikkat çekecek.
 
Aliaksandr Hryshyn :
Örneğiniz çok yavaş, çok sayıda değerle dikkat çekecek.

Neyle? Her onayda bile doldurulmayan dizi öğeleri ? Ne farkedilecek?

Neden: