Erreurs, bugs, questions - page 2588

 
Le KB ne passe pas le code. Il donne ces erreurs
MQL5\Include\fxsaber\BestInterval\Deal.mqh(10,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\Deal.mqh(10,34) : error 279: 'ToNull' - call non-const method for constant object
MQL5\Include\fxsaber\BestInterval\Deal.mqh(10,34) : error 279: 'ToNull' - call non-const method for constant object
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(202,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(202,34) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(214,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(214,34) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(225,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(225,34) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(416,33) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(416,35) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(435,33) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(435,35) : error 351: 'ToNull' - access to non-static member or function

Veuillez mettre à jour le compilateur KB.

 
Vladimir Simakov:
À mon retour de vacances, si cela ne pose pas trop de problèmes, j'étudierai la question. Mais logiquement le bug peut se trouver dans votre code et non dans mql.
Au fait, juste pour le plaisir, et si vous aviez une bibliothèque qui fonctionne avec quel codage ? Êtes-vous sûr que c'est utf-16, mais que faire si c'est utf-8, après tout, le plus commun.

Je ne l'ai pas encore vérifié, merci pour le tuyau. Je vais creuser dans cette direction.
La bibliothèque est pour Ocean, les classes avec lesquelles je travaille sont sélectionnées avec un W, c'est-à-dire Unicode.

Si je comprends bien l'encodage.

const char *Utf8 ;
const char *Ansi ;
const wchar_t *Utf16 ;
const wchar_t *Utf32 ;

utf-16 implique le type wchar_t, la fonction de la bibliothèque qui lit la chaîne renvoie const wchar_t*
Il en ressort clairement que la fonction renvoie un pointeur vers la chaîne dans l'encodage utf-16
Dans les propriétés du projet, le support des caractères Unicode est également sélectionné.
La documentation mql indique que la chaîne de caractères fonctionne en Unicode.

 

J'optimise à nouveau, je ne suis pas sûr de pouvoir tester la vitesse d'exécution de ce code :

void OnStart()
{  datetime m_stoptime = 0;
//1.
   if(m_stoptime < TimeCurrent())
   {
      //расчеты   
   }


//2.
   MqlTick last_tick;
   if(SymbolInfoTick(_Symbol, last_tick))
   {  if(m_stoptime < last_tick.time) 
      {
         //расчеты
      }
   }

}

Je soupçonne que la variante 2 fonctionnera plus rapidement ?

si oui, où peuvent être les pièges - j'utilise dans OnTick() - pour trouver dans l'optimiseur de temps de commerce, la recherche de moyens d'optimiser le code


ZS : Je peux demander comment vérifier la vitesse des options numéro 1 et numéro 2, il est très probable que le compilateur va optimiser le code exécutable et les tests ne seront pas corrects - donc je demande

 
Igor Makanu:

Je peux demander comment vérifier les variantes 1 et 2 en termes de vitesse, il y a une forte probabilité que le compilateur optimise le code exécutable et que les tests ne seront pas corrects - je demande donc

Exécutez un test régulier séparément pour 1 et 2 et comparez le temps ? )

Si le temps est négligeable, exécutez la même optimisation avec la variante 1 et la variante 2.

 
Igor Makanu:

HH : Je peux demander comment tester les variantes #1 et #2 sur la vitesse, il est fort probable que le compilateur optimise le code exécutable et que les tests ne soient pas corrects - c'est pourquoi je demande

https://www.mql5.com/ru/code/18804

TesterBenchmark
TesterBenchmark
  • www.mql5.com
При написании разных версий кода может возникнуть необходимость измерения влияния их на общую производительность советника в тестере. Это позволяет не только понять, насколько оптимален написанный код по сравнению с другим, но и дает предпосылки к будущей быстрой оптимизации советника. Такой подход позволяет выявить "бутылочное горлышко" в...
 
Igor Makanu:

J'optimise à nouveau, je ne suis pas sûr de pouvoir tester la vitesse d'exécution de ce code :

Je soupçonne que la variante 2 fonctionnera plus rapidement ?

si oui, où peuvent être les pièges - j'utilise dans OnTick() - pour trouver dans l'optimiseur de temps de commerce, la recherche de moyens d'optimiser le code


ZS : Je peux demander comment vérifier la vitesse des options numéro 1 et numéro 2, il est très probable que le compilateur va optimiser le code exécutable et les tests ne seront pas corrects - donc je demande

Vérifier en mode débogage. Le compilateur n'est pas censé optimiser à cet endroit, bien que je ne sache pas comment cela se passe en réalité.
 

Question sur ArrayResize. Je fais une réserve pour plusieurs gigaoctets à la fois. Puis j'augmente progressivement la Taille qui est inférieure à la Réserve initiale.

Pourquoi le TaskManager indique-t-il une augmentation de la consommation de mémoire pendant l'augmentation de la taille ?

 
fxsaber:

Question sur ArrayResize. Je fais une réserve pour plusieurs gigaoctets à la fois. Puis j'augmente progressivement la Taille qui est inférieure à la Réserve initiale.

Pourquoi le TaskManager indique-t-il une augmentation de la consommation de mémoire pendant l'augmentation de la taille ?

En effet, outre metatrader, il y a le système d'exploitation Windows, qui décide en dernier ressort à qui, parmi des dizaines de processus (qui, soit dit en passant, disposent chacun de 4 Go d'espace d'adressage par défaut), il convient d'allouer de la RAM (de combien de RAM disposez-vous ?).
 
Andrey Khatimlianskii:

Exécuter un test normal séparément pour 1 et 2 et comparer les temps ? )

Si le temps est négligeable, exécutez la même optimisation avec la variante 1 et la variante 2.

Je fais quelque chose de mal, je n'ai toujours pas pu voir la différence, les résultats flottent autour de 0,1 sec sur un seul essai.

 
fxsaber:

Question sur ArrayResize. Je fais une réserve pour plusieurs gigaoctets à la fois. Puis j'augmente progressivement la Taille qui est inférieure à la Réserve initiale.

Pourquoi le TaskManager indique-t-il une augmentation de la consommation de mémoire pendant l'augmentation de la taille ?

Nous ne faisons rien à ce sujet volontairement - c'est une fonctionnalité du système d'exploitation (et l'utilisateur a-t-il vraiment besoin de gigaoctets ?

Si vous voulez avoir de la mémoire chaude à un moment critique d'un programme, vous devez "parcourir" les pages du morceau alloué avant ce moment, de sorte que les pages de mémoire virtuelle du processus deviennent des pages physiques.


Mais, depuis MQL, il n'y a pas d'accès à la partie réservée du tableau.

Raison: