Caractéristiques du langage mql5, subtilités et techniques - page 201
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
Pour de tels cas, voici quelques macros auxiliaires.
1. Parfois, vous voulez déterminer dans votre macro si un paramètre a été défini ou non. IS_PARAMETER_SET(p) définit une expression, qui renvoie vrai si p est défini (même si la variable string ==NULL).
Attention : l'expression est évaluée après prétraitement au moment de la compilation !!!, c'est-à-dire qu'elle ne peut pas être utilisée pour implémenter quelque chose comme #ifdef IS_PARAMETER_SET(p) #else (ceci s'applique également aux autres macros ci-dessous)
2. Si vous avez besoin de convertir explicitement la valeur d'un paramètre en une chaîne de caractères, pour éviter une erreur de compilation avec un paramètre non spécifié, vous pouvez utiliser __EVAL_STR(p). Si p n'est pas spécifié ou explicitement défini avec un littéral NULL, il retourne "". Non applicable aux tableaux, structures et classes.
La conversion explicite d'un paramètre en un nombre est __EVAL_NON_STR(p). Si p n'est pas défini, retourne 0. Ne fonctionne pas si p est une chaîne de caractères !
Code et exemples d'utilisation :
Le code suivant sur le compte de démonstrationRannForex-Server permet de reproduire immédiatement cette situation en exécutant ce conseiller.
Résultat.
A propos, le script montre (pas toujours la première fois) un bug dans l'exécution synchrone de OrderSend.
Après l'exécution d'OrderSend pendant quelques dizaines ou centaines de millisecondes, le prix de l'ordre est l'ancien prix, et non celui qui a été placé avec succès par OrderSend.
Pour en revenir au sujet des billets identiques, nous pouvons tirer quelques conclusions.
Si quelqu'un a réussi à le reproduire sur un autre serveur de trading, merci de partager le nom.
Nom de recherche: Oshibka 010.
On en revient encore à la question de l'exécution partielle.
1. Veuillez clarifier le point 3 : "Vous pouvez fermer la position que vous avez formée sans supprimer l'exécution partielle. Mais si l'ordre est ensuite déclenché, une transaction s'ouvrira avec un ticket égal à celui de la position que vous avez fermée auparavant. Autrement dit, il peut arriver que vous fermiez une position avec un certain ticket. Et ensuite, une position réapparaît avec le même ticket."
Dans ce cas, POSITION_IDENTIFIER était-il égal à POSITION_TICKET ou non ?
2. Plus tôt dans le fil de discussion "POSITION_TICKET != POSITION_IDENTIFIER", vous avez démontré une logique MT5 différente.
https://www.mql5.com/ru/forum/227423/page2#comment_6543129Conclusions
Si nous supposons qu'il s'agit d'un comportement normal de MT5, et non d'une particularité du hack du courtier, alors
D'après votre expérience, y a-t-il un schéma général dans les cas/modes de travail que MT5 utilise ?
3. En définitive, y a-t-il déjà eu des situations réelles où "POSITION_TICKET != POSITION_IDENTIFIER" ?
Lors de l'appel d'une macro, il est possible d'omettre un paramètre (de ne pas le prendre en compte). Parfois, vous souhaitez autoriser spécifiquement une macro à fonctionner avec un paramètre non spécifié.
Il s'avère donc qu'un paramètre non spécifié dans une macro est traité par le compilateur comme une chaîne vide ?
D'une certaine manière, oui, bien que "comme un espace vide" soit un meilleur terme. Difficile de s'exprimer clairement :-(.
Mais #p se transforme définitivement en chaîne ==""
D'une certaine manière, oui, bien que "comme un espace vide" soit un meilleur terme. Difficile de s'exprimer clairement :-(.
Mais #p se transforme définitivement en chaîne ==""
Merci, nuance intéressante.
@fxsaber
Consultez ce numéro, s'il vous plaît : https://www.mql5.com/ru/forum/170952/page201#comment_21964923
On en revient encore à la question de la performance partielle.
1. Veuillez clarifier le point 3 : " Vous pouvez clôturer une position formée sans supprimer l'option de vente partielle. Mais si l'ordre est ensuite déclenché, une transaction s'ouvrira avec un ticket égal à celui de la position que vous avez fermée auparavant. Autrement dit, il peut arriver que vous fermiez une position avec un certain ticket. Et puis une position réapparaît avec le même ticket."
Dans ce cas, POSITION_IDENTIFIER était-il égal à POSITION_TICKET ou non ?
2. Plus tôt, dans la branche "POSITION_TICKET != POSITION_IDENTIFIER", vous avez démontré une logique différente de MT5.
https://www.mql5.com/ru/forum/227423/page2#comment_6543129Dans votre expérience, avez-vous constaté un schéma général dans quels cas/modes d'opération le schéma MT5 s'applique ?
3. En définitive, y a-t-il déjà eu des situations réelles où "POSITION_TICKET != POSITION_IDENTIFIER" ?
Les deux liens parlent de différentes implémentations de l'exécution partielle. Ceci est déterminé par le logiciel du courtier, et non par MT5.
Aucune incompatibilité entre le ticket et l'identification n'a jamais été rencontrée.
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie
Bibliothèques : Utilisation
fxsaber, 2021.05.01 14:17
GetMicrosecondCount peut produire une valeur inférieure à celle de l'appel précédent (sans dépassement de l'ULONG). Exemples de telles situations.Chaque ligne est obtenue par différents EAs sur trois terminaux MT4.
Et sur MT5, ce genre de chose arrive, mais beaucoup moins fréquemment sur MT4.
Faites attention.