Questions des débutants MQL5 MT5 MetaTrader 5 - page 662

 
Sergey Gritsay:
Malheureusement, il n'y a pas d'analogue de la propriétéMarketInfo(symbf,MODE_MARGINREQUIRED) dans MQL5, mais cela a déjà été discuté quelque part sur le forum
OrderCalcMargin
OrderCalcMargin Calcule le montant de la marge requise pour le type d'ordre spécifié dans le compte actuel et dans l'environnement de marché actuel, en excluant les ordres en cours et les positions ouvertes. Permet d'estimer le montant de la marge pour la transaction prévue. La valeur est retournée dans la devise du compte. bool OrderCalcMargin ( ENUM_ORDER_TYPE action, // type d'ordre string symbol, // nom du symbole double volume, // volume double price, // open price double& margin // variable pour la valeur de la marge) ; Paramètres action [in] Type d'ordre, peut accepter les valeurs de ENUM_ORDER_TYPE. symbole [en] Nom de l'instrument financier. volume [in] Volume de l'opération commerciale. prix [en] Prix d'ouverture. margin [out] Variable, où le montant nécessaire de la marge sera écrit en cas d'exécution réussie de cette fonction. Le calcul est effectué comme s'il n'y avait pas d'ordres en attente ou de positions ouvertes sur le compte courant. La valeur de la marge dépend de nombreux facteurs et peut changer pendant...
Documentation | 2015.12.03 14:00
 
forexman77:

Vous devez obtenir de façon programmatiquele montant des fonds libres nécessaires pour ouvrir un lot à l'achat en MQL5, analogue de MQL4 "MarketInfo(symbf,MODE_MARGINREQUIRED) ;".

Essayez la fonction OrderCheck().
 
Alexey Kozitsyn:
Essayez la fonction OrderCheck().
Merci ! J'ai compris.
double lot=1.0;
double margin_buy,margin_sell;
OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_ASK),margin_buy);
OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_BID),margin_sell);
Print("margin_buy=",margin_buy);
Print("margin_sell=",margin_sell);
 
forexman77:
Merci ! J'ai compris.
double lot=1.0;
double margin_buy,margin_sell;
OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_ASK),margin_buy);
OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_BID),margin_sell);
Print("margin_buy=",margin_buy);
Print("margin_sell=",margin_sell);
Oui, vous pouvez, mais dans le cas de OrderCheck(), il est alimenté avec la structure de la demande de transaction déjà prête à être envoyée juste avant la demande elle-même.
 

Je veux transférer une partie du code dans une fonction, mais le résultat de la fonction n'est pas de retourner une valeur, mais de changer réellement les valeurs des variables, comment puis-je faire cela ?

 int CountExpOrder_OS=0;

 int CountExpOrder_OB=0;

 int CountMarketOrder_OS=0;

 int CountMarketOrder_OB=0;

 

OpenOrdersInfo();

void OpenOrdersInfo()

  {

   CountExpOrder_OS=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,SELL,ALL,"Number"));

   CountExpOrder_OB=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,BUY,ALL,"Number"));

   CountMarketOrder_OS=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_SELL, ALL, "Number"));

   CountMarketOrder_OB=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_BUY, ALL, "Number"));


   Print("Отложенных ордеров на покупку открыто(Magic: ",Magic,")=",CountExpOrder_OB);

   Print("Отложенных ордеров на продажу открыто(Magic: ",Magic,")=",CountExpOrder_OS);

   Print("Рыночных ордеров на покупку открыто(Magic: ",Magic,")=",CountMarketOrder_OB);

   Print("Рыночных ордеров на продажу открыто(Magic: ",Magic,")=",CountMarketOrder_OS);

  } 

 
-Aleks-:

Je veux transférer une partie du code dans une fonction, mais le résultat de la fonction n'est pas le retour d'une valeur, mais le changement réel des valeurs des variables, comment faire ?

ça n'aidera pas ?

int OpenOrdersInfo()

{

...

retour(0) ;

}

 
-Aleks-:

Cette question, je veux transférer une partie du code dans une fonction, mais le résultat de la fonction n'est pas le retour d'une valeur, mais en fait changer les valeurs des variables, comment puis-je le faire ?

 int CountExpOrder_OS=0;

 int CountExpOrder_OB=0;

 int CountMarketOrder_OS=0;

 int CountMarketOrder_OB=0;

 

OpenOrdersInfo();

void OpenOrdersInfo()

  {

   CountExpOrder_OS=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,SELL,ALL,"Number"));

   CountExpOrder_OB=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,BUY,ALL,"Number"));

   CountMarketOrder_OS=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_SELL, ALL, "Number"));

   CountMarketOrder_OB=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_BUY, ALL, "Number"));


   Print("Отложенных ордеров на покупку открыто(Magic: ",Magic,")=",CountExpOrder_OB);

   Print("Отложенных ордеров на продажу открыто(Magic: ",Magic,")=",CountExpOrder_OS);

   Print("Рыночных ордеров на покупку открыто(Magic: ",Magic,")=",CountMarketOrder_OB);

   Print("Рыночных ордеров на продажу открыто(Magic: ",Magic,")=",CountMarketOrder_OS);

  } 

C'est bon ici, le VOID ne renvoie pas de résultat.

 
-Aleks-:

Je veux transférer une partie du code dans une fonction, mais le résultat de la fonction ne serait pas de retourner une valeur, mais de changer réellement les valeurs des variables, comment puis-je faire cela ?

Je pourrais essayer ça, mais ce n'est pas une bonne solution :

int CountExpOrder_OS=0,CountExpOrder_OB=0,CountMarketOrder_OS=0,CountMarketOrder_OB=0;

OpenOrdersInfo(CountExpOrder_OS,CountExpOrder_OB,CountMarketOrder_OS,CountMarketOrder_OB);
  Print("Ордеров на покупку(Magic: ",Magic,")=",CountExpOrder_OB);
  Print("Ордеров на продажу(Magic: ",Magic,")=",CountExpOrder_OS);
  Print("Позиций на покупку(Magic: ",Magic,")=",CountMarketOrder_OB);
  Print("Позиций на продажу(Magic: ",Magic,")=",CountMarketOrder_OS);


void OpenOrdersInfo(int &CountExpOrder_OS,int &CountExpOrder_OB,int &CountMarketOrder_OS,int &CountMarketOrder_OB)
 {
  CountExpOrder_OS=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,SELL,ALL,"Number"));
  CountExpOrder_OB=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,BUY,ALL,"Number"));
  CountMarketOrder_OS=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_SELL, ALL, "Number"));
  CountMarketOrder_OB=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_BUY, ALL, "Number"));
 }
 
Vladislav Andruschenko:

C'est bon, le VOID ne renvoie pas de résultat.

Oui, cela fonctionne correctement - c'est juste qu'il y a eu un bug de ma part et que je suis tombé dans la stupeur.

Merci à tous pour votre aide.

Maintenant, je vais poser des questions sur cinq :)

 
-Aleks-:

Oui, c'est vrai - c'était juste une erreur de ma part et je suis tombé dans la stupeur.

Merci à tous pour votre aide.

Je vais poser des questions pour un billet de cinq maintenant :)

5 livres pour une réponse ?

)

Attendre...

Raison: