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

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
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.
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 ?
Compte réel où l'avez-vous ?
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.
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.
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é !
Application Metatreder 4
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie
Toute question pour les débutants sur MQL4, aide et discussion sur les algorithmes et les codes
Artyom Trishkin, 2019.04.28 16:55
Compte réel où l'avez-vous ?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.