MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 327

 

Merhaba! Diziler hakkında bir sorum var. Yarısı kederle tek boyutlu bir dizi oluşturdu. Her şey yoluna girecek, çünkü derleme aşamasında herhangi bir hata yok, ancak onu test cihazında çalıştırmaya değer ve EURUSD,M1: array out of range in ,, (218,12) hatası beliriyor, tam olarak benim konumumu gösteriyor. talihsiz dizi Lütfen bana onun nesi olduğunu söyle

 int Totall= OrdersTotal ();
   double Price;                                                               // Цена выбранного ордера
   double Mas[];                                                                 //массив для упорядочивания всех ордеров
   for ( int i= 0 ; i< OrdersTotal (); i++)                                           // Цикл перебора ордер
   {
     if ( OrderSelect (i, SELECT_BY_POS ))                                           // Если есть следующий
     {
       Price= OrderOpenPrice ();
       Mas [i] = Price;                                                         //Как раз перед квадратной скобкой и есть ошибка array out of range in ,, (218,12)
         
         ArraySort (Mas, WHOLE_ARRAY , 0 , MODE_ASCEND );                           // Теперь цены открытия упорядочены по убыванию
          
         int Blizko2= ArrayBsearch (Mas, Ask , WHOLE_ARRAY , 0 , MODE_DESCEND );           //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                       // Цена выбранного ордера

           ArraySort (Mas, WHOLE_ARRAY , 0 , MODE_ASCEND );                           // Теперь цены открытия упорядочены по убыванию
          
         int Blizko1= ArrayBsearch (Mas, Bid , WHOLE_ARRAY , 0 , MODE_ASCEND );           //Определен индекс ближайшего меньшего по значению елемента к текущей цене
            PriceBlizko1=Mas[Blizko1];
     }
   }       
Dizinin her bir öğesine bir sipariş fiyatı atamanın hala yolları olup olmadığını söyleyebilir misiniz?
 
vikzip :

Merhaba! Diziler hakkında bir sorum var. Yarısı kederle tek boyutlu bir dizi oluşturdu. Her şey yoluna girecek, çünkü derleme aşamasında herhangi bir hata yok, ancak onu test cihazında çalıştırmaya değer ve EURUSD,M1: array out of range in ,, (218,12) hatası beliriyor, tam olarak benim konumumu gösteriyor. talihsiz dizi Lütfen bana onun nesi var onu söyle


Temelde yanlış bir kodunuz var, ancak hata, dizinin boyutunun doldurmadan önce ayarlanmamasından kaynaklanıyor.

 if ( OrderSelect (i, SELECT_BY_POS ))                                           // Если есть следующий
     {
       Price= OrderOpenPrice ();
       ArrayResize (Mas, i+ 1 );
       Mas [i] = Price; 
 
Vitaly Muzichenko :

Temelde yanlış bir kodunuz var, ancak hata, dizinin boyutunun doldurmadan önce ayarlanmamasından kaynaklanıyor.


Çok teşekkürler! Lütfen sıranın yanlış olup olmadığını söyle? Buradaki fikir, fiyata en yakın siparişlerin fiyatlarını alttan ve üstten belirlemektir. Lütfen bana bakış açınızı söyleyin.

 
vikzip :

Çok teşekkürler! Lütfen sıranın yanlış olup olmadığını söyle? Buradaki fikir, fiyata en yakın siparişlerin fiyatlarını alttan ve üstten belirlemektir. Lütfen bana bakış açınızı söyleyin.

Döngüde çok fazla fazlalığınız var. Döngüde, diziyi fiyatlar ile doldurmanız ve döngünün dışında onunla çalışmanız gerekir.

   for ( int i= 0 ; i< OrdersTotal (); i++)                                           // Цикл перебора ордер
   {
     if ( OrderSelect (i, SELECT_BY_POS ))                                           // Если есть следующий
     {
       ArrayResize (Mas, i+ 1 );
       Mas[i] = OrderOpenPrice ();                                                         //Как раз перед квадратной скобкой и есть ошибка array out of range in ,, (218,12)
   /*
         ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND);                           // Теперь цены открытия упорядочены по убыванию
          
        int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND);          //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                      // Цена выбранного ордера

          ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND);                           // Теперь цены открытия упорядочены по убыванию
          
        int Blizko1=ArrayBsearch(Mas,Bid,WHOLE_ARRAY,0,MODE_ASCEND);           //Определен индекс ближайшего меньшего по значению елемента к текущей цене
            PriceBlizko1=Mas[Blizko1];
   */
     }
   }       
 
Vitaly Muzichenko :

Döngüde çok fazla fazlalığınız var. Döngüde, diziyi fiyatlar ile doldurmanız ve döngünün dışında onunla çalışmanız gerekir.


Apaçık. Çok teşekkürler!! Fikrinizi doğru ifade ettiniz mi?

 
vikzip :

Apaçık. Çok teşekkürler!! Fikrinizi doğru ifade ettiniz mi?

Belki. Bir ve aynı görev birkaç şekilde uygulanabilir.

 
double Price;                                                               // Цена выбранного ордера
   double Mas[];                                                                 //массив для упорядочивания всех ордеров
   for ( int i= 0 ; i< OrdersTotal (); i++)                                           // Цикл перебора ордер
   {
     if ( OrderSelect (i, SELECT_BY_POS ))                                           // Если есть следующий
     {
       Price= OrderOpenPrice ();
       ArrayResize (Mas, i+ 1 );
       Mas [i] = Price; 
     }
   } 
           ArraySort (Mas, WHOLE_ARRAY , 0 , MODE_ASCEND );                           // Теперь цены открытия упорядочены по убыванию
          
         int Blizko2= ArrayBsearch (Mas, Ask , WHOLE_ARRAY , 0 , MODE_DESCEND );           //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                       // Цена выбранного ордера                                                             Вот в этой строке

           ArraySort (Mas, WHOLE_ARRAY , 0 , MODE_ASCEND );                           // Теперь цены открытия упорядочены по убыванию
          
         int Blizko1= ArrayBsearch (Mas, Bid , WHOLE_ARRAY , 0 , MODE_ASCEND );           //Определен индекс ближайшего меньшего по значению елемента к текущей цене
            PriceBlizko1=Mas[Blizko1];


Vitaly Muzichenko :

Belki. Bir ve aynı görev birkaç şekilde uygulanabilir.


En yakın eleman indekslerinin tanımını döngüden yeni çıkardım ve test cihazında Mas[Blizko2] yerinde bir hata olduğunu gösteriyor.Belki de EA başladığında henüz sipariş olmadığı içindir?

Lütfen söyle bana, belki benzer bir şeye bakmanın mümkün olduğunu biliyorsundur?!)
 
vikzip :

En yakın eleman indekslerinin tanımını döngüden yeni çıkardım ve test cihazında Mas[Blizko2] yerinde bir hata olduğunu gösteriyor.Belki de EA başladığında henüz sipariş olmadığı içindir?

böyle dene

 if ( ArraySize (Mas)> 0 ) { // если массив не пустой, то

         ArraySort (Mas, WHOLE_ARRAY , 0 , MODE_ASCEND );                           // Теперь цены открытия упорядочены по убыванию
          
         int Blizko2= ArrayBsearch (Mas, Ask , WHOLE_ARRAY , 0 , MODE_DESCEND );           //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                       // Цена выбранного ордера

           ArraySort (Mas, WHOLE_ARRAY , 0 , MODE_ASCEND );                           // Теперь цены открытия упорядочены по убыванию
          
         int Blizko1= ArrayBsearch (Mas, Bid , WHOLE_ARRAY , 0 , MODE_ASCEND );           //Определен индекс ближайшего меньшего по значению елемента к текущей цене
            PriceBlizko1=Mas[Blizko1];

 }
 
Vitaly Muzichenko :

böyle dene


Çok teşekkürler!! Başka bir sorum var: MODE_DESCEND'i MODE_ASCEND olarak değiştirerek mevcut fiyata en yakın düşük değerli öğenin endeksini doğru bir şekilde belirleyebilir miyim?

 
vikzip :

Çok teşekkürler!! Başka bir sorum var: MODE_DESCEND'i MODE_ASCEND olarak değiştirerek mevcut fiyata en yakın düşük değerli öğenin endeksini doğru bir şekilde belirleyebilir miyim?

Cevap vermeyeceğim, hiç ArrayBsearch kullanmadım