Est-il possible de créer une fonction d'affichage de "code mql" dans ce forum ? - page 3

 

Et ce post sur la façon de trouver/réparer le zéro déviation : https://www.mql5.com/en/forum/general

 

Si le courtier ajoutait un chiffre supplémentaire ?

https://www.mql5.com/en/forum/179191

 

Erreur inhabituelle

Bonjour à tous,

J'ai codé un EA, et j'ai été confronté à une erreur peu commune. J'aimerais donc vous demander de m'aider à résoudre cette erreur sur MT4. Je pense que certains d'entre vous, de par leur expérience, ont peut-être déjà rencontré la même chose.

La lecture de l'ensemble de l'EA peut être peu pratique, le code source est très grand.

Après une compilation réussie, dans le testeur, le journal MT4 indique l'erreur suivante

Heure : 2011.01.28 23:35:36

Message : 2007.07.13 00:00 InterCandles EURUSDFXF,H4 : dépassement de pile.

Même en élevant la taille de la pile vers les cieux via

#property stacksize 167692160

qui, je crois, alloue 16MB de mémoire, l'erreur persiste.

Est-ce que quelqu'un a rencontré le même problème de"stack overflow" dans le testeur, ou peut indiquer si le problème est interne à MT4, ou dans l'EA (éventuellement dans un tableau, des déclarations imbriquées, un fichier ex4 trop grand, etc) ?

J'apprécie votre coup de main et je suis désolé de prendre votre temps.

Merci.

 

Solution du problème

Avant que quelqu'un ne réponde, j'ai trouvé la solution.

Avant d'utiliser la fonction, juste après que le testeur ait chargé l'EA --qui relie la bibliothèque jointe--, le message "stack overflow" est affiché dans le journal.

Problème trouvé avec la fonction nommée "power", dans le fichier joint. Mes conclusions sont les suivantes :

1) Il n'y a certainement aucun problème avec son nom ; aucune collision de fonction MQL dans la table des symboles de l'EX4. D'autres noms ont été testés.

2) Apparemment, aucune limite de fonctions n'a été atteinte. D'autres fonctions ont été ajoutées après la suppression de la fonction problématique et l'erreur ne s'est pas produite. Fonctionne correctement uniquement en supprimant cette fonction, et pas seulement en déliant dans le fichier EX4 via le compilateur MT4.

3) La récursion est exécutée via de nombreux appels et les résultats sont laissés dans la pile. La pile croît linéairement de façon asymptotique lorsque l'argument 'exposant' croît de façon exponentielle. Potentiellement, la pile peut atteindre sa limite et déborder. L'erreur "stack overflow" apparaît indépendamment de l'exécution de cette fonction.

Par conséquent, je suppose que le compilateur MT4 peut avoir un dispositif détectant [certaines classes de] récursions qui ne sont pas autorisées dans le langage, évitant ainsi un débordement potentiel de la pile pendant l'exécution de l'EA.

Dossiers :