Fehler, Irrtümer, Fragen - Seite 735

 
joo:

Ich habe eine "Verwechslung" gefunden.

Warum mag der Compiler die Definition der zweiten b-Variablen nicht?

Und ganz allgemein: Wie gehe ich mit dieser Situation um?

Es mag die Definition nicht.

Es wird nur ein weiterer Fehler geschrieben - falscher Variablentyp für die Array-Dimension

Sie können Konstanten nur in Dimensionen angeben

 
sergeev:

es ist nicht die Definition, die er nicht mag.

Er schreibt auch einen anderen Fehler - falscher Variablentyp für die Array-Dimension

In den Dimensionen dürfen nur Konstanten angegeben werden

Auch Konstanten funktionieren nicht, es wird ein Fehler auftreten:

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

Zugangsspezifizierer

Zugriffsspezifizierer teilen dem Compiler mit, wie auf Variablen, Mitglieder von Strukturen oder Klassen zugegriffen werden soll.

Derconst-Spezifizierer deklariert eine Variable als Konstante und lässt nicht zu, dass der Wert dieser Variable während der Programmausführung geändert wird. Es ist erlaubt, eine Variable einmal zu initialisieren, wenn sie deklariert wird.

 

Ich meinte nur zwei Optionen

int Arr[100]

oder

#define r 100
int Arr[r]


Für den Rest ArrayResize

 
papaklass:
Das verstehe ich nicht. Ich habe einen EA auf dem Chart platziert und diese Meldung erscheint auf der Registerkarte "Experten". Der Expert Advisor setzt seine Arbeit trotzdem fort. Dies ist kein Fehler, sondern eine Warnung. Eine Warnung vor was?
Es handelt sich um einen Fehler zur Laufzeit - ein Speicherleck. Irgendwo wird der von einer Zeichenkette belegte Speicher nicht freigegeben. Höchstwahrscheinlich handelt es sich um eine Struktur oder Klasse, die nach der Neuanlage nicht gelöscht wird. Um genaueres zu erfahren, müssen Sie sich den Code ansehen.
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
joo:

Konstanten funktionieren ebenfalls nicht, es wird ein Fehler auftreten:

Zugangsspezifizierer

Zugriffsspezifizierer teilen dem Compiler mit, wie auf Variablen, Mitglieder von Strukturen oder Klassen zugegriffen werden soll.

Derconst-Spezifizierer deklariert eine Variable als Konstante und lässt nicht zu, dass der Wert dieser Variable während der Programmausführung geändert wird. Es ist erlaubt, eine Variable einmal zu initialisieren, wenn sie deklariert wird.

Eine konstante Variable ist keine Konstante! Sie darf nur einmal initialisiert werden, d.h. es handelt sich um eine Variable, für die Speicher zugewiesen wird.

Die Aufgabe der Konstanten ist es, berechnet und in den Code eingefügt zu werden, ohne den Speicher zur Laufzeit zu belegen.

Die Konstante wird const AA=11 sein.

Deshalb wird der Compiler vereidigt. Wenn die Konstante AA=11 ist, wird sie sich nicht beschweren.

 

Können Sie mir sagen, was das Problem ist?

Beim letzten Intervall in ChannelPeriod = 100 gibt es eine starke Verschiebung der Indikatorwerte nach oben, nach den letzten 100 Balken wird alles normal angezeigt.

Weiß jemand, wie man das beheben kann?

//+------------------------------------------------------------------+
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);
}
//-----------------------------------------------------------------------------------------

 
Anzeige
Dateien:
Spread_O.mq5  7 kb
 
Wenn ich auf die Schaltfläche "Start" drücke, prüft das Prüfgerät nicht von der anfänglichen Einzahlungsebene aus, sondern von der Ebene aus, auf der der letzte Test endete. Es gibt kein solches Problem in 4. Wie beginnt man die Prüfung ab der ersten Einzahlung?
 
Bitte geben Sie mir einen direkten Link zum Herunterladen von Lehrbüchern im PDF-Format, da mein Handy-Browser nicht alles auf der Website anzeigen kann.
 
Zeleniy:
Bitte geben Sie mir einen direkten Link, über den Sie die Lehrbücher im PDF-Format herunterladen können, denn mein Handy-Browser kann nicht alles auf der Website sehen.
Es gibt keine Lehrbücher, nur die Hilfe.