Análogo a iBarShift - página 10

 
Aleksey Vyazmikin:

¿Quieres decir que se muestra el lunes? Eso es lo que necesito... :)

Sí, bueno, en realidad es un comportamiento extraño para una función estándar. Al fin y al cabo, estamos ajustando los valores a su "referencia".

La función estándar iBarShift de MQL4 devuelve el número de la barra de la izquierda (es decir, el sábado en este caso), y iBarShift3 devuelve el número de la barra de la derecha (es decir, el lunes) cuando la hora solicitada llega al hueco, lo cual es más lógico.

 
Nikolai Semko:

Sí, bueno, en realidad es un comportamiento extraño para una función estándar. Al fin y al cabo, se trata exactamente de ajustar los valores a su "punto de referencia".

La función estándar iBarShift de MQL4, cuando la hora solicitada llega al hueco, devuelve el número de compás de la izquierda (es decir, el sábado en este caso), e iBarShift3 devuelve el número de compás de la derecha del hueco (es decir, el lunes), lo que tiene más sentido.

¿Y qué pasará si ahora estamos en el agujero (tiempo real) y esperamos recibir información en el bar, qué índice se nos ofrecerá? Supongo que será "1" en MQL4, mientras que para el tercer algoritmo será "0", ¿o no?

Creo que la función MQL4 tiene un mensaje de "no mirar hacia adelante", lo que es cierto hasta cierto punto - todo depende de la tarea.

 

Nikolai Semko :

...

Sólo tengo una queja sobre su opción: es muy complicada y lenta.

Cuando lo publiqué (hace 4 años) el objetivo principal era la precisión (de nuevo), porque todas las demás versiones que encontré eran erróneas (en comparación con la versión mql4).

que puede ser más rápido.

Intenta demostrar lo contrario. Encuentre una única combinación de parámetros cuando su función y la mía muestren valores diferentes.

En la mayoría de los casos la función devuelve un resultado erróneo.

Pero no he implementado el último parámetro exacto en él, porque no entiendo por qué es necesario en absoluto. Personalmente nunca lo he necesitado.

El requisito es tener la versión mql4 SOLO.

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

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 .


PD: ¿Es necesario publicar la versión en inglés o la traducción al ruso es correcta?

 
vladevgeniy:
¿Por qué no pruebas mi función? Hay una solución que ajusta el inicio y el final de los compases en el tiempo. Parece calcular todo correctamente. Y es más rápido en el tiempo que la versión 3 de su más rápido. ¿O la rama es más importante?) ¿O también hay un error ahí?) Lo he estado usando durante mucho tiempo....

¿Dónde está, su función, para probarlo?

 
Aleksey Vyazmikin:

¿Y qué pasa si ahora estamos en un agujero (tiempo real) y esperamos obtener información en un bar, qué índice se nos ofrecerá? Supongo que será "1" en MQL4, mientras que para el tercer algoritmo será "0", ¿o no?

Creo que la función MQL4 tiene el mensaje de "no mirar hacia adelante", lo que es cierto hasta cierto punto - todo depende del problema.

No. El primero es cero. En tiempo real funciona igual.

 
Aleksey Vyazmikin:

¿Y dónde está, su función, para probarlo?

Está al final de la página 7).

int iBarShift(string symbol, ENUM_TIMEFRAMES timeframe, datetime time){
datetime t1 = TimeCurrent()+10000000;
int ps = PeriodSeconds(timeframe);
double div = time/(double)ps;
double mant = div - MathFloor(div);
int ret = Bars(symbol, timeframe, (datetime)(time-(ps*mant)), t1)-1;
return(ret);
}

Eso podría ser más conveniente.

 
vladevgeniy:
¿Por qué no pruebas mi función? Tengo una solución que compensa el comienzo y el final de los compases en el tiempo. Parece calcular todo correctamente. Y es más rápido en el tiempo que la tercera versión de su más rápido. ¿O la rama es más importante?) ¿O también hay un error ahí?) Lo he estado usando durante mucho tiempo....

Es gracioso ))))

Esta es su función:

int iBarShift4(string symbol,ENUM_TIMEFRAMES timeframe,datetime time)
  {
   datetime t1=TimeCurrent()+10000000;
   int ps=PeriodSeconds(timeframe);
   double div=time/(double)ps;
   double mant=div-MathFloor(div);
   int ret=Bars(symbol,timeframe,(datetime)(time-(ps*mant)),t1)-1;
   return(ret);
  }

Como no conoces algunos operadores matemáticos, como el % - el resto de la división

Hagamos una simplificación de su función.

Ha funcionado:

int iBarShift4(string symbol,ENUM_TIMEFRAMES timeframe,datetime time)
  {
   time-=time%PeriodSeconds(timeframe);
   return(Bars(symbol,timeframe,time,UINT_MAX)-1);
  }

Y aquí está mi función:

int iBarShift1(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time)
  {
   return(Bars(Symb,TimeFrame,time+1,UINT_MAX));
  }

Muy similar. ¿De verdad?

Sólo que el tuyo lo hace todo muy mal y es más lento.

Puedes probarlo con este script en MQL4.

Archivos adjuntos:
 
Nikolai Semko:

No. El primero es cero. Funciona igual en tiempo real.

OK - sólo un algoritmo que me muestra "-1" en los datos futuros hoy....

 
Nikolai Semko:

Es gracioso ))))


Sí, bueno, da incoherencias). Lo sacaré, bien.

 
vladevgeniy:

Bueno, sí, da incoherencias). Lo sacaré, bien.

Yo también he estado dando vueltas en círculos. Sólo que ahora he descubierto la solución más corta.