Gerçek zamanlı keneler - sayfa 17

 
Yuriy Zaytsev :

BUNDAN EMİN MİSİN ?


4 saniye???? , hayır! Gerçekten işlemcinin 4 saniye askıda kaldığını mı yoksa belleğin 4 saniyeliğine ayrılıp serbest bırakıldığını mı düşünüyorsunuz? Şaka mı yapıyorsun.

Büyük ihtimalle disk yazma sırasıdır.

Disk aygıtı bellek ve işlemciden daha yavaştır.

Ve sonra flush() , C dilinde böyle bir komut var, muhtemelen biliyorsunuzdur, uygun ve rahat olduğunda yürütülür ve daha sık disk yükleme ile ilişkili bir gecikme ile yürütülebilir.

Arabellekleri diske boşaltmanız gerektiğinde çağrılır.

Pek emin değilim çünkü. deneysel olarak MT'de kontrol etmedi. Ama bu bir nevi standart gibi - günlüğe bu girişe neden olan olayın zamanı daha önemliyse, neden günlükte diske yazma zamanı var, mantıklı mı?

Evet ve diske yazma zamanının loga yazıldığını varsayarsak ve disk yüklendiyse yine de fiziksel kayıtta gecikme olur ve yazma komutu göndermeye değer zaman olur. kayıt arabelleği.

onlar. sifon arabelleği değiştirmez - sadece gecikme olursa biraz sonra siler.

ps haklı olarak, yazmanın ve zamanın gerekli olduğunu fark ettim, tk. her durumda, yalnızca günlüğe yazarken terminalin kendisinin oluşturduğu zamana odaklanmanın bir anlamı yoktur.

 
Aleksey Mavrin :

Pek emin değilim çünkü. deneysel olarak MT'de kontrol etmedi. Ama bu bir nevi standart gibi - günlüğe bu girişe neden olan olayın zamanı daha önemliyse, neden günlükte diske yazma zamanı var, mantıklı mı?

Evet ve diske yazma zamanının loga yazıldığını varsayarsak ve disk yüklenirse yine de fiziksel kayıtta gecikme yaşarsınız ve yazmak için komut göndermeye değer zaman olur. kayıt arabelleği.

onlar. sifon arabelleği değiştirmez - sadece gecikme olursa biraz sonra siler.

ps haklı olarak, yazmanın ve zamanın gerekli olduğunu fark ettim, tk. her durumda, yalnızca günlüğe yazarken terminalin kendisinin oluşturduğu zamana odaklanmanın bir anlamı yoktur.


Zamanın diske yazmadan hemen önce eklendiğini, sonra her şeyin birlikte büyüdüğünü varsaydım.

betiği adım adım boyamaya çalışalım - daha net hale getirmek için


1-tick geldi (OnTick'e girdi) - yazdırılmalı

2-in OnTick'te bir günlük baskısı var - başarıyla kaydoldu

3-BU tik OnBock'a da gelir - ve ayrıca yazdırılmalıdır.

4-ve işte KABUS başlıyor Windows şu anda farklı programlardan diske aniden 20 veri akışı DÖKÜR ve diski geçici olarak bloke eder -

çünkü sürücü, verilerini başka bir yere yazmak için manyetik kafayı hareket ettirdiğinden -) ve oraya kendi başına bir şeyler yazar.

5-Şu anda metatrader DİSK'e bir şey göndermeye çalışıyor.

AMA DİSK, WINDOWS İŞLETİM SİSTEMİYLE ÇOK MEŞGUL OLDU - İşletim sistemi meta tüccara üzgün olduğunu söylüyor MQ Burada daha önemli görevlerim var - sabırlı olun

6- 4 saniye sürüyor Windows işini 4 saniyede yaptı

7- ve 4 saniye sonra Windows - kuyruğu diske bıraktı - ve metatrader'a diyor - saygın bir ticaret terminali - oraya diske bir şey yazmak istediniz mi? - tamam yaz!

8-metatrader, diske 4 saniyelik bir gecikmeyle yazar ve KAYITTAKİ ZAMAN'ı, verileri diske yazmak İSTEDİĞİ zaman değil, GERÇEKTE düzeltir.

buradan 4 saniye alınır



---

Terminal zamanının yerel saati arabelleğe alması gibi başka herhangi bir senaryo - ancak kayıt 4 saniye gecikti - BÖYLE SENARYO GEÇMİYOR

yoksa zamanlama doğru olurdu!

 
Aleksey Mavrin :

Pek emin değilim çünkü. MT'de deneysel olarak kontrol edilmedi . Ama bu bir nevi standart gibi - günlüğe bu girişe neden olan olayın zamanı daha önemliyse, neden günlükte diske yazma zamanı var, mantıklı mı?

Evet ve diske yazma zamanının loga yazıldığını varsayarsak ve disk yüklendiyse yine de fiziksel kayıtta gecikme olur ve yazma komutu göndermeye değer zaman olur. kayıt arabelleği.

onlar. sifon arabelleği değiştirmez - sadece gecikme olursa biraz sonra siler.

ps haklı olarak, yazmanın ve zamanın gerekli olduğunu fark ettim, tk. her durumda, yalnızca günlüğe yazarken terminalin kendisinin oluşturduğu zamana odaklanmanın bir anlamı yoktur.

Ve eğer kontrol etmediyseniz, o halde denemeyin.

Bu iş parçacığının ne hakkında olduğunu anlıyor musun?

Bana testi göster yoksa defol buradan

 
Aleksey Mavrin :

Pek emin değilim çünkü. deneysel olarak MT'de kontrol etmedi. Ama bu bir tür standart gibi - günlükte neden diske yazma zamanı var , eğer günlükte bu girişe neden olan olayın zamanı daha önemliyse, mantıklı mı?

Evet ve diske yazma zamanının loga yazıldığını varsayarsak ve disk yüklenirse yine de fiziksel kayıtta gecikme yaşarsınız ve yazmak için komut göndermeye değer zaman olur. kayıt arabelleği.

onlar. sifon arabelleği değiştirmez - sadece gecikme olursa biraz sonra siler.

ps haklı olarak, yazmanın ve zamanın gerekli olduğunu fark ettim, tk. her durumda, yalnızca günlüğe yazarken terminalin kendisinin oluşturduğu zamana odaklanmanın bir anlamı yoktur.

sadece bizim durumumuzda, diske yazmak için gereken süre ortaya çıkıyor !

Ancak olayın zamanı GetTickDescription prosedüründe organize edilebilir, bu konuda şubenin yazarına biraz daha yüksek yazdım.

Ve oraya koymuş olsaydı, 4 saniyelik gecikmenin olası nedenini kesinlikle tartışıyor olmazdık. Günlükte, büyük olasılıkla, yerel saat OnBok ve OnTik için aynı şekilde gelirdi, ancak çerez diskine yazma süresi 4 saniye farklılık gösterirdi.

 //+------------------------------------------------------------------+ 
//| возвращает строковое описание тика                               | 
//+------------------------------------------------------------------+ 
string GetTickDescription( MqlTick &tick)
{
..
..
Sergey Chalyshev :

Ve eğer kontrol etmediyseniz, o halde sakın denemeyin.

Bu iş parçacığının ne hakkında olduğunu anlıyor musun?

Bana testi göster yoksa defol buradan

neden bu kadar zor.

 

Teorik olarak, bu kene yakalamayı hassaslaştırabilir, bir veya daha fazla haftaya ayarlayabilirsiniz ve belki de kütüğe yazma tarihinin olayın tarihiyle çakışacağı anı yakalamak mümkün olacaktır.

Tabii ki, diski kayıt için periyodik olarak yükleyerek bu işlemi hızlandırabilirsiniz.

Başka bir soru, en önemlisi. ve neden bu araştırma için zaman harcıyorsun :-))), bundan ne kadar pratik bir egzoz.

---

Şu anda kenelerin önce OnTick'e geldiği ve ancak ondan sonra OnBook'a geldiği açık ki bu güzel bir şey.OnBuk sadece tikler için değil, örneğin borsada hacimler değiştiğinde yani birisi bir sipariş açtığında deniyor. , kapatılan veya silinen ciltler değişti. Ve takas için bu oldukça önemli bir bilgi.

Ve tabii ki STOK/FUE piyasasında alım satım kararlarının mantığını takip ederek, OnTick'te değil OnBock'ta yapmak daha mantıklı.

 
Sergey Chalyshev :

Ve eğer kontrol etmediyseniz, o halde sakın denemeyin.

Bu iş parçacığının ne hakkında olduğunu anlıyor musun?

Bana testi göster yoksa defol buradan

Burada deneyen sensin, kahretsin, 16 sayfa, olayın tetiklenme süresini Baskıdan önce düşünmedi - hatırlamak ve yazmak için, hızı ölçtüler, lanet uzmanlar)

Bana böyle gururla işaret ettiğin şey, diyorlar ki, kontrol etmedim, ama diyorum ki, sen kendin bunun ne olduğunu gerçekten anlamadın, tartışmaya hazırım. Ama muhtemelen anlamıyorsun.

Ve bu zamanın kesinlikle diske yazma zamanı olmadığı gerçeği, bu doğrulandı.

 
Sergey Chalyshev :

Ve eğer kontrol etmediyseniz, o halde denemeyin.

Bu iş parçacığının ne hakkında olduğunu anlıyor musun?

Bana testi göster yoksa defol buradan

Hadi, akıllı adam, en azından neye vardığını kontrol etmenin güvenilir bir yolunu göster, ve ben de anlamadığımı kabul edeceğim, yoksa kendin anlamadığını kabul et, özür dile ya da getir. kendin indir.

Yani, terminalin günlüğe ne zaman yazdığını deneysel olarak kontrol etmenin en az bir %100 güvenilir yolu, yani ana seçenekler:

1. terminalin kuyrukta Yazdır komutunu aldığı zaman.

2. Yazdır komutunun yürütülme zamanı.

3. arabelleğe yazdırmanın tamamlanma zamanı ve aniden)

Bu seçenek tam olarak neyin olmadığını tahmin edebilir:

4. diske yazdırma zamanı.

 
Aleksey Mavrin :

Hadi, akıllı adam, en azından neye vardığını kontrol etmenin güvenilir bir yolunu göster, ve ben de anlamadığımı kabul edeceğim, aksi halde anlamadığını kabul et, özür dile ya da kendin indir.

Yani, terminalin günlüğe ne zaman yazdığını deneysel olarak kontrol etmenin en az bir %100 güvenilir yolu, yani ana seçenekler:

1. terminalin kuyrukta Yazdır komutunu aldığı zaman.

2. Yazdır komutunun yürütülme zamanı.

3. arabelleğe yazdırmanın tamamlanma zamanı ve aniden)

Bu seçenek tam olarak neyin olmadığını tahmin edebilir:

4. diske yazdırma zamanı.

Sorun ne?

Kodunuzu bekliyorum...

 
prostotrader :

Sorun ne?

Kodunuzu bekliyorum...

Hangi kodu bekliyorsunuz? Sana bir şey vaat ettim mi? Hangi fiyata anlaştınız?

p / s / sen de arkadaşın gibi neden bahsettiğimi anlamadın.
 

Tartışmalar devam ederken 1 deney daha yaptım.

 //+------------------------------------------------------------------+
//|                                                   Ticks_test.mq5 |
//|                                      Copyright 2019 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
//---
bool is_book;
ulong st_time, func_time;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
  is_book = MarketBookAdd ( Symbol ());
  st_time = GetMicrosecondCount ();
  func_time = GetMicrosecondCount ();
   Print ( __FUNCTION__ , "; Time: " , MathAbs ((func_time - st_time)/ 1000 ), " ms" );
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   if (is_book == true ) MarketBookRelease ( Symbol ());
}
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent ( const string &symbol)
{
   if ( Symbol () == symbol)
  {
    func_time = GetMicrosecondCount ();
     Print ( __FUNCTION__ , "; Time: " , MathAbs ((func_time - st_time)/ 1000 ), " ms" );
  }
}
void OnTick ()
{
  func_time = GetMicrosecondCount ();
   Print ( __FUNCTION__ , "; Time: " , MathAbs ((func_time - st_time)/ 1000 ), " ms" );
}
//+------------------------------------------------------------------+

Yani, başlatma sırasında mikrosaniye süre algılıyorum,

ve her baskıdan önce tekrar zaman deliyorum

İdeal olarak böyle olmalı

2020.02.04 21:28:01.316	Ticks_test_2 (GOLD-3.20,M1)	OnTick; Time: 1395 ms
2020.02.04 21:28:01.316	Ticks_test_2 (GOLD-3.20,M1)	OnBookEvent; Time: 1395 ms

Ancak çoğu zaman şöyle çıkıyor (günlük alıntıları):

 2020.02 . 04 21 : 28 : 11.133 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 11212 ms
2020.02 . 04 21 : 28 : 11.139 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 11218 ms

2020.02 . 04 21 : 28 : 15.603 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 15682 ms
2020.02 . 04 21 : 28 : 15.609 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 15688 ms

2020.02 . 04 21 : 28 : 29.521 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 29599 ms
2020.02 . 04 21 : 28 : 29.790 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 29868 ms
2020.02 . 04 21 : 28 : 29.790 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 29868 ms

2020.02 . 04 21 : 28 : 33.109 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 33188 ms
2020.02 . 04 21 : 28 : 33.115 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 33194 ms

2020.02 . 04 21 : 28 : 40.800 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 40878 ms
2020.02 . 04 21 : 28 : 40.807 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 40885 ms

2020.02 . 04 21 : 28 : 41.891 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 41969 ms
2020.02 . 04 21 : 28 : 41.896 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 41974 ms

2020.02 . 04 21 : 28 : 52.984 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 53063 ms
2020.02 . 04 21 : 28 : 52.991 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 53070 ms

2020.02 . 04 21 : 28 : 54.457 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 54536 ms
2020.02 . 04 21 : 28 : 55.276 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 55355 ms

2020.02 . 04 21 : 29 : 10.643 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 70722 ms
2020.02 . 04 21 : 29 : 10.650 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 70729 ms

2020.02 . 04 21 : 29 : 14.674 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 74752 ms
2020.02 . 04 21 : 29 : 14.681 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 74759 ms

2020.02 . 04 21 : 29 : 25.306 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 85384 ms
2020.02 . 04 21 : 29 : 25.313 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 85390 ms

2020.02 . 04 21 : 29 : 30.468 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 90546 ms
2020.02 . 04 21 : 29 : 30.481 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 90559 ms

2020.02 . 04 21 : 29 : 30.866 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 90944 ms
2020.02 . 04 21 : 29 : 30.874 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 90951 ms

2020.02 . 04 21 : 29 : 36.680 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 96758 ms
2020.02 . 04 21 : 29 : 36.688 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 96766 ms

2020.02 . 04 21 : 29 : 37.891 Ticks_test_2 (GOLD- 3.20 ,M1)     OnTick ; Time: 97968 ms
2020.02 . 04 21 : 29 : 37.910 Ticks_test_2 (GOLD- 3.20 ,M1)     OnBookEvent ; Time: 97987 ms

Böylece print çağrıldığında yerel saat yazdırılacak şekilde yazılır.

Ama 4 saniyeye sığmaz...