Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 95

 
Slava :

sorunun tamamını okudun mu?

... GetMicrosecondsCount'a yapılan iki çağrı arasında ...

Ben de bundan bahsediyorum. İlk arama senkronizasyondan önce ve ikincisi - senkronizasyondan sonra gerçekleşir. Fark şuna eşit olacaktır: gerçek mikrosaniye sayısı + zamanlama düzeltmesi.

 
Alexey Navoykov :

Ben de bundan bahsediyorum. İlk arama senkronizasyondan önce ve ikincisi - senkronizasyondan sonra gerçekleşir. Fark şuna eşit olacaktır: gerçek mikrosaniye sayısı + zamanlama düzeltmesi.

Şimdi bana GetMcrofsecondsCount'a yapılan iki çağrı arasındaki zaman ayarlaması olasılığını söyle?

Gerçekten mikrosaniyeyi ölçerseniz, olasılık neredeyse 0'dır.

Mikrosaniyeleri saniye veya daha fazla aralıklarla mı ölçüyorsunuz? Ne için? Bir boşlukta küre atı mı?

 
Alexey Navoykov :

Hatalısınız. Burada özellikle WinApi kullanımıyla kodu burada sonuçlandırdım. Koşun, süreçteki saati değiştirin ve sonuca bakın.

Argümanlarınız spekülasyona dayanıyorsa, sizinle herhangi bir diyaloğu nasıl yürüteceğiniz çok açık değil. Ve konunun tartışılmasının seyrine kendinizi alıştırmanın gerekli olduğunu bile düşünmüyorsunuz.

Açılan konu hakkında hiçbir fikriniz yok.

Dediğim gibi, zamanda beklenmeyen bir değişiklik, kullanılan işlevlerden bağımsız olarak kesin zaman kontrolüne bağlı kodu öldürür.
 
Slava :

Şimdi bana GetMcrofsecondsCount'a yapılan iki çağrı arasındaki zaman ayarlaması olasılığını söyle?

Gerçekten mikrosaniyeyi ölçerseniz, olasılık neredeyse 0'dır.

Mikrosaniyeleri saniye veya daha fazla aralıklarla mı ölçüyorsunuz? Ne için? Bir boşlukta küre atı mı?

Zaten cevapladım, bu olasılık senkronizasyon süresine bağlı. Ne kadar kısa olursa, vardiyaya o kadar sık gireceğiz, yani. daha yüksek olasılık. Ve ayrıca bitişik ölçümler arasındaki mesafeden. Ne kadar uzun olursa, vardiyaya o kadar sık gireceğiz. Onlar. olasılık, sadece gökyüzündeki bir parmak değil, bu iki parametreye göre hesaplanır.

Ve neden ikinci aralıklar hakkında hemen yazıyorsunuz? Peki ya milisaniye? Örneğin, 16 ms'den küçük olan her şey sadece bu fonksiyon ile ölçülebilir. Ve 16-30 milisaniye bile bu fonksiyon tarafından ölçülmelidir, aksi takdirde hata çok büyük olacaktır.

Size bunların önemsiz olduğu ve ihmal edilebilecekleri görünüyorsa, bu tamamen sizin kişisel fikrinizdir. Daha önce, olması gerektiği gibi, herhangi bir kayma olmadan çalışan normal sistem işlevi QueryPerformanceCounter'dan bahsetmiştik. Muhtemelen sadece icat edilmedi. Ve bu arada, burada Renat nedense şöyle dedi:

Mikrosaniyeleri bu şekilde sayıyoruz.

Aslında öyle olmasa da. QueryPerformanceCounter ile ilgiliydi

 
Renat Fatkhullin'in fotoğrafı.
Açılan konu hakkında hiçbir fikriniz yok.

Dediğim gibi, zamanda beklenmeyen bir değişiklik, kullanılan işlevlerden bağımsız olarak kesin zaman kontrolüne bağlı kodu öldürür.

QueryPerformanceCounter'da saat değişikliği yoktur. Ne hakkında konuşuyorsun? Sana linkini verdiğim kodu çalıştırdın mı?

 

MQL5 kod yürütme motorunu kontrol ettikten sonra GetMicrosecondCount'ta bir hibrit ölçüm şemamız olduğu ortaya çıktı:

  • Windows 8 ve üzeri için, sistem saatine bağlı olarak biraz daha hızlı GetSystemTimePreciseAsFileTime işlevi kullanıldı
  • diğer durumlar için, bir grup QueryPerformanceFrequency + QueryPerformanceCounter
  • her iki durumda da GetMicrosecondCount, programın başlangıcından itibaren mikrosaniye verme işlevini yerine getirdi.

Bu kod, zaman ölçümü çağrısında sistem ek yükünü azaltma girişimi nedeniyle ortaya çıktı. Geliştiricilerden biri aşırıya kaçtı.

Şahsen, Slava ve ben saf bir QueryPerformanceCounter'ın çalıştığından emindik. Ve böyle bir kod vardı. Ancak hibrit bir modelin varlığından dolayı bir hata yaptılar.

Artık yalnızca QueryPerformanceFrequency + QueryPerformanceCounter çalışacaktır.

Alt satır: evet, hem GetMicrosecondCount işlevinin uygulanmasında hem de davranışının korunmasında işleri batırdık.

Slava ve ben özür dileriz!
 
Bu konu ile ilgili olmayan yorumlar " Hatalar, hatalar, sorular " bölümüne taşınmıştır.
 
Renat Fatkhullin'in fotoğrafı.

Açık veya örtük bir biçimde "gerekir" ifadelerinin kullanımını hatırlatırım. "Lütfen dikkate alın" yerine "meta alıntılar" kullanımı artık kabul edilemez.

Sizden, çoğu zaman satır aralarını okumanın muhatabın yazdıklarıyla hiçbir ilgisi olmadığı varsayımını düşünmenizi istiyorum.

Forum yardımı ve MQ çarpması ile gerçek hata raporları uyumsuz şeylerdir. Ayakkabılarını sürekli olarak nefret eden ve sırtını değiştiren bir insanı hayal etmek zor.

 
MT5, GetMicrosecondCount kullanarak uzun zaman dilimlerini ölçer
 IS      0       13:32:55.239    Trades  '11391209': accepted exchange buy 1.00 AFKS at market
DM      0       13:33:07.896    Trades  '11391209': deal #265475900 buy 1.00 AFKS at 9.095 done (based on order #284425784)
OD      0       13:33:07.898    Trades  '11391209': order #284425784 buy 1.00 / 1.00 AFKS at 9.095 done in 12757.608 ms
 

Arkadaşlar, tavsiye için kime başvuracağımı söyleyebilir misiniz - Aynı ürün için farklı borsalarda fiyat farkı üzerinde nasıl çalışabileceğinizi anlamak istiyorum - Bu işte yeniyim, bunu anlamak istiyorum. Herhangi bir tavsiye için minnettar olurum - belki başka bir şubeye yazmam gerekir?

Birkaç döviz borsasına erişme yeteneğim var, ancak hepsinin nasıl çalıştığına dair bir anlayış yok