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

 
Bir keresinde ilkel bir gecikme göstergesi yazdım. Örneğin, büyük bir torrent indirmesini mükemmel bir şekilde gösterir.
Ping
Ping
  • www.mql5.com
Для торговли важным параметром является актуальность текущей цены. На него влияет множество факторов, самый популярный из которых - сетевой пинг между терминалом и торговым сервером. Но часто из виду упускается другой параметр: так называемый "внутренний пинг терминала" - дополнительный лаг котировок внутри самого терминала (платформы) . Даже...
 
fxsaber :

Yanlış anlaşıldı. MT'nin fişleri olup olmadığını anlamanız gerekir. Gecikmeler on saniye boyunca değiştirildiğinde sunucu günlüklerini analiz ettik. Sunucuda her şey mükemmel.

Yani sorun başka bir yerde.

Geçmişteki fiyatlardan çok sık geçtiğimi öğrendim. Onlar. aslında Terminalde ciddi bir gecikme. Nasıl tanımlanacağı sorusu ortaya çıktı.

Bu yüzden bir VPS aldım. Mükemmel uyduğunu nasıl anlayabilirim? Bir çeşit numara olmalı. Yeniden aktarımlara, ortaya çıktığı gibi, güvenilemez. Gece yarısı - yüzde onlarca.


Tehdit Belki de ticaret sunucusunun bulunduğu aynı fiziksel makineye sanal bir makine dağıtmak ortaya çıkacaktır. Ve oradan savaş Terminalini başlatın. Muhtemelen daha az fiş olacaktır.

Bana izleme, konsoldan ping veya özel gibi geliyor. yazılım, sorun tanımlanmadı.
MT'nin katılımını bir şekilde kaydetmek gerekir. Bana öyle geliyor ki bir alınla dövmeniz ve geliştiricilerden TERMINAL _RETRANSMISSION'da kendi sayaçlarını yapmalarını istemeniz gerekiyor.

 
fxsaber :

Yanlış anlaşıldı. MT'nin fişleri olup olmadığını anlamanız gerekir. Gecikmeler on saniye boyunca değiştirildiğinde sunucu günlüklerini analiz ettik. Sunucuda her şey mükemmel.
Yani sorun başka bir yerde.
Geçmişteki fiyatlardan çok sık geçtiğimi öğrendim. Onlar. aslında Terminalde ciddi bir gecikme. Nasıl tanımlanacağı sorusu ortaya çıktı.

"Sunucuda her şey mükemmel" ifadesinin tam olarak ne anlama geldiği bir şekilde çok net değil:
1) Sunucuya herhangi bir değişiklik isteği gelmedi mi yoksa tüm isteklerin fiyatı 10 saniye içinde mi geçti?
2) "Mevcut" ve "eski" fiyatlar arasındaki fark kaç saniye?
3) Fiyatın eski olduğunu kim belirler: MT sunucusu veya üçüncü taraf, belki bir tür takas?


Sorun yineleniyorsa, Sysinternals'dan Process Monitor (Ağ Etkinliği) ile eşleştirilmiş Wireshark kullanılarak sipariş değişikliği trafiği analiz edilebilir.

 
Sergey Dzyublik :

"Sunucuda her şey mükemmel" ifadesinin tam olarak ne anlama geldiği bir şekilde çok net değil:
1) Sunucuya herhangi bir değişiklik isteği gelmedi mi yoksa tüm isteklerin fiyatı 10 saniye içinde mi geçti?
2) "Mevcut" ve "eski" fiyatlar arasındaki fark kaç saniye?
3) Fiyatın eski olduğunu kim belirler: MT sunucusu veya üçüncü taraf, belki bir tür takas?

Sunucuda, tüm istekler milisaniye cinsinden işlendi. Güncel olmayan fiyatlar için yönetici ile görüşmeniz gerekir.

Sorun yineleniyorsa, Sysinternals'dan Process Monitor (Ağ Etkinliği) ile eşleştirilmiş Wireshark kullanılarak sipariş değişikliği trafiği analiz edilebilir.

Bunda tam bir sıfırım.

 

HistorySelect işlevlerinin frenlerini yeniden ürettiği ortaya çıktı.

  1. Nispeten geniş bir ticaret geçmişine sahip bir MetaQuotes-Demo demo hesabına giriş yapın.
    1. Demo hesabının küçük bir ticaret geçmişi varsa, otomatik ticareti etkinleştirin ve OrderSend-Test2.ex5 komut dosyasını paralel olarak çalıştırın (uygulamada, kaynak ).
  2. İki EURUSD grafiği açın ve aşağıdaki her bir EA üzerinde çalıştırın ( sarı kaynak ek değişiklikleri gösterir).

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

    MT5 ve iş başında hız

    fxsaber , 2020.06.04 14:38

    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));
    
         HistorySelect ( MathRand (), INT_MAX );
        _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);      
    }

MT5 b2572 bu tür mesajlarla dolup taşıyor.

 2020.08 . 13 05 : 28 : 00.143 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 6 ms.
2020.08 . 13 05 : 28 : 00.148 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 3 ms.
2020.08 . 13 05 : 28 : 00.153 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 4 ms.
2020.08 . 13 05 : 28 : 00.162 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 5 ms.
2020.08 . 13 05 : 28 : 00.167 Alert : Time[Test6.mq5 34 : HistoryOrderSelect ( 0 )] = 2 ms.
2020.08 . 13 05 : 28 : 00.174 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 4 ms.
2020.08 . 13 05 : 28 : 00.180 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 5 ms.
2020.08 . 13 05 : 28 : 00.186 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 4 ms.
2020.08 . 13 05 : 28 : 00.194 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 6 ms.


Lütfen sonuçlarınızı kim deneyecek, yazın. Fren oynamak mı?


PS Uzun süre girmeye çalıştım, neden savaş hesaplarında frenler var. Görünüşe göre sorunlu bölgeyi buldum.

Dosyalar:
 
fxsaber :

PS Uzun süre girmeye çalıştım, neden savaş hesaplarında frenler var. Görünüşe göre sorunlu bölgeyi buldum.

Savaş durumu çok iç karartıcı görünüyor.

 2020.08 . 13 10 : 20 : 09.074 Expert (EURAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 59 ms.
2020.08 . 13 10 : 20 : 09.074 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 59 ms.
2020.08 . 13 10 : 20 : 09.074 Expert (GBPNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 59 ms.
2020.08 . 13 10 : 20 : 09.074 Expert (GBPAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 59 ms.
...
2020.08 . 13 11 : 31 : 58.559 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 34 ms.
2020.08 . 13 11 : 31 : 58.559 Expert (GBPNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 35 ms.
2020.08 . 13 11 : 31 : 58.624 Expert (EURAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 99 ms.
2020.08 . 13 11 : 32 : 12.483 Expert (GBPNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 7 ms.
2020.08 . 13 11 : 33 : 44.877 Expert (EURAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 27 ms.
2020.08 . 13 11 : 33 : 44.877 Expert (GBPNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 21 ms.
2020.08 . 13 11 : 33 : 44.879 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 27 ms.
2020.08 . 13 11 : 33 : 47.911 Expert (GBPAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 18 ms.
2020.08 . 13 11 : 33 : 47.911 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 18 ms.
2020.08 . 13 11 : 33 : 47.912 Expert (GBPNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 29 ms.

2020.08 . 13 11 : 33 : 49.312 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 22 ms.
2020.08 . 13 11 : 33 : 49.312 Expert (EURAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 22 ms.

2020.08 . 13 11 : 34 : 02.612 Expert (EURAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 63 ms.
2020.08 . 13 11 : 34 : 02.613 Expert (GBPNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 63 ms.

2020.08 . 13 11 : 34 : 02.616 Expert (GBPAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 56 ms.
2020.08 . 13 11 : 34 : 12.057 Expert (GBPAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 12 ms.

2020.08 . 13 11 : 34 : 30.643 Expert (EURAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 32 ms.
2020.08 . 13 11 : 34 : 30.643 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 32 ms.

2020.08 . 13 11 : 34 : 30.643 Expert (GBPAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 8 ms.
2020.08 . 13 11 : 37 : 17.059 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 24 ms.
2020.08 . 13 11 : 38 : 30.360 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 13 ms.

Daha yakından bakarsanız, bağımsız Uzman Danışmanların da aynı şekilde yavaşladığını fark edeceksiniz (gecikme süresi ve süresi). Onlar. birden fazla EA bir HistorySelect çağrısı yaptığında, MT5 bir süre tüm EA'ların yürütülmesini durdurur ve ardından sonuçlarını EA'lara döndürür.


Mimari olarak neden bu kadar garip (bariz olana kıyasla) bir ticaret geçmişi API'si seçildi? Bu yaklaşımdaki tuzaklar nerede?

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

MT5 ve iş başında hız

fxsaber , 2020.05.28 15:27

GeçmişSeçin.

Bu delicesine pahalı bir özellik. Ve ne yazık ki, hiçbir önbelleğe alma, çalışma hızını şu anda kabul edilebilir hale getiremez.


Lütfen tarihle çalışmak için bu tür işlevleri tanıtmayı düşünün.

HistoryDealsSelect( const int Index, const int Count = WHOLE_ARRAY );  // Из внутренней таблицы сделок взять сделки, начиная с заданного индекса в таблице.
HistoryOrdersSelect( const int Index, const int Count = WHOLE_ARRAY ); // Из внутренней таблицы ордеров взять ордера, начиная с заданного индекса в таблице.

HistorySelect frenlerini tamamen kaplayacaklardı. Çünkü en son işlemleri elde etme sorununu çözmek çok ucuz olacaktır. Şimdi savaş performansında bir eziyet.


OnTradeTransaction aracılığıyla en son işlemleri kontrol etmek her zaman mümkün değildir. Bu nedenle, tarihle hızlı çalışma önemlidir.


Ticaret geçmişiyle çalışırken MT4'ün performansının MT5'in hızını geçmesi muhtemelen normal değildir.

Lütfen Ticaret Terminalindeki frenleri kaldırın!

 
Tarihte 1000 işlem yeterli mi?
 
Rorschach :
Tarihte 1000 işlem yeterli mi?

Bu rakamlarla test edilmiştir.

        : HistoryDealsTotal () = 11045
        : HistoryOrdersTotal () = 11518
 

Siparişler 20990

Fırsatlar 10277

20 dakika içinde oturum açın

Dosyalar:
20200813.log  4817 kb
 
Rorschach :

Siparişler 20990

Fırsatlar 10277

20 dakika içinde oturum açın

Harika teşekkür ederim! Son olarak, MT5'in üzücü gecikmelerinin tam onayı. Ve bu herhangi bir ticaret özelliği olmadan. Sorunlar neredeyse her yerde.

KD       0        16 : 00 : 33.382     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 34 : HistoryOrderSelect ( 0 )] = 25 ms.
PE       0        16 : 00 : 44.913     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 17 : CopyTicks (Symb,Ticks, COPY_TICKS_ALL , 0 , 1 )] = 24 ms.
DP       0        16 : 00 : 44.888     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 46 ms.
FI       0        16 : 00 : 49.579     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 28 : HistoryDealSelect ( 0 )] = 22 ms.
EE       0        16 : 01 : 03.287     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 33 : HistoryOrderGetDouble ( 0 , ORDER_PRICE_CURRENT )] = 1 ms.
KE       0        16 : 01 : 07.013     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 50 : OrderGetDouble ( ORDER_PRICE_CURRENT )] = 1 ms.
JM       0        16 : 01 : 12.189     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 44 : TimeCurrent ()] = 39 ms.
MD       0        16 : 01 : 13.067     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 81 : ResourceFree ( NULL )] = 1 ms.
RS       0        16 : 01 : 13.572     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 41 : SymbolInfoDouble (Symb, SYMBOL_POINT )] = 7 ms.
GL       0        16 : 01 : 27.816     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 79 : GlobalVariableGet ( NULL )] = 22 ms.
PD       0        16 : 01 : 33.892     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 58 : PositionGetInteger ( POSITION_MAGIC )] = 1 ms.
KP       0        16 : 01 : 39.864     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 67 : OrderCheck (Request,CheckResult)] = 3 ms.
ML       0        16 : 01 : 39.970     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 62 : AccountInfoInteger ( ACCOUNT_MARGIN_MODE )] = 1 ms.
KM       0        16 : 01 : 41.045     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 55 : PositionSelect (Symb)] = 2 ms.
NS       0        16 : 01 : 46.832     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 78 : GlobalVariableCheck ( NULL )] = 1 ms.
JP       0        16 : 01 : 49.211     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 75 : SymbolName ( 0 , true )] = 1 ms.
EL       0        16 : 01 : 59.101     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 19 : CopyTicksRange (Symb,Ticks, COPY_TICKS_ALL ,Tick.time_msc)] = 32 ms.
IM       0        16 : 02 : 07.462     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 70 : AccountInfoInteger ( ACCOUNT_TRADE_EXPERT )] = 7 ms.
PJ       0        16 : 02 : 11.735     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 37 : IsStopped ()] = 4 ms.
OG       0        16 : 03 : 08.178     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 32 : HistoryOrderGetInteger ( 0 , ORDER_MAGIC )] = 14 ms.
JH       0        16 : 03 : 16.385     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 40 : SymbolInfoDouble (Symb, SYMBOL_TRADE_TICK_VALUE )] = 5 ms.
FM       0        16 : 03 : 16.601     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 59 : PositionGetString ( POSITION_SYMBOL )] = 1 ms.
GH       0        16 : 03 : 21.841     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 72 : TerminalInfoInteger ( TERMINAL_TRADE_ALLOWED )] = 1 ms.
FJ       0        16 : 03 : 25.782     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 46 : TimeTradeServer ()] = 1 ms.
EO       0        16 : 03 : 26.772     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 45 : TimeLocal ()] = 10 ms.
HD       0        16 : 03 : 36.595     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 13 : SymbolInfoTick (Symb,Tick)] = 13 ms.
...

Depresif bir şekilde. Sonucu Linux altında görmek ilginç olurdu. Win altında, gerçek zamanlı hakkında konuşmaya gerek yok.

Neden: