Sólo se pueden especificar constantes en las dimensiones
Las constantes tampoco funcionarán, habrá un error:
constint AA =11;
ArrWe m[AA];
Especificaciones de acceso
Los especificadores de acceso indican al compilador cómo acceder a las variables, los miembros de las estructuras o las clases.
El especificadorconst declara que una variable es una constante y no permite que el valor de esta variable cambie en el proceso de ejecución del programa. Se permite inicializar una variable una vez al declararla.
papaklass: No lo entiendo. Pongo un EA en el gráfico y aparece este mensaje en la pestaña "Expertos". El Asesor Experto continúa su trabajo de todos modos. Esto no es un error, sino una advertencia. ¿Una advertencia sobre qué?
Es un error en tiempo de ejecución - significa una fuga de memoria. No se libera la memoria ocupada por una cadena en algún lugar. Lo más probable es que se trate de una estructura o clase que no se borre después de la nueva. Es necesario buscar en el código para ser más específico.
Los especificadores de acceso indican al compilador cómo acceder a las variables, los miembros de las estructuras o las clases.
El especificadorconst declara que una variable es una constante, y no permite que el valor de esta variable sea cambiado en el proceso de ejecución del programa. Se permite inicializar una variable una vez al declararla.
Una variable constante no es una constante. Se puede inicializar una vez, es decir, es una variable para la que se asigna memoria.
La tarea de las constantes es calcularse e insertarse en el código sin ocupar la memoria en tiempo de ejecución.
La constante será const AA=11.
Por lo tanto, el compilador será jurado. Si const AA=11, no se quejará.
En el último intervalo en ChannelPeriod = 100; hay un cambio brusco hacia arriba en las lecturas del indicador, yendo más allá de las últimas 100 barras todo se muestra normalmente.
¿Alguien sabe cómo solucionarlo?
//+------------------------------------------------------------------+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);
}
//-----------------------------------------------------------------------------------------
Por qué, cuando pulso el botón "Inicio", el comprobador no realiza la prueba desde el nivel de depósito inicial, sino desde el nivel en el que terminó la última prueba. No existe ese problema en la 4. ¿Cómo empezar a probar desde el nivel de depósito inicial?
Por favor, denme un enlace directo para descargar los libros de texto en formato PDF porque el navegador de mi teléfono no puede ver todo lo que hay en la página web
Zeleniy: Por favor, denme un enlace directo donde se puedan descargar los libros de texto en formato PDF porque el navegador de mi teléfono no puede ver todo lo que hay en la página web.
Encontré una "confusión".
¿Por qué al compilador no le gusta la definición de la segunda variable b?
Y en general, ¿cómo puedo manejar esta situación?
No le gusta la definición.
Sólo escribe otro error - tipo de variable incorrecto para la dimensión del array
Sólo se pueden especificar constantes en las dimensiones
no es la definición lo que no le gusta.
También escribe otro error - tipo de variable incorrecto para la dimensión del array
Sólo se pueden especificar constantes en las dimensiones
Las constantes tampoco funcionarán, habrá un error:
Especificaciones de acceso
Los especificadores de acceso indican al compilador cómo acceder a las variables, los miembros de las estructuras o las clases.
El especificadorconst declara que una variable es una constante y no permite que el valor de esta variable cambie en el proceso de ejecución del programa. Se permite inicializar una variable una vez al declararla.
Me refería sólo a dos opciones
int Arr[100]
o
#define r 100
int Arr[r]
Para el resto ArrayResize
No lo entiendo. Pongo un EA en el gráfico y aparece este mensaje en la pestaña "Expertos". El Asesor Experto continúa su trabajo de todos modos. Esto no es un error, sino una advertencia. ¿Una advertencia sobre qué?
tampoco funcionará, habrá un error:
Especificaciones de acceso
Los especificadores de acceso indican al compilador cómo acceder a las variables, los miembros de las estructuras o las clases.
El especificadorconst declara que una variable es una constante, y no permite que el valor de esta variable sea cambiado en el proceso de ejecución del programa. Se permite inicializar una variable una vez al declararla.
Una variable constante no es una constante. Se puede inicializar una vez, es decir, es una variable para la que se asigna memoria.
La tarea de las constantes es calcularse e insertarse en el código sin ocupar la memoria en tiempo de ejecución.
La constante será const AA=11.
Por lo tanto, el compilador será jurado. Si const AA=11, no se quejará.
¿Puede decirme cuál es el problema?
En el último intervalo en ChannelPeriod = 100; hay un cambio brusco hacia arriba en las lecturas del indicador, yendo más allá de las últimas 100 barras todo se muestra normalmente.
¿Alguien sabe cómo solucionarlo?
Por favor, denme un enlace directo donde se puedan descargar los libros de texto en formato PDF porque el navegador de mi teléfono no puede ver todo lo que hay en la página web.