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

 
fxsaber :

Yaygın bir olay gibi görünüyor. Ticaret fonksiyonlarını çağırmadı.

SymbolInfoTick bazen oldukça yavaştır. HFT, bu tür beklenmedik gecikmelerle çok zor olabilir.

Nedenlerini bulmak için Geliştiricilerden talep edin. Bu arada, savaş danışmanlarında kendi profil oluşturucunuzun bir zorunluluk olduğu ortaya çıkıyor.

"Boş" terminaldeki test ne gösterecek?

 void OnStart ()
  {
   MqlTick Tick;
//---
   ulong start,end,max_time= 0 ,avr_time= 0 ;
   int    count= 100000 ;
   for ( int i= 0 ; i<count; i++)
     {
      start= GetMicrosecondCount ();
       SymbolInfoTick ( _Symbol , Tick);
      end= GetMicrosecondCount ()-start;
       //--- >1 ms
       if (end> 1000 )
         Print ( " > 1 ms for one SymbolInfoTick: " , DoubleToString (end/ 1000.0 , 2 ), " ms" );
       //---
       if (end>max_time)
         max_time=end;
      avr_time+=end;
     }
   Print ( "SymbolInfoTick max time: " , DoubleToString (max_time/ 1000.0 , 3 ), " ms; avr time: " , DoubleToString (avr_time/ 1000.0 /count, 3 ), " ms; " ,count, " iterations" );
//---
   start= GetMicrosecondCount ();
   for ( int i= 0 ; i<count; i++)
       SymbolInfoTick ( _Symbol , Tick);
   end= GetMicrosecondCount ()-start;
   Print (count, " SymbolInfoTick = " , DoubleToString (end/ 1000.0 , 2 ), " ms" );
  }

Bunun gibi bir şey olmalı:

 2020.06 . 04 11 : 02 : 30.123 TestSymbolInfoTick (EURUSD,H1)   SymbolInfoTick max time: 0.138 ms; avr time: 0.000 ms; 100000 iterations
2020.06 . 04 11 : 02 : 30.138 TestSymbolInfoTick (EURUSD,H1)   100000 SymbolInfoTick = 14.85 ms
2020.06 . 04 11 : 02 : 31.433 TestSymbolInfoTick (EURUSD,H1)   SymbolInfoTick max time: 0.051 ms; avr time: 0.000 ms; 100000 iterations
2020.06 . 04 11 : 02 : 31.448 TestSymbolInfoTick (EURUSD,H1)   100000 SymbolInfoTick = 15.17 ms
2020.06 . 04 11 : 02 : 33.064 TestSymbolInfoTick (EURUSD,H1)   SymbolInfoTick max time: 0.035 ms; avr time: 0.000 ms; 100000 iterations
2020.06 . 04 11 : 02 : 33.079 TestSymbolInfoTick (EURUSD,H1)   100000 SymbolInfoTick = 15.12 ms

Ne yaptığınızı, terminalde tam olarak nasıl bir yük oluşturduğunuzu ayrıntılı olarak anlatmazsanız, nedenlerini bulmamız zor olacaktır.

 
Anton :

"Boş" terminaldeki test ne gösterecek?

Bunun gibi bir şey olmalı:

         SymbolInfoTick max time: 0.034 ms; avr time: 0.000 ms; 100000 iterations
         100000 SymbolInfoTick = 8.56 ms
         SymbolInfoTick max time: 0.047 ms; avr time: 0.000 ms; 100000 iterations
         100000 SymbolInfoTick = 9.04 ms
         SymbolInfoTick max time: 0.045 ms; avr time: 0.000 ms; 100000 iterations
         100000 SymbolInfoTick = 9.02 ms

Ne yaptığınızı, terminalde tam olarak nasıl bir yük oluşturduğunuzu ayrıntılı olarak anlatmazsanız, nedenlerini bulmamız zor olacaktır.

100K yineleme bir gösterge değildir. Çünkü İşlev her zaman yavaşlamaz, ancak bazen.

Aslında, frenler durana kadar savaş danışmanının parçalarını kapatmam gerekiyor. O zaman kodu verebilirim. Beklemeliyiz.

 
fxsaber :

Aslında, frenler durana kadar savaş danışmanının parçalarını kapatmam gerekiyor. O zaman kodu verebilirim. Beklemeliyiz.

Hızlı bir sonuç almak için bu Expert Advisor'ı birkaç sembol üzerinde çalıştırın.

 #include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

void OnTick ()
{
   MqlTick Tick[ 1 ];
  
   if (_B( CopyTicks ( _Symbol , Tick, COPY_TICKS_ALL , 0 , 1 ), 1 )) // Не знаю, влияет это или нет.
    _B( SymbolInfoTick ( _Symbol , Tick[ 0 ]), 1 );
}


Beş dakikada anladım.

         Alert : Time[Test6.mq5 8 : SymbolInfoTick ( _Symbol ,Tick[ 0 ])] = 9 ms.
         Alert : Time[Test6.mq5 8 : SymbolInfoTick ( _Symbol ,Tick[ 0 ])] = 3 ms.
         Alert : Time[Test6.mq5 8 : SymbolInfoTick ( _Symbol ,Tick[ 0 ])] = 4 ms.
         Alert : Time[Test6.mq5 8 : SymbolInfoTick ( _Symbol ,Tick[ 0 ])] = 1 ms.
         Alert : Time[Test6.mq5 8 : SymbolInfoTick ( _Symbol ,Tick[ 0 ])] = 2 ms.
         Alert : Time[Test6.mq5 8 : SymbolInfoTick ( _Symbol ,Tick[ 0 ])] = 5 ms.
         Alert : Time[Test6.mq5 8 : SymbolInfoTick ( _Symbol ,Tick[ 0 ])] = 2 ms.
         Alert : Time[Test6.mq5 8 : SymbolInfoTick ( _Symbol ,Tick[ 0 ])] = 1 ms.
         Alert : Time[Test6.mq5 8 : SymbolInfoTick ( _Symbol ,Tick[ 0 ])] = 16 ms.
         Alert : Time[Test6.mq5 8 : SymbolInfoTick ( _Symbol ,Tick[ 0 ])] = 16 ms.


EA'da sadece bunu (CopyTicks olmadan) bırakmak yeterli gibi görünüyor.

    _B( SymbolInfoTick ( _Symbol , Tick[ 0 ]), 1 );
 
fxsaber :

100K yineleme bir gösterge değildir. Çünkü İşlev her zaman yavaşlamaz, ancak bazen.

Bir fonksiyonun hızını belirleme kavramını değiştirmeyi öneriyorum.

Bir fonksiyon, süresinde tepe noktası yoksa hızlıdır.


Yukarıda gösterildiği gibi, basit işlevlerde bile bu tür tepe noktaları vardır. Bazen çok büyük. Bunun ne hakkında olduğu hakkında hiçbir fikrim yok. Ancak, önerildiği gibi yöntemi kullanarak zirvelerin varlığı için ticaret için kritik olan tüm işlevleri kontrol etmeniz gerektiği açıktır. Onlar. birkaç saat boyunca bir milisaniyeden daha büyük zirveleri çalıştırır ve izleriz.


En azından boş bir Terminalde pik olmamasını sağlamak gerekir. Hızlı 100.000 yineleme, ortaya çıktığı gibi, hiçbir şeyle ilgili değildir.

 
fxsaber :

Bir fonksiyonun hızını belirleme kavramını değiştirmeyi öneriyorum.

Süresinde ani artış yoksa bir işlev hızlıdır.


Yukarıda gösterildiği gibi, basit işlevlerde bile bu tür tepe noktaları vardır. Bazen çok büyük. Bunun ne hakkında olduğu hakkında hiçbir fikrim yok. Ancak, önerildiği gibi yöntemi kullanarak zirvelerin varlığı için ticaret için kritik olan tüm işlevleri kontrol etmeniz gerektiği açıktır. Onlar. bir milisaniyeden daha büyük zirveleri başlatır ve birkaç saat boyunca izleriz.


En azından boş bir Terminalde pik olmamasını sağlamak gerekir. Hızlı 100.000 yineleme, ortaya çıktığı gibi, hiçbir şeyle ilgili değildir.

Bazen, başka bir görev çalışıyorsa, zamanlayıcı kümülatif süreyi gösterir. Örneğin, tuval ile çalışırken bu olur - görüntülerken, işlev bir görüntü oluşturmadan görüntüleme için bir görev belirler ve geri döner. Ardından, mutlaka sırayla devam eden başka bir işlev yürütülür - örneğin, aynı yorum, ancak işlemcinin dilinde, tuvali görüntüleme işlemi gerçekleşmeye başlar ve yalnızca yorum görüntülendikten sonra. Ve zamanlamayı ölçerken, yorumun çok uzun bir süre görüntülendiğini görebilirsiniz. ancak tuval görüntüleme işlevi 0 ms'de çalıştı.

 
fxsaber :

birkaç saat boyunca bir milisaniyeden daha büyük zirveleri çalıştırır ve izleriz.

En azından boş bir Terminalde pik olmamasını sağlamak gerekir. Hızlı 100.000 yineleme, ortaya çıktığı gibi, hiçbir şeyle ilgili değildir.

Böyle bir danışman-izleme çizdim.

 // Мониторинг длительных пиков выполнения важных функций для торговли.
#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

input int inCycle = 10 ;     // Циклов проверки в одном OnTick
input int inAlertTime = 1 ; // Нижний порог в миллисекундах

#define _B2(A) _B(A, AlertTime)

void Check( const string Symb, const int AlertTime = 1 )
{
   MqlTick Tick;
  
   if (_B2( SymbolInfoTick (Symb, Tick)))
  {
     MqlTick Ticks[];
    
    _B2( CopyTicks (Symb, Ticks, COPY_TICKS_ALL , 0 , 1 ));
    _B2( CopyTicks (Symb, Ticks, COPY_TICKS_ALL , Tick.time_msc));
    _B2( CopyTicksRange (Symb, Ticks, COPY_TICKS_ALL , Tick.time_msc));

    _B2( HistorySelect (Tick.time, INT_MAX ));
    
    _B2( HistoryDealsTotal ());
    _B2( HistoryDealGetTicket ( 0 ));
    _B2( HistoryDealGetInteger ( 0 , DEAL_MAGIC ));
    _B2( HistoryDealGetDouble ( 0 , DEAL_PRICE ));
    _B2( HistoryDealSelect ( 0 ));

    _B2( HistoryOrdersTotal ());
    _B2( HistoryOrderGetTicket ( 0 ));
    _B2( HistoryOrderGetInteger ( 0 , ORDER_MAGIC ));
    _B2( HistoryOrderGetDouble ( 0 , ORDER_PRICE_CURRENT ));
    _B2( HistoryOrderSelect ( 0 ));
    
    _B2( GetLastError ());
    _B2( IsStopped ());
    
    _B2( SymbolInfoDouble (Symb, SYMBOL_ASK ));
    _B2( SymbolInfoDouble (Symb, SYMBOL_TRADE_TICK_VALUE ));
    _B2( SymbolInfoDouble (Symb, SYMBOL_POINT ));
    _B2( SymbolInfoInteger (Symb, SYMBOL_DIGITS ));

    _B2( TimeCurrent ());
    _B2( TimeLocal ());
    _B2( TimeTradeServer ());
    
    _B2( OrdersTotal ());
    _B2( OrderSelect ( 0 ));
    _B2( OrderGetDouble ( ORDER_PRICE_CURRENT ));
    _B2( OrderGetInteger ( ORDER_MAGIC ));
    _B2( OrderGetString ( ORDER_SYMBOL ));
    
    _B2( PositionsTotal ());
    _B2( PositionSelect (Symb));
    _B2( PositionSelectByTicket ( 0 ));
    _B2( PositionGetDouble ( POSITION_PRICE_CURRENT ));
    _B2( PositionGetInteger ( POSITION_MAGIC ));
    _B2( PositionGetString ( POSITION_SYMBOL ));
    
    _B2( AccountInfoDouble ( ACCOUNT_EQUITY ));
    _B2( AccountInfoInteger ( ACCOUNT_MARGIN_MODE ));
    
     MqlTradeRequest Request = { 0 };
     MqlTradeCheckResult CheckResult;

    _B2( OrderCheck (Request, CheckResult));
    
    _B2( MQLInfoInteger ( MQL_TRADE_ALLOWED ));
    _B2( AccountInfoInteger ( ACCOUNT_TRADE_EXPERT ));
    _B2( AccountInfoInteger ( ACCOUNT_TRADE_ALLOWED ));
    _B2( TerminalInfoInteger ( TERMINAL_TRADE_ALLOWED ));
    
    _B2( SymbolsTotal ( true ));
    _B2( SymbolName ( 0 , true ));
    _B2( Symbol ());
    
    _B2( GlobalVariableCheck ( NULL ));
    _B2( GlobalVariableGet ( NULL ));
    
    _B2( ResourceFree ( NULL ));
  }
}

void OnTick ()
{
   for ( int i = 0 ; i < inCycle; i++)
    Check( _Symbol , inAlertTime);
}


Beş dakikalık izlemede sonuç.

         Alert : Time[Test6.mq5 18 : HistorySelect (Tick.time, INT_MAX )] = 21 ms.
         Alert : Time[Test6.mq5 24 : HistoryDealSelect ( 0 )] = 4 ms.
         Alert : Time[Test6.mq5 10 : SymbolInfoTick (Symb,Tick)] = 24 ms.
         Alert : Time[Test6.mq5 14 : CopyTicks (Symb,Ticks, COPY_TICKS_ALL , 0 , 1 )] = 4 ms.
         Alert : Time[Test6.mq5 30 : HistoryOrderSelect ( 0 )] = 3 ms.
         Alert : Time[Test6.mq5 35 : SymbolInfoDouble (Symb, SYMBOL_ASK )] = 2 ms.


PS Giriş parametresinin bu değeri ile çok daha az uyarı vardır.

 input int inAlertTime = 10 ; // Нижний порог в миллисекундах


Ama sonuç daha da iyi.

         Alert : Time[Test6.mq5 21 : HistorySelect (Tick.time, INT_MAX )] = 19 ms.
         Alert : Time[Test6.mq5 21 : HistorySelect (Tick.time, INT_MAX )] = 10 ms.
         Alert : Time[Test6.mq5 38 : SymbolInfoDouble (Symb, SYMBOL_ASK )] = 10 ms.
         Alert : Time[Test6.mq5 13 : SymbolInfoTick (Symb,Tick)] = 10 ms.
         Alert : Time[Test6.mq5 38 : SymbolInfoDouble (Symb, SYMBOL_ASK )] = 10 ms.
         Alert : Time[Test6.mq5 17 : CopyTicks (Symb,Ticks, COPY_TICKS_ALL , 0 , 1 )] = 148 ms.
         Alert : Time[Test6.mq5 74 : SymbolName ( 0 , true )] = 11 ms.
 

Son olarak, bazen her sipariş için bir sipariş paketini değiştirmem 3-10 saniye sürüyor. Sonra tekrar 0.1 saniyelik uzun bir süre.

Yükseltilmiş sunucu günlükleri - anında orada.


Savaş danışmanı için bu çok tatsız.

 2020.06 . 04 15 : 24 : 48.771 Alert : Time[NewTicks.mqh 31 : :: SymbolInfoTick ( _Symbol ,Tick)] = 61 ms.
2020.06 . 04 15 : 25 : 21.729 Alert : Time[NewTicks.mqh 31 : :: SymbolInfoTick ( _Symbol ,Tick)] = 29 ms.
2020.06 . 04 15 : 27 : 57.842 Alert : Time[NewTicks.mqh 31 : :: SymbolInfoTick ( _Symbol ,Tick)] = 142 ms.


Bazı fantastik değer.

 
fxsaber :

Son olarak, bazen her sipariş için bir sipariş paketini değiştirmem 3-10 saniye sürüyor. Sonra tekrar 0.1 saniyelik uzun bir süre.

Yükseltilmiş sunucu günlükleri - anında orada.

Durum başka bir ticaret sunucusunda kendini tekrarladı.

Terminal, açık pozisyonu değiştirdi, 2,5 saniye sürdü. Sunucuda - 2 milisaniye.

Büyük olasılıkla ve buradan FORTS performansıyla ilgili sorunların bacakları büyüyor.

ФОРТС. Вопросы по исполнению
ФОРТС. Вопросы по исполнению
  • 2020.03.30
  • www.mql5.com
С большими проблемами удалось это сделать (начальник отдела по работе с профессиональными клиентами ДЦ Открытие Евгений Сергеевич,.
 

Yeniden iletir.

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

MetaTrader 5 platformu 1700 beta sürümünü oluşturur: MetaEditor ve sentetik araçlardaki projeler

Renat Fatkhullin , 2017.12.14 12:47

Bu, bağlantının kalitesinin bir göstergesidir. TCP/IP protokolünde yeniden iletilen ağ paketlerinin yüzdesi.

Tüm işletim sisteminin tüm uygulamaları için ağ arabirimi düzeyinde küresel olarak kabul edilir. Fren ve sorun şüphesi olduğunda bu göstergeye bakın. Aracının sunucusu çok uzakta olduğunda bu çok önemlidir. Örneğin, Asyalı tüccarlar ve Avrupa'daki bir komisyoncu için.

Zaten yeniden aktarımların %3'ünde ticaret yapmanın imkansız olduğunu söyleyebiliriz. Aşırı düzeyde yeniden iletim, kötü bir Wi-Fi verir.

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

MetaTrader 5 platformunun yeni sürümü build 2360: SQLite ile genişletilmiş entegrasyon

Renat Fatkhullin , 2020.04.06 12:33

Oran %1'den az olmalıdır. Ve zaten ağ kayıplarının %3'ü düşük gecikmeli hizmetler tarafından öldürülüyor.

Örneğin, açıkça daha fazla kullanıcıyla (şu anda MetaQuotes-Demo'da 17k çevrimiçi) 0,68 - 0,75 oranında yeniden iletimimiz var. Ve biz tüm dünyaya hizmet ediyoruz, Moskova/Rusya'ya değil.

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

Hatalar, hatalar, sorular

Renat Fatkhullin , 2017.12.17 23:03

Bunlar, Metatrader'ın kullanıcılardan yalnızca biri olduğu tüm bilgisayarın ağ arayüzünün istatistikleridir. Ticaret sunucusuyla ilgili olması gerekmez.

Buggy ve uzak bir siteye başarısız bir erişimden sonra bir web tarayıcısı tarafından genel istatistikleri bozmak kolaydır. Veya yerel bir Wi-Fi ile bir ağ çakışmasını yakalayabilir ve rastgele zamanlarda yüzde onlarca yeniden aktarım elde edebilirsiniz.

Yeniden aktarımların %20'sinde, prensip olarak ticaret sunucusuyla iletişim sürdürülmeyecek, yeniden bağlantılar sürekli ve sonsuz olacaktır. Terminalin kalıcı bir bağlantısı vardır ve bunun için (TCP / IP için, daha kesin olmak gerekirse) uzun bağlantıların sürdürülmesi görevinde yeniden iletimlerin %3-5'i bile ölümcüldür.

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

Hatalar, hatalar, sorular

Renat Fatkhullin , 2017.12.18 11:36

Lütfen bunun işletim sistemi tarafından bildirilen yerel TCP/IP yığınınızın teknik bir özelliği olduğunu ve ticaret sunucularına belirli bir bağlantının kalitesinin bir göstergesi olmadığını unutmayın. Sistem/arka plan etkinliği dahil tüm ağ etkinliğini içerir.


Ticaret kümesi kesinlikle yüksek kaliteli bir bağlantıya sahiptir ve rutin olarak birçok parametreyi kaydederiz (bu, platformun normal işlevidir), sonraki analizlerle birlikte dakika anlık görüntüleri toplarız.

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

Hatalar, hatalar, sorular

Renat Fatkhullin , 2017.12.18 00:13

Kontrol.

Asya da dahil olmak üzere demo kümemizdeki düğümlerin hiçbiri, tüm gün (ve diğer günler de) için yeniden başlatma veya yeniden iletim düzeylerini artırmadı. Her şey %0.5'ten %1.5'e kadar normal.


Görünüşe göre çok şeyim var.

Şimdi gece yarısı, alıntılar nadiren güncelleniyor. Yeniden aktarımlar gözlerimizin önünde artıyor. VPS'de düşük gecikmeli ticaret için > %1 yüksek bir değerde bir Uyarı ayarlamak istiyorum. Ancak bu kadar büyük değerlerle bu fikir anlamsız hale geliyor.


Ne tavsiye edilebilir? Ticaret sunucusuna tracert yapıyor musunuz? Herhangi bir izleme yazılımı? Genel olarak, MT5'in düşük gecikmeye hazır olduğundan nasıl emin olunur?


Tehdit Fiyatlar daha hızlı hareket etmeye başlar başlamaz gösterge önemli ölçüde düşer.

 
fxsaber :

Yeniden iletir.


Çok şeyim var gibi görünüyor.

sabah 5-6:

Evde (optik, yönlendiriciye ETH, bilgisayara kablo) - %8-19, ping 60-70

Hollanda'da VPS (şu anda 9 para birimi/11 grafik ile 1 MT5) - %1.2-1.6, ping 3.7

Neden: