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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36909
Benutzer: 6.076
Aktive Benutzer: 496
Links: 80
Wir begrüßen unseren neuesten Benutzer: Spitzmaus
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 18 Stunden
- Spitzmaus
vor 21 Stunden
- juleslesqu...
vor einem Tag
- hmf44
vor 2 Tagen
- Crossa
vor 2 Tagen
- snatshit

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 77
Gesamt: 79
Team: 0
Team:  
Benutzer:  Domke01, juleslesquet
Freunde anzeigen

Empfehlungen

Werbung

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor einer Woche
Neues Mitglied
 
Registriert seit: Nov 2014
Beiträge: 27
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
Mit Zitat antworten
  #2 (permalink)  
Alt vor 6 Tagen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
Antwort

Lesezeichen


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 +1. Es ist jetzt 15:22 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 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.
-----------------------------------------------------------------------------------------------------------------------------