Características del lenguaje mql5, sutilezas y técnicas - página 235
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
Si deja de funcionar, sería bueno saber si es correcto.
Si haces punteros en lugar de objetos, la versión antigua también funcionará.
Si ha dejado de funcionar, es bueno saber si es lo correcto.
Si haces punteros en lugar de objetos, la versión antigua también funcionará.
¡Buen punto y gracias por el consejo!
Sí, efectivamente, la situación se resuelve perfectamente con un puntero:
Los aficionados a los algoritmos rápidos. Los que luchan por nanosegundos :)
Tarea: Encontrar la hora de apertura de la barra según la hora y TF dados, cuando se sabe que la barra existe en ese momento. Por ejemplo, por la hora de apertura y cierre de posiciones.
La mayoría de los programadores utilizarán una combinación de iTime e iBarShift. Esta será la implementación más lenta, especialmente tal implementación requiere un historial actualizado de datos cargados o matrices peinadas. Además, este enfoque puede generar errores si falta el historial requerido.
Los programadores más avanzados resolverán este problema mediante la estructura MqlDateTime y la función TimeToStruct(). Esta no es una mala solución y es suficientemente rápida.
Pero hay una tercera solución, que es varias veces más productiva que la anterior:
La principal dificultad de este algoritmo es calcular la hora de principio de mes (resaltada en verde) Por favor, no intente entender el funcionamiento del algoritmo. Hay magia, que es el resultado de ir de lo simple a lo complejo. El camino inverso de lo complejo a lo simple será mucho más difícil de recorrer.
La ganancia de rendimiento también es proporcionada por el algoritmo de obtener segundos en una barra desde el TF en lugar de la función estándar PeriodSeconds() - resaltada en color amarillo.
Adjunto un script de prueba que calcula y compara el rendimiento de los tres métodos:
La suma de comprobación con iBarShift no coincidirá , porque iBarShift trabaja con barras reales. La suma de comprobación coincidirá sólo en los timeframes MN1 y W1, porque no hay agujeros en el historial de dichas barras.
El rendimiento será mayor si utiliza un paso de tiempo pequeño en el bucle (menos de un día) cuando el algoritmo empieza a trabajar para guardar los cálculos anteriores:
Los valores excesivos para el algoritmo a través de iBarShift (resaltados en azul) son causados por la falta actual de historia necesaria o TFs calculados por la matriz, que inicia su carga.
Después de la carga el resultado será el siguiente:
Los aficionados a los algoritmos rápidos. Los que luchan por los nanosegundos :)
...😮😲😳🥴🤪
...
ah...
mmm....
oooh....
gkghm... No pensé que mi simple pregunta saldría así.
Justo así. Oh.
😮😲😳🥴🤪
...
ah...
mmm.
ohhhh....
ejem. No pensé que mi simple pregunta saldría así.
Oh.
Sí, Artem, me engañaste por un momento.
Era un interés deportivo.
Espero que le sea útil a alguien, incluyéndome a mí. :))
Sí, Artem, me has engañado por un tiempo.
He trabajado en el interés deportivo.
Espero que sea útil para alguien, y yo entre otros. :))
Por supuesto que sí. Estupendo. Gracias de nuevo.
S.F. Esto me ha hecho gracia: "cuenta correctamente sólo hasta el 28.02.2100 !!!!".
¿Qué hacemos después?
Por supuesto que será útil. Estupendo. ¡Gracias de nuevo!
S.F. Esto me ha hecho gracia: "cuenta correctamente sólo hasta el 28.02.2100 !!!!".
¿Qué hacemos después?
jaja.
Dudo que este algoritmo tenga demanda durante 75 años. Los ordenadores cuánticos probablemente ya dominarán el mundo, con una programación completamente diferente.
Para ser honesto, era perezoso tener en cuenta el calendario gregoriano. El año 2000 era muy importante, el 2100 ya no lo es.
jaja.
dudo que este algoritmo tenga demanda dentro de 75 años. Los ordenadores cuánticos probablemente ya dominarán el mundo, con una programación completamente diferente.
para ser honesto, fue perezoso tener en cuenta el calendario gregoriano por completo. El año 2000 era muy importante, el 2100 ya no lo es.
Para MN puedes usar un array precalculado, no hay casi nada ahí dentro
Ln2(12 meses * cien años)...11 if`'s y comparaciones en busqueda binaria, pero sin otros calculos.
Puedes usar un array precalculado para MN, apenas hay datos ahí.
Ln2(12 meses * cien años)...11 if`'s y comparaciones en búsqueda binaria, pero sin otros cálculos.
Puedes usar un array precalculado para MN, apenas hay datos ahí.
Ln2(12 meses * cien años)...11 if`'s y comparaciones en búsqueda binaria, pero sin otros cálculos.
ah, lo leí mal al principio.
No, estás equivocado. El aumento de rendimiento no funcionará. Usted todavía estará atascado en los cálculos. Y el acceso a los elementos del array ralentiza mucho el algoritmo.