Simboli personalizzati. Errori, bug, domande, suggerimenti. - pagina 25

 
jaffer wilson:

Questo non funziona dalla mia parte.

Questi sono i dettagli della mia versione di MT5.


Prova a cambiare l'errore di tempo 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 :


Prova a cambiare l'errore di tempo del sistema.

Ho provato. Si prega di controllare il file. E il video. Lo scoprirete. Anche io chiedo al moderatore di vedere il file allegato.

La stessa cosa succede con il personaggio personalizzato.

 
jaffer wilson:

Ci ho provato. Si prega di controllare il file. E il video. Lo scoprirete. Anche io chiedo al moderatore di vedere il file allegato.

La stessa cosa succede con il personaggio personalizzato.

Leggi nella documentazione su TimeCurrent()

 
Roman :

Leggi nella documentazione su TimeCurrent()

Presumo che tu non abbia eseguito il file. Per favore, potete eseguirlo una volta dalla vostra parte. Il mio programma usa TimeCurrent () per ottenere l'ora corrente quando i secondi diventano zero o meno. Questo chiamerà la funzione SetTime ().

Poi se il tempo rimanente è di 50 secondi, allora non controllerà TimeCurrent (), ma diminuirà i secondi. Penso che questo dovrebbe essere visibile quando OnTimer () viene chiamato. Ma non è visibile. Per favore, controllate una volta.

 
jaffer wilson:

Presumo che non abbiate eseguito il file. Per favore, potete eseguirlo una volta dalla vostra parte. Il mio programma usa TimeCurrent () per ottenere l'ora corrente quando i secondi diventano zero o meno. Questo chiamerà la funzione SetTime ().

Poi se il tempo rimanente è di 50 secondi, allora non controllerà TimeCurrent (), ma diminuirà i secondi. Penso che questo dovrebbe essere visibile quando OnTimer () viene chiamato. Ma non è visibile. Per favore, controllate una volta.

Ho eseguito il tuo file, ma i gestori nel tuo codice hanno avuto la priorità.
I due indicatori funzionano in modo quasi identico, date le specifiche di TimeCurrent()


Aggiunto.
È meglio richiamare l'attenzione degli sviluppatori sul ritardo di OnTimer() di questo post.

File:
 
Roman:

Vorrei piuttosto attirare l'attenzione degli sviluppatori sul ritardo OnTimer() di questo post.

La precisione del timer al millisecondo non è garantita. E non sarà garantito a causa delle limitazioni dell'hardware.
 
Roman:

Vorrei piuttosto attirare l'attenzione degli sviluppatori sul ritardo OnTimer() di questo post.

16 millisecondi è la precisione di qualsiasi cosa che contenga millisecondi. Questo è già stato discusso da qualche parte.
Con i microsecondi la precisione è ok, ma la velocità è più lenta.
 
Nikolai Semko:
16 millisecondi è la precisione di qualsiasi cosa che contenga millisecondi. Questo è già stato discusso da qualche parte.
Con i microsecondi la precisione va bene, ma la velocità è più lenta.

È chiaro che la precisione del sistema è di ~16 millisecondi.
Nell'esempio è stato impostato più alto di 16, EventSetMillisecondTimer(20);
Questo è il gestore OnTimer(), eseguito in incrementi di 20 millisecondi.
Ma il contatore che viene visualizzato nel commento sembra bloccarsi per diversi millisecondi.
Non so perché - o il gestore OnTimer() rallenta o la coda di elaborazione degli eventi del grafico.

 
Roman:

È chiaro che la precisione del sistema è di ~16 millisecondi.
Nell'esempio è stato impostato più alto di 16, EventSetMillisecondTimer(20);
Questo è il gestore OnTimer(), eseguito in incrementi di 20 millisecondi.
Ma il contatore che viene visualizzato nel commento sembra bloccarsi per diversi millisecondi.
Non so perché - o il gestore OnTimer() rallenta o la coda di elaborazione degli eventi del grafico.

Trovato

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Come creare una funzione per elaborare ogni millisecondo?

Nikolai Semko, 2018.09.13 04:45

Sì, è così. (solo non la frequenza, ma il periodo. Frequenza massima = 64 Hz)

Solo per aggiungere un chiarimento:

Il passo di periodo per il timer = 15,625 millisecondi.

Cioè con il comando EventSetMillisecondTimer(1) e con il comando EventSetMillisecondTimer(10) il periodo reale sarà 15,625 ms.

con il comando EventSetMillisecondTimer(21) e con il comando EventSetMillisecondTimer(30) il periodo effettivo sarà di 31,25 ms.

Con il comando EventSetMillisecondTimer(95) e il comando EventSetMillisecondTimer(105), il periodo effettivo sarà 109,375 ms.

ecc.

GetTickCount() cambia ogni 1/(2^6)=1/64 secondi (15625 microsecondi).
 
Nikolai Semko:

trovato

Il valore di GetTickCount() cambia ogni 1/(2^6)=1/64 secondi (15625 microsecondi).

Grazie, ora capisco qual è la ragione.
Cambio di passo del timer di sistema, ancora un multiplo di 15,625

Aggiunto.
Ma ho cambiato il periodo del timer di sistema win api function timeBeginPeriod(1)
cioè in idea il timer di sistema è ora incrementato a 1 millisecondo.
E il passo del timer di sistema dovrebbe essere di 1 millisecondo, giusto?
Perché il contatore nel commento si blocca ancora?
Motivazione: