Erreurs, bugs, questions - page 2677

 
Stanislav Korotky:

Il est préférable de faire un téléchargement automatique comme par CopyRates.

Dans ce cas, le délai est inconnu. Le téléchargement est initié par une demande de symbole de période.

Examinez ce qui peut être fait

 
Nikolai Semko:

pas remarqué.

Il faut regarder ce que le terminal consomme.

void OnStart()
  {
//   Print("используется памяти до закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти до закачки истории: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
   MqlTick items[];
   ulong t0=GetMicrosecondCount();
   uint    count=CopyTicks(Symbol(),items,COPY_TICKS_INFO,0,1 e7);
   t0=GetMicrosecondCount()-t0;
   Print ("Загружено за "+string(t0/1000)+" миллисекунд "+ (string)count+ " тиков");
//   Print("используется памяти после закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти после закачки истории: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
   ArrayFree(items);
//   Print("используется памяти после ArrayFree: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти после ArrayFree: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
  }


Le résultat est sur un Terminal qui fonctionne depuis longtemps. Aucun EA/indicateur en cours. Deux graphiques, barres M1 pour l'année en cours uniquement.

используется памяти до закачки истории: 1043 Mb
Загружено за 11223 миллисекунд 10000000 тиков
используется памяти после закачки истории: 1675 Mb
используется памяти после ArrayFree: 1102 Mb

60Mb n'ont pas été libérés. Un terminal vide consomme plus d'un gigaoctet. La seule façon de réduire la consommation est de recharger le terminal.

 
Sergey Dzyublik:

Bonjour, merci beaucoup.
Je n'ai pas encore utilisé l'opérateur new car logiquement il doit être plus lent que ArrayResize avec la mémoire réservée.
Mais je suis impressionné par les résultats obtenus, il s'avère que c'est l'inverse, le tableau natif via l'opérateur new est plus rapide.

MT5 (build 2363) :

Diffusé dans la version bêta 2364 (malheureusement, il y a une erreur de compilation pour new T() à l'intérieur du modèle).

Voici les logs de votre script :

2020.03.19 10:39:45.784 Test (EURUSD,H1)        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
2020.03.19 10:39:46.765 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=984
2020.03.19 10:39:48.233 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:39:49.944 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:50.923 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=969
2020.03.19 10:39:52.392 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1484
2020.03.19 10:39:54.100 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:55.079 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=985
2020.03.19 10:39:56.548 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:39:58.258 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:59.237 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=984
2020.03.19 10:40:00.705 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:40:02.416 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
Vous pouvez voir que ArrayResize pour les objets a commencé à fonctionner plus rapidement.

Une fois de plus, la complexité d'une partie de la fonction ArrayResize a été réduite d'un logarithme à zéro
 
Ilyas:
Nous pouvons voir que ArrayResize pour les objets est plus rapide maintenant.
Une fois encore, nous avons réussi à réduire la complexité d'une partie de la fonction ArrayResize d'un logarithme à zéro.

J'ai réussi à comparer la vitesse de ArrayResizeReserve et ArrayOnNew sur un projet réel pour le type de données - classe avec un seul champ int, nombre d'enregistrements 20M.

Dans MT5 (build 2363), pour tous les paramètres comparés sauf un, ArrayOnNew était pire que ArrayResizeReserve :

Accès en lecture/écriture (std::fill_n, std::copy, std::vector::clear) : 2-2,5 fois plus lent
Création de tous les éléments en une fois (std::vector::resize) pour la mémoire "froide"/"chaude" - 1,1-1,2 fois plus lent
Création de tous les éléments un par un (std::vector::push_back) pour la mémoire "chaude" - 1,2 fois plus rapide

 

ces liens dans l'aide (éditeur) mènent à une page non trouvée


 
Bogue MT5 (build 2363) Mauvaise correspondance des priorités d'exécution des fonctions modèles en MQL par rapport aux fonctions modèles en C++(en ligne: https://onlinegdb.com/HkNqBDZ88).
Le problème
se pose lorsque la première fonction "test" contient une classe de base de modèle entièrementspécialisée comme argument,
et la seconde fonction "test" surcharge la première, est une fonction template et contient une classe de base template non spécialisée comme argument.

template<typename T>
struct B{
   T data;
};

template<typename T>
struct BB : public B<T>{};


template<typename T>                                             
struct A{
public:
   static void test(T& src){
      printf("1");
   }
   
   template<typename TT>
   static void test(B<TT>& src){
      printf("2");
   }
};
      

void OnStart(){
   BB<int> bb;
   A<B<int>>::test(bb);         //'test' - ambiguous call to overloaded function        
}
 
Bonjour à tous ! !! Question : J'utilise deux plateformes MT4 et MT5 sur mon copyutera. MT4 s'est connecté au signal sans aucun problème. Mais je ne peux pas me connecter à un autre signal à partir de MT5. J'ai un compte et le mouvement des fonds est affiché, mais il n'y a pas de numéro de compte dans le compte, je n'ai pas de bouton de signal dans le tableau de bord du terminal. J'ai loué un serveur, vps, j'ai écrit que j'ai besoin de migration, mais le bouton de migration ne fonctionne pas. Dites-moi pourquoi.
 
Anna:
Bonjour à tous ! !! Ma question est la suivante : j'utilise deux plateformes MT4 et MT5 sur mon copyutera. Je me suis connecté au signal de MT4 sans aucun problème. Mais je ne peux pas me connecter à un autre signal à partir de MT5. J'ai un compte et le mouvement des fonds est affiché, mais il n'y a pas de numéro de compte dans le compte, je n'ai pas de bouton de signal dans le tableau de bord du terminal. J'ai loué un serveur, vps, j'ai écrit que j'ai besoin de migration, mais le bouton de migration ne fonctionne pas. Dites-moi pourquoi.

MetaTrader 5 (pour la location de l'hébergement virtuel intégré au terminal) nécessite un système d'exploitation 64 bits.

 

sous Win 10, est-ce que quelqu'un connecte des agents locaux ?

J'ai essayé de connecter 2 PC, l'agent distant est constamment prêt-connecté-ready-connecté... pas d'emplois.

J'ai jeté un coup d'œil dans le pare-feu, je pense qu'il y a une case à cocher pour Metatrader Agent, l'exportation - l'importation de l'agent via le fichier voit les ports et le nom du PC également.

Je pense que je dois faire suivre les ports ailleurs ?

 
Vladimir Karputov:

MetaTrader 5 (pour le bail d'hébergement virtuel intégré au terminal) nécessite un système d'exploitation 64 bits.

Merci pour la réponse, je l'ai deviné ...