Gunner_Duck Posted September 19, 2017 Report Share Posted September 19, 2017 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); } Quote Link to comment Share on other sites More sharing options...
Kleinerbroker Posted September 19, 2017 Report Share Posted September 19, 2017 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 Quote Link to comment Share on other sites More sharing options...
Gunner_Duck Posted September 19, 2017 Author Report Share Posted September 19, 2017 (edited) 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... Edited September 19, 2017 by Gunner_Duck Quote Link to comment Share on other sites More sharing options...
Forex1+ Posted September 19, 2017 Report Share Posted September 19, 2017 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 Quote Link to comment Share on other sites More sharing options...
Kleinerbroker Posted September 19, 2017 Report Share Posted September 19, 2017 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 hilftGrüße & GN8 Wolfgang PS.: anbei erster Schuss nur : https://www.forexfactory.com/showthread.php?t=557438 Quote Link to comment Share on other sites More sharing options...
Gunner_Duck Posted September 19, 2017 Author Report Share Posted September 19, 2017 (edited) 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... Edited September 19, 2017 by Gunner_Duck Quote Link to comment Share on other sites More sharing options...
Kleinerbroker Posted September 19, 2017 Report Share Posted September 19, 2017 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 ..... GN8Wolfgang Quote Link to comment Share on other sites More sharing options...
Kleinerbroker Posted September 19, 2017 Report Share Posted September 19, 2017 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 :-) Quote Link to comment Share on other sites More sharing options...
Gunner_Duck Posted September 20, 2017 Author Report Share Posted September 20, 2017 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. Quote Link to comment Share on other sites More sharing options...
Kleinerbroker Posted September 20, 2017 Report Share Posted September 20, 2017 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 ) Grüße Wolfgang Quote Link to comment Share on other sites More sharing options...
conglom-o Posted September 20, 2017 Report Share Posted September 20, 2017 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. Quote Link to comment Share on other sites More sharing options...
Gunner_Duck Posted September 20, 2017 Author Report Share Posted September 20, 2017 (edited) 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. Edited September 20, 2017 by Gunner_Duck Quote Link to comment Share on other sites More sharing options...
conglom-o Posted September 20, 2017 Report Share Posted September 20, 2017 Nö. Den hacke ich jetzt nicht hier rein. Kann aber die Tage gerne mal per Teamviewer oder Skype Dir das erklären. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.