Questions des débutants MQL4 MT4 MetaTrader 4 - page 16

 

OK.

La chose la plus importante que je dois clarifier pour moi-même maintenant est probablement de savoir si j'ai raison de supposer que pour calculer la marge sur une transaction particulière, une valeur fixe de la devise de base par rapport àla devise de dépôt, prise au moment de l'ouverture de la transaction, devrait être utilisée. Est-ce correct ? Et la marge sur cette transaction reste constante jusqu'à ce que l'ordre soit fermé ? Est-ce correct ?

 
Babu Bonappan:

.....

La chose la plus importante à clarifier pour moi est probablement de savoir si j'ai raison ou non de supposer qu'une valeur fixe de la devise de base par rapport à la devise de dépôt, prise au moment de l'ouverture de la transaction, devrait être utilisée pour calculer la marge pour une transaction particulière. Est-ce correct ? Et la marge sur cette transaction reste constante jusqu'à ce que l'ordre soit fermé ? Est-ce correct ?

Oui, vous avez raison.

Par conséquent, le prix pour calculer la marge est important au moment de l'ouverture de l'ordre.

 
Renat, merci beaucoup pour votre aide !
 
Babu Bonappan:
Renat, merci beaucoup pour votre aide !
Vous êtes les bienvenus.
 
Renat Akhtyamov:

La question porte sur le code, donc vous ne pouvez pas le faire sans le code.

Vous posez des questions sur les modificateurs ou le traitement des commandes ?

Je ne sais pas ce dont vous avez besoin. Mais l'erreur dans le code est de 100%.

Vous ne savez rien, mais vous tirez des conclusions avec assurance.

Je m'interroge sur OrderSelect

 
Babu Bonappan:

Comment utiliser MQL4 pour obtenir une valeur de marge pour chaque position ouverte dans le terminal ?

J'avais l'habitude de faire comme ça :

margin = MarketInfo(Symbol(),MODE_LOTSIZE) * OrderOpenPrice() / AccountLeverage() * OrderLots();

En négociant l'EUR/USD, cette construction a bien fonctionné et j'étais sûr que sa logique était correcte.

Mais maintenant je veux obtenir le même résultat pour EUR/JPY (ou EUR/CHF). Évidemment, au lieu d'utiliserOrderOpenPrice(), je dois multiplier la valeur d'un lot standard par le taux de la devise de base par rapport à la devise de dépôt (dans mon cas, par EUR/USD). Mais quel est ce taux ? Le taux de change qui était au moment de l'ouverture de la position ou celui que nous avons maintenant (au moment où nous voulons connaître le montant du dépôt pour cette position) ?

Le OrderOpenPrice - est le prix d'ouverture de l'ordre sélectionné - la devise affichée ne fait aucune différence. Nous devrions probablement vérifier Point et Digits. Ou vous devriez vérifier l'arrondi. Il y a un arrondi quelque part.

NormalizeDouble à 5 décimales, et nous avons besoin de 3 décimales pour le JPY. Et la liaison elle-même devrait fonctionner de la même manière pour n'importe quelle devise.

 
Babu Bonappan:
Que se passe-t-il si, au moment de l'ouverture de l'ordre, le taux de change EUR/USD est inscrit dans le champ de commentaire, puis lu à partir de là ?
Il est plus facile d'écrire "USDJPY" au lieu de OrderSymbol()
 
A1exPit:
Il est plus facile d'écrire "USDJPY" au lieu de OrderSymbol()

Pourquoi USD/JPY ? Après tout, nous négocions l'EUR/JPY, donc un lot équivaut à 100 000 EUR, tandis que la devise de dépôt est l'USD. À mon avis, dans ce cas, nous avons besoin du taux de change EUR/USD au moment d'ouvrir une transaction.

En outre, si vous définissez un symbole forcé dans le code, celui-ci ne sera pas adapté au trading d'une autre paire de devises, par exemple NZD/CAD. Mais j'aimerais obtenir une variante universelle. Jusqu'à présent, je ne vois qu'une seule façon de stocker le montant du dépôt pour chaque commande calculé au moment de son ouverture. Peut-être pourrions-nous créer un tableau à cet effet où seraient stockés le ticket de commande et son dépôt. Mais il existe peut-être une solution plus triviale.

 
A1exPit:

OrderOpenPrice - Prix d'ouverture de l'ordre sélectionné - peu importe la devise utilisée, il s'agit du prix. Il est fort probable qu'il faille vérifier les points et les chiffres. Ou vous devriez vérifier l'arrondi. Nous devrions vérifier les arrondis.

NormalizeDouble est de 5 décimales, alors que JPY a besoin de 3 décimales. Et le classeur lui-même est censé fonctionner de la même manière pour toutes les monnaies.

Et pourquoi mentir sur le nombre de chiffres ? N'induisez pas les gens en erreur.

 
A1exPit:

OrderOpenPrice - le prix d'ouverture de l'ordre sélectionné - peu importe la devise utilisée, il donne le prix.

L'OrderOpenPrice, tel que je le comprends, donne exactement ce dont j'ai besoin. Mais seulement si la devise de dépôt est le dollar et la paire négociée est EUR/USD. Dans ce cas, c'est comme si l'OrderOpenPrice stockait le taux de change de la devise de base par rapport à la devise du dépôt au moment de l'ouverture de l'ordre sachant que vous pouvez facilement calculer le dépôt.

Mais si au moins une de ces conditions n'est pas remplie, comment obtenir la valeur de l'acompte pour une commande individuelle ? Où peut-on trouver le taux de la devise de base d'une cotation par rapport à la devise du dépôt au moment de son ouverture ?

Oui, nous avons l'heure d'ouverture de la commande à la seconde près. Mais que pouvons-nous obtenir ? Au maximum - les paramètres de la bougie minute du symbole requis. Mais jamais la valeur exacte du taux utilisé pour le calcul du dépôt. Mais la fonction AccountMargin l'obtient en quelque sorte ! Il serait très intéressant de comprendre comment exactement.

Raison: