Startseite Systemhandel Beitrag

Orders schließen: Gewinnziele erreichen oder Verluste begrenzen mit MetaTrader 4

Anhang
34194.zip (995 bytes, Herunterladen 0 mal)

In der Welt des Tradings ist es entscheidend, die Kontrolle über unsere Positionen zu behalten. Ein hilfreiches Tool, das dabei unterstützen kann, ist dieser Expert Advisor (EA). Er hilft uns, Orders entweder bei Erreichen des Gewinnziels oder beim Erreichen der Verlustgrenze automatisch zu schließen.

Der EA benötigt drei Eingaben:

  • Gewinnziel
  • Verlustgrenze
  • Magic Number
extern    double         inTargetProfitMoney     = 10;       //Gewinnziel in Euro
extern    double         inCutLossMoney          = 0.0      //Verlustgrenze in Euro
extern    int            inMagicNumber           = 0        //Magic Number

Wenn dieser EA ausgeführt wird, wird zunächst die Funktion OnInit() aufgerufen. Hier überprüfen wir die Eingaben und initialisieren die Variablen.

int OnInit()
  {
//---
   if(inTargetProfitMoney <= 0)
     {
      Alert("Ungültige Eingabe");
      return(INIT_PARAMETERS_INCORRECT);
     }

   inCutLossMoney = MathAbs(inCutLossMoney) * -1;

//---
   return(INIT_SUCCEEDED);
  }

Bei jeder Preisbewegung (Tick) wird dann die Funktion OnTick() aufgerufen.

void OnTick()
  {
//---

   double   tFloating = 0.0;
   int tOrder  = OrdersTotal();
   for(int i=tOrder-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderMagicNumber() == inMagicNumber)
           {
            tFloating   += OrderProfit()+OrderCommission() + OrderSwap();
           }
        }
     }

   if(tFloating >= inTargetProfitMoney || (tFloating <= inCutLossMoney && inCutLossMoney < 0))
     {
      fCloseAllOrders();
     }

  }

In der OnTick-Funktion wird der gesamte Gewinn oder Verlust berechnet. Wenn das Ziel erreicht oder die Verlustgrenze überschritten wird, schließt der EA alle entsprechenden Orders.

void fCloseAllOrders()
  {
   double   priceClose = 0.0;
   int tOrders = OrdersTotal();
   for(int i=tOrders-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderMagicNumber() == inMagicNumber && (OrderType() == OP_BUY || OrderType() == OP_SELL))
           {
            priceClose  = (OrderType()==OP_BUY)?MarketInfo(OrderSymbol(), MODE_BID):MarketInfo(OrderSymbol(), MODE_ASK);
            if(!OrderClose(OrderTicket(), OrderLots(), priceClose, slippage, clrGold))
              {
              Print("WARNUNG: Schließen fehlgeschlagen");
              }
           }
        }
     }
  }

Für detailliertere Informationen und den Austausch von MQL4-Code-Bildungen, schau doch mal in unseren Telegram-Kanal vorbei!


Verwandte Beiträge

Kommentar (0)