Errores, fallos, preguntas - página 2000

 
Alexey Viktorov:

Y no tiene sentido hacer esto ya en OnCalculate. ¿No hay ninguna razón para inicializar el array con algo y luego llenarlo con algunos valores de la fórmula? Cuando se añade una barra, y respectivamente una celda de la matriz, ¿qué sentido tiene llenarla con algo y luego inmediatamente con un valor de la fórmula o un valor vacío?

Esto es si la fórmula se aplica en todas las barras. ¿Y si sólo se aplica al último? Yo, por ejemplo, tengo un montón de índices que me permiten establecer el número de barras a calcular, ya que los cálculos pueden ser pesados. Se requiere la inicialización.

En general, si no quieres hacerlo, no lo hagas. No voy a discutir más. ;-)

 
fxsaber:

Así que no se trata de ArrayResize, sino de ArrayInitialize. ArrayResize garantiza ceros en MT4.

Pero, ¿y si se lee con atención? Permítanme citarlo de nuevo.

La inicialización de un array con la expresiónArrayInitialize(array, init_val) no significa la inicialización de los elementos de la reserva asignada para este array con el mismo valor. Cuando la función ArrayResize() aumenta posteriormente el tamaño de la matriz dentro de la reserva actual, los elementos cuyos valores no están definidos y la mayoría de las veces no son iguales ainit_val se añaden al final de la matriz.

ArrayInitialize - Операции с массивами - Справочник MQL4
ArrayInitialize - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArrayInitialize - Операции с массивами - Справочник MQL4
 
Stanislav Korotky:

¿Y si lo lees con atención? Lo citaré de nuevo.

Lainicialización de un array con la expresiónArrayInitialize(array, init_val) no significa la inicialización de los elementos de la reserva, asignados para este array. Cuando la función ArrayResize() aumenta posteriormente el tamaño de la matriz dentro de la reserva actual, los elementos cuyos valores no están definidos y la mayoría de las veces no son iguales ainit_val se añaden al final de la matriz .

Simplemente lo hicieron seguro para que fuera más difícil explicar que no hay init_val allí. Pero, por supuesto, se puede sustituir por "cuyos valores son nulos".
 
Stanislav Korotky:

¿Y por qué inventar escenarios tan poco realistas, esencialmente errores de programación MQL? Obviamente, la inicialización completa sólo se realiza una vez, o si se detecta un volcado de datos. En ese caso, sería más eficiente que lo hiciera el núcleo.

¿Dónde he dicho lo de la doble inicialización? Lo mismo, mencionado anteriormente, el llenado de todos los elementos en un bucle, estaba hablando. Si está presente, la inicialización es innecesaria y sólo desperdicia recursos.

Bueno, y si no estás contando todas las barras, entonces encárgate tú mismo de rellenar con ceros.

 
Stanislav Korotky:

Esto es si la fórmula se aplica en todas las barras. ¿Y si sólo se aplica al último? Yo, por ejemplo, tengo un montón de índices que me permiten establecer el número de barras a calcular, ya que los cálculos pueden ser pesados. Se requiere la inicialización.

En general, si no quieres hacerlo, no lo hagas. No voy a discutir más. ;-)

Aquí hay palabras de oro... Pero es mejor decir "donde no tengamos que hacerlo, no lo haremos". O viceversa "sólo lo haremos donde sea necesario".

 
fxsaber:

Sólo se inicializan los nuevos elementos del array. Y la cuestión sigue siendo la misma: resultados idénticos de una ejecución a otra, incluso si hay un error en el código (a menudo no es el tuyo).Más arriba di un ejemplo con la biblioteca de matemáticas.

La basura es mala.

Ni siquiera puedo encontrar palabras decentes para comentarlo.

Si le piden que se unte con ella... No creo que vayas a por ello. Digamos que la primera vez no sabes lo que es, ¿y la segunda?

¿Por qué pides a los desarrolladores que te protejan de la mierda? Protégete. O si tiene argumentos irrefutables de que es necesario, entonces no los oculte al público.

En mql3 se podían escribir tantos errores que ponían los pelos de punta... Y el EA no importa, funciona igual... ¿Funciona bien? ¿A quién le importa?

Por alguna razón no se discute la posibilidad de salirse de la matriz. Y parece que esto es un mal menor que la basura en un array o una variable. Bueno, ya no tenemos ese índice en la matriz como antes, así que adelante y sigamos trabajando. manos, volvamos al trabajo. Todo está resuelto...

 
Alexey Viktorov:

Entonces, ¿por qué exiges a los desarrolladores que te protejan de la mierda? Protégete. O si hay argumentos de peso para hacerlo, no los ocultes al público.

No hubo demandas, se demuestra la irrefutabilidad.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias de comercio

Bichos, errores, preguntas

fxsaber, 2017.09.12 16:17

#property strict

void OnStart()
{
  uchar Array[];
  
  const int Size = ArrayResize(Array, 10000);
  
  bool Res = false;
  
  for (int i = 0; (i < Size) && (!Res); i++)
    Res = Array[i];
    
  Print(Res);
}

En MT4 siempre devolverá false, porque sin basura es todo ceros. En MT5 es cierto.

Así que el mismo código en el probador de MT4 siempre mostrará resultados idénticos de una ejecución a otra. En un probador de MT5 no lo hará.

 
fxsaber:

No había ningún requisito, se demuestra la irrefutabilidad

¿Quién prohíbe añadir una sola línea?

  uchar Array[];
  const int Size = ArrayResize(Array, 10000);
  bool Res = false;
  ArrayInitialize(Array, 0);
  for (int i = 0; (i < Size) && (!Res); i++)
    Res = Array[i];
  Print(Res); 

¿O no sabes que falso es 0, todo lo demás es verdadero independientemente del signo? Tomas valores de las reservas de los arrays y quieres asegurarte de que hay 0. Bueno, en ese caso es razonable inicializar el array con ceros, pero ¿por qué cargar el sistema con nulos forzados cuando no es necesario?

Lo siento, pero este ejemplo es un absoluto disparate.

 
Alexey Viktorov:

¿Quién prohíbe añadir una sola línea?

No se trata de mí.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Bichos, errores, preguntas

fxsaber, 2017.09.12 16:52

¡Es horroroso pensar que alguna librería matemática (Include\Math -7Mb de código fuente) no se ha inicializado en uno/dos lugares! ¿Y cómo desenterrar este error, que en el probador de MT5 da diferentes ejecuciones individuales y en MT4 las mismas ejecuciones?

 
fxsaber:

No se trata de mí.

Lo único que queda por hacer es renunciar a todas las bibliotecas de los demás. Y nunca he mirado ni utilizado ninguna de esas bibliotecas. Es más fácil escribir todo lo que necesitas que rebuscar en un montón para comprobar si hay errores... Y para usar sólo dos o tres funciones...