Ottenere il numero di posizioni decimali di qualsiasi numero (non solo le virgolette) bypassando Digits() in MQL4 e MQL5 - pagina 20

 
Алексей Тарабанов:

Il risultato di cosa?

Le velocità
 
fxsaber:

La molteplicità è la condizione del problema.

Semplice, un puzzle?

 
Алексей Тарабанов:

Semplicemente, un puzzle?

Applicazioni pratiche

Forum sul trading, sistemi di trading automatico e test di strategia

Nuova versione di MetaTrader 5 build 1930: finestre grafiche fluttuanti e librerie .Net in MQL5

fxsaber, 2018.12.09 00:18

Questo esempio ora è 15 volte più veloce

1000000
Time[TestResource()] = 286646


Approssimativamente, il ciclo completo di scrittura/lettura attraverso la risorsa funziona a 4 milioni di tick al secondo.


Forum sul trading, sistemi di trading automatico e test di strategie di trading

Discussione su "WebRequest asincrono multithreaded in MQL5 con le tue mani" articolo

fxsaber, 2018.12.09 00:52

Prova il Resource_Data.mqh aggiornato, i ritardi di trasferimento della pagina web dovrebbero scomparire.

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166

#define  BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}  

const RESOURCEDATA<uchar> Resource("::" + __FILE__); // Ресурс для передачи данных (байты)
uchar BytesIn[];
const int Init = ArrayResize(BytesIn, 1000000);

void TestResource()
{
  uchar BytesOut[];

  Resource = BytesIn;
  Print(Resource.Get(BytesOut));
}

void OnStart()
{
  BENCH(TestResource());
}


Vecchia versione

1000000
Time[TestResource()] = 103746


Nuova versione

1000000
Time[TestResource()] = 5222
 
Ilya Malev:

C'è un confronto della velocità di ordinamento con il normale ArraySort integrato su un campionamento casuale? Almeno un metodo che ordina i dati casuali più velocemente in media...

O non più veloce, ma almeno uguale. O non così veloce, ma almeno non più del doppio del tempo. Senza Dll e altre cose come il multithreading

C'è un codice sorgente, potete misurarlo voi stessi.

 
Lazybones.
 
Nikolai Semko:
Non riesco a superarlo.
Mi assicurerò di partecipare quando arriverò al computer.
Dopo una rapida occhiata, ho già delle idee su come migliorare il risultato del 10-20%.

Già bloccato al massimo delle prestazioni, temo.

 
fxsaber:

Temo che siamo già bloccati nelle prestazioni massime.

Forse c'è qualcosa che non ho notato. Ma se usate solo un tipo di unione, c'è ancora del potenziale.
 
Nikolai Semko:
Potrebbe esserci qualcosa che non ho notato. Ma se usate solo un tipo di unione, c'è ancora del potenziale.

Felice di sbagliarmi.

 
Алексей Тарабанов:
Lazybones.
Puzzi di alcol. Smetta di bere, compagno tenente colonnello.
 
fxsaber:

Felice di sbagliarmi.

È in arrivo ora. Potete provarlo voi stessi. L'idea è di usare le unioni con array di strutture di diverse dimensioni, per esempio 10, 100, 1000, 10000...
Questo accorcerà il ciclo di ordini di grandezza e ridurrà il numero di chiamate ArrayCopy di ordini di grandezza.
Questo dovrebbe essere vicino alla variante memcopy
Motivazione: