Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Hilfe bei OrderCloseBy

Geschrieben

Hallo alle Zusammen,

 

ich bastle mir grade ein Unterprogramm für das sofortige Schließen einer Order bei Gegensignal.

Sprich, wenn ich grade Long im Markt bin und etwas später einen Sell-Stop setze, der auch geschortet wird - soll die Long-Position sofort gelöscht werden.

 

Aber mit Schleifen hab ich so meine Probleme, daher brauche ich bitte eure Hilfe, da ich hier etwas zusammen gebastelt hab, was so gar nicht funktioniert.

//+------------------------------------------------------------------+
//|========================OPPOSITE CLOSE============================|
//+------------------------------------------------------------------+
int OppositeClose() {
 int g,h;
 
 for (g=Total-1; g>=0; g--) {
  if (OrderSelect(g,SELECT_BY_POS,MODE_TRADES) == true)
   if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
    for (h=Total-1; h>=0; h--) {
     if(OrderSelect(h,SELECT_BY_POS,MODE_TRADES) == true) 
      if(OrderType()==OP_SELL) {
       Oppoclose = OrderCloseBy(h+1,h,DarkOrange);
       Print("Close SELL by Opposite"," Ordertype:",OrderType());
       return(1);
      }
      if(OrderType()==OP_BUY) {
       Oppoclose = OrderCloseBy(h+1,h,DarkOrange);
       Print("Close BUY by Opposite"," Ordertype:",OrderType());
       return(1);
      }
     }
    }
   }
   return(0);
  }

 

Featured Replies

Geschrieben

Hi , bin aus der Übung : Deine Variable (?) "Total" ist vorher mit Orderstotal() belegt worden oder welchen Wert hat sie ? Welche Fehlermeldungen bekommst Du denn überhaupt ? Grüße

Geschrieben
  • Autor

achso, ja hab ich vergessen anzugeben. Ja

Total = OrdersTotal();

Und hier rufe ich die Subroutine auf:

//+------------------------------------------------------------------+
 //|=======================Check position=============================|
 //+------------------------------------------------------------------+
 for (int i=0; i<Total; i++) {
  if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) {
   if((OrderType() <= OP_SELLSTOP) && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    
    //+------------------------Exit Buy-----------------------------+       
    if(OrderType() == OP_BUY) {
     if(CloseOnOppositeSignal) OppositeClose();
    }
    //+------------------------Exit Sell----------------------------+
    if(OrderType() == OP_SELL) {
     if(CloseOnOppositeSignal)  OppositeClose ();
    }
   }
  }
}

Dieser Fehler wird ausgeben, sobald ich Long gehe und geht auch über die Short-Position hinaus.

Also sprich, gehe Long, kommt dieser Fehler, simuliere ich weiter und setzte einen Sell-Stop, woraus dann eine Short-Position wird, wird dieser Fehler weiterhin ausgelöst. Am Ende laufe ich mit beiden Positionen im Markt und im Looping wird andauernd dieser Fehler immer weiter ausgegeben.

und hier ist der fehler...

post-5230-0-23548300-1505852659_thumb.jpg

Bearbeitet von Gunner_Duck

Geschrieben

Der Error zeigt einen ungültigen Funktionsparameterwert. Prüfe vielleicht mal ob Funktionen wie zB. OrderCloseBy() auch immer die richtigen Ticketnummern bzw. Parameter bekommen.

 

Grüße

Geschrieben

Hi

 

Dr.Google antwortet auf Eingabe "ERROR 4015" wie folgt :

 

Wenn Du da suchst, dann kommt häufig ein Problem mit der LOTgrösse an die Oberfläche .

 

https://www.google.de/search?source=hp&q=ERROR+4051&oq=ERROR+4051&gs_l=psy-ab.12...2145.10579.0.22571.0.0.0.0.0.0.0.0..0.0....0...1.1.64.psy-ab..0.0.0....0.WvOJRnkF8A0

 

 

Gucke doch mal, was da bei Dir drinnen steht ... welcher Wert wird übergeben, wenn zum Close durch Dein Prg aufgerufen wird ?

 

Hoffe hilft

Grüße & GN8

 

Wolfgang

 

PS.: anbei erster Schuss nur : https://www.forexfactory.com/showthread.php?t=557438

Geschrieben
  • Autor

Also ich hab die Ticketnummer jetzt in die Schleife integriert - hab da ja was falsches abgefragt :-/

int OppositeClose() {
 int g,h;
 
 for (g=Total-1; g>=0; g--) {
  if (OrderSelect(g,SELECT_BY_POS,MODE_TRADES) == true)
   if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
    for (h=Total-1; h>=0; h--) {
     if(OrderSelect(h,SELECT_BY_POS,MODE_TRADES) == true) 
      if(OrderType()==OP_SELL) {
       Oppoclose = OrderCloseBy(Ticket-1,Ticket,DarkOrange);
       Print("Close SELL by Opposite"," Ordertype:",OrderType());
       return(1);
      }
      if(OrderType()==OP_BUY) {
       Oppoclose = OrderCloseBy(Ticket-1,Ticket,DarkOrange);
       Print("Close BUY by Opposite"," Ordertype:",OrderType());
       return(1);
      }
     }
    }
   }
   return(0);
}

Nun funktioniert es so wie ich will.

 

EDIT: Ach ne, klappt doch nicht. Also beim Short-Eintritt werden nun beide Orders geschlossen :-/

 

Trotzdem frage ich mich grade, ob OrderCloseBy die richtige Funktion ist für mein Anliegen!?

 

Weil ich jetzt trotzdem, dass es funktioniert, lauter solcher Fehler hier...

post-5230-0-64794900-1505855880_thumb.jpg

Bearbeitet von Gunner_Duck

Geschrieben

ich bin noch nicht in Deinen Code eingestiegen aber Dr.Google führt mich u.a. hierher

 

https://book.mql4.com/appendix/errors

 

Und wenn ich da unter 4108 gucke, dann steht da Invalid Ticket ..... das interpretiere ich so, dass Du eine Ticketnummer schliessen möchtest , die der Terminal nicht kennt .

 

OrderCloseBy() kenne ich nicht, eine Order habe ich immer mit OrderDelete() geschlossen . Aber das findest Du im MQL4 Handbuch .....

 

GN8

Wolfgang

Geschrieben

hier suchen : https://docs.mql4.com/trading

 

da steht, dass OrderCloseBy() eine geöffnete Order schliesst und zwar durch eine entgegengesetzte Order : https://docs.mql4.com/trading/ordercloseby ; da wird auch die Ticketnummer benötigt !

 

OrderDelete() schliesst eine Pending Order ... braucht auch die richtige Ticketnummer

 

musst Dich was durchsuchen

 

Wenn es nichts hilft, dann kommentiere aus und lasse Dir die Variablen ausgeben, dann können wir daraus weitersuchen

 

nun wirklich gn8 :-)

Geschrieben
  • Autor

also, dass man mit orderdelete pendings löscht und mit orderclose positionen schließt, die aktuell im markt sind, weiß ich ja.

Deswegen hab ich ja die OrderCloseBy-Funktion gewählt.

 

 

Die Ticketnummer hab ich mir schon ausgeben lassen. Die Long-Position bekommt in dem Fall die #1 und der Sell-Stop bekommt die #2.

 

Was mich aber grade etwas stutzig macht ist die Fehlermeldung, dass "order 2 for OrderCloseBy function is not a market order".

 

Würde ja bedeuten, dass er die Order schon zu schließen versucht, wo sie noch nicht als Markt Order aktiviert ist.

Geschrieben

so hört sich das an , ja . Wg orderdelete/orderclose wollte ich Dir nicht zu nahe treten . Versuche lediglich remote Tips zu geben, so gut wie es eben geht ( ohne Skype oder anderen Medien die direkte Kommunikation erlauben ) blush.gif Grüße Wolfgang

Geschrieben

Ich würde da ganz anders ran gehen. Erst checken, ob ein Signal vorliegt und dann getrennt von der Richtung mich auch separat um die long und/oder short Orders kümmern.

Geschrieben
  • Autor

Wg orderdelete/orderclose wollte ich Dir nicht zu nahe treten . Versuche lediglich remote Tips zu geben, so gut wie es eben geht ( ohne Skype oder anderen Medien die direkte Kommunikation erlauben ) http://1.1.1.5/bmi/www.tom-next.com/community//public/style_emoticons/default/blush.gif Grüße Wolfgang

 

nein, nein, alles gut, so hab ich das auch gar nicht aufgenommen ;-)

Bin so oder so für jeden Tipp dankbar.

 

 

Ich würde da ganz anders ran gehen. Erst checken, ob ein Signal vorliegt und dann getrennt von der Richtung mich auch separat um die long und/oder short Orders kümmern.

 

Könntest du mir bitte ein Beispielcode geben.

Bearbeitet von Gunner_Duck

Geschrieben

Nö. Den hacke ich jetzt nicht hier rein. Kann aber die Tage gerne mal per Teamviewer oder Skype Dir das erklären.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.