MT5 Kod Profil Oluşturucu Hakkında - sayfa 5

 
Kafamı karıştıran tek şey ikinci kayma. Diğer her şey geçerlidir.

hadi çözelim
 
Renat Fatkhullin # :
Kafamı karıştıran tek şey ikinci kayma. Diğer her şey geçerlidir.

Görünüşe göre, profil oluşturucu birkaç milisaniyeden daha hızlı çalışan kod parçalarını hızlandırmak amacıyla uygun değil.

 
#include <fxsaber\Usage\Usage.mqh> // https://www.mql5.com/ru/code/33875

const bool Init = EventSetMillisecondTimer ( 1 );

void Sleep2( uint Interval )
{
   const ulong StartTime = GetMicrosecondCount ();
  
  Interval *= 1000 ;
  
   while ( GetMicrosecondCount () - StartTime < Interval)
    ;
}

#define Sleep Sleep2

void f()
{
   Sleep ( 10 );
}

void OnTimer ()
{
  _USAGE
  
  f();
  
   Sleep ( 20 );
}

EA, 30 ms'lik bir kayma içinde ve profil oluşturucu, bunun %13'ünün üç toplama ve iki çarpmanın olduğu bir fonksiyonda olduğunu gösteriyor!


Ve işte b2593'ün gösterdiği şey.

Orada sıfır! Çünkü gerçekten sıfır var. Üstelik ikinci rapora göre her şey son derece açık.


Anlayalım, geliştirelim, küfretmeyelim.

 
fxsaber # :

profil oluşturucu, bunun %13 kadarının üç toplama ve iki çarpma işleminin yapıldığı bir fonksiyonda olduğunu gösteriyor!

Bu yüzden, OnTick'te tam geçişi ortalama 3 ms süren (birçok hesaplama ve ticaret ortamıyla çalışma var) savaş danışmanının, sözde% 60'lık bir profil oluştururken "üç ekleme ve iki" olduğunu düşündüm. çarpımlar". Bu kadar özlü örneklere geldim.


MT5'te eski profil oluşturucuyu kullanmak istiyorum ama burada bu tür dansları buildlerle yapmam gerekiyor. Hala başlatılamadı.

 
fxsaber # :

Basit bir örnek kullanarak profil oluşturucu verilerinin yorumlanmasına yardımcı olmanızı rica ediyorum.


Her şey çılgınca saçmalık gibi görünüyor.

  • Uyku(2) tamamen eksik.
  • Nedense KULLANIM, Uykudan (1) birkaç kat daha fazla hayatta kalır.


İçeri girmeye çalışıyorum ama henüz çıkamıyorum.


ZY Uykunun değiştirilmesini denedi.

Hepsi de anlaşılmaz profiler değerleri.

Arama raporunda neler var?

Verilen kodun ekran görüntüsündeki raporla eşleşmediği izlenimi var.
Profil oluşturucu çalışırken kodu tam olarak düzeltmediniz mi?

 
Ilyas # :

Arama raporunda neler var?

Verilen kodun ekran görüntüsündeki raporla eşleşmediği izlenimi var.
Profil oluşturucu çalışırken kodu tam olarak düzeltmediniz mi?

Yönetmedi.


 2021.09 . 10 11 : 46 : 48.616 MQL5 profiler   8064 total measurements, 0 / 0 errors, 2014 kb of stack memory analyzed ( 11256 / 1073741824 )
2021.09 . 10 11 : 46 : 48.616 MQL5 profiler   49442 total function frames found ( 9141 mql5 code, 6461 built-in, 11590 other, 22250 system)
 

Profil oluşturucunun sonuçlarını deşifre etmek için yardım istiyorum.

 #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

void OnStart ()
{   
   double Res = 0 ;
   const int Total = OrdersHistoryTotal();
  
   for ( int i = 0 ; i < Total; i++)
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY))
      Res += OrderProfit();      
}
MQL Profil Oluşturucu Raporu - \MQL5\Experts\Test19.mq5
işlev astar Toplam CPU Yüzde öz işlemci Yüzde
MT4ORDERS::GetHistoryPositionData 1093 7
%50,00
2
%14.29
MT4ORDERS::Order.CloseTimeMsc = ::HistoryDealGetInteger(Ticket, DEAL_TIME_MSC); 1109 1
%12.50
1
%50,00
} 1360 1
%12.50
1
%50,00
return(Ticket && ((::HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket) || 824 2
%25.00
0
%0.00
WHILE(_B2(MT4ORDERS::HistorySelectOrder(OrderTicket))) // https://www.mql5.com/ru/forum/304239#comment_10710403 1151 1
%12.50
0
%0.00
StartTime = ::GetMicrosecondCount(); 1370 1
%12.50
0
%0.00
double OrderPriceOpen = ::HistoryOrderGetDouble(OrderTicket, ORDER_PRICE_OPEN); 1182 1
%12.50
0
%0.00
MT4ORDERS::Order.TicketID = ::HistoryDealGetInteger(MT4ORDERS::Order.Ticket, DEAL_POSITION_ID); 1096 1
%12.50
0
%0.00
CHashMap<ulong,ulong>::Yeniden boyutlandır 514 1
%7.14
1
%7.14
m_entries[i].next = m_buckets[bucket]; 526 1
%12.50
1
%100,00
ArrayFill(m_buckets,0,new_size,-1); 518 7
%87,50
0
%0.00
@global_initializations 1
%7.14
1
%7.14
sınıf MT4HISTORY 428 1
%50,00
1
%100,00
static const bool MT4ORDERS::IsTester = ::MQLInfoInteger(MQL_TESTER); 2496 1
%50,00
0
%0.00
MT4HISTORY::YenilemeTarihi 588 6
%42.86
0
%0.00
this.Tickets[this.Amount - 1] = (uzun)TicketDeal; 626 2
%28.57
0
%0.00
if (_B2(::HistorySelect(0, INT_MAX))) 590 3
%42.86
0
%0.00
::HistoryDealGetInteger((TicketDeal = ::HistoryDealGetTicket(this.LastTotalDeals)), DEAL_TIME_MSC) : LONG_MAX; 636 1
%14.29
0
%0.00
dönüş(!::HistoryOrderGetInteger(Ticket, ORDER_POSITION_ID) || (::HistoryOrderGetDouble(Ticket, ORDER_VOLUME_CURRENT) && 660 1
%14.29
0
%0.00
CHashMap<ulong,ulong>::Ekle 294 1
%7.14
0
%0.00
yeniden boyutlandır(yeni_boyut); 600 1
%50,00
0
%0.00
if((aday%bölen)==0) 40 1
%50,00
0
%0.00
başlangıçta 3 on üç
%92.86
0
%0.00
_B2(this.RefreshHistory()); 763 6
%40.00
0
%0.00
_BV2(MT4ORDERS::GetHistoryPositionData(Bilet)) 1872 7
%46.67
0
%0.00
return(_B2(MT4ORDERS::MT4OrderSelect(Index, Select, Pool))); 2588 2
13.33
0
%0.00



MQL Profil Oluşturucu Raporu - \MQL5\Experts\Test19.mq5
işlev astar Toplam CPU Yüzde öz işlemci Yüzde
GeçmişSiparişGetTamsayı 3
%21.43
3
%21.43
WHILE(_B2(MT4ORDERS::HistorySelectOrder(OrderTicket))) // https://www.mql5.com/ru/forum/304239#comment_10710403 1151 1
%7.14
3
%21.43
return(Ticket && ((::HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket) || 824 2
%14.29
3
%21.43
GeçmişSeç 3
%21.43
3
%21.43
if (_B2(::HistorySelect(0, INT_MAX))) 590 3
%21.43
3
%21.43
GeçmişSiparişGetDouble 2
%14.29
2
%14.29
double OrderPriceOpen = ::HistoryOrderGetDouble(OrderTicket, ORDER_PRICE_OPEN); 1182 1
%7.14
2
%14.29
dönüş(!::HistoryOrderGetInteger(Ticket, ORDER_POSITION_ID) || (::HistoryOrderGetDouble(Ticket, ORDER_VOLUME_CURRENT) && 660 1
%7.14
2
%14.29
MT4ORDERS::GetHistoryPositionData 1093 7
%50,00
2
%14.29
_BV2(MT4ORDERS::GetHistoryPositionData(Bilet)) 1872 7
%50,00
2
%14.29
GetMikrosaniyeSayısı 1
%7.14
1
%7.14
StartTime = ::GetMicrosecondCount(); 1370 1
%7.14
1
%7.14
CHashMap<ulong,ulong>::Yeniden boyutlandır 514 1
%7.14
1
%7.14
yeniden boyutlandır(yeni_boyut); 600 1
%7.14
1
%7.14
GeçmişAnlaşmaGetTamsayı 1
%7.14
1
%7.14
::HistoryDealGetInteger((TicketDeal = ::HistoryDealGetTicket(this.LastTotalDeals)), DEAL_TIME_MSC) : LONG_MAX; 636 1
%7.14
1
%7.14
@global_initializations 1
%7.14
1
%7.14
CHashMap<ulong,ulong>::Ekle 294 1
%7.14
0
%0.00
this.Tickets[this.Amount - 1] = (uzun)TicketDeal; 626 1
%7.14
0
%0.00
OnStart() geçersiz 3 on üç
%92.86
0
%0.00
MT4HISTORY::RefreshHistory 588 6
%42.86
0
%0.00
_B2(this.RefreshHistory()); 763 6
%42.86
0
%0.00
 
fxsaber # :

Profil oluşturucunun sonuçlarını deşifre etmek için yardım istiyorum.

Ne net değil?

Genelde Toplam CPU'ya göre sıralarım ve programı bir bütün olarak neyin yavaşlattığını görürüm. Faydalı olur.

Tarihte 5700 siparişle, ilk çalıştırmada neredeyse boş bir rapor aldım ve ardından bu:

Bunların çoğu, HistoryDealGetInteger (tüm aramalar %36'yı aldı) ve HistorySelect'i (%27) yiyor. Ardından HistoryOrderGetInteger (%18) ve global_initialization (%9) gelir.

Kalan %10 kodun geri kalanına gitti.


Ancak bu kadar hızlı tek bir uygulamada, sonuçlara bakmanın bir anlamı yok, IMHO.

 
Andrey Khatimlianskii # :

Ne net değil?

Yorumlama ile ilgili sorun. Neyin, nerede ve nasıl yavaşladığına dair bir anlayış yok.

Genelde Toplam CPU'ya göre sıralarım ve programı bir bütün olarak neyin yavaşlattığını görürüm. Faydalı olur.

Tarihte 5700 siparişle, ilk lansmanda neredeyse boş bir rapor aldım ve ardından bu:

Bunların çoğu, HistoryDealGetInteger (tüm aramalar %36'yı aldı) ve HistorySelect'i (%27) yiyor. Ardından HistoryOrderGetInteger (%18) ve global_initialization (%9) gelir.

Kalan %10 kodun geri kalanına gitti.

Detaylı cevap için teşekkürler. Sadece %45 satırları ve geri kalanı neden dikkate alınmadığını anlamadım?

 
Andrey Khatimlianskii # :

Ancak bu kadar hızlı tek bir uygulamada, sonuçlara bakmanın bir anlamı yok, IMHO.

Büyük bir hikayeye 20 kat tekrar eklendi.

%29,41 (neden belli değil) dönüşten sonra yöntemin kapanış parantezine düşüyor. Yorumlamak zor.