Comment obtenir le "Pourcentage de la marge" de manière programmatique ?

 

Dans la fenêtre "Spécifications du contrat" du terminal, il y a un élément "Pourcentage de la marge". Il est censé être retourné par SymbolInfoDouble(), mais je n'ai pas trouvé de valeur parmi ses spécificateurs qui permette de connaître ce "Pourcentage de Marge". Comment l'obtenir par voie programmatique ?


 
Qu'est-ce que ça veut dire, ce pourcentage de marge ?
 
Alexey Viktorov:
Qu'est-ce que ça veut dire, ce pourcentage de marge ?
Il est utilisé dans le calcul de la garantie CFD. Voir la description de ENUM_SYMBOL_CALC_MODE.
 

Désolé pour la question incomplète, j'aurais dû demander plus explicitement.

Quel est l'objectif de la question ? Pour vérifier si la marge est calculée correctement/anormalement ? Sinon, il peut être calculé à partir de la formule figurant dans la description. Et ensuite, qu'est-ce que vous en faites ?

 
Alexey Viktorov:

Désolé pour la question incomplète, j'aurais dû demander plus explicitement.

Quel est le but ? Pour vérifier si la marge est calculée correctement ou non ?

Avec l'imagination nécessaire, vous pouvez imaginer de nombreux objectifs. :) Et pas du tout pour vérifier le "bien/mal".

Sinon, il peut être calculé à partir de la formule figurant dans la description.

Comment ? Eh bien, c'est à ça que sert ce "pourcentage de marge". Vous suggérez que nous le tapions à la main ?) Le code doit pouvoir l'obtenir de manière programmatique.

Et ensuite, qu'en faire ?

La question est maintenant de savoir comment obtenir la valeur du "Pourcentage de la marge" de manière programmatique. S'il se trouve dans la table, il doit être possible de l'obtenir de manière programmatique. Et ce qu'il faut faire ensuite est une question distincte, qui n'est pas pertinente pour ce sujet.
 

voirSymbolInfoDouble

SymbolInfoDouble(symbol, SYMBOL_MARGIN_INITIAL);
SymbolInfoDouble(symbol, SYMBOL_MARGIN_MAINTENANCE);
 
Taras Slobodyanik:

voir SymbolInfoDouble


Malheureusement, ce n'est pas le cas. Dans MT4, ces valeurs sont, le plus souvent, nulles.
 

C'est bon ?

double procentMgn;
procentMgn=AccountBalance()*100/MarketInfo("GOLD",MODE_MARGINREQUIRED);
 
Renat Akhtyamov:

Est-ce que ça va ?

Non, ça ne le sera pas.

1. La fonction MarketInfo() est obsolète.

2. MODE_MARGINREQUIRED renvoie le bon résultat uniquement pour les positions longues, ce n'est pas vrai pour les positions courtes.

3. MODE_MARGINREQUIRED renvoie le résultat déjà dans la monnaie de dépôt, ce dont je n'ai pas besoin.

4. Je n'ai pas besoin du pourcentage du dépôt. J'ai juste besoin de la valeur du paramètre "pourcentage de marge" pour le symbole. Et je peux calculer moi-même ce dont j'ai besoin.

 
ir0407:

Non, ça ne le sera pas.

1. La fonction MarketInfo() est obsolète.

2. MODE_MARGINREQUIRED renvoie le bon résultat uniquement pour les positions longues, pour les positions courtes il est faux.

3. MODE_MARGINREQUIRED renvoie les résultats dans la devise du dépôt, ce dont je n'ai pas besoin.

4. Je n'ai pas besoin d'un pourcentage du dépôt. J'ai juste besoin de la valeur du "Pourcentage de la marge" pour le symbole. Et je peux le calculer moi-même.

Si vous en avez besoin sur MT5, allez dans une autre section du forum.

Vous n'êtes pas surpris par vos connaissances communes, ou pire :

1. il ne s'agit pas de la fonction MarketInfo(), mais d'une expression, dont le résultat du calcul sera un pourcentage de

2. vous n'avez pas au moins 4 décimales, donc le % de marge pour le long et le court sera le même.

3. multiplier simplement

procentMgn

Vous pouvez utiliser 0,01, et vous serez heureux.

 
ir0407:

Avec une bonne imagination, vous pouvez imaginer de nombreuses cibles. :) Et pas du tout pour le test du bon/mauvais.

Comment cela fonctionne-t-il ? Vous avez besoin de ce même "pourcentage de marge". Vous voulez que je le tape à la main ?) Le code devrait pouvoir l'obtenir de manière programmatique.

Maintenant, la question est de savoir comment obtenir la valeur du "pourcentage de la marge" de manière programmatique. S'il se trouve dans la table, il doit être possible de l'obtenir de manière programmatique. Et ce qu'il faut faire ensuite est une question distincte qui n'est pas pertinente pour ce sujet.

Ouais, eh bien... Le fantasme est tout... Je ne comprends pas pourquoi les gens qui essaient de vous aider devraient fantasmer sur ce sur quoi vous fantasmez ? De toute façon, ce n'est pas la question.

Comment obtenir ce dont vous avez besoin à partir de cette formule ?

La formule elle-même est Marge = Lots *Taille du contrat*Prix du marché*Pourcentage/100

Donc pourcentage = marge/(lots *taille du contrat*prix du marché/100)

ir0407:

1. La fonction MarketInfo() est obsolète.

Elle ne figure pas encore dans la liste des fonctions dépréciées. Par conséquent, il produit la valeur manquante pour déterminer le pourcentage de marge.

MarketInfo(_Symbol, MODE_MARGINREQUIRED);

Après avoir obtenu toutes les données au moment actuel, au prix actuel, il est facile de recalculer la marge qui a été retenue lors de l'ouverture de l'ordre, au prix d'ouverture de l'ordre.

Si vous en avez besoin pour mql5, vous devez utiliser

bool  SymbolInfoMarginRate( 
   string             name,                     // символ 
   ENUM_ORDER_TYPE    order_type,               // тип ордера 
   double&            initial_margin_rate,      // коэффициент взимания начальной маржи 
   double&            maintenance_margin_rate   // коэффициент взимания поддерживающей маржи 
   );
Устаревшие функции - Справочник MQL4
Устаревшие функции - Справочник MQL4
  • docs.mql4.com
Устаревшие функции - Справочник MQL4