Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 821

 

Veuillez prêter attention à ma question. J'écris un indicateur qui effectue quelques calculs et les enregistre dans un tableau (pas une série temporelle) de la même taille que le nombre de chandeliers dans le graphique. A l'origine, je pensais que si j'avais 2000 chandeliers dans le graphique dans les paramètres du terminal, alors à l'apparition d'un nouveau chandelier, le premier sera le deuxième, le deuxième - le troisième, etc. Par conséquent, lorsque j'obtiens prev_calculated égal à zéro, je recalcule le tableau entier, ou seulement la dernière barre. Mais j'ai découvert qu'à chaque nouvelle bougie, la valeur de rates_total augmente et devient supérieure à la limite de 2000.

Par conséquent, il est inutile de recalculer le tableau.

Mais pourquoi cela se produit-il parce que le terminal définit exactement 2000 chandeliers ?


Lorsque le terminal se ferme, le nombre de barres redevient 2000 et recommence à augmenter lorsque de nouvelles bougies apparaissent.


ruslanzip:
Après-midi . Vous pouvez me donner un indice ? Comment serait le code de la condition : Si le solde du compte a augmenté ou diminué, exécutez alors la fonction

//Déclarer une variable en dehors des fonctions :

double Balance=AccountBalance() ;

//Ajouter à la fonction tick/calculation :

si (Balance!=AccountBalance())

{

Balance=AccountBalance() ;

MyFunction() ; // <-- Votre fonction

}

 
J'ai de l'argent sur mon compte réel mais il est dit ici que vous ne pouvez retirer que des salaires ?
 
Roza75:
J'ai de l'argent sur mon compte réel mais il est dit ici que vous ne pouvez retirer que des salaires ?
Compte réel où l'avez-vous ?
 
Artyom Trishkin:
Compte réel où l'avez-vous ?
Application Metatreder 4
 
Igor Makanu:

car c'est ainsi que fonctionne le terminal

Il s'agit donc d'un comportement normal et non d'une erreur ? Parce que certains indicateurs personnalisés de base sont écrits sans tenir compte de ce facteur et font un recalcul complet à chaque prev_calculated==0.


Igor Makanu:

cette solution n'est que pour le testeur, que se passe-t-il si je surcharge le terminal ? que se passe-t-il si je lance un deuxième EA sur ce compte ?

vous devez travailler avec l'historique des commandes, il n'y a pas de commandes ouvertes avec notre magicien - vérifiez le profit de la dernière commande dans l'historique.

Recharger ? Ou recharger ? Si c'est le dernier cas, le comportement de l'EA ne changera pas. Si vous lancez un deuxième EA, l'algorithme sera exécuté de manière similaire, sans erreur.

Ce dont l'auteur a besoin pour travailler dépend de la tâche qu'il s'est fixée. De la manière dont il a posé la question, j'y ai répondu. Je n'ai pas été plus précis dans ma question.

 
The_Sheikh:

Veuillez prêter attention à ma question. J'écris un indicateur qui effectue quelques calculs et les enregistre dans un tableau (pas une série temporelle) de la même taille que le nombre de chandeliers dans le graphique. A l'origine, je pensais que si j'avais 2000 chandeliers dans le graphique dans les paramètres du terminal, alors à l'apparition d'un nouveau chandelier, le premier sera le deuxième, le deuxième - le troisième, etc. Par conséquent, lorsque j'obtiens prev_calculated égal à zéro, je recalcule le tableau entier, ou seulement la dernière barre. Mais j'ai découvert qu'à chaque nouvelle bougie, la valeur de rates_total augmente et devient supérieure à la limite de 2000.

Par conséquent, il est inutile de recalculer le tableau.

Mais pourquoi cela se produit-il ainsi lorsque le terminal définit exactement 2000 chandeliers ?


Lorsque le terminal se ferme, le nombre de barres redevient 2000 et recommence à augmenter lorsque de nouvelles bougies apparaissent.


//Déclarer une variable en dehors des fonctions :

double Balance=AccountBalance() ;

//Ajouter à la fonction tick/calculation :

si (Balance!=AccountBalance())

{

Balance=AccountBalance() ;

MyFunction() ; // <-- Votre fonction

}



Merci beaucoup, ça a marché !

 
Artyom Trishkin:

J'ai l'application Metatreder 4 sur mon téléphone.
 
Alexey Viktorov:

Et pourquoi essayer de comprendre comment il fonctionne en interne ? Eh bien, si vous voulez écrire votre propre fonction, il est probablement plus pratique de trier et de prendre la valeur de l'un des index les plus éloignés. Mais elle ne sera guère plus rapide que la fonction intégrée. De plus, la fonction intégrée vous permet de rechercher une valeur dans les limites de l'index désigné. Un simple tri ne fonctionnera donc pas. Nous devrons donc copier une partie du tableau dans un tableau intermédiaire, le trier et en extraire la valeur requise, mais la copie de tableau n'est pas une fonction très "bon marché".

Vous devez comprendre pour que votre cerveau puisse se développer. Hier je me suis assis longtemps et j'ai fait des croquis, il semble qu'il soit possible de se passer du tri sur le principe de l'énumération, mais il faut quand même des variables qui vont stocker des valeurs, et en plus on peut retourner la valeur en une fois, pas l'indice, ce qui simplifie le travail. Vous pouvez mieux faire vos propres fonctions dans la gamme et différentes modifications pour sauvegarder les calculs. Les fonctions intégrées manquent de détails. Mais les fonctions intégrées sont très rapides, je ne comprends pas à quoi c'est lié, peut-être qu'elles sont écrites en C++, car j'écris mes fonctions très soigneusement, en tenant compte de tous les détails : vitesse, qualité, économie de code, je mets en œuvre des modifications qui réduisent le nombre de vérifications et de passages à l'intérieur des fonctions, mais pour une raison quelconque, les fonctions intégrées contournent toujours la vitesse, pas la qualité, mais je m'adresse à la communauté du forum avec cette question depuis longtemps.

 
Bonjour à tous les utilisateurs du forum ! Face à un problème, le deuxième jour, j'ai mal à la tête, je n'arrive pas à trouver comment mettre en œuvre l'idée ! Comment dessiner un rectangle, un cercle, un ovale (peu importe la figure) à une certaine bougie, sans redessiner dans de nouvelles coordonnées. Et si certaines conditions déclenchent une figure ? Chaque figure sur son propre chandelier. Je viens juste de commencer à étudier mql4, donc je ne suis pas familier avec les graphiques. J'ai décidé hier d'essayer d'imprimer un carré sur la 10ème barre (à titre d'exemple). J'en ai obtenu un et il n'est plus dessiné. Hier, j'ai tripoté et tripoté le code, et finalement ça a marché, mais le carré est constamment effacé à son ancienne place et dessiné à une nouvelle, puis dérangé que le carré de sortie une seule fois. Qui sait comment le mettre en œuvre ? Ou alors, indiquez où se trouve une branche sur le forum. Aka déjà lu un tas d'informations, juste plus confus ! Merci d'avance pour les réponses !
Raison: