Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 739
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
Vous avez écrit quelque chose de mal.
Oui, c'est une faute de frappe, je l'ai corrigée. Ou le principe est-il erroné ? Le point était que si le solde est divisé par 10 sans reste, le lot est pris comme le produit du lot initial par 1/10 du solde. N'est-ce pas ? Comment alors ?
Bien que Vadim l'ait écrit plus simplement ici, oui ;)))
Oui, c'est une faute de frappe, je l'ai corrigée. Ou le principe est-il erroné ? Le point était que si le solde est divisé par 10 sans reste, le lot est pris comme le produit du lot initial par 1/10 du solde. N'est-ce pas ? Comment faites-vous alors ?
Bien que Vadim l'ait écrit plus simplement ici, oui ;)))
Et MarketInfo() ?
ET MODE_MINLOT, MODE_MAXLOT, MODE_LOTSTEP ?
Vous devez encore entrer dans la grille des chiffres autorisés des valeurs de lot :
Je l'ai lancé, j'ai obtenu quelque chose de similaire à la vérité :
Pas d'erreur, je pense.
Et MarketInfo() ?
ET MODE_MINLOT, MODE_MAXLOT, MODE_LOTSTEP ?
Vous devez encore entrer dans la grille des chiffres autorisés des valeurs de lot :
Je l'ai lancé et j'ai obtenu quelque chose qui ressemble à la vérité :
Je ne semble pas avoir fait d'erreur.
Merci, on me l'a déjà expliqué :D
Il est clair que pour moi-même j'écris avec tous les chèques, comme il se doit, il y avait juste une esquisse de comment amener le lot à l'équilibre/rapport 10, mais l'idée était malheureuse....
Mais vous avez beaucoup de texte, ça pourrait être plus simple :
Et MarketInfo() ?
ET MODE_MINLOT, MODE_MAXLOT, MODE_LOTSTEP ?
Vous devez encore entrer dans la grille des chiffres autorisés des valeurs de lot :
Je l'ai lancé, j'ai obtenu quelque chose de similaire à la vérité :
Il ne semble pas y avoir d'erreur.
pourquoi, lorsqu'un programmeur naturel se charge d'une tâche, une seule ligne nécessaire pour atteindre l'objectif se transforme en une liste longue d'un demi-kilomètre ?
Comment se fait-il que lorsqu'un programmeur naturel se charge d'une tâche, une ligne de code nécessaire pour atteindre l'objectif se transforme en une liste longue d'un demi-kilomètre ?
Certaines personnes n'ont pas un échelon de 0,01 mais, par exemple, de 0,03. Comment alors ? Des vérifications sont nécessaires dans tous les cas, heureusement que cela ne prend pas beaucoup de temps.
double Min_Lot=MarketInfo(Symbol(), MODE_MINLOT);
Comment se fait-il que lorsqu'un programmeur naturel se charge d'une tâche, une ligne de code nécessaire pour atteindre l'objectif se transforme en une liste longue d'un demi-kilomètre ?
Parce que toutes sortes de merdes vous attendent à chaque tournant, et vous devez vous protéger. Si vous ne vous protégez pas, la qualité sera très faible, ce qui peut finir par vous coûter très cher à long terme. 90% des efforts sont consacrés à se défendre contre le diable et seulement 10% sont consacrés à résoudre le problème. Dans le cas de MT4 et MQL4++, le rapport est encore plus asymétrique.
La merde commence en lisant la documentation:
Tout. Est obligé de retourner les informations sur l'instrument financier, et rien d'autre. Il n'y a pas d'autres résultats. Nous obtenons des informations sur l'instrument :
Voyons quels sont les paramètres du lot pour cet outil :
Paramètres intéressants. Je ne sais pas pourquoi la documentation ne décrit pas le comportement de cette fonction en cas d'erreur. Nous devrons utiliser des fonctionnalités non documentées que nous avons découvertes en observant le comportement de cette fonction.
Ainsi, la fonction MarketInfo() peut retourner 0 pour ces paramètres demandés dont les valeurs doivent être différentes de 0 par nature, ce qui constitue une situation d'erreur non documentée. Le code doit vérifier si une erreur s'est produite lors de la demande de chacun des paramètres. Pour cette seule raison, 3 contrôles sont prévus dans le code.
Suivant. De toute évidence, la taille de lot calculée peut ne pas entrer dans la fourchette des tailles de lot autorisées. On ne le vérifie pas ? Ou devrions-nous programmer explicitement cette situation, puis programmer la réaction à cette situation dans le code de niveau supérieur, au lieu de procéder "au fur et à mesure" ? Un exemple de ce à quoi cela ressemble quand tout n'est pas programmé, et fonctionne comme par hasard, pourrait être une autre version récente de MT4, quand quelque chose s'est déplacé quelque part, a miraculeusement bugué, et quelque part a cessé de fonctionner complètement. Peut-être n'est-ce pas le résultat souhaité ?
Le code est développé et commenté pour montrer le processus de réflexion et le modèle de calcul utilisé. Étant donné que le modèle de lot défini par MetaQuotes est mis en œuvre sous la forme d'une "grille de valeurs d'ordres étalés" définie par les paramètres MINLOT, MAXLOT et LOTSTEP, il serait plus raisonnable de calculer la valeur exacte du lot en ces termes. C'est pourquoi le modèle de calcul est rédigé en ces termes.
Je ne vois pas de "demi-kilomètres" ou autre chose. La seule chose est que le code est exécuté de manière à obtenir des performances maximales lorsque les fonctions sont appelées une fois et que les valeurs résultantes sont stockées dans des variables, et que chaque appel n'est exécuté qu'après une autre vérification lorsqu'il s'avère que la valeur renvoyée n'est pas un indicateur d'erreur et qu'il est toujours judicieux de poursuivre les calculs. Une fois qu'il est clair qu'une erreur s'est produite, les ressources informatiques ne sont plus gaspillées en appels inutiles.
Pour rendre le code plus compact, nous pourrions obtenir les 3 valeurs en une fois et vérifier les 3 conditions en un seul if. Mais en cas d'erreur lors du premier appel, les deux autres appels seraient un gaspillage de ressources informatiques.
Notez que lors de la programmation d'une expression qui utilise la division par lotStep, nous avons volontairement fait attention au fait qu'elle est utilisée sous les if's, qui vérifient simplement que la valeur de lotStep est différente de 0, c'est-à-dire que la division par 0 ne peut pas se produire. En principe, le code peut encore être amélioré en déclarant toutes les variables comme "double" et "int" et "const double" et "const int", se protégeant ainsi contre lui-même lors d'éventuelles modifications ultérieures du code. En particulier, si dans le code if, qui vient de vérifier si la valeur de la variable lotStep est différente de 0, accidentellement, dans un code nouvellement ajouté à cet endroit, on attribue par erreur la valeur 0 à cette variable, alors une autre division par 0 se produira dans l'expression. Si la variable est déclarée comme "const double", alors j'espère que le compilateur signalera immédiatement une tentative non autorisée de modifier la variable lotStep, empêchant ainsi de faire une telle erreur.
Les "demi-kilomètres" sont donc dus à des conditions objectives sévères, et non au caprice de quelqu'un.
Comment s'appelle la branche ? Eh bien, si tu veux aider, fais-le correctement, pour que tu puisses vraiment apprendre quelque chose.