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

 
Renat Fatkhullin :

bir senkronize sembol temel nesnesi. Tıklamalar sürekli olarak kaydedildiğinden Okuma / Yazma kilitleri karıştırılır.

Aynı anda tüm karakterler için bir karakter temel nesnesi? Öyleyse, EURUSD onay talebinin GBPUSD onay talebini potansiyel olarak yavaşlattığı ortaya çıkıyor.


Veritabanından ortak bir temelde istenmemesi için OnTick çağrıldığında MqlTick'i bunun için hazırlayabilir misiniz?

 
fxsaber :

Veritabanından ortak bir temelde istenmemesi için OnTick çağrıldığında MqlTick'i bunun için hazırlayabilir misiniz?

iyi olurdu, o zaman belki önceden tanımlanmış değişkenler, 4 - Sor ve Bid'de olduğu gibi MQL5'te görünecektir.

 

Büyük olasılıkla, frenler, birçok Uzman Danışman çalışırken MT5'in yüksek CPU tüketiminden kaynaklanır. MT4 ile nasıl olduğunu bilmiyorum. Aksi takdirde, paralel çalışan boş bir Terminalde gecikmelerin neden ortaya çıktığını açıklamak zordur.

Kesinlikle, ticaret ortamı API'sinin kullanımını en aza indirmek sorunu çözecektir. Teflerle dans ettikten sonra sonuçları yazacağım.

 
fxsaber :

Doğru anlaşılmadı. Her Uzman Danışman özel olarak ticaret yapar (gerçek keneler için Test Cihazında yavaşlamaz) ve başkalarına bağımlı değildir. Tüm ticaret mantığı yalnızca OnTick'te yürütülür, alım satım emirlerini tekrarlamadan, globaller ve kaynaklar olmadan spam yapmaz.

OnTrade*, OnBook - kullanılmaz. İkinci zamanlayıcı ve belirli tuşlara basılması durumunda OnChartEvent.


Anlık görüntülerin (sizin veya benim açımdan) yetkin bir şekilde uygulanmasının, standart ortam işlevlerine yapılan çağrıların sayısını büyük ölçüde azaltmaya yardımcı olacağından eminim. Buna göre, gecikmeler önemli ölçüde azaltılacaktır.

Anlık görüntü hilelerine geleceğini hiç düşünmemiştim. konuyu inceliyorum çünkü MT5 Expert Advisor'ın standart uygulaması maalesef yetersiz.

Sizin durumunuza hiç inanmıyorum.

Hesaplarımızı gösterdik
 
Renat Fatkhullin :
Sizin durumunuza hiç inanmıyorum.

TeamViewer veya benzeri aracılığıyla göstermeye hazırım.

 
:: TerminalInfoInteger ( TERMINAL_BUILD ) = 2605
( bool ):: TerminalInfoInteger ( TERMINAL_X64 ) = true
( bool ):: TerminalInfoInteger ( TERMINAL_VPS ) = false
:: HistoryDealsTotal () = 13973
:: HistoryOrdersTotal () = 18606
:: TerminalInfoInteger ( TERMINAL_MAXBARS ) = 5000
:: TerminalInfoInteger ( TERMINAL_MEMORY_USED ) = 1464
:: MQLInfoInteger ( MQL_MEMORY_USED ) = 5
:: ObjectsTotal ( 0 ) = 462
ChartsTotal = 16
:: SymbolsTotal ( true ) = 19 ( 16 + 3 )

Sizden Terminal'in bellek tüketimini nasıl azaltacağınıza dair bir tavsiye vermenizi rica ediyorum? 16 karakter için CopyTicks'ten yeni keneler kullanıyorum. Her CopyTicks'in bellekte 128K kene tuttuğu görülüyor. Onlara hiç ihtiyacım yok, ama hafızamda yatıyorlar - bırakın yapsınlar. Neredeyse 1.5 GB neye gidiyor? Geliştiriciler, belleğin hangi bölümünün neye harcandığını kendileri görebilirler. Bazı ilkel Görev Yöneticisi.

 
fxsaber :

Büyük olasılıkla, frenler, birçok Uzman Danışman çalışırken MT5'in yüksek CPU tüketiminden kaynaklanır. MT4 ile nasıl olduğunu bilmiyorum. Aksi takdirde, paralel çalışan boş bir Terminalde gecikmelerin neden ortaya çıktığını açıklamak zordur.

Kesinlikle, ticaret ortamı API'sinin kullanımını en aza indirmek sorunu çözecektir. Teflerle dans ettikten sonra sonuçları yazacağım.

Birkaç sayfa önce bahsettiğim şey buydu. Ayrıca, Expert Advisors oldukça basit ve likit olmayan semboller üzerinde olabilir, yani bu, Expert Advisor'ların her birinin kodunda meydana gelen matematiksel işlemlerin sayısı ile ilgili değildir. Sorun terminalin kendisinde yatıyor ve kodumuzu geliştirerek bunun üstesinden gelemeyiz. Ne yazık ki :(

PS OnBook'tan OnTick'e kadar Uzman Danışmanlarımın yarısında kullanılan mantığı yeniden yazdı, Core i5'i Xeon E5-2678 ile değiştirdi. Hız artmalı gibi ama ne yazık ki mucize gerçekleşmedi :(

 
Fren TarihiOnTrade fonksiyonlarında seçin.
 // Демонстрация лага HistorySelect в OnTrade*-функциях.
#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

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

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

const bool Init = EventSetTimer ( 1 );

void OnTimer ()
{
   static MqlTradeRequest Request = { 0 };
   static MqlTradeResult Result = { 0 };

   if ( PositionSelectByTicket (Result.order)) // Если позиция открыта - закрываем.
  {
    Request.type = ORDER_TYPE_SELL ;
    Request.price = SymbolInfoDouble ( _Symbol , SYMBOL_BID );
    Request.position = Result.order;
  }
   else // Иначе - открываем.
  {
    Request.action = TRADE_ACTION_DEAL ;
    Request.type = ORDER_TYPE_BUY ;
    Request.symbol = _Symbol ;
    Request.volume = 0.1 ;
    Request.price = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );
    Request.position = 0 ;
  }

   const bool AntiWarning = OrderSendAsync (Request, Result); // Асинхронный приказ не случайно
}

void OnTrade ()
{
  _B2( HistorySelect ( 0 , INT_MAX ));  
}


Neredeyse her adımda.

 2020.09 . 23 11 : 59 : 46.351 Alert : Time[Test6.mq5 437 : HistorySelect ( 0 , INT_MAX )] = 3 ms.
2020.09 . 23 11 : 59 : 46.354 Alert : Time[Test6.mq5 437 : HistorySelect ( 0 , INT_MAX )] = 2 ms.
2020.09 . 23 11 : 59 : 48.294 Alert : Time[Test6.mq5 437 : HistorySelect ( 0 , INT_MAX )] = 4 ms.
2020.09 . 23 11 : 59 : 48.296 Alert : Time[Test6.mq5 437 : HistorySelect ( 0 , INT_MAX )] = 2 ms.
2020.09 . 23 11 : 59 : 49.283 Alert : Time[Test6.mq5 437 : HistorySelect ( 0 , INT_MAX )] = 4 ms.
2020.09 . 23 11 : 59 : 49.285 Alert : Time[Test6.mq5 437 : HistorySelect ( 0 , INT_MAX )] = 2 ms.
2020.09 . 23 11 : 59 : 50.296 Alert : Time[Test6.mq5 437 : HistorySelect ( 0 , INT_MAX )] = 4 ms.
2020.09 . 23 11 : 59 : 50.302 Alert : Time[Test6.mq5 437 : HistorySelect ( 0 , INT_MAX )] = 5 ms.
2020.09 . 23 11 : 59 : 51.275 Alert : Time[Test6.mq5 437 : HistorySelect ( 0 , INT_MAX )] = 4 ms.
2020.09 . 23 11 : 59 : 51.277 Alert : Time[Test6.mq5 437 : HistorySelect ( 0 , INT_MAX )] = 2 ms.
2020.09 . 23 11 : 59 : 52.267 Alert : Time[Test6.mq5 437 : HistorySelect ( 0 , INT_MAX )] = 4 ms.
2020.09 . 23 11 : 59 : 52.269 Alert : Time[Test6.mq5 437 : HistorySelect ( 0 , INT_MAX )] = 2 ms.
2020.09 . 23 11 : 59 : 54.277 Alert : Time[Test6.mq5 437 : HistorySelect ( 0 , INT_MAX )] = 3 ms.
2020.09 . 23 11 : 59 : 54.282 Alert : Time[Test6.mq5 437 : HistorySelect ( 0 , INT_MAX )] = 5 ms.


Umarım önbellek oluşturma o kadar uzun sürmez ve bu gecikme, güncelleme sırasında veritabanına erişimle ilgilidir.

 

mt5'in neden 'Komisyonlar' sekmesini içermediğine dair bir fikriniz var mı? Sadece bir ticaret kapandıktan sonra ortaya çıkarlar.

Mt5'te neden "Komisyonlar" sekmesi olmadığı hakkında bir fikriniz var mı? Yalnızca işlem kapatıldıktan sonra görünürler.

 

Bu Expert Advisor'ı mevcut pozisyon ve emirlerin olmadığı bir hesapta çalıştırırsanız.

 // Создает маркет-ордер в случае, если нет текущих позиций и ордеров.
bool PositionOpen()
{
   bool Res = (! PositionsTotal () && ! OrdersTotal ());
  
   if (Res)
  {
     MqlTradeRequest Request = { 0 };
     MqlTradeResult Result;
    
    Request.action = TRADE_ACTION_DEAL ;
    Request.symbol = _Symbol ;
    Request.volume = 0.1 ;
    Request.price = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );
    
    Res = OrderSendAsync (Request, Result);    
  }
  
   return (Res);
}

void OnInit ()
{
  PositionOpen();
}

void OnTrade ()
{
  PositionOpen();
}

ve ardından Expert Advisor tarafından açılan pozisyonu elinizle kapatın, ardından hedge üzerinde üç açık pozisyon görünecektir (üçlü hacmin netleştirme pozisyonunda).


Bu doğru bir davranış mı? Büyük olasılıkla, Terminal'in nasıl çalıştığını yanlış anlıyorum. O zaman lütfen açıklayın.