Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Bonjour Stringo,
Tout d'abord, merci pour l'information.
Cependant, je suis intéressé par le raisonnement de MetaQuotes à ce sujet. Si une grande quantité de données "Every Tick" est utilisée (disons par exemple, 2003.1.1 -> 2013.1.1) et que l'expert à optimiser est raisonnablement compliqué, il faudra souvent plus de 10 minutes pour qu' une seule itération d'optimisation se produise. Y a-t-il une raison spécifique pour laquelle MetaQuotes a choisi une période de 10 minutes comme délai d'attente ? En outre, l'utilisateur du nuage a-t-il la possibilité d'augmenter ce délai ou MetaQuotes l'a-t-il fixé de manière contraignante ?
Boucle sans fin détectée sur les agents Cloud uniquement. Si un des appels(OnInit, OnDeinit, OnTick, OnTimer etc) fonctionne plus de 10 minutes
Il ne s'agit pas d'une optimisation unique, mais d'un appel de signal à une fonction.
Ah, je me suis trompé, j'ai cru comprendre qu'il s'agissait d'une seule itération d'optimisation et non d'un seul appel à un gestionnaire d'événements (même si Stringo a spécifiquement mentionné un seul appel à un gestionnaire d'événements). Un appel unique à un gestionnaire d'événement qui dure plus de 10 minutes serait en effet ridicule.Mes humbles excuses - j'ai dû avoir un trou de mémoire - il est temps de reposer le cerveau. :)
Mmmmm - il doit donc se passer quelque chose de bizarre dans mon Expert qui fait que OnTick() prend parfois plus de 10 minutes pour terminer un appel. Il est temps de commencer à creuser...
Quoi qu'il en soit, merci encore pour votre aide !
Ce n'est pas une optimisation unique, c'est un appel de signal à une fonction.
Bonjour,
Je continue à creuser mais je n'arrive pas à trouver quoi que ce soit. Le fait que mon expert s'optimise parfaitement sur mes agents locaux (c'est-à-dire qu'aucun des pourcentages de progression de mes agents ne s'arrête à aucun moment, ce que j'aurais pensé être le cas s'il y avait une sorte de boucle sans fin dans ma fonction OnTick() qui durait au moins 10 minutes ou plus) rend vraiment les choses difficiles.
Je suis curieux de savoir ce qu'indique le numéro PR à la fin du message d'erreur (par exemple, ".... expert rejected by MQL5 Cloud Network in 600 sec(PR116)". Quelqu'un peut-il nous éclairer à ce sujet ?
Merci d'avance pour votre aide.
Bonjour,
Je continue à creuser mais je n'arrive pas à trouver quoi que ce soit. Le fait que mon expert s'optimise parfaitement sur mes agents locaux (c'est-à-dire qu'aucun des pourcentages de progression de mes agents ne s'arrête à aucun moment, ce que j'aurais pensé être le cas s'il y avait une sorte de boucle sans fin dans ma fonction OnTick() qui durait au moins 10 minutes ou plus) rend vraiment les choses difficiles.
Je suis curieux de savoir ce qu'indique le numéro PR à la fin du message d'erreur (par exemple, ".... expert rejected by MQL5 Cloud Network in 600 sec(PR116)". Quelqu'un peut-il nous éclairer à ce sujet ?
Merci d'avance pour votre aide à ce sujet.
Voir ici pour plus d'informations.
Bonjour,
Eh bien, après avoir passé de nombreuses heures ce week-end à examiner mon code, je n'ai pu trouver aucun endroit dans le code de mon Expert où la possibilité d'une boucle sans fin pourrait apparaître. Au cours de ce processus, je suis également devenu de plus en plus convaincu que si mon Expert avait eu des problèmes de boucle sans fin, j'aurais dû le voir apparaître en utilisant mes agents locaux pour optimiser mon Expert. Comme je l'ai mentionné plus haut, mes agents locaux ne s'arrêtent à aucun moment pendant l'optimisation de mon Expert, et encore moins pendant une période de dix minutes ou plus.
Après avoir été convaincu que les problèmes ne provenaient pas de mon Expert, j'ai commencé à examiner les autres possibilités. Les seules alternatives logiques que je voyais étaient des problèmes avec les agents eux-mêmes (c'est-à-dire des bogues) ou des problèmes avec les boîtes sur lesquelles ils fonctionnaient. Il semble que ce soit la deuxième solution qui soit en cause.
D'après ce que j'ai pu constater, les gens exécutent des agents cloud sur toutes sortes de machines. Je présume également que ces agents en nuage sont tous basés sur Windows. La raison pour laquelle je mentionne ceci est que mon expérience personnelle des versions grand public de Windows est qu'elles sont notoirement instables lorsqu'elles sont malmenées pendant un certain temps, et qu'elles ont tendance à ralentir ou même à se bloquer lorsqu'elles sont soumises à des demandes de traitement importantes.
Les optimisations que j'ai tenté d'effectuer concernent un expert relativement complexe qui est exécuté sur 6-7 ans de données"Every Tick" - c'est-à-dire qu'il exige un traitement et une mémoire raisonnables. Je soupçonnais que les agents dans le nuage qui se chargeaient de cette tâche n'étaient pas suffisamment spécifiés, surtout s'il s'agissait de boîtes Windows.
J'ai donc ajouté la ligne de code suivante dans mon gestionnaire d'événement OnInit() :
La raison pour laquelle j'ai utilisé TERMINAL_MEMORY_PHYSICAL est que les autres options de mémoire :TERMINAL_MEMORY_TOTAL et TERMINAL_MEMORY_AVAILABLE ne sont pas très utiles car elles ne vous fournissent que l'espace d'adressage virtuel total, en mode utilisateur, du processeur de l'hôte (c'est-à-dire 4 Go pour un processeur 32 bits ou 8 To pour un processeur 64 bits). Je ne peux pas imaginer de machines 64 bits avec 8 To de mémoire - du moins, pas encore. :) TERMINAL_CPU_CORES est une autre option que j'ai envisagée, mais j'ai finalement décidé d'opter pour le test de la mémoire, car je suppose qu'une machine dotée d'une quantité décente de mémoire doit avoir des spécifications correctes dans tous les autres domaines importants.
Et devinez quoi - plus de problèmes ! Toutes mes optimisations fonctionnent bien maintenant :)
Bonjour,
Eh bien, après avoir passé de nombreuses heures ce week-end à examiner mon code, je n'ai pu trouver aucun endroit dans le code de mon Expert où la possibilité d'une boucle sans fin pourrait apparaître. Au cours de ce processus, je suis également devenu de plus en plus convaincu que si mon Expert avait eu des problèmes de boucle sans fin, j'aurais dû le voir apparaître en utilisant mes agents locaux pour optimiser mon Expert. Comme je l'ai mentionné plus haut, mes agents locaux ne s'arrêtent à aucun moment pendant l'optimisation de mon Expert, et encore moins pendant une période de dix minutes ou plus.
Après avoir été convaincu que les problèmes ne provenaient pas de mon Expert, j'ai commencé à examiner les autres possibilités. Les seules alternatives logiques que je voyais étaient des problèmes avec les agents eux-mêmes (c'est-à-dire des bogues) ou des problèmes avec les boîtes sur lesquelles ils fonctionnaient. Il semble que la seconde de ces alternatives soit la coupable.
D'après ce que j'ai pu constater, les gens exécutent des agents cloud sur toutes sortes de machines. Je présume également que ces agents en nuage sont tous basés sur Windows. La raison pour laquelle je mentionne ceci est que mon expérience personnelle des versions grand public de Windows est qu'elles sont notoirement instables lorsqu'elles sont malmenées pendant un certain temps, et qu'elles ont tendance à ralentir ou même à se bloquer lorsqu'elles sont soumises à des demandes de traitement importantes.
Les optimisations que j'ai tenté d'effectuer concernent un expert relativement complexe qui est exécuté sur 6-7 ans de données "Every Tick" - c'est-à-dire qu'il exige un traitement et une mémoire raisonnables. Je soupçonnais que les agents dans le nuage qui se chargeaient de cette tâche n'étaient pas suffisamment spécifiés, surtout s'il s'agissait de boîtes Windows.
J'ai donc inséré la ligne de code suivante dans mon gestionnaire d'événement OnInit() :
La raison pour laquelle j'ai utilisé TERMINAL_MEMORY_PHYSICAL est que les autres options de mémoire :TERMINAL_MEMORY_TOTAL et TERMINAL_MEMORY_AVAILABLE ne sont pas très utiles car elles ne vous fournissent que l'espace d'adressage virtuel total, en mode utilisateur, du processeur de l'hôte (c'est-à-dire 4 Go pour un processeur 32 bits ou 8 To pour un processeur 64 bits). Je ne peux pas imaginer de machines 64 bits avec 8 To de mémoire - du moins, pas encore. :) TERMINAL_CPU_CORES est une autre option que j'ai envisagée, mais j'ai finalement décidé d'opter pour le test de la mémoire, car je suppose qu'une machine dotée d'une quantité décente de mémoire doit être correctement équipée dans tous les autres domaines importants.
Et devinez quoi - plus de problèmes ! Toutes mes optimisations fonctionnent bien maintenant :)
Cela semble être une excellente idée et je suis reconnaissant pour cette astuce.
Cependant, 3 choses à ce sujet :
1) Comme je l'ai mentionné ci-dessus, j'ai également le problème de la boucle "sans fin", mais comme j'ai compris dans ce fil de discussion que la "boucle sans fin" est juste la meilleure estimation pour "un événement a pris plus de dix minutes", j'accepte que cela puisse être mon code. J'utilise des indicateurs assez complexes, et comme (du moins je le pense) ils calculent tout leur historique lorsque leur handle est créé, cela peut (sur des ordinateurs lents) prendre plus de dix minutes.
2) Cependant ! Habituellement, mon nuage se plante au bout de 10-15 minutes. Mais la nuit dernière, il a fonctionné parfaitement pendant 8 heures. Pas une seule panne, bien que je n'aie pas modifié le code du tout. Bizarre !
3) Et le plus important, car lié à votre approche : Lorsque vous rejetez un agent sur la base de sa mémoire, l'agent (et par conséquent le nuage entier) ne se plante pas, je comprends cela. Mais je ne pense pas qu'une machine plus puissante réessayera le même jeu de paramètres, donc vous perdez fondamentalement des points de données d'optimisation, n'est-ce pas ? Diriez-vous que c'est le prix à payer ?
Je serai curieux de voir si mes agents fonctionnent toujours à mon retour du travail...
...