Array out of range in Besoin d'aide - page 14

 
Dark Kchlyzov:

Je voulais installer un MT4 d'un officiel, et faire un essai.

Après-midi. J'ai eu un problème pourinstaller le terminalMT4. J'ai téléchargé la version 4 du site, elle commence à s'installer, mais après avoir terminé l'installation, le terminal MT5 apparaît. Comment installer exactement MT4 ?

Réponse : Vous ne pouvez pas. Le support de la version précédente est interrompu. Veuillez utiliser MT5.

Vous pouvez le faire


 

Testé sur toute la période disponible

AUDUSD depuis 2016.01.01

EURUSD depuis 2011.01.01

GBPUSD depuis 2011.01.01

utilisé et

 for(int i = 1;  ;i++)

и

 for(int i = 1; i<ArrayRange(Bar_data_D1,0) ;i++)
aucun journal d'erreurs n'est joint
Dossiers :
AUDUSD.log  305 kb
EURUSD.log  612 kb
GBPUSD.log  612 kb
 

La solution

 for(int i = 1; i<ArrayRange(Bar_data_D1,0) ;i++)
   {
   if(Bar_data_D1 [i][2]!=Bar_data_D1 [i+1][2]&&Bar_data_D1 [i][2] < Low_D1_Level)
      {Min_D_Level = Bar_data_D1 [i][2];
      break;}
      
   if(Bar_data_D1 [i][2]==Bar_data_D1 [i+1][2])
      {Min_D_Level = Low_D1_Level;
      break;}
    } 
 

J'ai créé un indicateur, qui semble dessiner tout correctement.


 
MakarFX:

Solution

Retour à la première page de l'article !

2020.12.14 14:23:44.222 Expert Test_Level AUDUSD,H1 : supprimé

2020.12.14 14:23:44.234 Expert Test_Level AUDUSD,H1 : chargé avec succès

2020.12.14 14:23:44.365 TestGenerator : écart actuel 20 utilisé

2020.12.14 14:23:45.263 2020.01.24 00:00:00 Test_Level test démarré

2020.12.14 14:24:29.044 2020.02.10 00:05:00 Test_Level AUDUSD,H1 : array out of range in 'Test_Level.mq4' (39,40)

2020.12.14 14:24:29.044 2020.02.10 00:05:00 La passe de test a été interrompue en raison d'une erreur critique dans l'EA.

2020.12.14 14:24:29.044 AUDUSD,H1 : 245717 événements tick (265 barres, 9638212 états de barre) traités en 0:00:43.781 (temps total 0:00:44.766)

J'ai supprimé toutes les choses inutiles, j'ai déplacé la fonction dans le corps, j'ai ajouté vos solutions, et à nouveau le tableau est hors limites dans 'Test_Level.mq4' (39,40) - :)

tout est OK

Et voici le tableau hors limites dans


//+------------------------------------------------------------------+
//|                                                   Test_Level.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "3.0"
#property strict
double    Bar_data_D1 [][6]; // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров D1
double    Low_D1_Level;      // Возвращает значение минимальной цены бара  D1
double    Min_D_Level ;      // ближайшей минимальный  D уровень
int       A_C_R;             // возвращает количество скопированных баров D1
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   DestroyObject();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
 A_C_R = ArrayCopyRates(Bar_data_D1,_Symbol,PERIOD_D1); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров
 Low_D1_Level   = iLow (_Symbol,PERIOD_D1,1);           // Возвращает значение минимальной цены бара  D1
 
 //--- Min_D_Leve V 1.2
 for(int i = 1; i<ArrayRange(Bar_data_D1,0) ;i++)
    {
     if(Bar_data_D1 [i][2] != Bar_data_D1 [i+1][2] && Bar_data_D1 [i][2] < Low_D1_Level)
       {
        Min_D_Level = Bar_data_D1 [i][2];break;
       }
      
     if(Bar_data_D1 [i][2] == Bar_data_D1 [i+1][2])
       {
        Min_D_Level = Low_D1_Level;break;
       }
    }
/* 
 //--- Min_D_Leve V 1.0 
 //for(int i = 1; i<ArrayRange(Bar_data_D1,0) ;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]>=0)
       {
        if( Bar_data_D1 [i][2] < Low_D1_Level)
          {
           Min_D_Level = Bar_data_D1 [i][2];break;
          }
       }   
    } 
*/
 //+-------------------------Low_D1_Level----------------------------+ 
 if(ObjectFind("Low_D1")!=Low_D1_Level) 
   {
    ObjectDelete("Low_D1");
    if(ObjectFind("Low_D1")!=0)
      {
       ObjectCreate("Low_D1",OBJ_HLINE, 0, Time[0],Low_D1_Level);
       ObjectSet("Low_D1", OBJPROP_COLOR, clrMaroon);
       ObjectSet("Low_D1", OBJPROP_WIDTH, 1);
      }
   } 
   
 if(ObjectFind("Low_D1_label")!=Low_D1_Level)
   {
    ObjectDelete("Low_D1_label"); 
    if(ObjectFind("Low_D1_label") != 0)
      {
       ObjectCreate("Low_D1_label", OBJ_TEXT, 0, Time[13], Low_D1_Level);
       ObjectSetText("Low_D1_label", "Low_D1: " + DoubleToStr(Low_D1_Level,_Digits), 8,"Verdana", Brown);
      }
   } 
   
 //+-------------------------Min_D_Level----------------------------+ 
 if(ObjectFind("Min_D")!= Min_D_Level) 
   {
    ObjectDelete("Min_D");
    if(ObjectFind("Min_D")!=0)
      {
       ObjectCreate("Min_D",OBJ_HLINE, 0, Time[0],Min_D_Level);
       ObjectSet("Min_D", OBJPROP_COLOR, clrMaroon);
       ObjectSet("Min_D", OBJPROP_WIDTH, 1);
      }
   } 
   
 if(ObjectFind("Min_D_label")!=Min_D_Level)
   {
    ObjectDelete("Min_D_label"); 
    if(ObjectFind("Min_D_label") != 0)
      {
       ObjectCreate("Min_D_label", OBJ_TEXT, 0, Time[30], Min_D_Level);
       ObjectSetText("Min_D_label", "Min_D: " + DoubleToStr(Min_D_Level,_Digits), 8,"Verdana", Brown);
      }
   } 
   Comment(" A_C_R возвращает количество скопированных баров D1 = ",A_C_R); 
}
//+------------------------------------------------------------------+
//|        функция удаление всех объектов созданных советником
//+------------------------------------------------------------------+
void DestroyObject()
{
 int tot=ObjectsTotal();
 for( int i=tot; i>=0; i--)
    {
     
     if(ObjectName(i)=="Low_MN1"){ObjectDelete(0,"Low_MN1");Print("<< Объект Low_MN удалён >>");}
     if(ObjectName(i)=="Low_MN1_label"){ObjectDelete(0,"Low_MN1_label");Print("<< Объект Low_MN1_label удалён >>");}
     

     if(ObjectName(i)=="Min_D"){ObjectDelete(0,"Min_D");Print("<< Объект Min_D удалён >>");}
     if(ObjectName(i)=="Min_D_label"){ObjectDelete(0,"Min_D_label");Print("<< Объект Min_D_label удалён >>");}


   }
}

 
Dark Kchlyzov:

Retour de la première page de l'article !


J'ai supprimé tout ce qui n'était pas nécessaire, j'ai déplacé la fonction dans le corps, j'ai ajouté vos solutions et, à nouveau, le tableau est hors limites dans 'Test_Level.mq4' (39,40) - :)

Erreur avec le terminal

J'ai copié le code du message ci-dessus et j'ai effectué le test.

voici le journal

Dossiers :
AUDUSD.log  7368 kb
 
Je vais maintenant essayer un autre courtier, c'est-à-dire un autre terminal.
 
Alpari dans 10 ans, pas d'erreur
Dossiers :
Alpari_AUDUSD.log  15491 kb
 
MakarFX:

Erreur avec le terminal

J'ai copié le code du message ci-dessus et j'ai effectué le test.

Voici le journal.

Voici les nouvelles .

Et avec la visualisation exécutée à partir de 1.01.2020 AUDUSD

Cela ne fait probablement pas de différence.

 

Qui est votre courtier ?

Quel terminal utilisez-vous ?