función sueño alternativa - página 2

 
paulepanke:

tenga cuidado con tal declaración. siempre hay una razón lógica para ejecutar sleep(). en Tester e incluso en los indicadores.

No he dicho que no haya ninguna razón lógica para utilizar sleep(), hay muchas, he dicho que no hay ninguna razón para esperar que sleep() funcione en el Probador de Estrategias. Funciona en un Indicador que se ejecuta en un gráfico del Probador de Estrategias, no lo sé, quizás sí . . funciona en un EA que se ejecuta en el Probador de Estrategias, hasta donde yo sé, no lo hace.
 
RaptorUK:
Mira lo que te da TimeSeconds(), luego piensa en lo que te da TimeCurrent() . . ¿cuál necesitas y por qué?


Simon,

int TiempoSegundos( datetime tiempo)

Devuelve la cantidad de segundos transcurridos desde el comienzo del minuto para la hora especificada.

datetime TiempoActual( )
Devuelve la última hora conocida del servidor (hora de entrada de la última cita) como número de segundos transcurridos desde las 00:00 del 1 de enero de 1970.


"¿Cuál necesita y por qué?" - Simon

Yo usaría los dos en conjunto, porque van de la mano. - Nathan

TimeSeconds(datetime time) requiere una variable colocada dentro de sus llaves. TimeCurrent() se coloca entonces dentro de estos corchetes, lo que me presenta una solución viable. He hecho esto b4 pero no entendía por qué los valores de tiempo devueltos parecían saltar y hacer una pausa (debido a la falta de un tick/ticks activo).

¿Qué me decís de esto?


Gracias.

 
WHRoeder:

  1. No se crean ticks de ningún tipo hasta que vuelve y crea el siguiente y llama a su start(). Si computa durante 5 minutos y devuelve el volumen (conteo de ticks) en la siguiente llamada será +1. En un gráfico en vivo, si computa para 5 minutos, entonces perderá 5 minutos de ticks y en la M1 se habrán formado varias barras nuevas.

William,

Gracias por exponer este tema.

Mi interpretación de "2." es que cuando se crea un tic, se llama a la función de retorno. A continuación se llama a la función Start() directamente después de llamar a la función return(0), lo que desencadena la ejecución del programa una vez más. ¿Es correcta esta interpretación de esta parte de 2.?


"Si calcula durante 5 minutos", ¿cómo puedo estar seguro de que el EA calculará durante cinco minutos (incluso si el EA calcula durante cinco minutos, no creo que esto garantice la creación de un tick. La probabilidad de que se cree un tick aumenta)?


Mis disculpas, estoy teniendo dificultades para leer esto:

"Si computa durante 5 minutos y devuelve el volumen (conteo de ticks) en la siguiente llamada será +1. En un gráfico en vivo, si se computa para 5 minutos, entonces se perderán 5 minutos de ticks y en la M1 se habrán formado varias barras nuevas."


Muchas gracias por su respuesta.

 
RaptorUK:
No he dicho que no haya ninguna razón lógica para utilizar sleep(), hay muchas, he dicho que no hay ninguna razón para esperar que sleep() funcione en el Probador de Estrategias. Funciona en un Indicador que se ejecuta en un gráfico del Probador de Estrategias, no lo sé, quizás sí . . funciona en un EA que se ejecuta en el Probador de Estrategias, hasta donde yo sé, no lo hace.

Simon,

"¿Se puede hacer que un EA que se ejecuta en el Probador de Estrategias se ponga en pausa? Sí se puede."

¿Podrías expresar tu opinión sobre este método que utilizarías para "pausar" un EA en el probador?


Gracias

 
  1. El EA devuelve desde start() al probador. El probador crea el siguiente tick y llama a start(). Si el EA no retorna no hay siguiente tick. No importa el tiempo que tarde start() en volver. El siguiente tick se crea cuando lo hace.
  2. No se puede pausar o dormir el EA en el probador. Usted puede programar el botón de pausa para pausar el probador después de que el EA regrese del inicio.
 

William,

Entonces, un nuevo tick llama a la función start() en un EA, ¿sí?

Mi pregunta para ti es la siguiente: "¿Conoces alguna otra forma de llamar a la función start() además de la de un nuevo tick? ¿Quizás una acción repetitiva consistente para sustituir una llamada a Start()?"

(Estoy pensando, ¿hay alguna forma de seguir consistentemente los segundos que no dependan de los ticks)


"...El siguiente tick se crea cuando lo hace".

Creo que lo que querías escribir era: "Al crearse un nuevo tick, se ejecuta entonces Start()" ;)


Entonces, dices que un EA no se puede pausar o dormir en el probador, ¿sí?


Revisaré el enlace que me has proporcionado, pero mientras tanto, ¿podrías explicar este método de "pulsar un botón de pausa para poner en pausa el probador" después de que un EA que se está probando vuelva del inicio?

Cuando se ejecuta en el probador, ¿este método simularía el rendimiento del EA que está en pausa durante un segmento de tiempo decidido en "tiempo real" en una cuenta real?


Entiendo que el probador tiene limitaciones y que se deben utilizar "soluciones" para simular el rendimiento en "tiempo real".


Muchas gracias William.


Además, ¿te importa si te llamo Will? Me ahorraría un segundo de tiempo en cada mensaje. Tu decisión.

Me gusta una característica que posee tu EA y es: "Quería cerrar todas las órdenes antes del final de la semana (cierre del mercado el viernes,) para evitar pérdidas en caso de que el mercado tenga un gap sobre el final de la semana, pasando el SL".

(Aplaudiendo con alegría.) ¡Jajaja! ;) Al añadir esta característica a su EA, usted corta las pérdidas innecesarias, pero esto es diferente de lo que intento hacer actualmente. Actualmente estoy tratando de rastrear los segundos de tiempo consistentemente sin la necesidad de ticks para actualizar los segundos. Deseo un medio diferente para actualizar la función Start(), ¿Entendido?


Gracias

 
WhooDoo22:

Actualmente estoy tratando de rastrear los segundos del tiempo de manera consistente sin la necesidad de ticks para actualizar los segundos. Deseo un medio diferente para actualizar la función Start(), ¿Entendido?

Sospecho que lo que está tratando de hacer es una solución defectuosa a su problema debido a la falta de comprensión. ¿Por qué necesita saber el segundo de un segundo a otro si el precio no ha cambiado durante 30 segundos? cuando el precio cambia se obtiene un tic.

Una aclaración a lo que dijoWHRoeder, todos los ticks se crean antes de que el Probador de Estrategias comience a llamarlos/ejecutarlos, se guardan en un archivo .fxt en el probador/historia, el ST llama a un primer tick y este a su vez hace que se ejecute start(), el siguiente tick no es llamado/utilizado hasta que start() haya terminado de ejecutarse, es muy importante entender esto. Sólo cuando start() haya terminado se utilizará el siguiente tick para que el EA pueda llamar a start() de nuevo. Cuando el ST se ejecuta a toda velocidad es la velocidad a la que start() se ejecuta la que gobierna la velocidad del ST, por lo que una función start() muy simple permitirá que el ST se ejecute muy rápidamente, una función start() compleja hará que el ST se ejecute más lentamente.

En una situación de Live/Demo si la función start() es muy compleja y tarda mucho tiempo en ejecutarse, quizás unas décimas de segundo, es posible que el siguiente tick llegue antes de que start() haya completado, en esta situación el tick se perderá y no hará que start() sea llamado... esto NO PUEDE suceder con el ST.

 
WhooDoo22:

Simon,

"¿Se puede hacer que un EA que se ejecuta en el Probador de Estrategias haga una pausa? Sí se puede."

¿Podrías expresar tu opinión sobre este método que utilizarías para "pausar" un EA en el probador?

Claro, no es muy elegante, así que no sugeriría a nadie que lo usara. Utilicé una GlobalVariable establecida y desestablecida por un script, cuando el EA en el ST veía que la GlobalVariable estaba establecida, se sentaba en un bucle continuamente comprobando si la GlobalVariable estaba desestablecida, cuando el script había desestablecido la GlobalVariable el EA salía del bucle y su función start() podía terminar.
 
WhooDoo22:

"¿cuál necesita y por qué? - Simon

Yo usaría ambos e'm en concierto, porque van de la mano. - Nathan

TimeSeconds(datetime time) requiere una variable colocada dentro de sus llaves. TimeCurrent() se coloca entonces dentro de estos corchetes, lo que me presenta una solución viable. He hecho esto b4 pero no entendía por qué los valores de tiempo devueltos parecían saltar y hacer una pausa (debido a la falta de un tick/ticks activo).

Supongamos que tienes 2 eventos y que estos eventos están separados por 10 segundos, ¿cuál será la diferencia entre los valores devueltos porTimeSeconds(datetime time) para estos 2 eventos?
 
RaptorUK:

Sospecho que lo que intentas hacer es una solución defectuosa a tu problema por falta de entendimiento. ¿Por qué necesitas saber el segundo de un segundo a otro si el precio no ha cambiado durante 30 segundos? cuando el precio cambia obtienes un tick.

Una aclaración sobre lo que dijoWHRoeder, todos los ticks se crean antes de que el Probador de Estrategias comience a llamarlos/ejecutarlos, se guardan en un archivo .fxt en el probador/historia, el ST llama a un primer tick y este a su vez hace que se ejecute start(), el siguiente tick no es llamado/utilizado hasta que start() haya terminado de ejecutarse, es muy importante entender esto. Sólo cuando start() haya terminado se utilizará el siguiente tick para que el EA pueda llamar a start() de nuevo. Cuando el ST se ejecuta a toda velocidad es la velocidad a la que start() se ejecuta la que gobierna la velocidad del ST, por lo que una función start() muy simple permitirá que el ST se ejecute muy rápidamente, una función start() compleja hará que el ST se ejecute más lentamente.

En una situación de Live/Demo si la función start() es muy compleja y tarda mucho tiempo en ejecutarse, tal vez unas décimas de segundo, es posible que el siguiente tick llegue antes de que start() haya terminado, en esta situación el tick se perderá y no hará que start() sea llamado... esto NO PUEDE suceder con el ST.

Simón,

Sospecho que lo que estás tratando de hacer es una solución defectuosa a tu problema debido a la falta de comprensión. ¿Por qué necesitas saber el segundo de un segundo a otro si el precio no ha cambiado durante 30 segundos? cuando el precio cambia se obtiene un tick.

Reconozco que tengo una falta de entendimiento, por eso estoy discutiendo el tema en el foro de MQL4. Deseo guardar el precio cada vez que cambie (entiendo cómo hacerlo). También entiendo cómo guardar los precios cada segundo de forma consistente en un gráfico LIVE/DEMO usando Sleep(). Objetivo: Deseo rastrear consistentemente los segundos (sin rastrear los segundos basados en la creación de ticks) hasta un máximo de un minuto o menos, luego restablecer los segundos rastreados a cero. Entiendo por qué deseo lograr este objetivo. La razón es que necesito probar un EA en el probador y no puedo usar Sleep() mientras lo pruebo. ¿Qué hacer correctamente? Reunir opciones.

Detalles entonces hm? ;)

Codifique un temporizador (utilizable en el probador) a un EA. Este temporizador cuenta hacia arriba de 0-30 o hacia abajo de o 30-0. Mientras este tiempo cuenta hacia arriba/hacia abajo, tengo un vector separado que sigue la acción del precio (un vector de tamaño muy grande).

Mis condiciones son tales,

Si el precio viaja x puntos (dentro de 0-30 o 30-0 segundos), tomar la decisión.

Si el precio no viaja x puntos (dentro de 0-30 o 30-0 segundos), ArrayInitialize().


¿Qué dice usted a este Simón?


Gracias
Razón de la queja: