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:
constint 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 veprogram 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.
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.
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 veprogram 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
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?
//+------------------------------------------------------------------+intOnCalculate ( constint rates_total,
constint prev_calculated,
constdatetime & time[],
constdouble & open[],
constdouble & high[],
constdouble & low[],
constdouble & close[],
constlong & tick_volume[],
constlong & volume[],
constint & spread[])
{
//--- variables of indicatorint i;
CopyClose (Symbol1_Name, PERIOD_M30 , 0 ,rates_total,close_1);
CopyClose (Symbol2_Name, PERIOD_M30 , 0 ,rates_total,close_2);
//--- main cyclefor (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)
{
caseMODE_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 ]);
}
caseMODE_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]);
}
caseMODE_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]);
}
caseMODE_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 );
}
//-----------------------------------------------------------------------------------------
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 ?
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.
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
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:
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
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ı?
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?
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.