Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 763
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
Así parece en los ciclos, y se puede prescindir de la función
Gracias.
Sin embargo, eliminada la función - los frenos permanecen.... maldita sea.
Gracias.
Sin embargo, eliminada la función - los frenos permanecen.... Maldita sea.
Una vez empecé a reescribir el programa desde 4=>5, entonces en 4, sustituí todas las construcciones como Low[1], Time[0] y otras por otras modernas, es decir,CopyLow,CopyTime, el programa se hizo más rápido incluso en 4. Ahora no utilizo las construcciones antiguas, sólo las nuevas. Así que el código es fácilmente transportable a la 5ª plataforma, sólo hay que cambiar las funciones de comercio
Una vez que empecé a reescribir el programa de 4=>5 y luego reemplacé todas las construcciones como Low[1], Time[0] y otras con las modernas, es decir,CopyLow,CopyTime, el programa se hizo más rápido incluso en 4. Ahora no utilizo las construcciones antiguas, sólo las nuevas. Así que el código es fácilmente transportable a la 5ª plataforma, sólo hay que cambiar las funciones de comercio
¿No esllenar la matriz en cada estornudo un consumo de recursos?
¿Tal vez tenga sentido copiar la información en el array en la apertura de la barra, y luego tomarla de ahí a medida que el código se desarrolla? Opero en la apertura de la barra.
¿No se consumen recursos alllenar una matriz con cada estornudo?
¿Tal vez tenga sentido copiar la información en la matriz cuando se abre la barra y luego tomarla de ahí a medida que el código avanza? Opero en la apertura de la barra.
El array se puede llenar en una nueva barra, consumirá menos recursos. Si trabajas con iLow[1] en varios sitios, deberías almacenarlo en una variable una vez y leerlo en lugar del array.
Supongamos que esto
Entonces trabajamos con las variablesTIEMPO_0 yTIEMPO_1 en lugar deTM[0] yTM[1].Array puede ser llenado en una nueva barra, tomará menos recursos. Si se trabaja con iLow[1] en varios lugares, por ejemplo, es conveniente escribirlo una vez en una variable, y leer la variable en lugar del array.
Supongamos que
Pero aún así, MT4 es mucho más rápido - estoy decepcionado.
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading
Bichos, errores, preguntas
Aleksey Vyazmikin, 2017.07.21 15:07
¿Por qué fantaseas? Entendí tu idea, y confirmé que funciona, y tendrá efecto si la solicitud se hace una vez y si se sabe cuántas barras se necesitan para que el EA funcione.
¿O tal vez sugirió utilizar la estructura de otra manera? Entonces, por favor, explíquelo, ¡pero no se ofenda!
Nada de fantasías. Si necesita obtener 2 o más parámetros de una vela, entonces usando las funciones de sus mensajes/preguntas tendremos que llamar a estas funciones por separado para cada parámetro de la vela. Eso es 2 o más veces para producir Copy***(), pero usando CopyRates() sólo necesita una llamada de Copy.
En cuanto al número a copiar, esa es otra cuestión. Tal vez debamos calcular primero la barra que contiene el valor del indicador requerido y luego copiarla. Si no recuerdo mal, estábamos hablando de una cantidad desconocida para copiar. ¿De qué tipo de fantasía estamos hablando?
En casos extremos, podemos copiar, por ejemplo, 10 compases y buscar entre ellos. Si no se encuentra, copiamos otros 10 compases. Copiar es una operación que consume mucho tiempo, es más barato copiar un array.
En general, hay muchas variaciones. No puedes escribir todo eso en la documentación y no será documentación en absoluto. Lo enseñan en las clases de programación. Pero, por desgracia, no todos los profesores son capaces de hacerlo y no todos los alumnos quieren entenderlo en las clases. Y el comienzo es en las clases de aritmética de 2º a 5º curso, cuando el profesor exige una explicación detallada del problema. Pero aquí los problemas son los mismos.
No hay nada de lujo. Si necesita obtener 2 o más parámetros de una vela, entonces usando las funciones de sus mensajes/preguntas debe llamar a estas funciones por separado para cada parámetro de la vela. Eso es 2 o más veces para ejecutar Copy***(), pero usando CopyRates() sólo necesitará una llamada de Copy.
En cuanto al número a copiar, esa es otra cuestión. Tal vez, deberíamos calcular primero en qué barra está disponible el valor requerido del indicador, y luego copiarlo. Si no recuerdo mal, se habló de una cantidad desconocida para copiar. ¿De qué tipo de fantasía estamos hablando?
Y, como último recurso, podemos copiar, por ejemplo, 10 compases y buscar en ellos y, si no lo encontramos, copiamos otros 10 compases. Copiar es una operación bastante cara; sería más barato buscar en la matriz.
Hay muchas variantes en este caso. Todo esto no se puede escribir en la documentación; en realidad, ya no será documentación. Lo enseñan en las clases de programación. Pero, por desgracia, no todos los profesores saben cómo hacerlo y no todos los alumnos quieren entenderlo en las clases. Y el comienzo es en las clases de aritmética de 2º a 5º curso, cuando el profesor exige una explicación detallada del problema. Pero aquí los problemas son los mismos.
Sobre la fantasía - era una respuesta a tu afirmación "En lugar de tratar de entender lo que se dijo, para averiguar lo que se obtiene, haces algunas objeciones increíbles", y no al hecho de que la versión que ofreciste es del campo de la fantasía.
Entiendo perfectamente su concepto, y estaba incrustado en la respuesta a usted.
Sin embargo, no entiendo muy bien cómo propones trabajar con una cantidad desconocida de datos, ¿puedes darme un ejemplo en forma de código?
Por favor, ayude a auditar y optimizar el indicador usando este enlace https://www.mql5.com/ru/code/16805 - el problema es que el indicador empieza a ralentizarse mucho cuando aparece un gran número de barras - aparece al hacer pruebas.
Quiero saber cómo hacerlo funcionar para que no se calcule en cada tick, sino sólo en la apertura de la barra? El método del Asesor Experto no es adecuado - después del primer tick todos los valores desaparecen y sólo aparecen en la siguiente barra...
Sobre la fantasía - era una respuesta a tu afirmación "En lugar de tratar de entender lo que se dijo, para averiguar lo que funcionaría, se lanzan algunas objeciones increíbles", y no que la opción que propones sea del reino de la fantasía.
Entiendo perfectamente su concepto, y estaba incrustado en la respuesta a usted.
Sin embargo, no entiendo muy bien cómo propones manejar una cantidad desconocida de datos, ¿puedes darme un ejemplo en forma de código?
La respuesta se dio antes...
Alexey Viktorov:
Como último recurso, puedes copiar, por ejemplo, 10 compases a la vez y buscarlo. Si no lo encuentras, copias otros 10 compases a la vez. La copia es una operación costosa, es más barato buscar en el array.
Pero es mejor que no intentemos obtener el máximo número de barras de la matriz, sino que intentemos hacerlo con una copia.
No voy a escribir un ejemplo de código. Un programador normal sólo necesita una pista. He aquí un ejemplo de algoritmo:
Así, es posible encontrar dos intersecciones en una copia y un ciclo, si es necesario. Incluso no es necesario en ArraySetAsSeries() porque al encontrar el cruce es posible y, en mi opinión, mejor recordar la hora de la barra, no su número. Aunque, conociendo la hora del bar, no hay dificultad para determinar su número.
Pregunta: ¿Qué es más rápido, un ciclo con la copia del buffer del indicador en 1 valor y la copia de la barra alta en 1 y la comparación de esos valores o una sola copia de una cierta cantidad y la comparación de los valores de las dos matrices entre sí?
Acabo de escribir esto ayer:
Tarea:
en cada tick obtener los elementos "InpCountCopy" open, high, low, close y time.
La puesta en práctica:
Características:
Puede elegir cómo comprobarlo: en OnTick o en OnTimer (1 segundo).