Erreurs, bugs, questions - page 320

 
stringo:
Le code est fondamentalement différent.

Wow... Je suis choqué...

Pouvez-vous poster un fragment de code simple x32 et x64 pour comparaison ? Juste pour satisfaire votre curiosité, pour ainsi dire...

 
KffAlex:


Messieurs ! C'est la troisième fois que je rencontre ce problème. La création d'une bibliothèque externe sous Windows7 x64 conduit à certains miracles :


Désolé pour le retard. Je vous ai répondu en privé.

Veuillez joindre le code source. Si possible, veuillez le faire par le biais de Servicedesk. Cela permettra de minimiser la probabilité de tels retards.

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
AlexSTAL:

Wow... Je suis choqué...

Pouvez-vous présenter un fragment de code simple pour la comparaison de x32 et x64 ? Pour apaiser votre curiosité, pour ainsi dire...

Je ne peux pas vous donner le code au pied levé - je n'ai pas la caractéristique en main.

Les différences sont les suivantes.

  • Les registres sont de 64 bits - 32 bits. Par conséquent, l'arithmétique 64 bits tient dans une seule instruction (en 32 bits, la division de deux entiers 64 bits se fait en 40 instructions d'assembleur).
  • Il y a plus de registres 64 bits. Par conséquent, l'adressage des registres est différent.
  • La convention d'appel est différente. Par exemple, en 64 bits, les 4 premiers paramètres d'une fonction sont passés dans des registres
 
Nous devrions ajouter le temps d'optimisation à MT5. C'était dans MT4 et ce serait la bonne solution ici).
 
Renat:

Les agents locaux restent en mémoire avec leurs caches levés pendant encore 5 minutes après l'arrêt du test, en attendant de nouvelles tâches. Si personne ne les charge dans les 5 minutes, ils sont automatiquement déchargés avec toutes les ressources libérées.

Ce mécanisme d'attente a permis aux agents d'augmenter la vitesse de réponse sur les tâches répétées au détriment des infrastructures prêtes/levées.

Les agents distants fonctionnant en tant que services ne sont pas déchargés, mais libèrent également des ressources après un certain temps d'arrêt.

En utilisant la version 404. Je parle des problèmes des agents à distance. Même après 10 heures d'arrêt, la mémoire n'est pas libérée.

Quelques problèmes supplémentaires :

1. presque constamment lors de l'exécution d'un test de stratégie, la première passe sur chaque processeur se termine rapidement et renvoie zéro résultat.

Et si vous vous arrêtez et redémarrez, ces zéros ne sont pas recalculés. J'exécute le test sur un grand nombre de processeurs et 40-50 résultats avec des zéros et aucune possibilité de recalculer ces données.

Parfois, l'un des processeurs passe en panne et commence à renvoyer des résultats nuls plusieurs fois par seconde. Mais si je l'arrête, ces données seront à nouveau recalculées (champ orange dans le tableau).

3. Lorsque l'on exécute des agents distants sur 16 processeurs, Internet 1 mégaplayer ne permet pas un historique de téléchargement aussi rapide, et il est évident qu'en raison du délai d'attente, tous les processeurs sont en panne. Si vous activez un seul processeur à la fois, cela fonctionne généralement. Est-il possible d'utiliser un système à 16 processeurs pour télécharger l'historique sur le premier processeur et le copier ensuite sur les autres processeurs ? Ou simplement augmenter le délai d'attente lors du chargement de l'historique.

 
a483483:

En utilisant la version 404. Je parle des problèmes des agents à distance. Même après 10 heures d'inactivité, la mémoire ne se libère pas.

Quelques problèmes supplémentaires :

1. presque constamment, lors des tests de stratégie, la première passe sur chaque processeur se termine rapidement et renvoie zéro résultat.

Et si vous vous arrêtez et redémarrez, ces zéros ne sont pas recalculés. J'exécute le test sur un grand nombre de processeurs et 40-50 résultats avec des zéros et aucune possibilité de recalculer ces données.

Parfois, l'un des processeurs passe en panne et commence à renvoyer des résultats nuls plusieurs fois par seconde. Mais si je l'arrête, ces données seront à nouveau recalculées (champ orange dans le tableau).

3. Lorsque l'on exécute des agents distants sur 16 processeurs, Internet 1 mégaplayer ne permet pas un historique de téléchargement aussi rapide, et il est évident qu'en raison du délai d'attente, tous les processeurs sont en panne. Si vous activez un seul processeur à la fois, cela fonctionne généralement. Est-il possible d'utiliser un système à 16 processeurs pour télécharger l'historique sur le premier processeur et le copier ensuite sur les autres processeurs ? Ou simplement augmenter le délai d'attente lors du chargement de l'historique.


J'ai besoin des journaux de l'agent, des paramètres, du symbole, du serveur.

Vous pouvez EX5 expert, mais mieux, bien sûr, la source.

De préférence dans le domaine du servicedesk.

 
KffAlex:
Ce problème n'existe pas si les fonctions sont déplacées dans le corps du programme, et sous Windows XP, ce problème n'existe tout simplement pas !!!
Il semble que ce soit une question de bitness (64/32), dans Windows XP vous travaillez sous 32 bit, donc l'erreur n'est pas reproduite.
Veuillez créer une demande auprès de Servicedesk en joignant le ou les fichiers EX5 du problème.(votre lien vers le Service Desk)
 

Au secours, je n'arrive pas à trouver comment comparer les deux chiffres, ça fait deux jours.

(date aujourd'hui) > (date hier)

          datetime bark[1];
          CopyTime(Symbol1,NULL,0,1,bark);
          if(bark[0]<=order)

commande - (date d'hier)

Ou bien ce n'est pas possible du tout ?

 

J'ai écrit ça :

       for (uint k=0; k<66; k++)
         {
          datetime order=(datetime)HistoryDealGetInteger(ticket,DEAL_TIME);
          datetime bark[1];
          CopyTime(Symbol1,NULL,k,1,bark);
          if(bark[0]<=order)
            {

le testeur se bloque et c'est tout

 
alexluek:

J'ai écrit ça :

Il y a une boucle dans le testeur et c'est tout.

Le temps dans le futur est plus long que dans le passé, votre morceau de code n'est pas illustratif, ce que vous faites dans le bloc if et ce que vous en attendez n'est pas clair...

Voici, à mon avis, une information exhaustive sur la comparaison des temps :)

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                                                           mrProF |
//|                                                          http:// |
//+------------------------------------------------------------------+
#property copyright "mrProF"
#property link      "http://"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   datetime past=D'2010.12.1'; //Прошлое
   datetime future=D'2010.12.02'; //Будущее

   if(past<future)
     {
      Print(past," раньше чем: ",future);
     }

   datetime buffTime[1]; //Буфер для времени последнего бара
   CopyTime(_Symbol,_Period,0,1,buffTime); //Копируем время последнего бара

   if(buffTime[0]>past)
     {
      Print(past," раньше чем: ",buffTime[0]);
     }

  }
//+------------------------------------------------------------------+