![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
Hola oneillj,
Pensé que había respondido ya, pero parece haber desaparecido en el éter de Internet.
El fragmento de código que ha proporcionado es más o menos el que me quejaba en primer lugar. ¿Por qué es tan complejo? Pensé que tenía que haber una manera más fácil. Se me ocurrió esta, que parece funcionar. Por favor, corregidme si me equivoco. (También intenté usar BarsCalculated, pero siempre era igual a Bars, por lo que la prueba siempre se evaluaba como falsa).
static int LastBarCount = 0;
;-) Ianif (Bars(_Symbol, _Period) > LastBarCount)
LastBarCount = Bars(_Symbol, _Period);
si no
retorna;
Estoy completamente de acuerdo en que necesitamos algo tan simple como sea posible.
Lamentablemente este código no parece funcionar para mí en MQL5.
Lamentablemente esto no parece funcionar en MQL5.
De todos modos, las barras serían una mala manera de detectar una nueva barra.
La única forma fiable de comprobar una nueva barra es utilizando el tiempo. Ni el volumen, ni los precios, ni las barras.
datetime ThisBar = (datetime)SeriesInfoInteger(_Symbol,PERIOD_CURRENT,SERIES_LASTBAR_DATE);
if(LastBar != ThisBar)
{
printf("New bar: %s",TimeToString(ThisBar));
LastBar = ThisBar;
}
De todos modos, las barras serían una mala manera de detectar una nueva barra.
La única forma fiable de comprobar una nueva barra es utilizando el tiempo. Ni el volumen, ni los precios, ni las barras.
datetime ThisBar = (datetime)SeriesInfoInteger(_Symbol,PERIOD_CURRENT,SERIES_LASTBAR_DATE);
if(LastBar != ThisBar)
{
printf("New bar: %s",TimeToString(ThisBar));
LastBar = ThisBar;
}
De todos modos, las barras serían una mala manera de detectar una nueva barra.
La única forma fiable de comprobar una nueva barra es utilizando el tiempo. Ni el volumen, ni los precios, ni las barras.
datetime ThisBar = (datetime)SeriesInfoInteger(_Symbol,PERIOD_CURRENT,SERIES_LASTBAR_DATE);
if(LastBar != ThisBar)
{
printf("New bar: %s",TimeToString(ThisBar));
LastBar = ThisBar;
}
Sólo para información, tengo la siguiente nota en mis referencias :
//-- A veces SeriesInfoInteger con SERIES_LASTBAR_DATE devuelve un error,
Eso es hace mucho tiempo y no estoy usando/probando esta función por años, así que tal vez no es más el caso. Pero si quieres usarla para detectar una nueva barra, probablemente sea mejor comprobarlo ;-)
Sólo a título informativo, tengo la siguiente nota en mis referencias :
//-- A veces SeriesInfoInteger con SERIES_LASTBAR_DATE devuelve un error,
Eso es hace mucho tiempo y no estoy usando/probando esta función desde hace años, así que tal vez no es más el caso. Pero si quieres usarla para detectar una nueva barra, probablemente sea mejor comprobarlo ;-)
¡Eso es muy críptico Alain! ¿Qué tipo de errores?
En cuyo caso, para los corchetes o bien comprueba SeriesInfoInteger >0 y/o ResetLastError antes de la llamada y luego comprueba _LastError después de la llamada.
O bien obtenga la fuente de tiempo de algún otro lugar, por ejemplo, time[] si en OnCalculate, o CopyTime etc.
Por qué no usar simplemente algo como esto :
datetime lastTime[1];
if (CopyTime(_Symbol,_Period,0,1,lastTime)==1 && prevTime!=lastTime[0])
{
prevTime=lastTime[0];
// ...
}
¡Eso es muy críptico Alain! ¿Qué tipo de errores?
En cuyo caso, para las correas o comprueba SeriesInfoInteger >0 y/o ResetLastError antes de la llamada y luego comprueba _LastError después de la llamada.
O bien obtenga la fuente de tiempo de algún otro lugar, por ejemplo, time[] si en OnCalculate, o CopyTime etc.
Sólo digo que cuando yo lo usaba hace años SeriesInfoInteger() no era realmente fiable. A ver qué haces con esta información :-D
No mucho TBH - No necesito detectar una nueva barra en MT5
Pero gracias por compartir - Lo tendré en cuenta para el futuro.
Sólo estaba tratando de simplificar algo que la gente parecía estar haciendo excesivamente complicado.
Sin embargo, el principio sigue siendo: utilizar el tiempo. Advertencia: elija su método de obtención del tiempo por su cuenta y riesgo teniendo en cuenta las incompletas notas históricas de Alain (por cierto, ¿cómo va el XP Service Pack 1?)
No mucho TBH - No necesito detectar una nueva barra en MT5 Pero gracias por compartir - Lo tendré en cuenta para el futuro.
Sólo trataba de simplificar algo que la gente parecía complicar en exceso.
Sin embargo, el principio sigue siendo: utilizar el tiempo. Advertencia: elija su método para obtener el tiempo a su propio riesgo teniendo en cuenta las notas históricas incompletas de Alain (por cierto, ¿cómo se ve el XP Service Pack 1?)