Geschrieben 18. April 201214 Jr. comment_133740 Servus aus Tirol. Ich wollte wissen, ob ich einem Script auch Funktionen eines EA's zufügen kann? Konkret:Ich habe ein Buy/Sell-Grid-script und möchte einen trailingstop einstellen, der mit einem MA eingestellt wird. Geht das oder bin ich dann zwangsläufig bei einem EA? Das script ist eigentlich einfach und so möchte ich es auch beibehalten. Fettes Danke für Euer Wissen. Melden
Geschrieben 18. April 201214 Jr. comment_133742 Servus msado und herzlich Willkommen ! Ich wollte wissen, ob ich einem Script auch Funktionen eines EA's zufügen kann?Du kannst alle Funktionen eines EA's hinzufügen, solltest aber bedenken, dass ein Script nur einmalig ausgeführt wird, während ein EA bei jedem Tick ausgeführt wird. Insbesondere einmalige Order-Funktionen (z.B. schliesse alle offenen Orders usw.) oder Kursabfragen oder Konto-Details werden in Scriptform programmiert. siehe auch "Program Types":http://book.mql4.com/basics/programms Konkret:Ich habe ein Buy/Sell-Grid-script und möchte einen trailingstop einstellen, der mit einem MA eingestellt wird.So wie ich das verstehe, klingt das nicht nach einer einmaligen Ausführung, da Du da sicher den trailingstop in Abhängigkeit der zukünftigen Kursentwicklung einstellen willst und eben nicht nur ein einziges Mal.Da müßtest Du wohl aus Deinem Script einen EA basteln. Melden
Geschrieben 18. April 201214 Jr. Autor comment_133743 Danke für die schnelle Antwort. Der TS muss natürlich mit dem Kurs wandern aber nicht neu eingestellt werden. Also wenn ein Buy ausgelöst wird, dann zieht der TS solange mit bis TP oder SL greift oder eben TS. Und das geht wohl nicht, wenn ich DIch richtig verstanden habe!? Melden
Geschrieben 18. April 201214 Jr. comment_133744 Bitte, gerne. Der TS muss natürlich mit dem Kurs wandern aber nicht neu eingestellt werden. Also wenn ein Buy ausgelöst wird, dann zieht der TS solange mit bis TP oder SL greift oder eben TS. Und das geht wohl nicht, wenn ich DIch richtig verstanden habe!?Per Script oder EA kannst Du nur einen TP oder einen SL einstellen. Dieser wirkt auf dem Server Deines Broker's auch wenn Dein Client, also Dein Metatrader-Terminal offline ist. Der TrailingStop Deines Metatrader-Terminal's wird nur nachgezogen, solange Dein Metatrader-Terminal online ist.Und diesen clientseitigen TrailingStop kannst Du auch nicht per Script oder EA einstellen, nur online mit rechtem Mausklick auf die Order. Schaltest Du Deinen Metatrader ab, gilt der zuletzt eingestellte SL auf dem Server. Daher empfiehlt es sich, einen EA mit einer TrailingStop-Funktion zu schreiben, die den echten SL, also den Server-SL ändert. Melden
Geschrieben 18. April 201214 Jr. Autor comment_133745 Und diesen clientseitigen TrailingStop kannst Du auch nicht per Script oder EA einstellen, nur online mit rechtem Mausklick auf die Order. Ich kann den TrailingStop also schon per Script und/oder EA einstellen. Nur funktioniert der natürlich nur solange ich online bin (für den EA war mir das schon klar). Aber per script würde der TS auch nachgezogen, wenn ich online bin? Du merkst wahrscheinlich, wie sehr ich mich vor dem EA-schreiben drücken will. Aber ich habe mir schon einige codes angesehen und ich käme da selbst mit copy and paste nicht wirklich weit. Oder liegt es daran, dass man(n) einen code auch sehr kompliziert und komplex darstellen kann, was eigentlich auch einfach zu machen wäre? Melden
Geschrieben 18. April 201214 Jr. comment_133747 Ich kann den TrailingStop also schon per Script und/oder EA einstellen.Das würde mich mal interessieren wie Du das machst.Meines Wissens nach kann man per Script oder EA nur den Server-StopLoss setzen, nicht den TrailingStoploss. Das Nachziehen des Server-StopLoss per EA funktioniert natürlich auch nur dann, wenn man online ist. Schau doch mal hier rein:http://www.earnforex...n-metatrader-4/ Da ist TrailingStoploss und StopLoss ausführlich beschrieben. Und da ist auch ein kompletter EA vorhanden, der nichts weiter macht als einen TrailingStoploss über das Setzen von Server-SL zu simulieren. Den EA kannst du downloaden, in Deinen /experts-Folder kopieren und sofort ausprobieren. Melden
Geschrieben 18. April 201214 Jr. comment_133748 Vielleich ist dieser Link auch hilfreich:http://forex-strateg...ailing-stop-eas Insbesonder dieser EA: EMATrailingStop_v1.4.mq4 Da bräuchtest Du nur noch stopValue() verändern, indem Du dort deinen Wunsch-MA codierst. Melden
Geschrieben 18. April 201214 Jr. comment_133758 Grüße aus Linz nach Tirol ;) Zum Thema Script vs. EA: Wie Wolf richtig schreibt sind die 2 für unterschiedliche "Zwecke" gedacht. Scripte für einmalige Aktionen die einmal laufen und aus. EAs für kontinuierliche Überwachung. Man kann jetzt natürlich hergehen und ein Script derart "vergewaltigen" das es nicht einfach druchrennt und seinen Dienst tut, sondern in einer Endlosschleife bleibt und den Markt überwacht (dabei selber ständig die aktuellen Quotes lädt etc.). Aber ein EA macht das sowieso. Zum Thema Trailingstop: Der MT-eigene Trailingstop hat nichts mit EA oder Script zu tun. Das ist ein Zusatzding wo du für eine Order den Trailingstop definieren kannst. Man kann es sich vorstellen wie einen "zusätzlichen" EA den MT intern laufen lässt, der den Stop entsprechend nachzieht.Per EA/Script kann man einen Trailingstop realisieren indem man einfach den StopLoss der Order entsprechend anpasst. Diese Anpassungen werden natürlich nur gemacht während der EA/Script läuft.Auch wenn es wie gesagt technisch per Skript realisierbar ist, ist der Aufwand für ein Skript hier deutlich höher als für einen EA. Bzgl. komplizierter Code: Man muss unterscheiden was man machen will. Wenn es ein supersimpler EA sein soll dem man zB das Ticket übergibt und er zieht den Stop nach (ACHTUNG: Ich würd das nicht machen weil sich teils Tickets per Server ändern etc. nur als veranschaulichung), dann kann man das in geschätzten 5-10 Zeilen programmieren. (Also zusätzliche Zeilen nach dem öffnen eines neuen EAs).Schwierig werden dann so Punkte wie Errorhandling (was passiert wenns Probleme gibt) oder wenn du den EA verallgemeinerst (er sucht sich selber die Order die er nachzieht etc.). Aber diese Punkte sind immer noch in einem EA einfacher umgesetzt als in einem Script den der effektive Code ist der gleiche, beim Script kommt nur noch Zeug rundherum dazu um das EA-Verhalten zu simulieren. In Summe glaub ich das deine Angst vor EAs total unbegründet ist ;) Probiers einfach mal, wir helfen gerne. hth Wie läuft eigentlich dein aktuelles Script? Das klingt als würd es "dauerhaft" laufen, was ein Script ja nicht von allein tut. Melden
Geschrieben 18. April 201214 Jr. comment_133770 Du merkst wahrscheinlich, wie sehr ich mich vor dem EA-schreiben drücken will. Aber ich habe mir schon einige codes angesehen und ich käme da selbst mit copy and paste nicht wirklich weit. Oder liegt es daran, dass man(n) einen code auch sehr kompliziert und komplex darstellen kann, was eigentlich auch einfach zu machen wäre?Der EA unterscheidet sich aber hinsichtlich der programmtechnischen Umsetzung nicht wirklich vom Script. Am besten Du klickst Dir mal mit dem EA Expert Builder Deine Ideen zusammen und schaust Dir dann den Quelltext an. Danach kann man dann hier im Forum gezielt auf Deine Fragen eingehen und ggf. den Quelltext verschönern. Link zum Builder: http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/index.html Melden
Geschrieben 19. April 201214 Jr. Autor comment_133783 Vielen Dank für die vielen guten Tipps und Servas nach Linz. Gerne erkläre ich was ich mache. Erfahrungen mit diesem System habe ich noch keine, läuft aber derzeit auf live-konto. Ich setze allmorgendlich ein Buystop/Sellstop-Grid auf den "Eröffnungskurs" (soweit es den gibt).Start variabel nach etwa 10-15 PunktenGridabstand 10TP 10SL 10 Die Idee dahinter: Bei Bewegungen automatisch dabei zu sein. Verluste entstehen während eines Trends bei Rücksetzern über 10 P und/oder beim Beginn einer Seitwärtsphase. Das Problem derzeit:Ich muss das Grid natürlich den Marktbewegungen anpassen, d.h. wenn der Markt um 100P nach oben gegangen ist liegen meine Sellstop-Positionen weitab entfernt. (Vielleicht könnte man das gegenteilige Gitter um eine bestimmten Preis-Abstand mitwandern lassen?) Derzeit muss ich die Pendings noch einzeln schließen, da mein "Deleteallpendingorders" noch nicht funktioniert. Habt Ihr eine Idee woran es liegt? Beim Kompilieren erscheinen 15 Fehlermeldungen: unbalanced right parenthesis. int start() { bool result; int cmd,total; //---- total=OrdersTotal(); //---- for(int i=0; i<OrdersTotal; i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { cmd=OrderType()==OP_SELLSTOP))){ OrderDelete(OrderTicket()); //---- pending orders only are considered if(cmd!=OP_SELL) { //---- print selected order OrderPrint(); //---- delete all sellstop pending orders result=OrderDelete(OrderTicket()); if(result!=TRUE) Print("LastError = ", GetLastError()); break; } } else { Print( "Error when order select ", GetLastError()); break; } } //---- return(0); } Bearbeitet 19. April 201214 Jr. von Mythos code-tag eingefügt Melden
Geschrieben 19. April 201214 Jr. comment_133790 sers ;) Also das "script" klingt definitiv mehr nach einem EA (vom Prinzip her). Sicher das es ein Script ist? Ein EA und ein Script sind vom Code her "gleich" (man kann ein script als EA ausführen und einen EA als script... macht nicht viel Sinn, geht aber), der einzige unterschied liegt darin das scripte im script-Ordner liegen. (Vielleicht könnte man das gegenteilige Gitter um eine bestimmten Preis-Abstand mitwandern lassen?)Ja, geht sehr einfach. Wie genau solls ausschauen? Du gibst den Preis vor und dann wird nach oben und unten im 10 Punkte Abstand Orders in den Markt gestellt? Habt Ihr eine Idee woran es liegt? Beim Kompilieren erscheinen 15 Fehlermeldungen: unbalanced right parenthesis.Hast du den Code irgendwoher/kopiert? bzw. hast du scheinbar zwischendrin ein paar zeichen gelöscht. Probiers mal damit:(Hab den Teil wo geprintet wird gelöscht weil der irgendwie widersprüchlich war. Du hast außerdem nur die Sellstops beachtet und dann nochmal alle die nicht offene Sells waren... was genau war geplant? ;)Jetzt schließt das script alle Orders die nicht market sind (nicht OP_BUY oder OP_SELL)Du musst beim durchlaufen der Orders und gleichzeitigem Schließen mit den Indizes aufpassen. Wenn du nr. 2 löscht, wird dadurch die alte nr 3 die neue nr 2. wenn du also nach oben durchgehst und nach dem schließen weiterzählst, übersiehst du eine order. Deswegen sollte man immer von oben nach unten durch die orders laufen.weiters hab ich das break in ein continue getauscht. Falls es beim selektieren einer Order ein Problem gibt, muss es nicht heißen das es auch mit den anderen ein Problem gibt, es spricht also nix dagegen die andren noch zu probieren. int start() { bool result; int cmd,total; //---- total=OrdersTotal(); //---- for(int i=total-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { cmd=OrderType(); if(cmd !=OP_SELL && cmd != OP_BUY) OrderDelete(OrderTicket()); } else { Print( "Error when order select ", GetLastError()); continue; } } //---- return(0); } btw. wenn du deinen code in [code]...[ / code] tags (ohne leerzeichen) setzt, ist er leichter lesbar. PS sorry für die schlechte einrückung, die neuen codetags mögen mich scheinbar nit oder opera zeigt da was falsch an :( Melden
Geschrieben 19. April 201214 Jr. Autor comment_133793 Thanks a lot Tefex, habs gleich ausprobiert und klappt natürlich. Allerdings hatte ich vor Sell- und Buy-Positionen separat zu canceln. Aber dazu brauche ich wahrscheinlich nur einen ordertype herausnehmen. Die Frage, ob script oder EA stellst Du natürlich zu Recht. Das Gitter ist ein script und über einen seperaten EA steuere ich die weiteren Bedingungen. Ich habe mir den expertbuilder angesehen, finde hier aber keine Möglichkeit ein grid aufzubauen. Oder habe ich was übersehen? (Vielleicht könnte man das gegenteilige Gitter um eine bestimmten Preis-Abstand mitwandern lassen?) Ja, geht sehr einfach. Wie genau solls ausschauen? Du gibst den Preis vor und dann wird nach oben und unten im 10 Punkte Abstand Orders in den Markt gestellt? Die Idee ist, wenn mir der Kurs nach oben abhaut und meine buystops auslöst, dass gleichzeitig mein Sellstop-Gitter um einen Abstand x zum Preis eben am Kurs dranbleibt. Vielleicht ist das noch mißverständlich: ich löse nicht gleichzeitig buy und sellstops aus sondern eben nur buystops wenn der Kurs nach oben geht. Melden
Geschrieben 20. April 201214 Jr. comment_133828 Ich habe mir den expertbuilder angesehen, finde hier aber keine Möglichkeit ein grid aufzubauen. Oder habe ich was übersehen? Den Expert-Builder kenn ich nicht. Ich geh mal davon aus das der eher zum zusammenklicken von Indikator-strategien gedacht ist. Kann also leicht sein das du damit kein grid aufbauen kannst.Aber wenn du das Grid eh schon selber in einem script erzeugst etc. versteh ich nicht wo das Problem ist es in einen EA zu packen und kleine Veränderungen vorzunehmen. Melden
Servus aus Tirol.
Ich wollte wissen, ob ich einem Script auch Funktionen eines EA's zufügen kann?
Konkret:
Ich habe ein Buy/Sell-Grid-script und möchte einen trailingstop einstellen, der mit einem MA eingestellt wird.
Geht das oder bin ich dann zwangsläufig bei einem EA? Das script ist eigentlich einfach und so möchte ich es auch beibehalten.
Fettes Danke für Euer Wissen.