Il n'est pas correct d'utiliser la condition == pour les variables de type double. Il est recommandé de comparer comme ceci :
Je peux ajouter à cela que, bien qu'avec un certain retard, nous avons quand même écrit un article sur ce sujet - Features of working with numbers of type double in MQL4. Tout ce qui y est mentionné sera toujours pertinent pour tout langage de programmation lorsqu'il s'agit d'opérations avec des nombres réels (double et flottant dans MQL5).
joo: Pas assez de mémoire opérationnelle. Vérifiez la taille des tableaux dynamiques, il s'agit probablement d'une tentative d'allocation de plus de mémoire que celle disponible.
Non, ce n'est pas ça. C'est probablement quelque chose avec les serveurs. Il y a probablement des travaux en cours. Un trou est apparu dans les données. La connexion au serveur est souvent perdue. L'historique n'est pas téléchargé.
sergey1294: Si j'ai bien compris, le retour opérateur doit toujours être placé à la fin de la fonction utilisateur.
Je pense que la réponse à propos de == était essentielle. Il devrait vraiment y avoir un return(...) quelque part dans une fonction de type double. Pas nécessairement à la fin. L'utilisation de l'opérateur == dans if() return() ; peut provoquer une fausse sortie si vous avez le type LotStep 0.1000000000000000001. Dans ce cas, aucun des retours ne fonctionne et la fonction ne renvoie rien. Bien que dans votre cas, le retour n'aime probablement pas NormalizeDouble. Dans votre version qui fonctionne, fixez la fin à return(NormilizeDouble(lot,2)) et voyez si cela fonctionne. Je suis moi-même curieux de le savoir.
Je pense que la réponse à propos de == était essentielle. Il devrait vraiment y avoir un return(...) quelque part dans une fonction de type double. Pas nécessairement à la fin. L'utilisation de l'opérateur == dans if() return() ; peut provoquer une fausse sortie si vous avez le type LotStep 0.1000000000000000001. Dans ce cas, aucun des retours ne fonctionne et la fonction ne renvoie rien. Bien que dans votre cas, le retour n'aime probablement pas NormalizeDouble. Dans votre version qui fonctionne, fixez la fin à return(NormilizeDouble(lot,2)) et voyez si cela fonctionne. Je suis moi-même curieux de le savoir.
Il doit y avoir return(...) à la fin, mais il se peut qu'il n'y arrive jamais (si l'une des conditions If fonctionne)...
L'erreur est que vous avez oublié la devise de la marge dans vos calculs. Solde = 100 USD et exigence de marge = 100 EUR (119 USD).
C'est pourquoi l'opération ne peut être effectuée - tout est correct.
Je veux revenir à ma question sur le calcul correct de la marge. Comme Renat l'a remarqué dans mes calculs, LotRqdMgn (marge requise pour acheter 1 lot) ne tient pas compte du prix de la devise. Je me souviens avoir vu cette table
Identifiant
Description
Formule
SYMBOLE_CALC_MODE_FOREX
Mode Forex - calcul du bénéfice et de la marge pour le Forex
Marge : Lots*Taille_contrat/Levage
Profit: (prix de clôture - prix d'ouverture)*Taille du contrat*Lots
SYMBOLE_CALC_MODE_FUTURES
ModeFutures- calcul de la marge et du profit pour les futures
Marge : Lots *InitialMargin*Percentage/100
Profit : (prix de clôture - prix d'ouverture) * prix du pic / taille du pic * lots.
SYMBOLE_CALC_MODE_CFD
Mode CFD - calcul de la marge et du bénéfice pour CFD
Marge : Lots *Taille du contrat*Prix du marché*Pourcentage/100
Profit : (prix de clôture - prix d'ouverture)*Taille du contrat*Lots
SYMBOLE_CALC_MODE_CFDINDEX
Mode index CFD - calcul de la marge et du bénéfice pour les CFD par indices
Marge : (Lots*Taille du contrat*Prix du marché)*Prix du pic/Taille du pic
Profit : (prix de clôture - prix d'ouverture)*Taille du contrat*Lots
SYMBOLE_CALC_MODE_CFDLEVERAGE
Mode Levier CFD - calcul de la marge et du profit pour les CFD à effet de levier.
Marge : (Lots*Taille du contrat*Prix du marché*Pourcentage)/Levage
Profit : (prix de clôture - prix d'ouverture)*Taille du contrat*Lots
Il s'avère donc qu'il y a une erreur dans le tableau : au lieu de Lots*Taille_Contrat/Levage, ce doit être Prix*Lots*Taille_Contrat/Levage.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Il n'est pas correct d'utiliser la condition == pour les variables de type double. Il est recommandé de comparer comme ceci :
Il n'est pas correct d'utiliser la condition == pour les variables de type double. Il est recommandé de comparer comme ceci :
C'est tout à fait raisonnable, et surtout une approche sensée. Mais il me semble qu'au moins la première ligne aurait dû ressembler à ceci :
Je reçois de temps en temps les messages suivants dans le journal
2010.06.15 14:48:09 MemoryException 4915200 octets non disponibles
Je ne sais pas quoi faire.
Les messages suivants apparaissent périodiquement dans le journal
2010.06.15 14:48:09 MemoryException 4915200 octets non disponibles
Je ne sais pas quoi faire.
Il n'est pas correct d'utiliser la condition == pour les variables de type double. Il est recommandé de comparer comme ceci :
Pas assez de mémoire opérationnelle. Vérifiez la taille des tableaux dynamiques, il s'agit probablement d'une tentative d'allocation de plus de mémoire que celle disponible.
Si j'ai bien compris, le retour opérateur doit toujours être placé à la fin de la fonction utilisateur.
Je pense que la réponse à propos de == était essentielle. Il devrait vraiment y avoir un return(...) quelque part dans une fonction de type double. Pas nécessairement à la fin. L'utilisation de l'opérateur == dans if() return() ; peut provoquer une fausse sortie si vous avez le type LotStep 0.1000000000000000001. Dans ce cas, aucun des retours ne fonctionne et la fonction ne renvoie rien. Bien que dans votre cas, le retour n'aime probablement pas NormalizeDouble. Dans votre version qui fonctionne, fixez la fin à return(NormilizeDouble(lot,2)) et voyez si cela fonctionne. Je suis moi-même curieux de le savoir.
Je pense que la réponse à propos de == était essentielle. Il devrait vraiment y avoir un return(...) quelque part dans une fonction de type double. Pas nécessairement à la fin. L'utilisation de l'opérateur == dans if() return() ; peut provoquer une fausse sortie si vous avez le type LotStep 0.1000000000000000001. Dans ce cas, aucun des retours ne fonctionne et la fonction ne renvoie rien. Bien que dans votre cas, le retour n'aime probablement pas NormalizeDouble. Dans votre version qui fonctionne, fixez la fin à return(NormilizeDouble(lot,2)) et voyez si cela fonctionne. Je suis moi-même curieux de le savoir.
Il doit y avoir return(...) à la fin, mais il se peut qu'on n'y arrive pas (si l'une des conditions If fonctionne)...
Renat:
L'erreur est que vous avez oublié la devise de la marge dans vos calculs. Solde = 100 USD et exigence de marge = 100 EUR (119 USD).
C'est pourquoi l'opération ne peut être effectuée - tout est correct.
Je veux revenir à ma question sur le calcul correct de la marge. Comme Renat l'a remarqué dans mes calculs, LotRqdMgn (marge requise pour acheter 1 lot) ne tient pas compte du prix de la devise. Je me souviens avoir vu cette table
Identifiant
Description
Formule
SYMBOLE_CALC_MODE_FOREX
Mode Forex - calcul du bénéfice et de la marge pour le Forex
Marge : Lots*Taille_contrat/Levage
Profit: (prix de clôture - prix d'ouverture)*Taille du contrat*Lots
SYMBOLE_CALC_MODE_FUTURES
ModeFutures- calcul de la marge et du profit pour les futures
Marge : Lots *InitialMargin*Percentage/100
Profit : (prix de clôture - prix d'ouverture) * prix du pic / taille du pic * lots.
SYMBOLE_CALC_MODE_CFD
Mode CFD - calcul de la marge et du bénéfice pour CFD
Marge : Lots *Taille du contrat*Prix du marché*Pourcentage/100
Profit : (prix de clôture - prix d'ouverture)*Taille du contrat*Lots
SYMBOLE_CALC_MODE_CFDINDEX
Mode index CFD - calcul de la marge et du bénéfice pour les CFD par indices
Marge : (Lots*Taille du contrat*Prix du marché)*Prix du pic/Taille du pic
Profit : (prix de clôture - prix d'ouverture)*Taille du contrat*Lots
SYMBOLE_CALC_MODE_CFDLEVERAGE
Mode Levier CFD - calcul de la marge et du profit pour les CFD à effet de levier.
Marge : (Lots*Taille du contrat*Prix du marché*Pourcentage)/Levage
Profit : (prix de clôture - prix d'ouverture)*Taille du contrat*Lots
Il s'avère donc qu'il y a une erreur dans le tableau : au lieu de Lots*Taille_Contrat/Levage, ce doit être Prix*Lots*Taille_Contrat/Levage.