Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   OCO-Funktion trotz bereits laufender Orders (http://www.expert-advisor.com/forum/showthread.php?t=5940)

Bucardo 08.12.17 06:55

OCO-Funktion trotz bereits laufender Orders
 
Moin,

ich arbeite zur Zeit an einem EA der stündlich eine neue BUYSTOP-/ und eine SELLSTOP-Order platziert. Daüfr möchte ich eine OCO-Funktion nutzen. Bisher nutze ich hierzu folgenden Code:

Code:

  for( int h = 0 ; h < OrdersTotal() ; h++ )
  {
    x=OrderSelect( h, SELECT_BY_POS, MODE_TRADES );
    if(OrderSymbol() == Symbol() && OrderType() == OP_BUY)
    {
    for( int i = 0 ; i < OrdersTotal() ; i++ )
    {
      x=OrderSelect( i, SELECT_BY_POS, MODE_TRADES );
      if(OrderSymbol() == Symbol() && OrderType() == OP_SELLSTOP)
      {
      x=OrderDelete(OrderTicket());
      }
    }
    if(OrderSymbol() == Symbol() && OrderType() == OP_SELL)
    {
    for( int j = 0 ; j < OrdersTotal() ; j++ )
    {
      x=OrderSelect( j, SELECT_BY_POS, MODE_TRADES );
      if(OrderSymbol() == Symbol() && OrderType() == OP_BUYSTOP)
      {
      x=OrderDelete(OrderTicket());
      }
    }
    }
  }
  }

Solange immer nur eine Order pro Chart offen ist, (andere Orders von anderen EAs mit eigener MagicNumber mal außen vorgelassen) funktioniert das auch zuverlässig.

Jetzt habe ich allerdings das Problem, dass die letzte aktivierte Order durchaus noch offen sein kann (z.B. aus der Kerzeneröffnung von 9 Uhr) ich aber zur nächsten Kerze wieder die beiden Pending-Orders mit OCO-Funktion platzieren will (z.B. dann um 10 Uhr während der letzte Trade von 9 Uhr noch läuft.) Meine jetzige OCO-FUnktion erkennt dann um um 10 Uhr den noch laufenden Trade und schließt automatisch die entgegen gesetzte PendingOrder obwohl noch keine von beiden gefilled wurde.

Hoffe mich nicht zu kompliziert ausgedrückt zu haben.

Danke für eure Hilfe!

Gruß Bucardo

traderdoc 08.12.17 18:47

Code:

for (int i = OrdersTotal()-1; i >= 0; i--) {
  int candle_marketorder;
  bool res;

  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
        if (OrderType() == OP_BUY) {
            candle_marketorder = iBarShift(NULL, 0, OrderOpenTime());
            for (int j = OrdersTotal()-1; j >= 0; j--) {
              if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) {
                  if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
                    if (OrderType() == OP_SELLSTOP) {
                        if (candle_marketorder == iBarShift(NULL, 0, OrderOpenTime())) {
                          res = OrderDelete(OrderTicket());
                          break;
                        }
                    }
                  }
              }
            }
            continue;
        }
        if (OrderType() == OP_SELL) {
            candle_marketorder = iBarShift(NULL, 0, OrderOpenTime());
            for (int j = OrdersTotal()-1; j >= 0; j--) {
              if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) {
                  if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
                    if (OrderType() == OP_BUYSTOP) {
                        if (candle_marketorder == iBarShift(NULL, 0, OrderOpenTime())) {
                          res = OrderDelete(OrderTicket());
                          break;
                        }
                    }
                  }
              }
            }
        }
      }
  }
}

Ich habe den Code jetzt nicht getestet, bin aber froher Hoffnung.

traderdoc

Bucardo 30.12.17 15:51

Tut mir leid, dass ich mich erst so spät wieder melde.

Vielen Danke an traderdoc für die Lösung meines Problems!


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:50 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum