Símbolos personalizados. Errores, fallos, preguntas, sugerencias. - página 25

 
jaffer wilson:

Esto no funciona en mi lado.

Estos son los detalles de mi versión de MT5.


Intenta cambiar el error de la hora del sistema.

//+------------------------------------------------------------------+
//|                                           SpeedupSystemTimer.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property description "Уменьшает погрешность системного таймера до 1 ms"

#import "winmm.dll"
   int timeBeginPeriod(uint per);
#import

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void OnInit()
{
   timeBeginPeriod(1);
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
{
   ExpertRemove();
}
//+------------------------------------------------------------------+
 
Roman :


Intenta cambiar el error de la hora del sistema.

Lo he intentado. Por favor, compruebe el archivo. Y el vídeo. Lo descubrirás. Incluso le pido al moderador que vea el archivo adjunto.

Lo mismo ocurre con el personaje personalizado.

Archivos adjuntos:
 
jaffer wilson:

Lo intenté. Por favor, compruebe el archivo. Y el vídeo. Lo descubrirás. Incluso le pido al moderador que vea el archivo adjunto.

Lo mismo ocurre con el personaje personalizado.

Lea en la documentación sobre TimeCurrent()

 
Roman :

Lee en la documentación sobre TimeCurrent()

Supongo que no has ejecutado el archivo. Por favor, puedes ejecutarlo una vez en tu lado. Mi programa utiliza TimeCurrent () para obtener la hora actual cuando los segundos son cero o menos. Esto llamará a la función SetTime ().

Entonces, si el tiempo restante es de 50 segundos, no comprobará TimeCurrent (), sino que disminuirá los segundos. Creo que esto debería ser visible cuando se llama a OnTimer (). Pero no es visible. Por favor, compruébelo una vez.

 
jaffer wilson:

Supongo que no ha ejecutado el archivo. Por favor, puedes ejecutarlo una vez en tu lado. Mi programa utiliza TimeCurrent () para obtener la hora actual cuando los segundos son cero o menos. Esto llamará a la función SetTime ().

Entonces, si el tiempo restante es de 50 segundos, no comprobará TimeCurrent (), sino que disminuirá los segundos. Creo que esto debería ser visible cuando se llama a OnTimer (). Pero no es visible. Por favor, compruébelo una vez.

He ejecutado tu archivo, pero los manejadores de tu código han sido priorizados.
Los dos indicadores funcionan de forma casi idéntica, dada la especificidad de TimeCurrent()


Añadido.
Será mejor que llame la atención de los desarrolladores sobre el retraso de OnTimer() de este post.

Archivos adjuntos:
 
Roman:

Prefiero llamar la atención de los desarrolladores sobre el retraso de OnTimer() de este post.

No se garantiza la precisión del temporizador en milisegundos. Y no se garantizará debido a las limitaciones de hardware.
 
Roman:

Prefiero llamar la atención de los desarrolladores sobre el retraso de OnTimer() de este post.

16 milisegundos es la precisión de cualquier cosa con milisegundos. Esto ya se ha discutido en alguna parte.
Con los microsegundos la precisión está bien, pero la velocidad es menor.
 
Nikolai Semko:
16 milisegundos es la precisión de cualquier cosa con milisegundos. Esto ya se ha discutido en alguna parte.
Con los microsegundos la precisión está bien, pero la velocidad es menor.

Está claro que la precisión del sistema es de ~16 milisegundos.
En el ejemplo se estableció más de 16, EventSetMillisecondTimer(20);
Este es el manejador OnTimer(), se ejecuta en incrementos de 20 milisegundos.
Pero el contador que se muestra en el comentario parece colgarse durante varios milisegundos.
No sé por qué - o bien el manejador OnTimer() se ralentiza o la cola de procesamiento de eventos del gráfico.

 
Roman:

Está claro que la precisión del sistema es de ~16 milisegundos.
En el ejemplo se estableció más de 16, EventSetMillisecondTimer(20);
Este es el manejador OnTimer(), se ejecuta en incrementos de 20 milisegundos.
Pero el contador que se muestra en el comentario parece colgarse durante varios milisegundos.
No sé por qué - o bien el manejador OnTimer() se ralentiza o la cola de procesamiento de eventos del gráfico.

Encontrado

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

¿Cómo crear una función para procesar cada milisegundo?

Nikolai Semko, 2018.09.13 04:45

Sí, así es. (sólo no la frecuencia, sino el período. Frecuencia máxima = 64 Hz)

Sólo para añadir una aclaración:

El paso de periodo para el temporizador = 15,625 milisegundos.

Es decir, con el comando EventSetMillisecondTimer(1) y con el comando EventSetMillisecondTimer(10) el periodo real será de 15,625 ms.

con el comando EventSetMillisecondTimer(21) y con el comando EventSetMillisecondTimer(30) el periodo real será de 31,25 ms.

Con el comando EventSetMillisecondTimer(95) y el comando EventSetMillisecondTimer(105), el periodo real será de 109,375 ms.

etc.

GetTickCount() cambia cada 1/(2^6)=1/64 segundos (15625 microsegundos).
 
Nikolai Semko:

encontrado

El valor de GetTickCount() cambia cada 1/(2^6)=1/64 segundos (15625 microsegundos).

Gracias, ahora veo cuál es la razón.
Cambio de paso del temporizador del sistema, sigue siendo un múltiplo de 15,625

Añadido.
Pero he cambiado el período del temporizador del sistema ganar api función timeBeginPeriod(1)
es decir, en la idea de que el temporizador del sistema se incrementa ahora a 1 milisegundo.
Y el paso del temporizador del sistema debería ser de 1 milisegundo, ¿verdad?
¿Por qué se sigue congelando el contador en el comentario?