Informazioni sul profilatore di codice MT5 - pagina 5

 
L'unica cosa che confonde è il secondo slittamento. Il resto è tutto a posto.

Scopriamolo
 
Renat Fatkhullin #:
L'unico imbarazzo è il secondo scivolone. Il resto va bene.

Apparentemente, il profiler non è adatto allo scopo di velocizzare pezzi di codice che girano più velocemente di qualche millisecondo.

 
#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);
}

L'EA è in uno slittamento per 30ms e il profiler mostra che era in una funzione con tre aggiunte e due moltiplicazioni per ben il 13%!


E questo è ciò che mostra b2593.

Lì non c'è niente! Perché, in effetti, lì c'è zero. Inoltre, sul secondo rapporto, tutto è abbondantemente chiaro.


Risolviamo il problema per migliorare, non per imprecare.

 
fxsaber #:

Il profiler mostra che ben il 13% di esso era in una funzione con tre addizioni e due moltiplicazioni!

Ecco perché mi sono chiesto perché l'EA il cui passaggio completo OnTick richiede in media 3 ms (è pieno di calcoli e di lavoro con l'ambiente di trading) quando la profilazione presumibilmente 60% è in "tre aggiunte e due moltiplicazioni". Ho trovato questi esempi succinti.


Voglio usare un vecchio profilatore in MT5, ma devo fare queste danze con le build. Non sono ancora riuscito ad eseguirlo.

 
fxsaber #:

Per favore, aiutatemi a interpretare i dati del profiler con un semplice esempio.


Sembra un sacco di sciocchezze.

  • Sleep(2) manca completamente.
  • Per qualche ragione USAGE sta consumando diverse volte più di Sleep(1).


Sto davvero cercando di capire come funziona, ma non ho ancora avuto fortuna.


Ho anche provato la sostituzione del sonno.

Ancora non sono chiari i valori del profiler.

Cosa c'è nel rapporto sulle chiamate?

Ho l'impressione che questo codice non corrisponda al rapporto dello screenshot.
Sei sicuro di non aver sistemato il codice mentre il profiler stava lavorando?

 
Ilyas #:

Cosa c'è nel rapporto della chiamata?

L'impressione è che il codice dato non corrisponda al rapporto nello screenshot.
Sei sicuro di non aver corretto il codice mentre il profiler era in esecuzione?

No, non l'ho fatto.


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)
 

Ho bisogno di aiuto per decifrare i risultati del profiler.

#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();      
}
Rapporto MQL Profiler - \MQL5\Experts\Test19.mq5
Funzione Linea CPU totale Percentuale Auto CPU Percentuale
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>::Resize 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%
@inizializzazione_globale 1
7.14%
1
7.14%
classe MT4HISTORY 428 1
50.00%
1
100.00%
static const constool MT4ORDERS::IsTester = ::MQLInfoInteger(MQL_TESTER); 2496 1
50.00%
0
0.00%
MT4HISTORY::RefreshHistory 588 6
42.86%
0
0.00%
this.Tickets[this.Amount - 1] = (long)TicketDeal; 626 2
28.57%
0
0.00%
se (_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%
return(!::HistoryOrderGetInteger(Ticket, ORDER_POSITION_ID) || (::HistoryOrderGetDouble(Ticket, ORDER_VOLUME_CURRENT) && 660 1
14.29%
0
0.00%
CHashMap<ulong,ulong>::Add 294 1
7.14%
0
0.00%
Resize(new_size); 600 1
50.00%
0
0.00%
se((candidato%divisore)==0) 40 1
50.00%
0
0.00%
OnStart 3 13
92.86%
0
0.00%
_B2(this.RefreshHistory()); 763 6
40.00%
0
0.00%
_BV2(MT4ORDERS::GetHistoryPositionData(Ticket)) 1872 7
46.67%
0
0.00%
return(_B2(MT4ORDERS::MT4OrderSelect(Index, Select, Pool)); 2588 2
13.33%
0
0.00%



Rapporto MQL Profiler - \MQL5\Experts\Test19.mq5
Funzione Linea CPU totale Percentuale Auto CPU Percentuale
HistoryOrderGetInteger 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%
HistorySelect 3
21.43%
3
21.43%
se (_B2(::HistorySelect(0, INT_MAX)) 590 3
21.43%
3
21.43%
HistoryOrderGetDouble 2
14.29%
2
14.29%
double OrderPriceOpen = ::HistoryOrderGetDouble(OrderTicket, ORDER_PRICE_OPEN) 1182 1
7.14%
2
14.29%
return(!::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(Ticket)) 1872 7
50.00%
2
14.29%
GetMicrosecondCount 1
7.14%
1
7.14%
StartTime = ::GetMicrosecondCount(); 1370 1
7.14%
1
7.14%
CHashMap<ulong,ulong>::Resize 514 1
7.14%
1
7.14%
Resize(new_size); 600 1
7.14%
1
7.14%
HistoryDealGetInteger 1
7.14%
1
7.14%
::HistoryDealGetInteger((TicketDeal = ::HistoryDealGetTicket(this.LastTotalDeals)), DEAL_TIME_MSC) : LONG_MAX; 636 1
7.14%
1
7.14%
@inizializzazione_globale 1
7.14%
1
7.14%
CHashMap<ulong,ulong>::Add 294 1
7.14%
0
0.00%
this.Tickets[this.Amount - 1] = (long)TicketDeal; 626 1
7.14%
0
0.00%
void OnStart() 3 13
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 #:

Per favore, aiutatemi a decifrare i risultati del profiler.

Cosa non è chiaro?

Di solito ordino per CPU totale, e vedo cosa rallenta di più il programma in generale. Può essere utile.

Ho 5700 ordini nella mia storia, e la prima volta che lo eseguo, ottengo un rapporto quasi vuoto, e poi ottengo qualcosa come questo:

HistoryDealGetInteger (tutte le chiamate hanno preso il 36%) e HistorySelect (27%) mangiano di più. Poi viene HistoryOrderGetInteger (18%) e global_initialization (9%).

Il restante 10% è stato speso per il resto del codice.


Ma non ha senso guardare i risultati durante una singola esecuzione così veloce, imho.

 
Andrey Khatimlianskii #:

Cosa non è chiaro?

Un problema di interpretazione. Nessuna comprensione di cosa, dove e come sta rallentando.

Di solito ordino per CPU totale, e vedo cosa sta rallentando maggiormente il programma in generale. Può essere utile.

Ho un rapporto quasi vuoto alla prima esecuzione con 5700 ordini nella storia, e poi ho questo:

HistoryDealGetInteger (tutte le chiamate hanno preso il 36%) e HistorySelect (27%) mangiano di più. Poi viene HistoryOrderGetInteger (18%) e global_initialization (9%).

Il restante 10% è andato al resto del codice.

Grazie per la sua risposta dettagliata. Non capisco perché non si è tenuto conto del 45% di corde e del resto?

 
Andrey Khatimlianskii #:

Ma non ha senso guardare i risultati su una prestazione singola così veloce, imho.

Ho aggiunto una ripetizione 20x sulla storia lunga.

Il 29,41% (non è chiaro perché) è dovuto a una parentesi di chiusura dopo il ritorno. È difficile da interpretare.