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

 
fxsaber :
Gerçek bir örnek üzerinde tam sayıları karşılaştırmanın nüansı

Tam olarak bir saniyeyi ölçmek için Uyku (1000) kullanacak mısınız?

Ve işlemcideki zamanlayıcının 15 ms'lik bir hataya sahip olduğu sizin için bilinmiyor mu?

 
Slava :

Sleep(1000) slip ile tam olarak bir saniye mi ölçeceksiniz?

Ve işlemcideki zamanlayıcının 15 ms'lik bir hataya sahip olduğu sizin için bilinmiyor mu?


Merhaba, lütfen söyle bana, zamanlayıcı arabelleğini bir şekilde sıfırlamak mümkün mü? zamanlayıcı ayar hatasını ortadan kaldırmak için?

 
Vladislav Andruschenko :

Merhaba, lütfen söyle bana, zamanlayıcı arabelleğini bir şekilde sıfırlamak mümkün mü? zamanlayıcı ayar hatasını ortadan kaldırmak için?

Zamanlayıcı ayarı hatası, sistem ileti sırası dolu olduğu için oluşur. Bunun birçok nedeni olabilir. Kural olarak, kuyruk taşması geçici bir olgudur (geçici değilse, bilgisayarınızda çalışamazsınız)

Zamanlayıcıyı kontrol etmek için OnTick'i kullanın. Zamanlayıcı ayarlanmamışsa OnTick'e ayarlayın.

Bu arada, zamanlayıcıyı mesaj kuyruğunun durumundan ayırmaya çalışıyoruz.

PS Sistem zamanlayıcısına izin vermek ve zamanlayıcıyı uygulamaya ayarlamak - bu sorular hiçbir şekilde birbiriyle ilişkili değildir

 
Slava :

Sleep(1000) slip ile tam olarak bir saniye mi ölçeceksiniz?

Hayır, bu iki tamsayı karşılaştırma dizisinden bahsediyoruz.

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

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

fxsaber , 2018.01.24 21:48

Gerçek bir örnek üzerinde tam sayıları karşılaştırmanın nüansı
 //  if (GetMicrosecondCount() > StartTime + 1000000) // Неправильно
   if ( GetMicrosecondCount () - StartTime > 1000000 ) // Правильно

İlk bakışta, her iki satır da aynı sonuçları vermelidir. Ama değil. İlki bazen gerekli olanı vermez.

Zaman içindeki örnek, yalnızca gösterim amacıyla seçilmiştir.
Slava :

Ve işlemcideki zamanlayıcının 15 ms'lik bir hataya sahip olduğu sizin için bilinmiyor mu?

Hala GetTickCount'u kullanmanız garip. Bir mikrosaniye zamanlayıcısının bir milisaniyeden fazla yavaşlamadığı forumda (bakmak için çok tembel) kanıtlandı. Aynı zamanda, vahşi bir hataya sahip değildir.

 
fxsaber :

Hayır, bu iki tamsayı karşılaştırma dizisinden bahsediyoruz.

İlk bakışta, her iki satır da aynı sonuçları vermelidir. Ama değil. İlki bazen gerekli olanı vermez.

Zaman içindeki örnek, yalnızca gösterim amacıyla seçilmiştir.

Hala GetTickCount'u kullanmanız garip. Bir mikrosaniye zamanlayıcısının bir milisaniyeden fazla yavaşlamadığı forumda (bakmak için çok tembel) kanıtlandı. Aynı zamanda, vahşi bir hataya sahip değildir.

Uyku hakkındayım (1000)
 
Slava :

Zamanlayıcı ayarı hatası, sistem ileti sırası dolu olduğu için oluşur. Bunun birçok nedeni olabilir. Kural olarak, kuyruk taşması geçici bir olgudur (geçici değilse, bilgisayarınızda çalışamazsınız)

Zamanlayıcıyı kontrol etmek için OnTick'i kullanın. Zamanlayıcı ayarlanmamışsa OnTick'e ayarlayın.

Bu arada, zamanlayıcıyı mesaj kuyruğunun durumundan ayırmaya çalışıyoruz.

PS Sistem zamanlayıcısına izin vermek ve zamanlayıcıyı uygulamaya ayarlamak - bu sorular hiçbir şekilde birbiriyle ilişkili değildir


tam olarak bunu yapıyorum

Zamanlayıcı hatası bir süre sonra ortaya çıkıyor - hemen değil. ve tam olarak taşma nedeniyle - çok fazla veri olduğunda, örneğin siparişlerin geçmişi veya mevcut siparişlerin 50 veya daha fazla olması.

Bu yüzden, arabelleği temizlemek için bir işlev ekleyebilir miyim diye düşündüm. Tamam, kendi yolumu çizeceğim.

 
Slava :
Uykudan bahsediyorum(1000)

Evet, tam sayıları karşılaştırma konusunu konuştunuz.

 
fxsaber :

Evet, tam sayıları karşılaştırma konusunu konuştunuz.

Tam sayıları karşılaştırma sorunu yoktur.

Aynısını kayma olmadan ve GetMicrosecondsCount olmadan göster

 
Slava :

Tam sayıları karşılaştırma sorunu yoktur.

Aynısını kayma olmadan ve GetMicrosecondsCount olmadan göster

 ulong GetMicrosecondCount2()
{
   static ulong StartTime = 0 ;
  
   if (StartTime)
    StartTime += 1000001 ;             // При повторном - добавляем больше "секунды"
   else
    StartTime = ULONG_MAX - 1000000 ; // При первом запуске возвращаем это "время"
    
   return (StartTime);
}

void OnStart ()
{
   const ulong StartTime = GetMicrosecondCount2();
  
//  Sleep(1000);
  
//  if (GetMicrosecondCount2() > StartTime + 1000000) // Неправильно
   if (GetMicrosecondCount2() - StartTime > 1000000 ) // Правильно
     Print ( "Прошло больше секунды." );
   else
     Print ( "Прошло меньше секунды." ); 
}
Ve bu bir sorun değil, bir incelik.
 

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

"MetaTrader 5'e eklenen riskten korunma pozisyonu muhasebe sistemi" makalesinin tartışılması

fxsaber , 2018.01.25 10:14

  1. Andrey'in bu makaleyi okurken dikkat çektiği bir ticaret durumu örneği gösterilmektedir.
  2. HistorySelectByPosition, işleme neden olan siparişi seçemez.
  3. Oluşturduğu sipariş ve anlaşmanın farklı kimlikleri olabilir.
İkinci ve üçüncü noktalar en azından bir yerde dile getirilmelidir. Hangi yaptı.

Manuel ticaretin bile tarihinin analizinden bahsediyoruz, bir TS yazmaktan bahsetmiyoruz.

Örneğin, anlaşmanın nasıl düştüğünü anlamak istiyoruz.