MT5 ve iş başında hız - sayfa 52

 

makro olarak değiştirildi

 #define µsSLEEP(µsRange)                              \
        {                                             \
           ulong c = GetMicrosecondCount () + µsRange; \ 
           while ( GetMicrosecondCount () < c);          \
        }


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
   while (! _StopFlag )
   {
      µsSLEEP( 5000000 );
       Print ( "Прошло 5000000 микросекунд" );
   }
}
 
Roman :

Elbette bükülür, sadece bir çekirdek kullanamaz.

Uykusuzken demek istedim.

Burada kaymanın işe yaramayacağı açıktır, çünkü mikro saniyelere ihtiyaç vardır. Ama onsuz, vızıldayacak ...

 
Andrey Khatimlianskii :

Uykusuzken demek istedim.

Burada kaymanın işe yaramayacağı açıktır, çünkü mikro saniyelere ihtiyaç vardır. Ama onsuz, vızıldayacak ...

Elbette bükülür ve kaymaz.
GetMicrosecondCount sayacı çalışıyor

 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
   ulong µs = 0 ;
   
   while (! _StopFlag )
   {
      µs = GetMicrosecondCount ();
      
       Comment (( string )µs);
       ChartRedraw ();      
   }
   
   Comment ( "" );   
}
 
Roman :

Elbette bükülür ve kaymaz.
GetMicrosecondCount sayacı çalışıyor

Sadece sayacı yüklemez. Boş bir sonsuz döngü de yüklenecektir. ben bu konuda.

Genel olarak kötü karar. Ama tercih etmem.

 
Andrey Khatimlianskii :

Yükler sadece sayacı değil. Boş bir sonsuz döngü de yüklenecektir. ben bu konuda.

Genel olarak kötü karar. Ama tercih etmem.

Yani boş while, elbette, işlemci çevrimlerinin tam potansiyelini seçer.
Kötü bir kararla ilgili şikayeti anlamadım. Kaynaklar açısından size uymuyorsa bu kötü olduğu anlamına gelmez.
µsSLEEP, standart Uykudan (1) daha az döngü gecikmesi sağlar; yani mikrosaniye cinsinden, milisaniye cinsinden değil.
Yukarıdaki örneklerde 5000000, bu sadece bir örnek, gerçek savaş frekansı 1 ms'den az olacak

Sorununuzu anlamıyorum.
Yüklememeniz mi gerekiyor?
Her zamanki Uykuyu sağlayın(20); milisaniye cinsinden

 
Roman :

Dolayısıyla boş while, elbette, işlemci çevrimlerinin tam potansiyelini seçer.
Kötü bir kararla ilgili şikayeti anlamadım. Kaynaklar açısından size uymuyorsa bu kötü olduğu anlamına gelmez.
µsSLEEP, standart Uyku(1)'den daha az döngü gecikmesi sağlar; yani mikrosaniye cinsinden, milisaniye cinsinden değil.
Yukarıdaki örneklerde 5000000, bu sadece bir örnek, gerçek savaş frekansı 1 ms'den az olacak

Sorununuzu anlamıyorum.
Yüklememeniz mi gerekiyor?
Her zamanki Uykuyu sağlayın(20); milisaniye cinsinden

Hiçbir iddia yoktu.
İlgi dışında çalışılan böyle bir zamanlayıcıya ihtiyacım yok. Ancak işlemciyi gereksiz yere yüklediği için çözümü kötü buluyorum.

Ve hangi amaçla bir mikrosaniye uykuya ihtiyacınız var?

 
Andrey Khatimlianskii :

Hiçbir iddia yoktu.
İlgi dışında çalışılan böyle bir zamanlayıcıya ihtiyacım yok. Ancak işlemciyi gereksiz yere yüklediği için çözümü kötü buluyorum.

Ve hangi amaçla bir mikrosaniye uykuya ihtiyacınız var?

Neden yüklendiğini düşündüyseniz ve nedenini anladıysanız, böyle bir görüş olmazdı.
1 ms'den daha az döndürmek istiyorsanız, ne yazık ki, bir kaynakla ödeme yapın.
Ve bana öyle geliyor ki, bu durumda yük kaldırılamaz, çünkü herhangi birinin aralığı saymak için bir mikrosaniye zamanlayıcıya ihtiyacı vardır.
Öte yandan, mikrosaniye zamanlayıcı sürekli dönüyorsa ve boş bir süreye eşdeğer bir yük veriyorsa,
Sonra soru ortaya çıkıyor, ama ne için bu gecikmeyi ayarlayın ve bir mikrosaniye zamanlayıcı kullanın. Tamam, bu bir şarkı sözü.
Ve böylece sunucuya belirli bir sıklıkta ve gecikmeden ping atıyorum.
Ayrıca gereksiz aramalar olacağından mikrosaniyelik ayrıklık gereklidir.
Biraz önce yayınladığım ve yığına µsSleep yazdığım ilk çözümü kullanıyorum, işe yarayabilir.


 
Andrey Khatimlianskii :


Ve hangi amaçla bir mikrosaniye uykuya ihtiyacınız var?

İşte bitmiş çözüm.
Yazdır () doğal olarak kodunuzla değiştirirsiniz.

 #define SEND_PING                                           \
{                                                           \   
   ulong currCount = GetMicrosecondCount ();                 \
   switch ((currCount - prevCount) > 5000000 )                \
   {                                                        \
       case 0 :                                               \
         break ;                                             \
       case 1 :                                               \
         prevCount = currCount;                             \
         Print ( "ping" );                                     \
         break ;                                             \
   }                                                        \
}
       

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
   ulong   prevCount = 0 ;
   
   while (! _StopFlag )
   {
      SEND_PING;
   }  
 
}
 
Renat Fatkhullin :
Yazdığımız yeni test cihazında bunu değiştirmeye çalışacağız.
fxsaber :

LS'ye gönderildi.

Test Cihazında, bu EA, değişiklikler şeklinde milyonlarca eksiksiz ve makul (spam olmayan) ticaret emri kaydı oluşturur. Bu nedenle, Test Cihazının günlüğü feci şekilde hızlı bir şekilde tıkanır.

Bu günlüklere, vakaların %99'unda ihtiyaç duyulmaz, ancak genellikle ihtiyaç duyulan şey, EA'nın Yazdırma yoluyla çıktısıdır. Bu nedenle, her bir OrderSend grubu için otomatik kayıt oluşturma Test Cihazında olası devre dışı bırakma hakkında tekrar düşünmenizi rica ediyoruz.

Doğru anlarsam, bu tür dizilerin oluşturulmasını devre dışı bırakmak, tek çalıştırmaların performansını artıracaktır. Onlar. fayda iki katına çıkar.

 
Renat Fatkhullin :


Ancak Chicago'daki platformun fiziksel çekirdeğine sahip MetaTrader 5 için AMPGlobalEU-Live (aslında, AMPGlobalUSA-Live olarak aramak daha iyidir) en yakın sunucularımız New York'ta olduğundan, aslında 19.53 ms'dir:

Tüm noktalarını özellikle manuel olarak taradım - minimum 19 ms.

Önümüzdeki günlerde Chicago'ya sunucular koymaya çalışacağız. Eller ulaşmadı.

Chicago'da sunucu konuşlandırıldı.

Bir gün içinde tüm sunucuları tarayacak ve dağıtıma katılacak.