Benutzerdefinierte Symbole. Fehler, Bugs, Fragen, Vorschläge. - Seite 25

 
jaffer wilson:

Auf meiner Seite funktioniert das nicht.

Dies sind die Details meiner MT5-Version.


Versuchen Sie, den Systemzeitfehler zu ändern.

//+------------------------------------------------------------------+
//|                                           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 :


Versuchen Sie, den Systemzeitfehler zu ändern.

Ich habe es versucht. Bitte prüfen Sie die Datei. Und das Video. Sie werden es herausfinden. Auch ich bitte den Moderator, die angehängte Datei zu sehen.

Das Gleiche geschieht mit dem benutzerdefinierten Zeichen.

Dateien:
 
jaffer wilson:

Ich habe es versucht. Bitte prüfen Sie die Datei. Und das Video. Sie werden es herausfinden. Auch ich bitte den Moderator, die angehängte Datei zu sehen.

Das Gleiche geschieht mit dem benutzerdefinierten Zeichen.

Lesen Sie in der Dokumentation über TimeCurrent()

 
Roman :

Lesen Sie in der Dokumentation über TimeCurrent()

Ich nehme an, Sie haben die Datei nicht ausgeführt. Bitte, Sie können es einmal auf Ihrer Seite ausführen. Mein Programm verwendet TimeCurrent (), um die aktuelle Zeit zu ermitteln, wenn die Sekunden null oder weniger werden. Dadurch wird die Funktion SetTime () aufgerufen.

Wenn die verbleibende Zeit 50 Sekunden beträgt, wird TimeCurrent () nicht überprüft, sondern die Sekunden werden verringert. Ich denke, dies sollte sichtbar sein, wenn OnTimer () aufgerufen wird. Aber sie ist nicht sichtbar. Bitte überprüfen Sie es einmal.

 
jaffer wilson:

Ich nehme an, Sie haben die Datei nicht ausgeführt. Bitte, Sie können es einmal auf Ihrer Seite ausführen. Mein Programm verwendet TimeCurrent (), um die aktuelle Zeit zu ermitteln, wenn die Sekunden null oder weniger werden. Dadurch wird die Funktion SetTime () aufgerufen.

Wenn die verbleibende Zeit 50 Sekunden beträgt, wird TimeCurrent () nicht überprüft, sondern die Sekunden werden verringert. Ich denke, dies sollte sichtbar sein, wenn OnTimer () aufgerufen wird. Aber sie ist nicht sichtbar. Bitte überprüfen Sie es einmal.

Ich habe Ihre Datei ausgeführt, aber die Handler in Ihrem Code sind priorisiert worden.
Die beiden Indikatoren funktionieren fast identisch, wenn man die Besonderheiten von TimeCurrent() berücksichtigt


Hinzugefügt.
Ich sollte die Entwickler besser auf die OnTimer()-Verzögerung aus diesem Beitrag aufmerksam machen.

Dateien:
 
Roman:

Ich würde die Aufmerksamkeit der Entwickler lieber auf die OnTimer()-Verzögerung aus diesem Beitrag lenken.

Die Genauigkeit des Timers auf Millisekunden genau ist nicht garantiert. Und kann aufgrund von Hardwarebeschränkungen nicht garantiert werden.
 
Roman:

Ich würde die Aufmerksamkeit der Entwickler lieber auf die OnTimer()-Verzögerung aus diesem Beitrag lenken.

16 Millisekunden ist die Genauigkeit von allem, was mit Millisekunden zu tun hat. Dies wurde bereits irgendwo diskutiert.
Bei Mikrosekunden ist die Genauigkeit in Ordnung, aber die Geschwindigkeit ist langsamer.
 
Nikolai Semko:
16 Millisekunden ist die Genauigkeit von allem, was mit Millisekunden zu tun hat. Dies wurde bereits irgendwo diskutiert.
Bei Mikrosekunden ist die Genauigkeit in Ordnung, aber die Geschwindigkeit ist langsamer.

Es ist klar, dass die Systemgenauigkeit ~16 Millisekunden beträgt.
Im Beispiel wurde er höher als 16 gesetzt, EventSetMillisecondTimer(20);
Das ist der OnTimer()-Handler, der in Schritten von 20 Millisekunden läuft.
Aber der Zähler, der im Kommentar angezeigt wird, scheint für mehrere Millisekunden zu hängen.
Ich weiß nicht, warum - entweder Handler OnTimer() verlangsamt oder die Warteschlange der Chart-Ereignisse Verarbeitung.

 
Roman:

Es ist klar, dass die Systemgenauigkeit ~16 Millisekunden beträgt.
Im Beispiel wurde er höher als 16 gesetzt, EventSetMillisecondTimer(20);
Das ist der OnTimer()-Handler, der in Schritten von 20 Millisekunden läuft.
Aber der Zähler, der im Kommentar angezeigt wird, scheint für mehrere Millisekunden zu hängen.
Ich weiß nicht, warum - entweder Handler OnTimer() verlangsamt oder die Warteschlange der Chart-Ereignisse Verarbeitung.

Gefunden

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wie kann man eine Funktion erstellen, die jede Millisekunde verarbeitet?

Nikolai Semko, 2018.09.13 04:45

Ja, so ist es nun einmal. (nur nicht die Frequenz, sondern die Periode. Maximale Frequenz = 64 Hz)

Nur um eine Klarstellung hinzuzufügen:

Der Periodenschritt für den Timer = 15,625 Millisekunden.

D.h. beim Befehl EventSetMillisecondTimer(1) und beim Befehl EventSetMillisecondTimer(10) beträgt die tatsächliche Periode 15,625 ms.

mit dem Befehl EventSetMillisecondTimer(21) und mit dem Befehl EventSetMillisecondTimer(30) beträgt der tatsächliche Zeitraum 31,25 ms.

Mit dem Befehl EventSetMillisecondTimer(95) und dem Befehl EventSetMillisecondTimer(105) beträgt die tatsächliche Zeit 109,375 ms.

usw.

GetTickCount() ändert sich alle 1/(2^6)=1/64 Sekunden (15625 Mikrosekunden).
 
Nikolai Semko:

gefunden

Der Wert von GetTickCount() ändert sich alle 1/(2^6)=1/64 Sekunden (15625 Mikrosekunden).

Danke, jetzt weiß ich, woran das liegt.
Änderung der Systemzeitschaltuhr, immer noch ein Vielfaches von 15,625

Hinzugefügt.
Aber ich änderte die Periode des Systemtimers win api function timeBeginPeriod(1)
d.h. in der Idee wird der Systemtimer jetzt auf 1 Millisekunde hochgezählt.
Und der Systemtimerschritt sollte 1 Millisekunde betragen, richtig?
Warum friert der Zähler im Kommentar immer noch ein?