¿Alguien sabe cómo desarrollar un indicador multidivisa? - página 2

 

La primera vez que llama a ACR obtiene el error 4066. Eso es todo. Llámalo de nuevo y obtendrás un recuento válido pero sin datos en las matrices. Al acceder a las matrices no se obtiene un error de fuera de rango.

 
WHRoeder:

La primera vez que se llama a ACR se obtiene el error 4066. Eso es todo. Llámalo de nuevo y obtendrás un recuento válido pero sin datos en las matrices. Al acceder a los arrays no se produce un fuera de rango.

Tengo que discrepar, ya que no veo lo que has descrito. Sin embargo, esto puede deberse al hecho de que la mayor parte del tiempo en mi uso de Real Live, todos los datos están normalmente disponibles, y en mi entorno de demostración/prueba he generado ".hst" y ".fxt" a partir de datos externos.

Intentaré recrear las condiciones de "borrón y cuenta nueva" sin datos locales y veré si puedo replicar lo que describes.

 

He recreado las condiciones de "borrón y cuenta nueva" y he codificado un pequeño script para probarlo en un bucle continuo sin función de reposo. Ejecuté el script dos veces contra un gráfico de "EURUSD", pero hice que el código solicitara datos en "NZDCAD" que nunca fue cargado antes.

Los resultados de la primera ejecución son los siguientes.

  • Durante las primeras 73607 iteraciones (que duraron aproximadamente 516ms), el "ArrayCopyRates" siempre devolvió un conteo de -1, y generó un error 4073 (Error 4073 - No hay datos en el historial). El tamaño del array fue siempre 0 durante estas iteraciones.

  • Finalmente, en la 73608ª iteración, devolvió un recuento de 512 y el tamaño del array se estableció en 512 también y el tiempo para el elemento 0 tenía un tiempo válido (y no 0) y no se generó ningún error.
Luego hice una segunda ejecución del Script, ya que los datos ya estaban cargados y estos fueron los resultados:
  • Durante la primera y única iteración, el "ArrayCopyRates" devolvió un conteo de 2048 pero generó un error 4066 a pesar de que el conteo devuelto era válido (Error 4066 - Requested history data is in updating state). El tamaño del Array también era de 2048 y el tiempo del elemento 0 era válido (y no 0).

  • He
adjuntado un archivo ZIP con el script de prueba así como los archivos de registro resultantes.

Os dejo que saquéis vuestras propias conclusiones.

¡PS! Mi conclusión, es combinar todas las pruebas antes de continuar. (es decir, probar el código de retorno de "ArrayCopyRates", comprobar los códigos de error, probar el tamaño del array MqlRates y (como medida de seguridad como sugiere WHRoeder ) probar también la validez de la fecha de los elementos del array.

EDIT: Si hubiera utilizado únicamente la prueba "pair[0].time == 0", habría dado un error de índice de matriz (y provocado la detención de la ejecución) durante las primeras iteraciones de la primera ejecución cuando no había datos disponibles. Por lo tanto, mantengo mi afirmación de que hay que comprobar el código de retorno y el tamaño del array, pero estoy de acuerdo en que la prueba de tiempo puede ofrecer un nivel de verificación posterior una vez que se hayan cumplido las demás condiciones.

Archivos adjuntos:
testacr.zip  217 kb
 
Es extraño, ya que no ha habido ni un solo comentario del cartel original desde que se inició este hilo. ¿Acaso está siguiendo esto?
 
FMIC:
  • Durante las primeras 73607 iteraciones (que duraron aproximadamente 516ms), el "ArrayCopyRates" siempre devolvió una cuenta de -1, y generó un error 4073 (Error 4073 - No hay datos de la historia). El tamaño del array era siempre 0 durante estas iteraciones.
  • Finalmente, en la 73608ª iteración, devolvió un recuento de 512 y el tamaño del array se fijó en 512 también y el tiempo del elemento 0 tenía un tiempo válido (y no 0) y no se generó ningún error.
Esto es justo el comportamiento opuesto a la versión pre-build 600.
Esto es lo que yo esperaba originalmente pero se había demostrado que estaba equivocado.
Finalmente lo han hecho bien y lo tendré en cuenta para el futuro.
 
FMIC:


EDIT: Si hubiera utilizado únicamente la prueba "pair[0].time == 0", habría dado un error de índice de matriz (y provocado la detención de la ejecución) durante las primeras iteraciones de la primera ejecución, cuando no había datos disponibles. Por lo tanto, mantengo mi afirmación de que hay que comprobar el código de retorno y el tamaño del array, pero estoy de acuerdo en que la prueba de tiempo puede ofrecer un nivel de verificación posterior una vez que se hayan cumplido las demás condiciones.


Todo esto es muy útil, gracias por la investigación y los resultados.

 
FMIC:
Es extraño, ya que no ha habido ni un solo comentario por el cartel original desde que se inició este hilo. ¿Acaso está siguiendo esto?

Por qué debería seguir este mensaje, los mensajes posteriores han ido más allá del nivel de comprensión para la mayoría de la gente en este foro.

Que tal si tratas de responder a la pregunta de manera simple y precisa.

Ahora, para responder a la pregunta original, sólo en caso de que haya una pequeña posibilidad de que el cartel original todavía está alrededor, Google es su amigo.

 
4x_Gypsy:

¿Qué tal si tratamos de responder a la pregunta de manera simple y precisa?

Hemos respondido a la pregunta que era en esencia:"Quiero elegir ENTRE 1 y 10 monedas diferentes y 5 barras para cada moneda."

Dado que no proporcionó ningún código de ejemplo, ni más detalles, no fue posible dar una respuesta simple y precisa. Todo lo que pudimos hacer fue proporcionar respuestas generales y un conocimiento de los problemas a los que se enfrentaría. Le respondimos que debería utilizar"ArrayCopyRates()" o usar "iFunctions()" y que tendría que tener en cuenta el retraso y los errores inherentes que obviamente obtendría. Luego complementamos la información discutiendo las trampas y problemas, como la falta de la función sleep en los Indicadores y los diferentes comportamientos entre las construcciones pre-600 y post.

Si usted dice, todo esto estaba por encima de su cabeza, todo lo que tenía que hacer era publicar algo a los efectos de: "¡Lo siento, no entiendo! ¿Puede simplificarlo para mí?". Pero como nunca hubo tal post (ni ningún otro en realidad), la discusión continuó en la creencia de que él y los demás eran capaces de seguirla.

Ahora, como escribiste, él podría usar Google y encontrar muchos Indicadores Multi-tiempo por ahí, pero si todavía no sabe CÓMO funciona, no llegará muy lejos en hacer que su indicador funcione como él desea.

EDIT: ¡PS! ¡NB! Después de pensarlo de nuevo, WHRoeder realmente proporcionó un código esqueleto como solución al problema. No se puede ser más simple y preciso que eso, dada la falta de detalles en la pregunta original.

 
FMIC:

Hemos respondido a la pregunta que era en esencia:"Quiero elegir ENTRE 1 y 10 monedas diferentes y 5 barras para cada moneda."

Dado que no proporcionó ningún código de ejemplo ni más detalles, no fue posible dar una respuesta sencilla y precisa. Todo lo que pudimos hacer fue proporcionar respuestas generales y un conocimiento de los problemas a los que se enfrentaría. Le respondimos que debería utilizar"ArrayCopyRates()" o usar "iFunctions()" y que tendría que tener en cuenta el retraso y los errores inherentes que obviamente obtendría. Luego complementamos la información discutiendo los escollos y problemas, como la falta de la función sleep en los Indicadores y los diferentes comportamientos entre las construcciones pre-600 y post.

Si dices que todo esto estaba por encima de su cabeza, todo lo que tenía que hacer era publicar algo al efecto de: "¡Lo siento, no lo entiendo! ¿Puede simplificarlo para mí?". Pero como nunca hubo tal post (ni ningún otro), la discusión continuó en la creencia de que él y otros eran capaces de seguirla.

Ahora, como usted escribió, él podría usar Google y encontrar muchos Indicadores Multi-tiempo por ahí, pero si todavía no sabe CÓMO funciona, no llegará muy lejos en hacer que su indicador funcione como él desea.

¡EDIT: PS! ¡NB! Después de pensar en ello de nuevo, WHRoeder hizo realmente proporcionar el código esqueleto como una solución al problema. No se puede ser más simple y preciso que eso, dada la falta de detalles en la pregunta original.

La pregunta era "¿Alguien sabe cómo desarrollar un indicador multidivisa?".

La respuesta obvia fue "Sí, nosotros (FMIC y WHRoeder) lo sabemos, sólo mire cómo lo discutimos", sin preguntar o esperar detalles sobre lo que el OP realmente necesita.

Lo que él/ella quería hacer con ese indicador era "Quiero elegir ENTRE 1 y 10 monedas diferentes y 5 barras para cada moneda".

Sí se proporcionaron ejemplos. Pero se proporcionaron como más de concurso entre ustedes dos. ¿Interesante debate? Sí. He aprendido algo que no sabía. ¿El ejemplo fue proporcionado de tal manera que un novato puede ser capaz de entender? No tanto. La gente viene a este foro debido a la falta de asistencia y tutoriales de MetaTrader. La mayoría de las personas que publican aquí tienen una comprensión mínima de lo que desean hacer y cuando la discusión va demasiado lejos de su comprensión se alejan. Lo cual es una vergüenza absoluta.

Una gran pista fue "Pero no sé cómo hacer esto".

La falta de cualquier tipo de respuesta por parte del OP es una indicación de que hay algo mal. Mi "suposición" es que el OP se frustró por la falta de comprensión y abandonó el hilo. Hubo un tiempo, hace años, en que hice lo mismo. Aprendí más en diferentes sitios/foros que en este porque nadie se tomaba el tiempo de darse cuenta de lo nuevo que era y continuamente ponía ejemplos y tenía discusiones completamente por encima de mi entendimiento en ese momento.

Pero nada de eso importa ya que el OP ha desaparecido.

De nuevo esto es una pena, quien sabe esta persona puede ser o convertirse en el próximo gurú que este y otros foros necesitan tanto.

 
4x_Gypsy:

La gran pista fue "Pero no sé cómo hacer esto".

La falta de cualquier tipo de respuesta del OP es una indicación de que hay algo mal. Mi "suposición" es que el OP se frustró por la falta de comprensión y abandonó el hilo. Hubo un tiempo, hace años, en que hice lo mismo. Aprendí más en diferentes sitios/foros que en este porque nadie se tomaba el tiempo de darse cuenta de lo nuevo que era y continuamente ponía ejemplos y tenía discusiones completamente por encima de mi entendimiento en ese momento.

Desde tu punto de vista puede que tengas razón, por otro lado he visto muchas preguntas que simplemente se respondían si uno se arriesga a echar un vistazo rápido en las documentaciones y realmente me siento como un tonto respondiendo a ese tipo de preguntas una y otra vez.

Además, aquí hay un google y una opción de búsqueda. Si no sé cómo hacer algo, este sería mi siguiente paso para intentar resolver el problema por mi cuenta.

Ahora al tema de este hilo: "...cómo desarrollar un sistema multidivisa". Eso me suena a "enséñame a codificar gratis", que es bastante parecido a "¿puedes codificar eso para mí?". Todo esto no es del todo serio.

Como hay tanto código disponible de forma gratuita mi respuesta a esto habría sido: "¡Usa google o la búsqueda aquí para encontrar código gratuito y cámbialo!".

Si la gente se siente ofendida por esto creo que es su problema.

Razón de la queja: