Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 116
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
El error estaba en el manejador del indicador creado en la función OnTick y los datos se copian en el mismo tick. Lo he entendido por la noche, ahora trataré de transferir las asas de los indicadores a la función OnInit.
No funcionó. Este es el código
En el registro aparecen los siguientes mensajes
2013.04.13 15:21:31 2010.01.04 00:00:01 6.187448020344988e-005 0
2013.04.13 15:21:31 2010.01.04 00:00:01 6.187448020344988e-005 0
2013.04.13 15:21:31 2010.01.04 00:00:01 6.187448020344988e-005 0
Y siempre es así. No parece que haya un error de copia.
Pero hasta ahora no tiene ni una comprobación para la creación exitosa de asas, ni una comprobación para el cálculo exitoso de los indicadores y la comprobación de la copia. La idea de trasladar la inicialización de las asas a OnInit() es correcta.
Además, añade la línea Print(MacdArray[0]) al principio de OnTick() - para ver qué valor basura contiene el array antes de empezar a copiar los buffers.
Para añadir. Por supuesto, usar GetLastError() después de la propia función puede ser una peculiaridad del estilo de programación. Pero igual lo comprobaría basándome en el ejemplo de la Referencia. Si no me equivoco, un valor nulo de GetLastError() no siempre significa que la función haya funcionado correctamente.
Pero hasta ahora no tiene ni una comprobación para la creación exitosa de asas, ni una comprobación para el cálculo exitoso de los indicadores y la comprobación de la copia. La idea de trasladar la inicialización de las asas a OnInit() es correcta.
tol64:
Pero sólo por primera vez. Si en alguna parte del programa resulta que algún manejador no es válido, hay que intentar obtenerlo de nuevo. Por lo tanto, no podemos decir que el código escrito para obtener asas en OnInit() resolverá completamente el problema y será 100% correcto. ))
He comprobado cuántos datos se han copiado con la función CopyBuffer, siempre escribe 1. Y no hay ningún error, pero los datos siguen siendo erróneos.
Tengo este resultado de este código en el probador:
//---
Lo único que hice antes de la prueba fue convertir los valores de los indicadores antes de la salida al registro:
¿Estás diciendo que la idea de mover la inicialización del manejador a OnInit() desde OnTick() es errónea por sí misma?
Tengo este resultado de este código en el probador:
//---
Lo único que hice antes de la prueba fue simplemente convertir los valores del indicador antes de la salida al registro:
¿Y sin "si"? ¿Y en relación con esta situación particular? El mango del indicador se creó en la función OnTick durante cada tick, y los datos se copian durante el mismo tick. Significa que se ha solicitado cada vez el mismo indicador, sin comprobar su validez/invalidez. En este contexto, ¿seguirás argumentando que la idea de transferir la inicialización de los handles a OnInit() desde OnTick() es errónea por sí misma?
PS. Parece que has ayudado al hombre, por lo que la pregunta puede considerarse agotada.