Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 662

 
Sergey Gritsay:
Leider gibt es kein Analogon der EigenschaftMarketInfo(symbf,MODE_MARGINREQUIRED) in MQL5, aber es wurde bereits irgendwo im Forum diskutiert
OrderCalcMargin
OrderCalcMargin Berechnet die Höhe der Marge, die für die angegebene Auftragsart im aktuellen Konto und im aktuellen Marktumfeld erforderlich ist, wobei aktuelle schwebende Aufträge und offene Positionen ausgeschlossen werden. Ermöglicht es Ihnen, die Höhe der Marge für das geplante Geschäft zu schätzen. Der Wert wird in der Kontowährung zurückgegeben. bool OrderCalcMargin ( ENUM_ORDER_TYPE action, // Ordertyp string symbol, // Symbolname double volume, // Volumen double price, // Eröffnungskurs double& margin // Variable für Margin-Wert); Parameter action [in] Ordertyp, kann Werte von ENUM_ORDER_TYPE annehmen. Symbol [in] Bezeichnung des Finanzinstruments. volume [in] Lautstärke der Handelsoperation. Preis [in] Eröffnungspreis. margin [out] Variable, in die bei erfolgreicher Ausführung dieser Funktion der erforderliche Betrag der Marge geschrieben wird. Die Berechnung erfolgt so, als gäbe es keine ausstehenden Aufträge und offenen Positionen auf dem laufenden Konto. Der Wert der Marge hängt von vielen Faktoren ab und kann sich im Laufe der...
Dokumentation | 2015.12.03 14:00
 
forexman77:

Sie müssen programmatischden Betrag der freien Mittel erhalten, die benötigt werden, um 1 Lot zu öffnen, um in MQL5 zu kaufen, analog zu MQL4 "MarketInfo(symbf,MODE_MARGINREQUIRED);"

Probieren Sie die Funktion OrderCheck() aus.
 
Alexey Kozitsyn:
Probieren Sie die Funktion OrderCheck() aus.
Ich danke Ihnen! Ich habe es herausgefunden.
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:
Ich danke Ihnen! Ich habe es herausgefunden.
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);
Ja, das ist möglich, aber im Fall von OrderCheck() wird die Struktur der Handelsanfrage bereits vor der eigentlichen Anfrage gesendet.
 

Ich möchte einen Teil des Codes in eine Funktion übertragen, aber das Ergebnis der Funktion ist nicht die Rückgabe eines Wertes, sondern die tatsächliche Änderung der Werte der Variablen, wie kann ich das tun?

 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-:

Ich möchte einen Teil des Codes in eine Funktion übertragen, aber das Ergebnis der Funktion wäre nicht , einen Wert zurückzugeben, sondern tatsächlich die Werte der Variablen zu ändern, wie kann ich das tun?

es nicht helfen wird?

int OpenOrdersInfo()

{

...

zurück(0);

}

 
-Aleks-:

Diese Frage, ich möchte einen Teil des Codes in eine Funktion zu übertragen, aber das Ergebnis der Funktion ist nicht die Rückkehr eines Wertes, sondern tatsächlich ändern die Werte der Variablen, wie kann ich es tun?

 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);

  } 

Hier ist es in Ordnung, VOID gibt das Ergebnis nicht zurück.

 
-Aleks-:

Ich möchte einen Teil des Codes in eine Funktion übertragen, aber das Ergebnis der Funktion wäre nicht , einen Wert zurückzugeben, sondern tatsächlich die Werte der Variablen zu ändern, wie kann ich das tun?

Ich könnte das versuchen, aber es ist keine gute Lösung:

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:

Es ist OK, der VOID liefert kein Ergebnis.

Ja, es funktioniert richtig - ich hatte nur einen Fehler und bin in einen Stupor gefallen.

Ich danke Ihnen allen für Ihre Hilfe.

Jetzt werde ich Fragen zu fünf stellen :)

 
-Aleks-:

Ja, das stimmt - es war nur ein Ausrutscher meinerseits und ich fiel in einen Stupor.

Ich danke Ihnen allen für Ihre Hilfe.

Ich werde jetzt Fragen für einen Fünfer stellen :)

5 Pfund für eine Antwort?

)

Ich warte...

Grund der Beschwerde: