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

 
Renat Akhtyamov:
nous allons regarder le code.
Tu le mélanges.
 
A1exPit:
Vous le remuez.
Alors bonne chance.
 
Renat Akhtyamov:
alors bonne chance.
Le code n'est-il pas important dans la question que vous avez posée ? Vous auriez pu simplement écrire - je ne sais pas, mais ça marche d'une certaine façon.
 
A1exPit:
Le code n'est-il pas important dans cette question ? Vous auriez pu simplement écrire "Je ne sais pas", mais cela semble fonctionner.

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 est dans le code - 100%.

 

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 ? Celle qui était au moment de l'ouverture de la position ou celle qui est maintenant (au moment où nous voulons connaître le montant du dépôt pour cette position) ?

 
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 ? Celle qui existait au moment de l'ouverture du poste, ou celle qui existe maintenant (au moment où nous voulons connaître le montant du dépôt pour ce poste) ?

margin = MarketInfo(OrderSymbol(),MODE_MARGINREQUIRED) * OrderLots();

Le résultat ne sera pas exact.

Ou bien, vous pouvez trouver le taux de la paire de devises souhaitée sur le graphique au moment de l'ouverture de l'ordre, prendre en compte le spread (bid/ask) si nécessaire et calculer la valeur plus précise de la marge au moment de l'ouverture de l'ordre en utilisant la formule suivante

Le piège peut être le calcul de la marge à une époque où l'effet de levier était différent.

 
Que se passe-t-il si le taux de change EUR/USD est inscrit dans le champ de commentaire lors de l'ouverture de l'ordre, puis lu à partir de là ?
 
Babu Bonappan:
Que se passe-t-il si le taux de change EUR/USD est inscrit dans le champ de commentaire lors de l'ouverture de l'ordre, puis lu à partir de là ?

Commentaire à d'autres fins.

C'est ainsi que l'on peut connaître le prix :

         string Symbol_X="USDCHF";
        
         int bs=iBarShift(OrderSymbol(),Period(),OrderOpenTime());
         double bid_X=iClose(Symbol_X,Period(),bs);
 
Renat Akhtyamov:

Commentaire à d'autres fins.

C'est ainsi que l'on peut connaître le prix :

         string Symbol_X="USDCHF";
        
         int bs=iBarShift(OrderSymbol(),Period(),OrderOpenTime());
         double price_X=iClose(Symbol_X,Period(),bs);

Si nous effectuons des transactions sur des graphiques quotidiens, par exemple, nous obtiendrons le prix d'ouverture du jour, au milieu duquel l'ordre qui nous intéresse a été ouvert, non ? Et il peut être sensiblement différent du prix pratiqué au moment de l'ouverture.

 
Babu Bonappan:

Ainsi, si nous effectuons des transactions sur des graphiques quotidiens, par exemple, nous obtiendrons le prix d'ouverture du jour, au milieu duquel l'ordre qui nous intéresse a été ouvert, non ? Et il peut être sensiblement différent du prix auquel il a été ouvert.

Personne n'insiste pour utiliser Period()

Spécifiez expressément PERIOD_M15, par exemple, ou une autre