Errores, fallos, preguntas - página 2000
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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. ;-)
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.
¿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 .
¿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.
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".
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...
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
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á.
No había ningún requisito, se demuestra la irrefutabilidad
¿Quién prohíbe añadir una sola línea?
¿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.
¿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?
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...