Erreurs, bugs, questions - page 735

 
joo:

J'ai trouvé une "confusion".

Pourquoi le compilateur n'aime-t-il pas la définition de la deuxième variable b?

Et en général, comment dois-je gérer cette situation ?

Il n'aime pas la définition.

Il écrit juste une autre erreur - mauvais type de variable pour la dimension du tableau.

Vous ne pouvez spécifier des constantes que dans les dimensions

 
sergeev:

ce n'est pas la définition qu'il n'aime pas.

Il écrit également une autre erreur - mauvais type de variable pour la dimension du tableau.

Seules les constantes peuvent être spécifiées dans les dimensions

Les constantes ne fonctionneront pas non plus, il y aura une erreur :

const int AA =11;
ArrWe m[AA];

Spécification d'accès

Les spécificateurs d'accès indiquent au compilateur comment accéder aux variables, aux membres des structures ou des classes.

Le spécificateurconst déclare qu'une variable est une constante et ne permet pas que la valeur de cette variable soit modifiée au cours de l'exécution du programme. Il est permis d'initialiser une variable une fois lors de sa déclaration.

 

Je voulais dire seulement deux options

int Arr[100]

ou

#define r 100
int Arr[r]


Pour le reste, ArrayResize

 
papaklass:
Je ne comprends pas. Je place un EA sur le graphique et ce message apparaît dans l'onglet "Experts". Le conseiller expert continue quand même son travail. Il ne s'agit pas d'une erreur, mais d'un avertissement. Un avertissement sur quoi ?
Il s'agit d'une erreur au moment de l'exécution - cela signifie une fuite de mémoire. Un endroit où la mémoire occupée par une chaîne de caractères n'est pas libérée. Il s'agit très probablement d'une structure ou d'une classe qui n'est pas supprimée après une nouvelle. Vous devez examiner le code pour être plus précis.
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
joo:

ne fonctionneront pas non plus, il y aura une erreur :

Spécification d'accès

Les spécificateurs d'accès indiquent au compilateur comment accéder aux variables, aux membres des structures ou des classes.

Le spécificateurconst déclare qu'une variable est une constante, et ne permet pas que la valeur de cette variable soit modifiée au cours de l'exécution du programme. Il est permis d'initialiser une variable une fois lors de sa déclaration.

Une variable constante n'est pas une constante ! Il est autorisé à être initialisé une fois, c'est-à-dire qu'il s'agit d'une variable pour laquelle de la mémoire est allouée.

La tâche des constantes est d'être calculées et insérées dans le code sans occuper la mémoire au moment de l'exécution.

La constante sera const AA=11.

Par conséquent, le compilateur se trompera. Si const AA=11, il ne se plaindra pas.

 

Pouvez-vous me dire quel est le problème ?

Sur le dernier intervalle dans ChannelPeriod = 100 ; il y a un fort décalage vers le haut dans les lectures de l'indicateur, au-delà des 100 dernières barres tout est normal.

Quelqu'un sait-il comment le réparer ?

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
  //--- variables of indicator
  int i;
    
  CopyClose(Symbol1_Name,PERIOD_M30,0,rates_total,close_1);
  CopyClose(Symbol2_Name,PERIOD_M30,0,rates_total,close_2);
  
  //--- main cycle
  for(i=prev_calculated; i<rates_total; i++)
  {
    Last[i] = (Symbol1_Vol*Symbol1_K*close_1[i] -  Symbol2_Vol*Symbol2_K*close_2[i]);
  }
  
    // Считаем положение эквити относительно канала удвоенного среднеквадратичного отклонения
  double StdDev;
  for(i=prev_calculated; i<rates_total; i++) 
  {
    StdDev=MyStdDev(Last,ChannelPeriod,i);
    if(StdDev>0.00001) // Защита от отсутствия данных
      ExtStdDevBuffer[i]=(Last[i]+2*StdDev-iMAOnArrayMQL4(Last,0,ChannelPeriod,0,MODE_SMA,i))/(4*StdDev);
  }
  
  return(rates_total);
}

//-----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
// Calculation StdDev -----------------------------------------------| 
// StdDev = SQRT (SUM [(S(i) - SMA(i))^2, N] / N)                    | 
double MyStdDev(double &array[], int BandsPeriod, int Index) 
{ 
  double ds, sum, center; 
    
  sum = 0; 
  center = iMAOnArrayMQL4(array,0,BandsPeriod,0,MODE_SMA,Index); 
  for(int i = 0; i < BandsPeriod; i++) 
  { 
    ds = array[Index+i] - center; 
    sum += ds * ds; 
  } 
  sum = MathSqrt (sum / BandsPeriod); 
  return (sum); 
}
//-----------------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------------
double iMAOnArrayMQL4(double &array[], int total, int period, int ma_shift, int ma_method, int shift)
{
  double buf[],arr[];
  if(total==0) total=ArraySize(array);
  if(total>0 && total<=period) return(0);
  if(shift>total-period-ma_shift) return(0);
  switch(ma_method)
  {
    case MODE_SMA :
    {
      total=ArrayCopy(arr,array,0,shift+ma_shift,period);
      if(ArrayResize(buf,total)<0) return(0);
      double sum=0;
      int    i,pos=total-1;
      for(i=1;i<period;i++,pos--)
      sum+=arr[pos];
      while(pos>=0)
      {
        sum+=arr[pos];
        buf[pos]=sum/period;
        sum-=arr[pos+period-1];
        pos--;
      }
      return(buf[0]);
    }
    case MODE_EMA :
    {
      if(ArrayResize(buf,total)<0) return(0);
      double pr=2.0/(period+1);
      int    pos=total-2;
      while(pos>=0)
      {
        if(pos==total-2) buf[pos+1]=array[pos+1];
        buf[pos]=array[pos]*pr+buf[pos+1]*(1-pr);
        pos--;
      }
      return(buf[shift+ma_shift]);
    }
    case MODE_SMMA :
    {
      if(ArrayResize(buf,total)<0) return(0);
      double sum=0;
      int    i,k,pos;
      pos=total-period;
      while(pos>=0)
      {
        if(pos==total-period)
        {
          for(i=0,k=pos;i<period;i++,k++)
          {
            sum+=array[k];
            buf[k]=0;
          }
        }
        else sum=buf[pos+1]*(period-1)+array[pos];
        buf[pos]=sum/period;
        pos--;
      }
      return(buf[shift+ma_shift]);
    }
    case MODE_LWMA :
    {
      if(ArrayResize(buf,total)<0) return(0);
      double sum=0.0,lsum=0.0;
      double price;
      int    i,weight=0,pos=total-1;
      for(i=1;i<=period;i++,pos--)
      {
        price=array[pos];
        sum+=price*i;
        lsum+=price;
        weight+=i;
      }
      pos++;
      i=pos+period;
      while(pos>=0)
      {
        buf[pos]=sum/weight;
        if(pos==0) break;
        pos--;
        i--;
        price=array[pos];
        sum=sum-lsum+price*period;
        lsum-=array[i];
        lsum+=price;
      }
      return(buf[shift+ma_shift]);
    }
    default: return(0);
  }
  return(0);
}
//-----------------------------------------------------------------------------------------

 
indicateur
Dossiers :
Spread_O.mq5  7 kb
 
Pourquoi, lorsque j'appuie sur le bouton "Start", le testeur ne teste pas à partir du niveau de dépôt initial, mais à partir du niveau où s'est terminé le dernier test. Il n'y a pas de tel problème en 4. Comment commencer à tester à partir du niveau de dépôt initial ?
 
Veuillez me donner un lien direct pour télécharger les manuels en format PDF car le navigateur de mon téléphone ne peut pas tout voir sur le site web.
 
Zeleniy:
Veuillez me donner un lien direct où l'on peut télécharger les manuels en format PDF, car le navigateur de mon téléphone ne peut pas tout voir sur le site.
il n'y a pas de manuels, seulement de l'aide.
Raison: