Características del lenguaje mql5, sutilezas y técnicas - página 159
![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
Me pueden decir por favor, pls.
En el indicador el orden de las series, por ejemplo, close[], se establece mediante ArraySetAsSeries() una vez o de alguna otra manera?
¿Se hace en OnCalculate() o en OnInit()?
Me he encontrado con una situación confusa:
El orden en close[], establecido por AS_SERIES al entrar en el primer tick, en el siguiente tick cambia espontáneamente a normal, es decir, !AS_SERIES.
No he encontrado la razón de esto en el código.
en cualquier función que obtenga el escalar &arr[] no se puede estar absolutamente seguro de la dirección de indexación del array:-(
Además, si cambias la "serialidad" en el interior, esta dirección permanecerá después de que tu función termine... será un efecto secundario, que nadie espera
por eso, lamentablemente, cuando se obtiene un array para introducirlo en una función, hay que recordar su serialización, establecerla en una conveniente y devolver SIEMPRE el original al salir de la función
Este es un caso raro con OnCalculate, pero en la práctica solía ser llamado también desde otro código.
Además, si cambia la "serialización" internamente, esta dirección se mantendrá cuando su función termine...
Con eso contaba. Por eso puseArraySetAsSeries(close,true) en el bloqueOnCalculate(), que se ejecuta sólo una vez en el primer ingreso. Y esta "serialización" fue efectivamente fijada. Sin embargo, para mi sorpresa, en el segundo tick, y más allá, la "serialidad" ya era lo contrario.
Con OnCalculate es un caso raro, pero en la práctica también ha sido llamado desde otro código.
Yo no tengo tales exóticos y, además, no cambio la "serialización" de las series de tiempo y los arrays del buffer dentro del programa. Por lo tanto, me bastaría con fijarlo una vez, al principio del indicador. Pero, si no podemos estar seguros de que la "serialidad" de estas matrices se guarda, tenemos que establecerla al principio de cada bucle OnCalculate(). Esto parece ser algo completamente antinatural.
Es una buena idea generar una advertencia en tiempo de compilación.
Si nada ha cambiado desde los viejos tiempos, NULL != "" Mucha gente ha caído en esto antes.
Si nada ha cambiado desde los viejos tiempos, NULL != "" Mucha gente ha caído en esto antes.
No estamos hablando de eso.
Estamos hablando de otra cosa.
Entonces explica por qué no puede ser. Por qué
puede ser, pero
no puede ser.
Entonces explica por qué no puede ser.
El script de arriba lo muestra.
La secuencia de comandos anterior lo demuestra.
Si lo hiciera, no habría preguntas. Siempre piensas que todos los que te rodean deberían leer tu mente, o estar mejor formados que tú en programación.
Si lo hiciera, no habría preguntas. Siempre piensas que todo el mundo debería leer tu mente, o ser más hábil que tú en la programación.
No entiendo las razones de esta reacción. El escueto código demuestra la función al 100%.
No entiendo las razones de esta reacción. El escueto código demuestra la función al 100%.
Reacción normal. No entiendo sus códigos, pedí una explicación, y la respuesta es...
NULL es una ambigüedad tal que hay que tratarla con cuidado. Especialmente cuando se aplica a variables de cadena.
De la documentación
Por lo tanto, en este ejemplo NULL no significa que la longitud de la cadena sea igual a cero, sino que la variable no está inicializada.
En su ejemplo
la variable se inicializa. No me queda claro cómo se inicializa y no tengo ganas de solucionarlo.
En consecuencia,
Indica que la variable está inicializada. De nuevo, con qué es la gran pregunta. ¿Por qué crees que es imposible inicializar una variable por NULL?
Aparentemente esta inicialización hace que la longitud de la cadena sea igual a cero, que es lo que dice esta comprobación sobre