Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 600
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
Ce n'est pas un club de télépathie. Vous n'avez pas joint votre code, c'est donc à vous de décider où placer la suppression.
Faux.
Eh bien, voici le code, de quoi avez-vous besoin d'autre ? Et si elle est incorrecte ?
Merci.
Vous avez tout mélangé. Une mauvaise planification de la tâche est exactement ce qui conduit à ces conséquences.
Si des objets sont créés dans une classe, celle-ci doit les supprimer dans son destructeur à la fin du processus. D'autres classes, en revanche, avant d'obtenir un pointeur sur un objet, doivent vérifier sa validité. Et en principe, il ne devrait pas y avoir une telle relation entre les deux. C'est un peu un enchevêtrement. Compliqué n'est pas synonyme de qualité. Tout doit être transparent et traçable. D'abord et avant tout, pour vous.
Montrons le code à la place.
Ici, je lis quelques données d'un fichier au début du programme.
Autrement dit, je crée un objet CCandleCondition *candle_cond à l'itération, puis je l'ajoute à la collection candles_one_rules.
Voici la méthode AddCondition de la classe CCandlesOneRules :
CCandleRule est juste une classe conteneur pour les conditions. J'ajoute des conditions aux règles et des règles à CCandlesOneRules, qui à son tour, à CCandlesOneRules.....
Mais cette boucle while échoue au démarrage et se bloque avec une erreur de mémoire insuffisante. Et ces conditions ne sont pas très nombreuses, seules 7 sont lues avant de s'arrêter. Si nous réduisons le nombre de données dans le fichier lu, il fonctionne, sans aucune erreur, sans objets non supprimés, etc.
Voyons un peu mieux le code.
Je commence à perdre patience.
Où se trouve la définition de la méthode Add ?
A en juger par le code, vous ne comprenez absolument pas ce que vous faites.
Je commence à perdre patience.
Où se trouve la définition de la méthode Add ?
À en juger par le code, vous ne comprenez pas du tout ce que vous faites.
CCandleOneRules, CCandlesOneRules, CCandleRule sont toutes des classes héritées de CArrayObj.
A en juger par vos réponses génériques, vous ne comprenez pas mes questions. En ce qui concerne le tableau avec CArrayObj, vous n'avez toujours pas répondu correctement. Une fois de plus, je vais répéter ce problème. Il existe une classe, dans la méthode class, les objets globaux de la classe sont ajoutés au tableau (objet de type CArrayObj), qui est déclaré là dans cette méthode. Dans cette méthode, certaines actions sont effectuées dans ce tableau. A la fin, l'objet tableau n'est pas nécessaire, ce sont les membres du tableau qui sont nécessaires. Comment se débarrasser correctement de cet objet tableau, en conservant les membres du tableau ? Si vous ne vous en débarrassez pas, vous obtiendrez un message du type "objets non supprimés" dans le journal. Je vous ai donné ma solution, vous l'avez mal formulée. Comment est-ce correct ? Comment puis-je placer la suppression dans OnDeinit (ou dans la méthode Deinit de la classe qui sera appelée depuis OnDeinit), si cet objet tableau n'est visible que dans la méthode de la classe ?
De plus, si les objets ne sont supprimés que dans OnDeinit, vous pouvez également vous retrouver à court de mémoire...
Bonjour chers collègues.
Veuillez m'aider à répondre à cette question. Où dois-je utiliser la fonction ArraySetAsSeries() pour spécifier l'ordre de numérotation des éléments dans le tampon de l'indicateur ? Dans les indicateurs, qui sont préinstallés dans le terminal, j'ai souvent observé qu'il est utilisé à l'intérieur de OnCalculate(). Mais le tampon indicateur est déclaré globalement. N'est-il pas logique d'utiliser ArraySetAsSeries() dans OnInit() pour un appel unique dans ce cas ? Ou bien, en raison du réapprovisionnement du tampon de l'indicateur avec de nouveaux éléments, l'ordre de numération peut être perdu et il est nécessaire d'appeler ArraySetAsSeries() à chaque fois dans OnCalculate() ? Je veux écrire un code optimal sans appels de fonctions inutiles, quand ce n'est pas nécessaire. Je serai reconnaissant pour toute aide.
Bonjour chers collègues.
Veuillez m'aider à répondre à cette question. Où dois-je utiliser la fonction ArraySetAsSeries() pour spécifier l'ordre de numérotation des éléments dans le tampon de l'indicateur ? Dans les indicateurs, qui sont préinstallés dans le terminal, j'ai souvent observé qu'il est utilisé à l'intérieur de OnCalculate(). Mais le tampon indicateur est déclaré globalement. N'est-il pas logique d'utiliser ArraySetAsSeries() dans OnInit() pour un appel unique dans ce cas ? Ou bien, en raison du réapprovisionnement du tampon de l'indicateur avec de nouveaux éléments, l'ordre de numération peut être perdu et il est nécessaire d'appeler ArraySetAsSeries() à chaque fois dans OnCalculate() ? Je veux écrire un code optimal sans appels de fonctions inutiles, quand ce n'est pas nécessaire. Je vous serai reconnaissant de m'aider.
IMHO, j'écrirais des indicateurs sans ces fonctions du tout (si à partir de zéro, bien sûr). Pour les tampons - dans OnInit(), pour les séries chronologiques - dans OnCalculate().
Et, afin de parler de code optimal, vous devez savoir combien de temps cette fonction prend pour s'exécuter. Ainsi, le profileur devrait passer en premier, et seulement ensuite les questions de performance.
À mon avis, j'écrirais des indicateurs sans ces fonctions du tout (en partant de zéro, bien sûr). Mais pour les tampons - dans OnInit(), pour les séries chronologiques - dans OnCalculate().
Et, afin de parler de code optimal, vous devez savoir combien de temps cette fonction prend pour s'exécuter. Ainsi, le profileur devrait passer en premier, et seulement ensuite les questions de performance.
C'est la conclusion vers laquelle je tendais. Merci pour le conseil.
Bon après-midi. J'ai une question : pourquoi, lorsque j'applique les barres de bolinger au MACD, je prends les valeurs de la ligne de signal et non l'histogramme lui-même ?
Bon après-midi. J'ai une question : pourquoi lorsque j'applique les barres de bolinger à MACD, je prends les valeurs de la ligne de signal et non l'histogramme lui-même ?
Avez-vous la possibilité de spécifier le tampon graphique à utiliser pour le calcul ?