Array out of range in Besoin d'aide

 

Salutations à tous ! Merci d'avance à tous !

Bug de ce type :

Il y a une ligne Low_D1_Level par rapport à laquelle nous cherchons dans le tableau Bar_data_D1 [][6] ; nouveau niveau Min_D_Level

//--- variables globales

double_D1_Niveau ;

double Bar_data_D1 [][6] ; //copie les données des barres du graphique spécifié dans le tableau et renvoie le nombre de barres D1 copiées.

La première dimension du tableau contient le nombre de barres. La deuxième dimension comporte 6 éléments avec les valeurs :

0 - heure,
1 - cours d'ouverture,
2 - cours le plus bas (low),
3 - cours le plus haut (high),
4 - cours de clôture (close),
5 - volume.

//+------------------------------------------------------------------+
//|                        Функция Level 
//+------------------------------------------------------------------+
void Level() 
ArrayCopyRates(Bar_data_D1,_Symbol,PERIOD_D1); // Копирует в массив данные баров указанного графика и возвращает 
Low_D1_Level   = iLow (_Symbol,PERIOD_D1,1);   // Возвращает значение минимальной цены бара  D1
//--- Min_D_Leve  
 for(int i = 1; 0 <= Bar_data_D1 [i][2] ;i++)
    {
     Print(" i = ",i," Bar_data_D1 [i][2] = ",Bar_data_D1 [i][2]);
     if( Bar_data_D1 [i][2] < Low_D1_Level)
       {
        Min_D_Level = Bar_data_D1 [i][2];break;
       }
    } 
//---

Imprimer Imprimer

2020.12.09 15:19:29.109 2016.12.16 00:00:00  _Test EURUSD,H1:  i = 998 Bar_data_D1 [i][2] = 1.3364
2020.12.09 15:19:29.109 2016.12.16 00:00:00  _Test EURUSD,H1:  i = 999 Bar_data_D1 [i][2] = 1.33562
2020.12.09 15:19:29.109 2016.12.16 00:00:00  _Test EURUSD,H1:  i = 1000 Bar_data_D1 [i][2] = 1.33532
2020.12.09 15:19:29.109 2016.12.16 00:00:00  _Test EURUSD,H1:  i = 1001 Bar_data_D1 [i][2] = 1.33705
2020.12.09 15:19:29.109 2016.12.16 00:00:00  _Test EURUSD,H1: array out of range in '_Test.mq4' (451,34)
2020.12.09 15:19:29.110 2016.12.16 00:00:00  Testing pass stopped due to a critical error in the EA
2020.12.09 15:19:29.110 EURUSD,H1: 136637 tick events (25 bars, 63904705 bar states) processed in 0:00:17.844 (total time 0:00:24.547)

Документация по MQL5: Доступ к таймсериям и индикаторам / iLow
Документация по MQL5: Доступ к таймсериям и индикаторам / iLow
  • www.mql5.com
Значение минимальной цены бара (указанного параметром shift) соответствующего графика или 0 в случае ошибки. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError(). Функция всегда возвращает актуальные данные, для этого она при каждом вызове делает запрос к таймсерии по указанным символу/периоду. Это...
 
array out of range in '_Test.mq4' (451,34)


A la ligne 451,34 il y a une sortie en dehors du tableau.

Voir en , ce qu'il y a derrière <=

 for(int i = 1; 0 <= Bar_data_D1 [i][2] ;i++)
 
 for(int i = 1; ;i++)
    {
     Print(" i = ",i," Bar_data_D1 [i][2] = ",Bar_data_D1 [i][2]);
     if( Bar_data_D1 [i][2] < Low_D1_Level)
       {
        Min_D_Level = Bar_data_D1 [i][2];break;
       }
    } 
//---
изначально было так 

 

pouvez-vous penser à une meilleure option ? comment la mettre en œuvre ?

 

au moment où le conseiller s'arrête

les lignes sont redessinées une fois par jour


Graphique EURUSD, H1, 2020.12.09 10:21 UTC, Gerchik and Co Limited, MetaTrader 4, Real

 

2020

voulait tester 5 ans et est tombé surArray hors gamme

 

à la valeur basse la plus proche de 3500 bar +- , mais il gèle à 1000,1001,1002

pourquoi ne va-t-il pas plus loin dans le tableau ?

 

CODE RETOURNÉ : Pas d'erreur, pas de tableau supplémentaire et pas de redessin de ligne ce jour.


//--- Min_D_Leve  
 for(int i = 1; i<ArrayRange(Bar_data_D1,0) ;i++)
    {
     Print(" i = ",i," Bar_data_D1 [i][2] = ",Bar_data_D1 [i][2]);
     if(Bar_data_D1 [i][2]>=0)
       {
        if( Bar_data_D1 [i][2] < Low_D1_Level)
          {
           Min_D_Level = Bar_data_D1 [i][2];break;
          }
       }   
    } 
    



Imprimer

2020.12.09 17:03:30.363 2016.12.16 00:00:00 _Test EURUSD,H1 : i = 996 Bar_data_D1 [i][2] = 1.33147

2020.12.09 17:03:30.363 2016.12.16 00:00:00 _Test EURUSD,H1 : i = 997 Bar_data_D1 [i][2] = 1.3426

2020.12.09 17:03:30.363 2016.12.16 00:00:00 _Test EURUSD,H1 : i = 998 Bar_data_D1 [i][2] = 1.3364

2020.12.09 17:03:30.363 2016.12.16 00:00:00 _Test EURUSD,H1 : i = 999 Bar_data_D1 [i][2] = 1.33562

2020.12.09 17:03:30.363 2016.12.16 00:00:00 _Test EURUSD,H1 : i = 1000 Bar_data_D1 [i][2] = 1.33532

2020.12.09 17:03:30.363 2016.12.16 00:00:00 _Test EURUSD,H1 : i = 1001 Bar_data_D1 [i][2] = 1.33705






 
Dark Kchlyzov:


l'erreur n'est peut-être pas là. Sans le code, il est difficile de comprendre

 
MakarFX:

l'erreur n'est peut-être pas là. Sans le code, il est difficile de comprendre


//--глобальные переменные


double   Low_D1_Level;

double   Bar_data_D1 [][6]; // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров D1

//--- тело void On_Timer() { if(Day()!= Time_Day) { Level(); Time_Day = Day(); } } //+------------------------------------------------------------------+
//|                        Функция Level //+------------------------------------------------------------------+ void Level() ArrayCopyRates(Bar_data_D1,_Symbol,PERIOD_D1); // Копирует в массив данные баров указанного графика и возвращает Low_D1_Level   = iLow (_Symbol,PERIOD_D1,1);   // Возвращает значение минимальной цены бара  D1 //--- Min_D_Leve   for(int i = 1; 0 <= Bar_data_D1 [i][2] ;i++)     {      Print(" i = ",i," Bar_data_D1 [i][2] = ",Bar_data_D1 [i][2]);      if( Bar_data_D1 [i][2] < Low_D1_Level)        {         Min_D_Level = Bar_data_D1 [i][2];break;        }     } //---

De quoi d'autre avez-vous besoin ?

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
Déclarer le tableau Bar_data_D1 avec le type MqlRates. En conséquence, il deviendra unidimensionnel. Ou bien, déclarez votre propre structure au lieu de MqlRates, si vous considérez que les champs spread et real_volume sont inutiles.
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Структура исторических данных - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Raison: