Özel semboller. Hatalar, hatalar, sorular, öneriler. - sayfa 25

 
jaffer wilson :

Benim tarafımda çalışmıyor.

Bunlar benim MT5 sürüm detaylarım.


Sistem saati hatasını değiştirmeyi deneyin.

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


Sistem saati hatasını değiştirmeyi deneyin.

Denedim. Lütfen dosyayı kontrol edin. Ve video. Öğreneceksiniz. Hatta moderatörden ekteki dosyayı görmesini rica ediyorum.

Aynı şey özel karakter için de geçerlidir.

Dosyalar:
 
jaffer wilson :

Denedim. Lütfen dosyayı kontrol edin. Ve video. Öğreneceksiniz. Hatta moderatörden ekteki dosyayı görmesini rica ediyorum.

Aynısı özel sembol için de geçerlidir.

TimeCurrent() belgelerini okuyun

 
Roman :

TimeCurrent() belgelerini okuyun

Dosyayı çalıştırmadığınızı varsayıyorum. Lütfen bir kez kendi tarafınızda çalıştırabilir misiniz? Programım, saniyeler sıfır veya daha az olduğunda geçerli saati almak için TimeCurrent () kullanıyor . Bu SetTime() işlevini çağıracaktır.

Sonra kalan süre 50 saniye ise TimeCurrent()'i kontrol etmeyecek, saniyeleri azaltacaktır. OnTimer() çağrıldığında görünür olması gerektiğini düşünüyorum. Ama görünmüyor. Lütfen bir kez kontrol edin.

 
jaffer wilson :

Dosyayı çalıştırmadığınızı varsayıyorum. Lütfen bir kez kendi tarafınızda çalıştırabilir misiniz? Programım, saniyeler sıfır veya daha az olduğunda geçerli saati almak için TimeCurrent () kullanıyor . Bu SetTime() işlevini çağıracaktır.

Sonra kalan süre 50 saniye ise TimeCurrent()'i kontrol etmeyecek, saniyeleri azaltacaktır. OnTimer() çağrıldığında görünür olması gerektiğini düşünüyorum. Ama görünmüyor. Lütfen bir kez kontrol edin.

Dosyanızı çalıştırdım, ancak kodunuzdaki işleyicilere öncelik verdim.
Bu iki gösterge, TimeCurrent() işlevinin özelliklerini dikkate alarak hemen hemen aynı şekilde çalışır.


Katma.
Geliştiricilerin dikkatini bu yazıdaki OnTimer() gecikmesine çekmeyi tercih ederim.

Dosyalar:
 
Roman :

Geliştiricilerin dikkatini bu yazıdaki OnTimer() gecikmesine çekmeyi tercih ederim.

Milisaniyeye kadar zamanlayıcı doğruluğu garanti edilmez. Ve donanım sınırlamaları nedeniyle garanti edilmeyecektir.
 
Roman :

Geliştiricilerin dikkatini bu yazıdaki OnTimer() gecikmesine çekmeyi tercih ederim.

16 milisaniye - milisaniyelerin göründüğü her şeyin doğruluğu. Bir yerde bu zaten tartışıldı.
Mikrosaniye ile doğruluk normaldir, ancak hız daha yavaştır.
 
Nikolai Semko :
16 milisaniye - milisaniyelerin göründüğü her şeyin doğruluğu. Bir yerde bu zaten tartışıldı.
Mikrosaniye ile doğruluk normaldir, ancak hız daha yavaştır.

Sistem doğruluğunun ~16 milisaniye olduğu açıktır.
Örnekte 16'dan fazla ayarlanmış, EventSetMillisecondTimer(20);
Yani, OnTimer() işleyicisi 20 milisaniyelik artışlarla çalışır.
Ancak yorumda görüntülenen sayaç birkaç milisaniye askıda kalmış gibi görünüyor.
OnTimer() işleyicisinin veya grafik olay işleme kuyruğunun neden yavaşladığı açık değil.

 
Roman :

Sistem doğruluğunun ~16 milisaniye olduğu açıktır.
Örnekte 16'dan fazla ayarlanmış, EventSetMillisecondTimer(20);
Yani, OnTimer() işleyicisi 20 milisaniyelik artışlarla çalışır.
Ancak yorumda görüntülenen sayaç birkaç milisaniye askıda kalmış gibi görünüyor.
OnTimer() işleyicisinin veya grafik olay işleme kuyruğunun neden yavaşladığı açık değil.

bulundu

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Her milisaniyeyi işlemek için bir işlev nasıl oluşturulur?

Nikolai Semko , 2018.09.13 04:45

Evet bu doğru. (sadece frekans değil, periyot. Maksimum frekans = 64 Hz)

Sadece bir açıklama ekleyeceğim:

zamanlayıcı periyodu adımı = 15.625 milisaniye.

Onlar. EventSetMillisecondTimer(1) komutu ve EventSetMillisecondTimer(10) komutu ile gerçek süre 15.625 ms olacaktır.

EventSetMillisecondTimer(21) komutu ve EventSetMillisecondTimer(30) komutu ile fiili süre 31,25 ms olacaktır.

EventSetMillisecondTimer(95) komutu ve EventSetMillisecondTimer(105) komutu ile gerçek süre 109.375 ms olacaktır.

vb.

GetTickCount() değerini her 1/(2^6)=1/64 saniyede bir (15625 mikrosaniye) değiştirin.
 
Nikolai Semko :

bulundu

GetTickCount() değerini her 1/(2^6)=1/64 saniyede bir (15625 mikrosaniye) değiştirin.

Teşekkürler, şimdi nedenini anladım.
Sistem zamanlayıcısını değiştirme adımı hala 15.625'in katıdır.

Katma.
Ama win api sistem zamanlayıcısının periyodunu timeBeginPeriod(1) fonksiyonuyla değiştirdim.
onlar. teoride, şimdi sistem zamanlayıcısı 1 milisaniyeye hız aşırtıldı.
Ve sistem zamanlayıcı adımı 1 milisaniye olmalı, değil mi?
O halde sayaç neden hala yorumda asılı duruyor?