Berechnung der Margin für Buy- und Sell-Positionen

 

Als ich meinen Broker fragte, ob eine Position, die ins Minus geht, automatisch geschlossen wird, erhielt ich diese Antwort:

[Zitat]

Automatisch geschlossen wird die Position nur, wenn das Margin-Level 50% erreicht hat. Das Margin-Level ist das Verhältnis zwischen der Equity und der genutzten Margin.

[/Zitat]


Ich würde das gerne bei mir einbauen, damit, wenn ich etwas durch den Strategietester jage, solche Positionen entsprechend geschlossen werden.

Aber ich habe keinen Plan, wie ich das berechnen soll.

Mein Grundgerüst:

   for(int i = PositionsTotal()-1; i>= 0; i--) {
      ulong posTicket = PositionGetTicket(i);
      if(PositionSelectByTicket(posTicket) && PositionGetString(POSITION_SYMBOL) == _Symbol) {
         ENUM_POSITION_TYPE posType = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
         double posOpenPrice = PositionGetDouble(POSITION_PRICE_OPEN);
         double posTp        = PositionGetDouble(POSITION_TP);
         double posSl        = PositionGetDouble(POSITION_SL);

         double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
         double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
    if(posType == POSITION_TYPE_BUY) {

    // Buy Pos.
    
    }else {

    // Sell Pos.

    }

Kann mir jemand sagen, wie ich die Margin für eine Buy- und Sellposition berechne?


Gruß Mücke
 

Hier hast Du die Liste aller Funktionen: https://www.mql5.com/de/docs/function_indices

mit Erklärungen, sodass man auch mit Ctrl+F nach Stichworten suchen kann:

Margin ergibt da: https://www.mql5.com/de/docs/trading/ordercalcmargin

Dokumentation zu MQL5: MQL5 Funktionenliste
Dokumentation zu MQL5: MQL5 Funktionenliste
  • www.mql5.com
MQL5 Funktionenliste - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
Muecke82:

Als ich meinen Broker fragte, ob eine Position, die ins Minus geht, automatisch geschlossen wird, erhielt ich diese Antwort:

[Zitat]

Automatisch geschlossen wird die Position nur, wenn das Margin-Level 50% erreicht hat. Das Margin-Level ist das Verhältnis zwischen der Equity und der genutzten Margin.

[/Zitat]


Ich würde das gerne bei mir einbauen, damit, wenn ich etwas durch den Strategietester jage, solche Positionen entsprechend geschlossen werden.

Aber ich habe keinen Plan, wie ich das berechnen soll.

Mein Grundgerüst:


Kann mir jemand sagen, wie ich die Margin für eine Buy- und Sellposition berechne?


Gruß Mücke

Hallo,

in diesem Artikel finden Sie alle Informationen zu der Thema.

https://www.mql5.com/de/articles/2555

Gruß Igor

Welche Überprüfungen der Handelsroboter vor der Veröffentlichung in Market bestehen soll
Welche Überprüfungen der Handelsroboter vor der Veröffentlichung in Market bestehen soll
  • www.mql5.com
Alle Markets Produkte vor der Veröffentlichung bestehen eine obligatorische vorläufige Überprüfung, um eine Standarte Qualität zu haben. In diesem Artikel werden wir von den häufigsten Fehlern erzählen, die die Hersteller in den Handelsrobotern und den technischen Indikatoren machen. Auch werden wir zeigen, wie man sein Produkt vor der Sendung in Market selbständig überprüfen soll.
 
Carl Schreiber #:

Hier hast Du die Liste aller Funktionen: https://www.mql5.com/de/docs/function_indices

mit Erklärungen, sodass man auch mit Ctrl+F nach Stichworten suchen kann:

Margin ergibt da: https://www.mql5.com/de/docs/trading/ordercalcmargin

und @Igor.


Oh, cool, danke.

Dann muss ich nur noch die richtigen Suchbegriffe finden. DANKE.


[OT] Gibt es auch eine Funktion, die ausgeführt wird, wenn eine Position (Ticket) automatisch geschlossen wird (wenn SL oder TP erreicht wird)?

Ich meine so etwas wie void OnTick() ... denn für mich wäre es interessant, eventuell darauf zu reagieren und zu wissen, was für ein Ticket mit welchen Eigenschaften geschlossen wurde.

 
Muecke82 #:

und @Igor.


[OT] Gibt es auch eine Funktion, die ausgeführt wird, wenn eine Position (Ticket) automatisch geschlossen wird (wenn SL oder TP erreicht wird)?

Ich meine so etwas wie void OnTick() ... denn für mich wäre es interessant, eventuell darauf zu reagieren und zu wissen, was für ein Ticket mit welchen Eigenschaften geschlossen wurde.

OnTradeTransaction() wird immer ausgeführt, wen sich etwas ändert.

Ich finde sie aber nicht ideal, deswegen bereite ich einen oder mehr Artikel dazu vor...

Hier zwei Artikel zu OnTradeTransactio():

https://www.mql5.com/en/articles/11248
https://www.mql5.com/en/articles/1111

Creating an EA that works automatically (Part 08): OnTradeTransaction
Creating an EA that works automatically (Part 08): OnTradeTransaction
  • www.mql5.com
In this article, we will see how to use the event handling system to quickly and efficiently process issues related to the order system. With this system the EA will work faster, so that it will not have to constantly search for the required data.
 
Muecke82 #:

und @Igor.


Oh, cool, danke.

Dann muss ich nur noch die richtigen Suchbegriffe finden. DANKE.


[OT] Gibt es auch eine Funktion, die ausgeführt wird, wenn eine Position (Ticket) automatisch geschlossen wird (wenn SL oder TP erreicht wird)?

Ich meine so etwas wie void OnTick() ... denn für mich wäre es interessant, eventuell darauf zu reagieren und zu wissen, was für ein Ticket mit welchen Eigenschaften geschlossen wurde.

Hallo,

es gibt ein Beispiel aus der Dokumentation.

hier der Kode:

void OnStart() // Oder OnTick()
  { 
   ulong deal_ticket;            // deal ticket 
   ulong order_ticket;           // ticket of the order the deal was executed on 
   datetime transaction_time;    // time of a deal execution  
   long deal_type ;              // type of a trade operation 
   long position_ID;             // position ID 
   string deal_description;      // operation description 
   double volume;                // operation volume 
   string symbol;                // symbol of the deal 
//--- set the start and end date to request the history of deals 
   // datetime from_date=0;         // from the very beginning 
   datetime to_date=TimeCurrent();// till the current moment 
//--- request the history of deals in the specified period 
   HistorySelect(iTime(_Symbol,PERIOD_D1,0),to_date); // Datum von Heute bis aktuelle Zeit
//--- total number in the list of deals 
   int deals=HistoryDealsTotal(); 
//--- now process each trade 
   for(int i=0;i<deals;i++) 
     { 
      deal_ticket=               HistoryDealGetTicket(i); 
      volume=                    HistoryDealGetDouble(deal_ticket,DEAL_VOLUME); 
      transaction_time=(datetime)HistoryDealGetInteger(deal_ticket,DEAL_TIME); 
      order_ticket=              HistoryDealGetInteger(deal_ticket,DEAL_ORDER); 
      deal_type=                 HistoryDealGetInteger(deal_ticket,DEAL_TYPE); 
      symbol=                    HistoryDealGetString(deal_ticket,DEAL_SYMBOL); 
      position_ID=               HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID); 
      deal_description=          GetDealDescription(deal_type,volume,symbol,order_ticket,position_ID); 
      //--- perform fine formatting for the deal number 
      string print_index=StringFormat("% 3d",i); 
      //--- show information on the deal 
      Print(print_index+": deal #",deal_ticket," at ",transaction_time,deal_description); 
     } 
  } 
//+------------------------------------------------------------------+ 
//| Returns the string description of the operation                  | 
//+------------------------------------------------------------------+ 
string GetDealDescription(long deal_type,double volume,string symbol,long ticket,long pos_ID) 
  { 
   string descr; 
//--- 
   switch(deal_type) 
     { 
      case DEAL_TYPE_BALANCE:                  return ("balance"); 
      case DEAL_TYPE_CREDIT:                   return ("credit"); 
      case DEAL_TYPE_CHARGE:                   return ("charge"); 
      case DEAL_TYPE_CORRECTION:               return ("correction"); 
      case DEAL_TYPE_BUY:                      descr="buy"; break; 
      case DEAL_TYPE_SELL:                     descr="sell"; break; 
      case DEAL_TYPE_BONUS:                    return ("bonus"); 
      case DEAL_TYPE_COMMISSION:               return ("additional commission"); 
      case DEAL_TYPE_COMMISSION_DAILY:         return ("daily commission"); 
      case DEAL_TYPE_COMMISSION_MONTHLY:       return ("monthly commission"); 
      case DEAL_TYPE_COMMISSION_AGENT_DAILY:   return ("daily agent commission"); 
      case DEAL_TYPE_COMMISSION_AGENT_MONTHLY: return ("monthly agent commission"); 
      case DEAL_TYPE_INTEREST:                 return ("interest rate"); 
      case DEAL_TYPE_BUY_CANCELED:             descr="cancelled buy deal"; break; 
      case DEAL_TYPE_SELL_CANCELED:            descr="cancelled sell deal"; break; 
     } 
   descr=StringFormat("%s %G %s (order #%d, position ID %d)", 
                      descr,  // current description 
                      volume, // deal volume 
                      symbol, // deal symbol 
                      ticket, // ticket of the order that caused the deal 
                      pos_ID  // ID of a position, in which the deal is included 
                      ); 
   return(descr); 
//--- 
  }

Gruß Igor

Grund der Beschwerde: