Hatalar, hatalar, sorular - sayfa 735

 
joo :

Bir "yanlış anlama" buldum.

Derleyici neden ikinci değişkenin tanımını beğenmiyor b ?

Ve genel olarak, böyle bir durum nasıl çözülür?

defne sevmez.

ayrıca başka bir hata yazıyor - dizinin boyutu için yanlış türde değişken

Boyutlarda yalnızca sabitler belirtilebilir

 
sergeev :

defne sevmez.

ayrıca başka bir hata yazıyor - dizinin boyutu için yanlış türde değişken

Boyutlarda yalnızca sabitler belirtilebilir

sabitler de yuvarlanmaz, bir hata olacaktır:

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

Erişim Belirticileri

Erişim belirteçleri, derleyiciye değişkenlere, yapı üyelerine veya sınıflara nasıl erişileceğini söyler.

const belirteci , bir değişkeni sabit olarak bildirir ve program yürütme sırasında bu değişkenin değerinin değiştirilmesine izin vermez. Bir değişken bildirildiğinde bir kez başlatılmasına izin verilir.

 

sadece iki seçeneği kastetmiştim

int Varış[100]

veya

#define r 100
int Varış[r]


Geri kalanı için ArrayResize

 
papaklass :
anlamadım Tabloya bir uzman asıyorum ve bu mesaj "Uzmanlar" sekmesinde görünüyor. Uzman çalışmaya devam ediyor. Bu bir hata değil, uyarıdır. Ne hakkında uyarı?
Bu bir çalışma zamanı hatasıdır - bir bellek sızıntısı anlamına gelir. Bir yerde dize tarafından işgal edilen bellek serbest bırakılmaz. Büyük olasılıkla bir yapı veya sınıfta, yeniden sonra silinmez. Daha doğrusu, koda bakmanız gerekir.
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
joo :

sabitler de yuvarlanmaz, bir hata olacaktır:

Erişim Belirticileri

Erişim belirteçleri, derleyiciye değişkenlere, yapı üyelerine veya sınıflara nasıl erişileceğini söyler.

const belirteci , bir değişkeni sabit olarak bildirir ve program yürütme sırasında bu değişkenin değerinin değiştirilmesine izin vermez. Bir değişken bildirildiğinde bir kez başlatılmasına izin verilir.

sabit bir değişken sabit değildir! Bir kerelik başlatmaya izin verilir, yani bu, belleğin tahsis edildiği bir değişkendir.

Sabitlerin görevi, hesaplanmak ve çalışma zamanında bellekte yer kaplamadan koda ikame edilmektir.

Sabit sabit AA=11 olacaktır.

Bu nedenle, derleyici doğru şekilde yemin eder. const AA=11 ile küfür olmayacak

 

Bana sorunun ne olduğunu söyleme?

ChannelPeriod'daki son aralıkta = 100; gösterge okumalarında her şeyin normal olarak gösterildiği son 100 çubuğun ötesine geçen keskin bir yukarı kayma var.

Belki birisi nasıl düzeltileceğini biliyordur?

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

 
gösterge
Dosyalar:
Spread_O.mq5  7 kb
 
Neden, "Başlat" düğmesine bastığımda, test cihazı ilk depozito seviyesinden değil, son testin bittiği seviyeden test yapıyor. 4-ke'de böyle bir sorun yok. İlk depozito seviyesinden teste nasıl başlanır ?
 
Lütfen ders kitaplarını PDF olarak indirebileceğiniz doğrudan bir bağlantı verin, aksi takdirde telefondaki tarayıcı sitedeki her şeyi görmez.
 
Zeleniy :
Lütfen ders kitaplarını PDF olarak indirebileceğiniz doğrudan bir bağlantı verin, aksi takdirde telefondaki tarayıcı sitedeki her şeyi görmez.
ders kitabı yok. sadece yardım.