![Как получить программно "Процент маржи" Как получить программно "Процент маржи"](https://c.mql5.com/36/41/kak-poluchit-programmno-procent.jpg)
- 2017.05.31
- www.mql5.com
Merci, je l'ai lu. Il existe un script à la page 7 pour calculer la valeur de la marge calculée pour chaque position ouverte. Je l'ai légèrement ajusté en tenant compte du fait qu'il ne s'agit pas de CFD, mais de FOREX et je l'ai compilé comme ceci :
void OnStart() { double size = 0, percentage = 0, orderMargin = 0, accountMargin = 0; long leverage = 0; for(int i = 0; i < OrdersTotal(); i++) { int tupe = -1; if(OrderSelect(i, SELECT_BY_POS) && (tupe=OrderType()) < OP_BUYLIMIT) { string symbol = OrderSymbol(); string symbolCurencyMargin = SymbolInfoString(symbol, SYMBOL_CURRENCY_MARGIN); double orderOpenPrice = OrderOpenPrice(); double orderLots = OrderLots(); double margin = MarketInfo(symbol, MODE_MARGINREQUIRED); double ask = MarketInfo(symbol, MODE_ASK); double bid = MarketInfo(symbol, MODE_BID); double price = symbolCurencyMargin == "USD" ? 1 : tupe == OP_BUY ? bid : ask; size = SymbolInfoDouble(symbol, SYMBOL_TRADE_CONTRACT_SIZE); leverage = AccountInfoInteger(ACCOUNT_LEVERAGE); percentage = NormalizeDouble(margin/(size*price/100)*leverage, 0); //orderMargin = (size*orderOpenPrice*percentage/100)/leverage; orderMargin = (orderLots*size*orderOpenPrice)/leverage; accountMargin += orderMargin; Print(symbolCurencyMargin, " ******** Маржа ", symbol, " = ", orderMargin); } } Print(AccountInfoString(ACCOUNT_CURRENCY), " ******** AccountMargin = ", DoubleToString(accountMargin, 2)); }
Dans la grande majorité des cas, la valeur finale de la marge calculée par ce script coïncide avec la valeur réelle. Mais, hélas, pas dans mon cas. Le problème est que la formule de calcul de la marge pour chaque ordre utilise la valeur de l'effet de levier actif à ce moment-là.
Mais dans les règlements de certains courtiers (sans pointer du doigt), il est spécifié que pour les positions ouvertes dans certaines conditions (vendredi soir, méthode de calcul de la moyenne, etc.), l'effet de levier est précisé, et il est généralement plusieurs fois inférieur à celui de l'ensemble du compte. C'est exactement mon cas. Toutefois, afin de préparer correctement une réclamation et d'éviter qu'une telle situation ne se reproduise à l'avenir, je dois déterminer quelles positions ont été ouvertes avec un effet de levier normal et lesquelles ont été ouvertes avec un effet de levier plus élevé.
L'équipe d'assistance du courtier indique ouvertement que l'augmentation de l'effet de levier n'est pas fixée pour le compte dans son ensemble, mais pour des ordres spécifiques, et ce après l'ouverture de la position. Il est donc inutile d'utiliser la requête AccountFreeMarginChek.
Cela pose en fait une question : existe-t-il un moyen de savoir de manière fiable quelle marge est réellement utilisée pour chaque position dans le terminal, si nous savons que le courtier peut définir un levier différent pour chaque position ?
Mais dans les règlements de certains courtiers (ne montrons pas du doigt), il est prescrit que pour les positions ouvertes dans certaines conditions (vendredi soir, méthode de calcul de la moyenne, etc.), un effet de levier spécial est fixé, généralement plusieurs fois inférieur à celui de l'ensemble du compte. C'est exactement mon cas. Mais pour faire une réclamation correcte et éviter que cette situation ne se reproduise à l'avenir, je dois comprendre quelles positions ont été ouvertes avec un effet de levier normal, et lesquelles ont été ouvertes avec un effet de levier plus élevé.
1) Le courtier a toujours raison.
2) Si le courtier a tort, lisez la règle n° 1.
Merci, je l'ai lu. Il existe un script à la page 7 pour calculer la valeur de la marge calculée pour chaque position ouverte. Je l'ai ajusté un peu, en tenant compte du fait qu'il ne s'agit pas de CFD, mais de FOREX, et je l'ai compilé sous cette forme :
Dans la grande majorité des cas, la valeur finale de la marge calculée par ce script coïncide avec la valeur réelle. Mais, hélas, pas dans mon cas. Le problème est que la formule de calcul de la marge pour chaque ordre utilise la valeur de l'effet de levier actif à ce moment-là.
Mais dans les règlements de certains courtiers (sans pointer du doigt), il est spécifié que pour les positions ouvertes dans certaines conditions (vendredi soir, méthode de calcul de la moyenne, etc.), l'effet de levier est précisé, et il est généralement plusieurs fois inférieur à celui de l'ensemble du compte. C'est exactement mon cas. Toutefois, afin de préparer correctement une réclamation et d'éviter qu'une telle situation ne se reproduise à l'avenir, je dois déterminer quelles positions ont été ouvertes avec un effet de levier normal et lesquelles ont été ouvertes avec un effet de levier plus élevé.
L'équipe d'assistance du courtier indique ouvertement que l'augmentation de l'effet de levier n'est pas fixée pour le compte dans son ensemble, mais pour des ordres spécifiques, et ce après l'ouverture de la position. Il est donc inutile d'utiliser la requête AccountFreeMarginChek.
Cela conduit en fait à la question suivante : existe-t-il un moyen de savoir de manière fiable quelle marge est réellement utilisée pour chaque position dans le terminal, si l'on sait que le courtier peut définir un levier différent pour chaque position ?
Ne perdez pas votre temps avec une correspondance inutile. C'est écrit dans le règlement et argumenter revient à se battre contre des moulins à vent.
Ce n'est pas le symbole qui compte, mais le temps d'ouverture. Beaucoup l'ont 15 minutes avant la fermeture du week-end. Et 15 minutes plus tard, le lundi, l'effet de levier revient à la normale.
Ne perdez pas votre temps avec une correspondance inutile. C'est écrit dans le règlement et argumenter revient à se battre contre des moulins à vent.
Je souhaite déposer une plainte principalement pour obtenir des éclaircissements sur les règles d'application d'un effet de levier accru. Le règlement n'est pas très clair à ce sujet.
La principale chose que je veux comprendre est comment éviter cette situation à l'avenir. Plus précisément, dans le règlement de mon courtier, la clause en question contient la formulation vague "la société se réserve le droit". C'est-à-dire qu'ils peuvent ou non appliquer des exigences de marge accrues à un ordre particulier. Il est donc très important pour moi de trouver comment détecter dans le terminal les positions auxquelles l'effet de levier accru (autre que celui émis par AccountLeverage) a été appliqué. Par exemple, fermer rapidement de telles positions pour en informer le trader et arrêter les transactions.
Il existe certainement un moyen de demander au terminal le montant de la marge pour une seule position. Je ne le sais pas encore, et je ne le trouve pas dans la documentation.
Je souhaite déposer une plainte principalement pour obtenir des éclaircissements sur les règles d'application d'un effet de levier accru. Ce n'est pas très clair dans le règlement.
La principale chose que je veux comprendre est comment éviter cette situation à l'avenir. Plus précisément, dans le règlement de mon courtier, la clause en question contient la formulation vague "la société se réserve le droit". C'est-à-dire qu'ils peuvent ou non appliquer des exigences de marge accrues à un ordre particulier. Il est donc très important pour moi de trouver comment détecter dans le terminal les positions auxquelles l'effet de levier accru (autre que celui émis par AccountLeverage) a été appliqué. Par exemple, vous pouvez rapidement fermer de telles positions pour informer le trader et arrêter le trading.
Il existe certainement un moyen de demander au terminal le montant de la marge pour une seule position. Je ne le sais pas encore, et je ne le trouve pas dans la documentation.
Je ne connais pas votre courtier, mais il y a des cas où tout va bien, on ferme une position et on obtient une augmentation de la marge. Il n'y a aucun moyen de le retracer. Et personne ne donnera d'explications. Il n'y a qu'un seul moyen de s'en sortir : ne faites pas d'opérations à un moment où votre marge risque d'augmenter. Il est très probablement régi par le pourcentage de marge, et non par l'effet de levier.
Calculez votre propre marge et votre effet de levier au moment où vous ouvrez une position, en utilisant des formules accessibles au public.
Inscrivez le levier dans le commentaire ou dans la magik, ou en général - inscrivez la marge ajustée par le levier en une seule fois.
Vous aurez quelque chose à retenir
Je ne sais pas ce qu'il en est de votre courtier, mais il y a des cas où tout va bien, nous fermons la position et obtenons une marge accrue.
Chez mon courtier, cela se passe comme suit : nous ouvrons une position et obtenons une marge accrue. Et dans certains cas, nous le faisons et dans d'autres, nous ne le faisons pas ("la société se réserve le droit de...").
Il n'y a qu'une seule solution : ne pas faire de transactions à un moment où il pourrait y avoir une augmentation de la marge. Il est très probablement régi par le pourcentage de marge, et non par l'effet de levier.
Dans mon cas, cela n'aide pas, hélas. La marge peut être augmentée à tout moment. Et il est réglementé par l'effet de levier. En tout cas, les règlements parlent de l'effet de levier. J'aimerais beaucoup éviter de discuter des conditions commerciales d'un courtier particulier dans ce fil de discussion. Ce qui m'intéresse vraiment, c'est de savoir comment obtenir du terminal des informations sur le montant de la marge pour une seule position.
Calculez votre propre marge et votre effet de levier au moment où vous ouvrez une position, en utilisant des formules accessibles au public.
Inscrivez le levier dans le commentaire ou dans la magik, ou en général - inscrivez la marge ajustée par le levier en une seule fois.
Vous aurez quelque chose à retenir.
J'ai essayé de le faire. Mais le problème est que la marge augmente après l' ouverture d'une position. En d'autres termes, avant d'ouvrir une position, j'obtiens la valeur calculée de la marge pour celle-ci. Et immédiatement après un appel réussi de OrderSend, je demande au terminal la valeur de AccountMargin. Et il répond pleinement à mes attentes. Mais après un certain temps, cette valeur augmente fortement ! Et la valeurde AccountMargin s'avère être des dizaines de fois supérieure au montant de la marge pour chaque ordre ouvert, obtenu immédiatement après son ouverture.
Ma question peut se résumer à savoir comment, à tout moment, le terminal peut obtenir la valeur réelle de la marge pour un ordre spécifique.
Il s'agit de AccountMargin() ou AccountInfoDouble(ACCOUNT_MARGIN) pour l'ensemble du compte. Il y a donc deux façons d'obtenir cette valeur. Il doit bien y avoir au moins un moyen d'obtenir la valeur de la marge pour un ordre. Je ne suis pas au courant, c'est pourquoi je pose la question.
J'ai essayé. Mais le problème est que la marge augmente après l' ouverture de la position. En d'autres termes, avant d'ouvrir une position, j'obtiens la valeur de la marge calculée pour celle-ci. Et immédiatement après un appel réussi de OrderSend, je demande au terminal la valeur de AccountMargin. Et il répond pleinement à mes attentes. Mais après un certain temps, cette valeur augmente fortement ! Et la valeurde AccountMargin s'avère être des dizaines de fois supérieure au montant de la marge pour chaque ordre ouvert, obtenu immédiatement après son ouverture.
Ma question peut se résumer à savoir comment, à tout moment, le terminal peut obtenir la valeur réelle de la marge pour un ordre spécifique.
Il s'agit de AccountMargin() ou AccountInfoDouble(ACCOUNT_MARGIN) pour l'ensemble du compte. Il y a donc deux façons d'obtenir cette valeur. Il doit bien y avoir au moins un moyen d'obtenir la valeur de la marge pour un ordre. Je ne le sais tout simplement pas encore, c'est pourquoi je pose la question.
vous n'avez pas besoin de demander
Pensez à formules
et l'épaule, aussi. en utilisant des formules
le terminal ne suit pas l'effet de levier actuel, mais vous donne celui que vous aviez lorsque vous avez chargé le terminal
c'est pourquoi la marge demandée par cette fonction est différente
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Bonjour !
J'ai soudainement rencontré une situation dans laquelle la marge sur les positions ouvertes a augmenté de manière significative (20 fois). On soupçonne le courtier d'avoir augmenté les exigences de marge pour les positions ouvertes. Cette hypothèse est confirmée par la valeur inhabituellement élevée de AccountMargin, qui est plusieurs fois supérieure à la valeur calculée pour cet instrument et l'effet de levier fixé.
Sur l'un des comptes dans une telle situation, j'ai dû clôturer avec une perte les dernières positions ouvertes qui avaient le plus grand volume, afin de réduire la charge sur le dépôt et de ne pas autoriser le Stop Out. Et à un moment donné (après avoir fermé une autre position perdante), la valeurde AccountMargin est revenue au niveau calculé. Peut-être, je ne l'ai pas remarqué tout de suite, et je ne peux donc pas dire avec certitude pour quelles positions les exigences de marge accrues ont été appliquées.
Je n'ai encore rien fait sur l'autre compte, à part ouvrir un ordre de blocage. Je dois maintenant faire une réclamation auprès du courtier en indiquant quels ordres ont été ouverts avec des exigences de marge accrues. Et cela soulève une question :
Existe-t-il un moyen de connaître le montant de la garantie (marge) pour chaque position ouverte séparément dans le terminal ? Dans le terminal, je ne vois que le montant total de la marge, la même valeur est renvoyée par AccountMargin(). Dans la référence MQL4, je n'ai pas trouvé de fonction appropriée avec le préfixe Order. Il serait logique de supposer que cette valeur peut être obtenue en utilisant OrderGetDouble(), mais là encore, il n'y a pas de valeur appropriée dansENUM_ORDER_PROPERTY_DOUBLE.
Veuillez me dire comment obtenir la taille du dépôt pour une position ouverte unique dans le terminal MT4 ?