Questions des débutants MQL5 MT5 MetaTrader 5 - page 86

 
fyords:
Imprimez les résultats d'ObjectCreate, peut-être y a-t-il une erreur.

Merci. Je vais certainement vérifier, mais après avoir résolu le nouveau problème. L'EA a fonctionné pendant un certain temps et a maintenant été automatiquement supprimé du graphique. Je ne peux pas le remettre, ça dit que le tableau est plein.

void CreateLevels()
   {
      double High[];
      ArrayResize(High,0);
      ArraySetAsSeries(High,true);
      CopyHigh(_Symbol,_Period,0,Candle,High);

      for(int j=Nachalo;j<=Candle;j++)
         {
          //--- поиск макс -----------------------------------
          if(iHighest(Symbol(),0,10,MN*2,j-MN)==j)
            {
             double H=High[j];
            }
int iHighest(string symbol,int tf,int type,int count,int start)
  {
   if(start<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(count<=0) count=Bars(symbol,timeframe);
   if(type==10)                                 // MODE_HIGH
     {
      double High[];
      ArraySetAsSeries(High,true);
      CopyHigh(symbol,timeframe,start,count,High);
      return(ArrayMaximum(High,0,count)+start);
     }
   return(0);
  }

Bougie=1000. Le compilateur ne jure nulle part, rien ne se produit dans le débogueur. Veuillez suggérer une solution à ce problème

 
La prochaine version demandera très rarement des signaux si vous ne les utilisez pas.

Cela a déjà été corrigé.
 
Renat:
La prochaine version demandera très rarement des signaux si vous ne les utilisez pas.

Cela a déjà été corrigé.
Je suppose que cette réponse n'est pas pour moi.
 
Il y a maintenant une erreur technique lorsque l'on essaie de définir l'EA sur le graphique. Où faut-il envoyer les détails de l'erreur ?
 
WindSW:

Pourquoi ArrayResize=0 ?

Et il semble que ArrayInitialize devrait être ajouté avant.

И

double H

Est-il initialisé à chaque fois dans la boucle ?

Déclarez-la avant la fonction.

Mettez à jour et vérifiez les parenthèses, il me manque un } dans

CreateLevels
 
Silent:

Pourquoi ArrayResize=0 ?

Mise à zéro du tableau High[]
 
WindSW:
Mise à zéro du tableau High[]
Non, vous avez mis sa taille à 0.
 
Silent:
Non, vous avez mis sa taille à 0.
L'information reste-t-elle à la taille 0 ? Quelle est la manière correcte de le réinitialiser ?
 
WindSW:
L'information reste-t-elle à la taille 0 ? Comment effectuer correctement la mise à zéro ?

Vous définissez la taille à zéro et copiez ensuite le tableau à cet endroit.

Essayez ça.

void CreateLevels()
  {
   double High[];
   ArrayResize(High,Candle); // размер = Candle
   ArrayInitialize(High,NULL); // инициализация нулем
   ArraySetAsSeries(High,true);
   CopyHigh(_Symbol,_Period,0,Candle,High);

   double H; // вынес
   int j;    // вынес
   for(j=Nachalo;j<=Candle;j++)
     {
      //--- поиск макс -----------------------------------
      if(iHighest(Symbol(),0,10,MN*2,j-MN)==j)
        {
         H=High[j];
        }
     }
  } // скобки сразу парами ставьте, искать не прийдётся
Mise mise à jour correction du code, aussi int j
 
WindSW:
Et avec la taille 0, l'information reste ?

Et, si vous le tuez, vous pourriez probablement appeler ArrayResize deux fois, avec 0, puis avec la bonne taille de tableau.

Ça pourrait même être plus rapide... Bien que je ne sache pas à quoi cela ressemblerait en termes d'allocation de mémoire.

Raison: