[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 131

 
Vinin:

Continuación del tema

Anteriormente aquí https://www.mql5.com/ru/forum/111497

En el probador de MT4 en los resultados de optimización y en los gráficos de optimización no aparece nada, solo vacío. ¡Ayuda!
 
Sergey_Rogozin:

Estoy tratando de llenar un array unidimensional ValueArr[].

No estoy seguro de que sea correcto.

En cada tic, la función GetValue() produce un valor int. ¿Cómo relleno ValueArr[]?

¿Es correcto mi intento?

¿El tamaño de la matriz debe aumentar en uno en cada tic? Entonces su tamaño estará limitado por la memoria disponible del ordenador.

Aumenta el tamaño del array ValueArr[] utilizando la función ArrayResize() y añade los nuevos datos al array. De nuevo, ¿dónde quiere añadirlos? ¿Al principio o al final?

Si al principio, es necesario mover los datos escritos anteriormente, de lo contrario serán sobrescritos por los datos recién escritos.

Si al final, entonces:

Inite establece el tamaño del array = cero, y al inicio lo incrementa en 1 (size++), luego redimensiona el array ( ArrayResize(ValueArr, size);) y escribe los datos en la celda ValueArr[] indexada por size-1 (ValueArr[size-1]), obtenida por GetValue(); (ValueArr[size-1]=GetValue();).

 
artmedia70:

¿Quieres que el tamaño de la matriz aumente en uno en cada tic? Entonces su tamaño estará limitado por la memoria disponible del ordenador.

En cada tic, incrementa el tamaño del array ValueArr[] usando la función ArrayResize() y añade nuevos datos al array. De nuevo, ¿dónde quiere añadirlos? ¿Al principio o al final?

Si al principio, es necesario mover los datos escritos anteriormente, de lo contrario serán sobrescritos por los datos recién escritos.

Inite establece el tamaño del array = cero, y al principio lo aumenta en 1 (size++), luego redimensiona el array ArrayResize(ValueArr, size); y añade los datos obtenidos por la función GetValue() en la celda del array ValueArr[] indexada por size-1 (ValueArr[size-1]);

Sí, los datos de GetValue() se escribirán en cada tick en el array ValueArr[].

El tamaño de la matriz se incrementa con cada tic, pero se puede definir de una vez, por ejemplo, [10000].


Los elementos de la matriz se ordenan por orden de llegada, es decir, el primer elemento escrito es el primero de la "cola general",

el segundo elemento es el segundo en la cola.


Si lo he entendido bien, es así:


 int size=0;
 int ValueArr[size];
 
//-----------------

int start()
 {
   size++;
   ArrayResize(ValueArr, size);
   ValueArr[size-1] = GetValue();
   
 return();
 }

//-----------------

int GetValue()
 {
 .......
 return(Val);
 }

Espero haberle entendido bien.

 
Sergey_Rogozin:

Los elementos de la matriz están dispuestos por orden de llegada, es decir, el primero que se escribe es el primero en la "cola general",

por qué no utilizar una matriz de series de tiempo
 
eddy:
¿por qué no utilizar una matriz de series temporales?
¿Una serie temporal? ¿Hay alguna manera de que esto ayude a registrar algo como la historia de la teca?
 
Sergey_Rogozin:

Estoy tratando de llenar un array unidimensional ValueArr[].

No estoy seguro de que sea correcto.

En cada tic, la función GetValue() produce un valor int. ¿Cómo relleno ValueArr[]?

¿Es correcto mi intento?

Así que
 int ValueArr[size]; 

no puedes. Cuando se declara un array, se especifica una constante como tamaño o nada, y el array se considera entonces dinámico.

La forma correcta es esta

int ValueArr[]; 

int init()
{
   ArrayResize(ValueArr,size);
}
 
teca - no
 

Por favor, aconséjeme. ¿Existe una función en MT4 que tenga en cuenta el resultado de una operación anterior para abrir una nueva? En caso afirmativo, ¿cómo puedo especificarlo correctamente?

 
sto_mat:

Por favor, aconséjeme. ¿Existe una función en MT4 que tenga en cuenta el resultado de una operación anterior para abrir una nueva? En caso afirmativo, ¿cómo puedo especificarlo correctamente?


No existe tal función incorporada, tienes que escribirla tú mismo, mostré un ejemplo aquí:https://www.mql5.com/ru/forum/131277/page113
 
alsu:
Esto es

no puedes. Cuando se declara un array, se especifica una constante como tamaño, o nada, y el array se considera entonces dinámico.

La forma correcta es esta


Entonces supongo que eso es todo:

 int size, ValueArr[]; 
//-----------------
 int init()
 {
   ArrayResize(ValueArr,size);
 }
//-----------------

int start()
 {
   ValueArr[size-1] = GetValue();
 return();
 }

//-----------------

int GetValue()
 {
 .......
 return(Val);
 }

¿Esto es correcto?