![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
Has dicho que todo debería funcionar en MQL4.
Pero este script también se puede ejecutar en MQL5
Con exact=True y tiempo futuro debería devolver -1
Mi script también encontró un extraño error:
Este error se confirma con esta comprobación:
Así que tenía razón sobre la existencia de situaciones anormales en su algoritmo después de todo.Es bueno que finalmente hayas encontrado el error![](https://c.mql5.com/3/182/wink.gif)
Lo comprobaré, gracias.
Buenas noches a todos. Tal vez esté malinterpretando algo, pero aun así, no está muy claro qué es lo que falla en la función estándar, que ya se ha sugerido al principio de Bars(). Lo he usado siempre y no me ha causado ningún problema. Lo único es que puedes encontrarte con un "array fuera de rango" o un valor negativo cuando uses TimeCurrent(), pero entonces tienes que hacer una comprobación para ello. Ejemplos:
Buenas noches a todos. Tal vez esté malinterpretando algo, pero aun así, no está muy claro qué es lo que falla en la función estándar, que ya se ha sugerido al principio de Bars(). Lo he usado siempre y no ha causado ningún problema. Lo único es que puedes encontrarte con un "array fuera de rango" o un valor negativo cuando uses TimeCurrent(), pero entonces tienes que hacer una comprobación para ello. Ejemplos:
A juzgar por el número 32000000000 esta también es mi creación. UINT_MAX es simplemente más corto y tiene un aspecto más sólido. ))
La cuestión es que esta variante es más correcta, como resulta:
en lugar de
no hay casi ninguna diferencia externa. Pero la variante superior repite con mucha precisión la función estándar iBarShift de MQL4
A juzgar por el número 32000000000, esta también es mi creación. UINT_MAX simplemente parece más corto y más sólido. ))
La cuestión es que esta variante es más correcta, como resulta:
en lugar de
no hay casi ninguna diferencia externa. Pero la variante superior repite con mucha precisión la función estándar iBarShift de MQL4.
Entonces, ¿cuál es la más fácil y la correcta?
Entonces, ¿qué es lo más fácil y lo que hay que hacer?
Hasta aquí esta variante, pero ahora quiero complementarla para evitar el error de congelación de la función de Bares, sobre el que ya he informado al Service Desk.
La esencia de este error es que si en la función Bars tantostart_time comostop_time están dentro de una barra o están en el futuro (a la derecha de la barra cero), entonces esta función se cuelga durante más de 10 segundos.
Quizá más adelante haga una versión adecuada más rápida pero más engorrosa.
He decidido tomar un camino diferente.
No voy a rehacer el iBarShift, pero sí la función de Bares con fallos.
Y la nueva función iBars no sólo evitará el error de hipo, sino que también será más rápida que la Bars original.
Otros podrán utilizar esta función y los algoritmos ya existentes funcionarán más rápidamente.
Sólo necesito tiempo. No podré hacerlo hasta un día después.
He decidido tomar un camino diferente.
No voy a rehacer el iBarShift, pero sí la función de Bares con fallos.
Y la nueva función iBars no sólo evitará el error de hipo, sino que también será más rápida que la Bars original.
Otros podrán utilizar esta función y los algoritmos ya existentes funcionarán más rápidamente.
Sólo necesito tiempo. No podrá hacerlo antes de un día.
¡Muy bien! Estoy deseando que llegue.
De todo el análisis que he hecho, podemos concluir que este análogo completo del iBarShift:
es, con mucho, la más correcta y, al mismo tiempo, la más rápida y con el algoritmo más sencillo y corto.
Es bonito, pero algo me confunde...
tendrá que probarlo )
La función iBars es bastante engorrosa, pero sigo recomendando su uso en lugar de las Barras normales, hasta que MQ solucione el error de cuelgue que tiene.
El iBar se cuelga cuando lógicamente debería devolver 0. Por regla general, lo devuelve durante más de 10 segundos. En MQL4 no existe este error.
En la mayoría de las tareas, iBars funcionará más rápido que el Bars normal, ya que no sólo evitará el error, sino que intentará no utilizar las funciones Bars y SeriesInfoInteger siempre que sea posible debido al algoritmo de guardado de valores anteriores.
He probado esta función a fondo. Parece ser una copia completa de Bares.
Quizás se pueda hacer de una manera más elegante. Si tienes ganas, eres bienvenido. Si encuentra errores, los corregiremos.
Así que...
Entonces el análogo completo de la función iBarsShift tendrá la siguiente forma:
Y la variante sin último parámetro, que se utiliza en la gran mayoría de los casos tendrá esta forma:
Indicador que muestra el rendimiento de la función iBars en comparación con las Barras incorporadas y la función iBarShift de @Alain Verleyen
Tiempo de ejecución de la función en microsegundos.