Reloj de tiempo real MQL4 (segundo a segundo) - página 5

 
7bit:

Es sólo un puñado de líneas en mql4 (por supuesto que necesita llamadas DLL permitidas para llamar a la API de Windows, pero no es necesario instalar nada):

Yo tengo este script en mis favoritos y cuando necesito ticks sólo lo arrastro al gráfico.


También tengo una variación de esto sin el bucle que sólo envía una garrapata y luego sale y he vinculado esto (one_tick.mq4) a la tecla de acceso directo ALT + T y ahora puedo enviar una garrapata al gráfico activo con sólo pulsar ALT-T. Necesito esto para algunos de mis EAs stat-arb cuando experimento durante el fin de semana para forzar start() para desencadenar sus cálculos y trazar sus gráficos (puedo mover las líneas en el gráfico para cambiar el intervalo y entonces necesito un nuevo tick para actualizar sus cálculos).


7 Nunca he utilizado las importaciones dll así que por favor puede explicar lo siguiente.

+ ¿Hay que incluir los archivos dll en la carpeta del cliente Meta Trader?

+ ¿Cómo podemos habilitar este EA desde el cliente MT?

Por favor, danos algunos ejemplos de importación de DLL en Meta Trader

 
spidermagos:


7 Nunca he utilizado las importaciones de dlls, así que por favor puedes explicar lo siguiente.

+ ¿Hay que incluir los archivos dll en la carpeta de Meta Trader Client?

+ ¿Cómo podemos habilitar este EA desde el cliente MT?

Por favor, danos algunos ejemplos de importación de DLL en Meta Trader

Lamento informarle de que le será completamente imposible hacer uso de ello (o incluso entender para qué podría servir) a menos que aprenda la habilidad de leer un texto de más de 140 caracteres.

Para empezar podrías intentar extraer el significado del texto que acabas de citar en tu último mensaje. Encontrarás entonces que lo describí como un script y no como un EA, además para tu gran sorpresa encontrarás que escribí que no hay necesidad de instalar ninguna dlls e incluso podrías encontrar las partes del texto donde expliqué cómo se supone que se usa.

 
7bit:

Lamento informarle de que le será completamente imposible hacer ningún uso de ella (o incluso entender para qué podría servir) a menos que aprenda la habilidad de leer un texto de más de 140 caracteres.

Para empezar podrías intentar extraer el significado del texto que acabas de citar en tu último mensaje. Entonces encontrarás que lo describí como un script y no como un EA, además para tu gran sorpresa encontrarás que escribí que no hay necesidad de instalar ninguna dll y hasta podrías encontrar las partes del texto donde expliqué cómo se supone que se usa.

Admiro tu arrogancia y tus conocimientos de inglés y probablemente tu ejemplo de codificación.

Pero resolver un problema sin aportar una solución es simplemente evitar la pregunta.

¡7 bit en vez de cuestionar mis habilidades y técnicas de lectura, por qué no escribes el programa completo y te demuestras a ti mismo. en vez de filosofar!

¿Sabes como hacer un reloj en tiempo real segundo a segundo o no? esta es la pregunta? este reloj debe estar en el gráfico?

 

puedes simplemente sumar 2 y 2.

Usa el código de 7bit para generar ticks falsos en combinación con el código que he puesto y tienes todo lo que necesitas.

y por cierto, 7bit parece ser uno de los mejores programadores que participan en este foro...

//z

 

spidermagos:

Admiro tu arrogancia

Gracias.


spidermagos:

¡por que no escribes el programa completo y te pruebas a ti mismo. en vez de filosofar!

El script está completo y funciona de forma autónoma, exactamente dentro de las especificaciones que di.

Lo publiqué como una sugerencia para resolver el problema de que los indicadores no pueden utilizar llamadas de bloqueo como sleep() y que además no existe otra forma de generar eventos de temporizador desde el propio indicador. Este subproblema exacto de todo el problema del reloj fue mencionado inmediatamente antes en este hilo y sólo esto y nada más fue abordado por mí. Se puede tratar como un problema completamente independiente por sí mismo y mi script es una solución genérica (y completamente independiente) para ello y también se puede aplicar en muchos escenarios similares, e incluso di un ejemplo para un caso de uso diferente.

Si quieres escribir código debes aprender la habilidad de la descomposición del problema y también debes ser capaz de reconocer inmediatamente una solución y también una solución parcial cada vez que tropieces con una.

 
//< This is EA : Compile and run in folder "/experts" >
 
 
int start()
{
static int iClockPeriod = 1000 ;
 
static int iTimeStamp          ;
static int iRunTime            ;
 
while  ( ! IsStopped () )
       {
           iTimeStamp = GetTickCount ()                             ;
           Comment    ( TimeToStr ( TimeLocal () , TIME_SECONDS ) ) ;
           iRunTime   = GetTickCount () - iTimeStamp                ;
           Sleep      ( iClockPeriod    - iRunTime                ) ;
       }
}
//</This is EA : Compile and run in folder "/experts" > 

//< This is Indicator : Compile and run in folder "/experts/indicators" >
#property  indicator_chart_window
 
int start()
{
static int iClockPeriod = 1000 ;
 
static int iTimeStamp          ;
  
  
if     ( ( GetTickCount () - iTimeStamp ) < iClockPeriod )   return ;
       {
           iTimeStamp = GetTickCount ()                             ;
           Comment    ( TimeToStr ( TimeLocal () , TIME_SECONDS ) ) ;
  
 
       }
}
//</This is Indicator : Compile and run in folder "/experts/indicators" > 

Ejecute estos programas en diferentes gráficos.

 
Ais:

Ejecutar estos programas en diferentes gráficos.


Ais ; 7bit tiene razón esto no funcionará! la función de inicio es tick por tick

se necesitan importaciones de dll para resolver este problema. ...

es decir, llamar a las secuencias de comandos de los indicadores

 
7bit:

Gracias.


El script está completo y funciona de forma autónoma, exactamente dentro de las especificaciones que di.

Lo publiqué como una sugerencia para resolver el problema de que los indicadores no pueden usar llamadas de bloqueo como sleep() y que tampoco existe otra forma de generar eventos de temporizador desde el propio indicador. Este subproblema exacto de todo el problema del reloj fue mencionado inmediatamente antes en este hilo y sólo esto y nada más fue abordado por mí. Se puede tratar como un problema completamente independiente por sí mismo y mi script es una solución genérica (y completamente independiente) para ello y también se puede aplicar en muchos escenarios similares, e incluso di un ejemplo para un caso de uso diferente.

Si quieres escribir código, debes aprender la habilidad de la descomposición del problema y también debes ser capaz de reconocer inmediatamente una solución y también una solución parcial cada vez que tropieces con una.



7bit - ¿Cómo se puede llamar a un script desde un indicador?

¿Puede dar un ejemplo?

 
spidermagos:

Tengo entendido que la función Start() funciona tic a tic.

¿Hay alguna forma de utilizar los datos en tiempo real del reloj del ordenador y actualizarlos cada segundo? ¿No es tick por tick sino cada segundo?

Si es así, por favor, ayúdame.

Gracias

Hola, puedes usar una aplicación de envío de ticks separada en lugar de un script (hay varios gratuitos; busca en Google "mt4 tick sender") y haz que genere ticks cada 200ms más o menos.Entonces asegúrese de que el reloj de su PC está sincronizado frecuentemente y utilice TimeLocal() + hour_difference_between_yourtimezone_and_servertimezone * 3600 en lugar de TimeCurrent() porque con los ticks generados, usted "sólo" obliga a que se ejecute Start(), TimeCurrent() NO se actualizará a menos que el tick provenga de su broker.. de esta manera obtendrás la hora de tu broker segundo a segundo.. esto funciona tanto para los indicadores como para los EAs.. el hecho curioso es que hay algunos brokers con sus servidores fuera de sincronización de tiempo, se retrasan varios segundos pero sólo la marca de tiempo, desafortunadamente no el precio, velas diferentes, M1 completamente diferente a veces cuando hay impulso, lol
 

Primero pon la lógica que tienes en el inicio en una función.

Luego haz un bucle while en el init() con un sleep y llama a la función desde ahí. Recuerda que el sleep está en milisegundos.

Esto te permitirá controlar el tiempo en lugar de esperar un cambio de precio.

Funciona perfectamente siempre que la lógica de tu programa esté bien. El único problema es que no puedes ejecutarlo en el backtester. Haz tus pruebas usando primero el Start() y luego cámbialo al init().