No está optimizado para consultas múltiples, por lo que la comparación de tiempos es irrelevante. @nicholishen publicó una buena biblioteca optimizada para la llamada masiva.
En realidad muestra justo lo contrario, mi versión es la única que es correcta. (También el iBarShift1 original de este código es correcto).
No está optimizado para múltiples peticiones, por lo que la comparación de tiempos es irrelevante. @nicholishen publicó una buena biblioteca optimizada para la llamada masiva.
Многие ищут функцию iBarShift, которая была в языке MQL4 (например, 1,2,3). В языке MQL5 ее нет, но есть все возможности для ее реализации в виде библиотеки. В качестве альтернативы многие программисты предложили свои варианты реализации этой функции на MQL5. Обнаружилось, что все 4 версии содержат ошибки (не воспроизводят в точности работу...
No está optimizado para consultas múltiples, por lo que la comparación de tiempos es irrelevante. @nicholishen publicó una buena biblioteca optimizada para la llamada masiva.
En realidad muestra justo lo contrario, mi versión es la única que es correcta. (También el iBarShift1 original de este código es correcto).
No está optimizado para múltiples peticiones, por lo que la comparación de tiempos es irrelevante. @nicholishen publicó una buena biblioteca optimizada para la llamada masiva.
No hablo del tiempo de procesamiento, sino del número de barras.
En la imagen se puede ver que a las 8:37 el código piensa que la barra más cercana es la del día anterior 23:00 , pero en realidad la barra más cercana es la de las 10:00. Está más cerca tanto matemática como lógicamente.
No hablo del tiempo de procesamiento, sino del número de barra.
La imagen muestra que a las 8:37 el código considera que la barra más cercana es la del día anterior a las 23:00, pero en realidad la barra más cercana es la de las 10:00. Está más cerca tanto de las matemáticas como de la lógica.
Escribí esto hace mucho tiempo. Ya no lo recuerdo, pero algo me confundió. De todos modos, ahora sólo he encontrado una situación anormal. Cuando los datos de los símbolos aún no están cargados pueden devolver -1 y deberían devolver 0.
Esto se puede comprobar utilizando el script para MQL4 que adjunto.
Este script toma un tiempo aleatorio y un marco de tiempo aleatorio. Si el valor de iBarShiftX no coincide con la función regular de iBarShift, entonces el mensaje a través de Print.
Si ejecuta este script en un símbolo recién abierto, verá errores. Volver a ejecutar el script en el mismo símbolo no dará errores.
Pero es una nimiedad. En mi versión es el mismo problema.
Sólo tengo una queja sobre su versión: es muy complicada y lenta.
Y aquí está mi función, que hace lo mismo, pero con un algoritmo sencillo y mucho más rápido:
int iBarShift1(conststring Symb,constENUM_TIMEFRAMES TimeFrame,datetime time)
{
return(Bars(Symb,TimeFrame,time+1,UINT_MAX));
}
Puede utilizar uno aún más corto sin la función:
Bars(Symb,TimeFrame,time+1,UINT_MAX);
Intenta demostrar lo contrario. Encuentre una combinación única de parámetros cuando su función y la mía muestren valores diferentes.
Sólo que no he implementado el último parámetro exacto en él, porque no entiendo por qué es necesario en absoluto. Personalmente nunca lo he necesitado.
Pero si alguien realmente lo necesita, se puede implementar.
Dejé la variante iBarShift3, porque maneja incorrectamente los agujeros de la historia. Se puede arreglar, pero no veo el punto, ya que la opción anterior es suficiente.
Dejé la opción iBarShift3 porque no maneja correctamente los agujeros de la historia. Se puede arreglar, pero no veo el motivo, porque la opción anterior es suficiente.
¿Los agujeros se deben a la falta de comercio en la barra, o a otros? Y, ¿cómo se manifiesta la inexactitud?
¿Los agujeros se deben a la falta de comercio en la barra, o a otra cosa? ¿Y cuál es la inexactitud?
Tomemos un domingo cualquiera en el que no haya comercio:
Print("iBarShift = "+IntegerToString(iBarShift (_Symbol,PERIOD_H1,D'01.04.2018 10:00:00')));
Print("iBarShift3 = "+IntegerToString(iBarShift3(_Symbol,PERIOD_H1,D'01.04.2018 10:00:00'))); // показывает на единицу меньше
¿Por qué no pruebas mi función? Hay una solución que neutraliza el inicio y el final de los compases en el tiempo. Parece calcular todo correctamente. Y es más rápido en tiempo que su versión 3 más rápida. ¿O la rama es más importante?) ¿O también hay un error ahí?) Lo he estado usando durante mucho tiempo....
¿Qué problema ha encontrado?
Aquí hay un ejemplo de su función que funciona falsamente bajo el nombre "BarShift1"
Aquí hay un ejemplo de su función que funciona falsamente - funciona bajo el nombre "BarShift1"
En realidad sólo muestra lo contrario, mi versión es la única que es correcta. (Y el iBarShift1 original de este código es correcto).
Mi versión fue diseñada como una función independiente, al igual que mql4 iBarShift.
No está optimizado para consultas múltiples, por lo que la comparación de tiempos es irrelevante. @nicholishen publicó una buena biblioteca optimizada para la llamada masiva.
En realidad muestra justo lo contrario, mi versión es la única que es correcta. (También el iBarShift1 original de este código es correcto).
Mi versión fue concebida para ser utilizada como una función independiente, exactamente como mql4 iBarShift.
No está optimizado para múltiples peticiones, por lo que la comparación de tiempos es irrelevante. @nicholishen publicó una buena biblioteca optimizada para la llamada masiva.
De hecho sólo muestra lo contrario, mi versión es la única correcta. (Y el iBarShift1 original de este código es correcto).
Mi versión fue diseñada como una función independiente, al igual que mql4 iBarShift.
No está optimizado para consultas múltiples, por lo que la comparación de tiempos es irrelevante. @nicholishen publicó una buena biblioteca optimizada para la llamada masiva.
En realidad muestra justo lo contrario, mi versión es la única que es correcta. (También el iBarShift1 original de este código es correcto).
Mi versión fue concebida para ser utilizada como una función independiente, exactamente como mql4 iBarShift.
No está optimizado para múltiples peticiones, por lo que la comparación de tiempos es irrelevante. @nicholishen publicó una buena biblioteca optimizada para la llamada masiva.
No hablo del tiempo de procesamiento, sino del número de barras.
En la imagen se puede ver que a las 8:37 el código piensa que la barra más cercana es la del día anterior 23:00 , pero en realidad la barra más cercana es la de las 10:00. Está más cerca tanto matemática como lógicamente.
No hablo del tiempo de procesamiento, sino del número de barra.
La imagen muestra que a las 8:37 el código considera que la barra más cercana es la del día anterior a las 23:00, pero en realidad la barra más cercana es la de las 10:00. Está más cerca tanto de las matemáticas como de la lógica.
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
Análogo a iBarShift
Alain Verleyen, 2018.04.05 00:18
En realidad sólo muestra lo contrario, mi versión es la única correcta. (Y el iBarShift1 original de este código es correcto).
Mi versión fue concebida como una función independiente, al igual que mql4 iBarShift.
Simplifiquémoslo.
Entiendo su argumento. No lo comprobaré. Aparentemente, es mi tarea la que difiere de la lógica aceptada.
¿Qué problema ha descubierto?
Escribí esto hace mucho tiempo. Ya no lo recuerdo, pero algo me confundió.
De todos modos, ahora sólo he encontrado una situación anormal.
Cuando los datos de los símbolos aún no están cargados pueden devolver -1 y deberían devolver 0.
Esto se puede comprobar utilizando el script para MQL4 que adjunto.
Este script toma un tiempo aleatorio y un marco de tiempo aleatorio. Si el valor de iBarShiftX no coincide con la función regular de iBarShift, entonces el mensaje a través de Print.
Si ejecuta este script en un símbolo recién abierto, verá errores. Volver a ejecutar el script en el mismo símbolo no dará errores.
Pero es una nimiedad. En mi versión es el mismo problema.
Sólo tengo una queja sobre su versión: es muy complicada y lenta.
Aquí está su variante:
Y aquí está mi función, que hace lo mismo, pero con un algoritmo sencillo y mucho más rápido:
Puede utilizar uno aún más corto sin la función:
Intenta demostrar lo contrario. Encuentre una combinación única de parámetros cuando su función y la mía muestren valores diferentes.
Sólo que no he implementado el último parámetro exacto en él, porque no entiendo por qué es necesario en absoluto. Personalmente nunca lo he necesitado.
Pero si alguien realmente lo necesita, se puede implementar.
Dejé la variante iBarShift3, porque maneja incorrectamente los agujeros de la historia. Se puede arreglar, pero no veo el punto, ya que la opción anterior es suficiente.
Dejé la opción iBarShift3 porque no maneja correctamente los agujeros de la historia. Se puede arreglar, pero no veo el motivo, porque la opción anterior es suficiente.
¿Los agujeros se deben a la falta de comercio en la barra, o a otros? Y, ¿cómo se manifiesta la inexactitud?
¿Los agujeros se deben a la falta de comercio en la barra, o a otra cosa? ¿Y cuál es la inexactitud?
Tomemos un domingo cualquiera en el que no haya comercio:
Digamos que tomamos el domingo como cualquier momento en el que no hay comercio:
¿Así que se muestra el lunes? Eso es lo que quiero... :)