Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools  
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4059
Beiträge: 38480
Benutzer: 6.365
Aktive Benutzer: 243
Links: 80
Wir begrüßen unseren neuesten Benutzer: Steffen123
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 6 Stunden
- Steffen123
vor einem Tag
- UZander
vor einem Tag
- harryb
vor 2 Tagen
- Blade-13
vor 2 Tagen
- Dumbinatio...

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 68
Gesamt: 70
Team: 0
Team:  
Benutzer:  Steffen123, traderdoc
Freunde anzeigen

Empfehlungen

Like Tree1Likes
  • 1 Post By traderdoc
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 08.12.17
Neues Mitglied
 
Registriert seit: Nov 2014
Beiträge: 28
Bucardo befindet sich auf einem aufstrebenden Ast
Standard 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
  #2 (permalink)  
Alt 08.12.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.095
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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 likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 30.12.17
Neues Mitglied
 
Registriert seit: Nov 2014
Beiträge: 28
Bucardo befindet sich auf einem aufstrebenden Ast
Thumbs up

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

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

Lesezeichen

Stichworte
funktion, mql4, oco, oco funktion, oco order, programmierung, programmierung metatrader, programmierung mql4


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 16:08 Uhr.


Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2018 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------