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

 
Alexey Viktorov :

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

Bu kod sanki bilerek daha kötü hale getirilmiş gibi gözü acıtıyor.

Peki, eğer bir fark yoksa, şunu yapalım:

 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 );
   }

Neden?

 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 :

Bu kod sanki bilerek daha kötü hale getirilmiş gibi gözü acıtıyor.

Peki, eğer bir fark yoksa, şunu yapalım:

Ne için?

not; Ahh, o zaman anlaşılır. Bu bir örnek. Çalışan dizinin bir dolgusu olduğunda, kesinlikle bir dizinde bir doldurma olacaktır. Bu tür inceliklere dikkat etmeniz gereken seçenek değil.
 
Alexey Viktorov :

Ne için?

Muhtemelen döngü içindeki diziyi bilinen bir boyutla değiştirmenizin nedeni budur.

Tam olarak sebebini bilmiyorum :)

Serbest çalışıyorsun! Korku :).

 
Aliaksandr Hryshyn :

Muhtemelen döngü içindeki diziyi bilinen bir boyutla değiştirmenizin nedeni budur.

Tam olarak sebebini bilmiyorum :)

Serbest çalışıyorsun! Korku :).

Ve bundan ne?

 
Alexey Viktorov :

Biraz saçmalık. Bu işlevi kılavuzu okumadan kullandım. ...

Oldu, çok teşekkürler!!! Yazdıklarım gerçekten saçmaydı, ArrayRemove silme işlevi herhangi bir boyuttaki dizilerde harika çalışıyor.

Hata başka yerdeydi. İşlevi uyguladıktan sonra, şimdi daha küçük bir dizi boyutuyla yeniden tanımlamak gerekiyordu, çünkü bir sonraki adımda bu değişken tekrar döngüde kullanıldı ve dizi aralık dışına düştü (terminolojide yanılıyor olabilirim, ancak Umarım kendimi açıkça ifade edebilmişimdir).

Çalışan versiyonunu aşağıda ve ekteki dosyada yayınlayacağım. İnce noktalar renkle vurgulanır.

 //+------------------------------------------------------------------+
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);}
//+------------------------------------------------------------------+
Dosyalar:
Sower_1_6.mq5  19 kb
 

Kendimi, her birinin kendi öğretim yöntemlerinin doğruluğunda ısrar ettiği iki öğretmen arasındaki bir tartışmada istemsiz olarak hazır bulunan yaramaz bir öğrenci gibi hissediyorum.

Delitantımı üç sent koyayım.

Alexey Viktorov'un gönderdiği örnek kodun ideal olmamasına rağmen, doğru düşünceleri gönderdi, anlamaya yardımcı olan onlardı. Ve eğer bir serbest çalışan hazırsa ve fazladan bir kuruş şantaj yapmaya çalışmadan ücretsiz yardım ediyorsa, o zaman onurlandırılır ve övülür, gerçekten saygı duyulur. Teşekkür ederim.

Aliaksandr Hryshyn - Çok teşekkür ederim, siz de kayıtsız kalmadınız ve içtenlikle yardım etmek istediniz ve başardınız. Eleştirileriniz olmadan olayların nasıl gelişeceğini kim bilebilir?

 
Sergey Voytsekhovsky :

Oldu, çok teşekkürler!!! Yazdıklarım gerçekten saçmaydı, ArrayRemove silme işlevi herhangi bir boyuttaki dizilerde harika çalışıyor.

Hata başka yerdeydi. Fonksiyonu uyguladıktan sonra, şimdi daha küçük bir dizi boyutuyla yeniden tanımlamak gerekiyordu, çünkü bir sonraki adımda bu değişken tekrar döngüde kullanıldı ve dizi aralık dışına düştü (terminolojide yanılıyor olabilirim, ancak Umarım kendimi açıkça ifade edebilmişimdir).

Çalışan versiyonunu aşağıda ve ekteki dosyada yayınlayacağım. İnce noktalar renkle vurgulanır.

Küçük bir eğitim programı.

Bu

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

ile değiştirilebilir

      t icket = PositionGetTicket (i);
 
Alexey Viktorov :

Küçük bir eğitim programı.

Bu

ile değiştirilebilir

Harika, koddaki başka herhangi bir yer reddedilmeye neden oluyorsa - bana pliz'i göster, ben evde yetiştirilen bir kodlayıcıyım, o zaman kazdığım şey, sonra benim, bilgi sistematik ve kabataslak değildir. Doğru yolda rehberlik için son derece minnettar olurum.

Düzeltildi, şimdi şöyle:

 //---Запись новых тикетов в массив позиций        
   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 :

Harika, koddaki başka herhangi bir yer reddedilmeye neden oluyorsa - bana pliz'i göster, ben evde yetiştirilen bir kodlayıcıyım, o zaman kazdığım şey, sonra benim, bilgi sistematik ve kabataslak değildir. Doğru yolda rehberlik için son derece minnettar olurum.

Sadece vesileyle. takip etmeyeceğim. Genel olarak, ben de kendi kendimi yetiştirdim ve aynı zamanda eski bir kendi kendimi yetiştirdim.

mql5'teki biletler ulong tipindedir

O zaman türe döküm yapmak daha az gerekli

 
Alexey Viktorov :

Sadece vesileyle. takip etmeyeceğim. Genel olarak, ben de kendi kendimi eğittim ve aynı zamanda eski bir kendi kendini yetiştirdim.

mql5'teki biletler ulong tipindedir

O zaman türe döküm yapmak daha az gerekli

Teşekkürler, bunu aklımda tutacağım ve daha sonra burada yeniden yapacağım.