![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Écrivez au Service Desk avec tous les détails (joignez un expert si nécessaire). Ce sera plus rapide.
Vous utilisez peut-être une grande quantité de variables de fonctions locales, par exemple des tableaux.
Dans la prochaine version, pour les terminaux 32 bits, vous pourrez contrôler la taille de la pile avec la propriété du compilateur correspondante #property stacksize
Ce problème ne concerne-t-il que les terminaux 32 bits ? J'ai x64. Comment comprendre "...grande taille des variables de fonctions locales, par exemple les tableaux...". "Quelle doit être la taille de la pile pour qu'elle finisse par déborder ?
Mais si le programmeur ne spécifie pas manuellement la taille de pile nécessaire à l'aide d'une propriété, l'EX5 dans le terminal fonctionnera avec la taille de pile par défaut (256 Ko).
A propos de la grande taille.
Chaque déclaration de variable à l'intérieur d'une fonction (à l'exception des variables statiques) alloue de l'espace sur la pile, et l'allocation d'espace sur la pile pour les variables locales se produit à chaque appel.
Par conséquent, si une fonction possède 64Kb de variables locales, l'espace de la pile est suffisant pour 3 appels, et le débordement de la pile se produit à 4 appels (car une partie de la pile est utilisée pour les besoins internes du terminal). Par conséquent, s'il est nécessaire d'avoir de grandes données locales, il est préférable d'utiliser la mémoire dynamique : lorsque vous entrez dans la fonction, la mémoire pour les besoins locaux est allouée dans le système (new, ArrayResize) et lorsque vous quittez la fonction, la mémoire est supprimée (delete, ArrayFree).
Bonjour !
Je ne comprends pas ce problème.
filehandle=FileOpen("My\\Symbols.txt",FILE_READ|FILE_TXT|FILE_ANSI);
Cela fonctionne bien dans le débogage, le fichier est lisible dans MT5\MQL5\File\.
Lors de l'exécution dans le testeur, il indique "Symbols.txt file could not be opened, error 5004" et Handel -1
Je l'ai également placé dans le dossier MT5\tester\agent000\MQL5\File, mais il ne le voit plus et tue le fichier à cet endroit).
En même temps, la description dit :
"Le fichier est ouvert dans le dossier du terminal client dans le sous-dossier MQL5\files (ou dossier_agent_testing\MQL5\files en cas de test)".
"La fonction recherche un fichier dans le dossier local (MQL5\Files ou MQL5\Tester\Files en cas de test)."
Je n'ai pas le dossier "MQL5\Tester\Files" comme indiqué dans l'aide ?
Qu'est-ce que je fais mal et comment puis-je surmonter ce problème ?
Je vous remercie de votre réponse.
Essayez d'utiliser #property tester_file:
#property tester_file "My\\Symbols.txt"
Essayez d'utiliser #property tester_file:
Ugh-uh-x Il semblait aider dans le MT5\tester\agent000\MQL5\File mis à nouveau, puis il fonctionne avec la propriété.
Merci !
J'ai réessayé le testeur avec Handle -1 et l'erreur 5004.
Je ne sais pas ce que cela pourrait être d'autre, il est évident qu'il ne peut pas trouver le fichier, mais il peut tout voir lors du débogage.
Copiez le fichier dans MQL5\Tester\Files ( créez un dossier au préalable).
J'ai essayé, créé de tels dossiers manuellement, mis mon fichier (avec sous-dossier, désactivé #property tester_file), il ne le trouve en aucun cas dans le testeur.
Et si vous connectez #property tester_file, cela fonctionne étrangement.
Cependant, de temps en temps, il fait planter un dossier et un fichier dans MT5\tester\agent000\MQL5\File, probablement en raison du fait que si vous désactivez #property tester_file, il fait tout planter à cet endroit.
Oui, maintenant j'ai découvert que si je change le code (n'importe où) dans le fichier mq5 (à partir duquel le txt est appelé), puis que je le compile et que je le passe au testeur, il craque tout dans le fichier MT5\tester\agent000\MQL5\File.
C'est un miracle, mais au moins ça marche - et c'est bien.
J'ai essayé, créé de tels dossiers manuellement, mis mon fichier (avec sous-dossier, désactivé #property tester_file), il ne le trouve en aucun cas dans le testeur.
Et si vous connectez #property tester_file alors, étrangement, cela fonctionne.
Cependant, de temps en temps, il fait planter un dossier et un fichier dans MT5\tester\agent000\MQL5\File, probablement en raison du fait que si vous désactivez #property tester_file, il fait tout planter à cet endroit.
Oui, maintenant j'ai découvert que si je change le code (n'importe où) dans le fichier mq5 (à partir duquel le txt est appelé), puis que je le compile et que je le passe au testeur, il craque tout dans le fichier MT5\tester\agent000\MQL5\File.
C'est un miracle, mais au moins ça marche, et c'est bien.
Si W7, placez le fichier dans le répertoire Document and Setting/.../MetaQuotes/Common/Files, ou désactivez l'UAC.
PS : vérifiez encore une fois l'orthographe du nom, sur quelle mise en page le nom est écrit (mieux vaut certainement le copier), la disponibilité de l'espace à la fin du nom et ainsi de suite.
Si W7, placez le fichier dans Document and Setting/.../MetaQuotes/Common/Files, ou désactivez UAC.
PS : vérifiez à nouveau l'orthographe du nom, sur quels layouts le nom est écrit (il est préférable de copier), la présence d'un espace à la fin du nom, etc.
En réalité, j'ai Win7 64bit, mais l'UAC est nul.
C:\Documents and Settings\Tous les utilisateurs\MetaQuotes\Terminal\Common\Files\N J'ai mis mon dossier et mon fichier là, ça n'a pas aidé, il ne trouve pas le fichier dans le testeur.
Oui, je pense que tout est correct avec le nom, à #property tester_file dans le test fonctionne (et sur le débogage fonctionne sur n'importe quel ), mais dans le testeur pas moyen, sauf comme seulement à travers #property tester_file.
Et ensuite avec le problème mentionné ci-dessus de tuer le fichier après avoir modifié et compilé mq5 (j'ai une telle disposition).
Vous avez un mensonge flagrant écrit dans votre aide :
CLBufferWrite
Ecrit un tableau dans le tampon OpenCL.
CLBufferWrite(
intbuffer//handle au buffer OpenCL
const void&data[]// tableau de valeurs
uintoffset=0// à partir de quel élément, par défaut, à partir du premier.
voidsize=WHOLE_ARRAY// nombre de valeurs, le tableau entier par défaut
) ;
Paramètres
......décalage
.....
taille
[in] Nombre de valeurs à écrire. Par défaut, toutes les valeurs du tableau sont écrites dans le tampon OpenCL.
......Il écrit en fait le nombre d'octets ( !!!), pas du tout les valeurs.
J'ai passé deux nuits à déboguer l'indicateur, jusqu'à ce que je trouve la solution ! Et pourquoi ? - Parce que je croyais en ton écriture...
FIXEZ-LE MAINTENANT ! !! :))
// Je ne l'ai pas compris à temps, car la valeur par défaut ( size=WHOLE_ARRAY) fonctionne correctement.