Obtenir le nombre de décimales de n'importe quel nombre (pas seulement les guillemets) en contournant Digits() dans MQL4 et MQL5 - page 20

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

Le résultat de quoi ?

Vitesses
 
fxsaber:

La multiplicité est la condition du problème.

Simple, un puzzle ?

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

Tout simplement, un puzzle ?

Applications pratiques

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Nouvelle version de MetaTrader 5 build 1930 : fenêtres graphiques flottantes et bibliothèques .Net dans MQL5

fxsaber, 2018.12.09 00:18

Cet exemple s'exécute maintenant 15x plus vite

1000000
Time[TestResource()] = 286646


En gros, le cycle complet de ticks d'écriture/lecture à travers la ressource fonctionne à 4 millions de ticks par seconde.


Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Discussion sur l'article "Multithreaded asynchronous WebRequest in MQL5 with your own hands" (en anglais)

fxsaber, 2018.12.09 00:52

Essayez la mise à jour de Resource_Data.mqh, les délais de transfert de la page web devraient disparaître.

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


Ancienne version

1000000
Time[TestResource()] = 103746


Nouvelle version

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

Existe-t-il une comparaison de la vitesse de tri avec ArraySort intégré ordinaire sur un échantillonnage aléatoire ? Au moins une méthode qui trie les données aléatoires plus rapidement en moyenne...

Ou pas plus vite, mais au moins pareil. Ou pas aussi vite, mais au moins pas plus de deux fois plus longtemps. Sans aucune Dll et autres trucs comme le multithreading

Il existe un code source, vous pouvez le mesurer vous-même.

 
Lazybones.
 
Nikolai Semko:
Je ne peux pas passer outre.
Je ne manquerai pas de participer quand j'aurai accès à l'ordinateur.
Après un rapide coup d'œil, j'ai déjà des idées sur la façon d'améliorer le résultat de 10 à 20 %.

Déjà bloqué à la performance maximale, j'en ai peur.

 
fxsaber:

Je crains que nous ne soyons déjà bloqués sur la performance maximale.

Il y a peut-être quelque chose que je n'ai pas remarqué. Mais si vous n'utilisez qu'un seul type d'union, il y a encore du potentiel.
 
Nikolai Semko:
Il y a peut-être quelque chose que je n'ai pas remarqué. Mais si vous n'utilisez qu'un seul type d'union, il y a encore du potentiel.

Heureux d'avoir tort.

 
Алексей Тарабанов:
Lazybones.
Tu pues l'alcool. Arrêtez de boire, camarade lieutenant-colonel.
 
fxsaber:

Heureux d'avoir tort.

Il est en route maintenant. Vous pouvez l'essayer vous-même. L'idée est d'utiliser des unions avec des tableaux de structures de différentes tailles, par exemple 10, 100, 1000, 10000...
Cela raccourcira la boucle de plusieurs ordres de grandeur et réduira le nombre d'appels à ArrayCopy de plusieurs ordres de grandeur.
Cela devrait être proche de la variante de memcopy
Raison: