|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
||||
EA nach Voigt zur automatischen SL-Veränderung...kleines Problemchen
Hi Leute,
ich habe mich mal hingesetzt und versucht für ein anderes Forumsmitglied einen EA zu schreiben, der nach dem Buch von Voigt "Das große Buch der Markttechnik" den SL verändert. Eigentlich ist mit dem Code alles super, nur irgendwie erkennt er den vorher gesetzten SL nicht. Also man eröffnet eine Order mit SL und dann sollte der EA erkennen, dass man eine Order mit SL offen hat, und diesen SL automatisch verändern, trailingstop-mäßig. Aber leider hat der EA überhaupt keine Lust, die gesetzte Order, oder den gesetzten SL zu verändern. Ich kriege keine Errormeldungen raus, aber etwas bewirken tut er auch nicht. Wäre cool, wenn Ihr euch das mal kurz anschauen könntet. Was ich auch noch machen wollte, ist, dass sollte eine Order ohne Stoploss gesetzt sein, dass der EA automatisch einen Stoploss setzt. Ich habe leider nur keinen Parameter gefunden, der sagt, ob ein SL gesetzt ist oder nicht. Kann mir den jemand sagen? Dann bau ich ihn noch ein. LG TrololoTromberino Für die, die den Code nicht herunterladen wollen: Code:
//+------------------------------------------------------------------+ //| Stoploss nach Voigt.mq4 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Idea by Michael Voigt | Code by Korbinian Gabriel" #property link "" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int start() { //---Prüfen, ob Order offen ist: int total = OrdersTotal(); //----------------------------------------------------------------------------------------- //---Sollte eine Order offen sein, aber kein Stoploss besitzen, soll einer erstellt werden. // if(total > 0 && ) WICHTIG: HIER KOMMT NOCH DER PARAMETER ZUR SL-ERKENNUNG REIN!!! // { // if(OrderSymbol() == Symbol() && OrderType() == OP_BUY) // { // bool ordermodify = OrderModify(OrderTicket(),OrderOpenPrice(),Low[1],0,0); // if (ordermodify == false) // Print("Stoploss ",OrderTicket()," NICHT erstellt! ERROR!"); // else // Print("StopLoss ",OrderTicket()," erstellt"); // } // // if(OrderSymbol() == Symbol() && OrderType() == OP_BUY) // { // bool ordermodify = OrderModify(OrderTicket(),OrderOpenPrice(),Low[1],0,0); // if (ordermodify == false) // Print("Stoploss ",OrderTicket()," NICHT erstellt! ERROR!"); // else // Print("StopLoss ",OrderTicket()," erstellt"); // } // } // else Print("Keine Order offen"); return(0); //----------------------------------------------------------------------------------------- //---Außen- & Innenstäbe erkennen if (OrderSymbol() == Symbol() && OrderType() == OP_BUY && Low[2] < Open[1] && High[2] > Close[1]) { Print ("Außen- & Innenstab erkannt! Stopänderung wird jetzt ausgeführt!"); bool ordermodify = OrderModify(OrderTicket(),OrderOpenPrice(),Low[3],0,0); if (ordermodify == false) Print("Stoploss ",OrderTicket()," NICHT nachgezogen! ERROR!"); else Print("StopLoss ",OrderTicket()," nachgezogen"); } if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && High[2] > Open[1] && Low[2] < Close[1]) { Print ("Außen- & Innenstab erkannt! Stopänderung wird jetzt ausgeführt!"); bool ordermodify = OrderModify(OrderTicket(),OrderOpenPrice(),High[3],0,0); if (ordermodify == false) Print("Stoploss ",OrderTicket()," NICHT nachgezogen! ERROR!"); else Print("StopLoss ",OrderTicket()," nachgezogen"); } //----------------------------------------------------------------------------------------- //---Longorder Stop nachziehen if (total > 0 && OrderType() == OP_BUY && Low[2] < Open[1] && High[2] < Close[1]) { Print ("Stop wird nachgezogen"); bool ordermodify = OrderModify(OrderTicket(),OrderOpenPrice(),Low[1],0,0); if (ordermodify == false) Print("Stoploss ",OrderTicket()," NICHT nachgezogen! ERROR!"); else Print("StopLoss ",OrderTicket()," nachgezogen"); } //----------------------------------------------------------------------------------------- //---Shortorder Stop nachziehen if (total > 0 && OrderType() == OP_SELL && High[2] > Open[1] && Low[2] > Close[1]) { Print ("Stop wird nachgezogen"); bool ordermodify = OrderModify(OrderTicket(),OrderOpenPrice(),High[1],0,0); if (ordermodify == false) Print("Stoploss ",OrderTicket()," NICHT nachgezogen! ERROR!"); else Print("StopLoss ",OrderTicket()," nachgezogen"); } //----------------------------------------------------------------------------------------- return (0); } //+------------------------------------------------------------------+ __________________________________________________ _________ Wäre auch dankbar, wenn Ihr euch mal meinen EA anschaut und mir weiterhelfen könntet: Expert-Advisor.com/EigenesTradingSystembrauchtHilfe |
|
|||
du musst die order erst auswählen
woher soll denn der EA wissen welche order verändert werden soll?! Code:
OrderSelect( |
|
||||
Mucho Gracias amigo
Funktioniert jetzt!
__________________
Ich arbeite aktuell an einem eigenen EA und komme nicht weiter! Wäre cool, wenn mir Coder ein wenig weiterhelfen könnten: www.expert-advisor.com/etsbh |
|
|||
Ich Grüße Dich
Hast Du den EA nun fertig so das er funktioniert? Wenn ja, könntest Du ihn dann bitte posten, da ich so was schon die ganze Zeit suche. Danke im Voraus |
|
||||
Zitat:
Wenn ein Außenstab erkannt wurde, müsste ich den ja eigentlich irgendwie einspeichern können, damit ich abprüfen kann, ob auch die 20 Periode danach noch ein Innenstab ist. Ich hab aber leider keine Ahnung, wie ich die Werte einer Periode abspeichern kann, sodass ich die immer vergleichen kann. Kann mir da einer der alten Hasen weiterhelfen?
__________________
Ich arbeite aktuell an einem eigenen EA und komme nicht weiter! Wäre cool, wenn mir Coder ein wenig weiterhelfen könnten: www.expert-advisor.com/etsbh |
|
|||
kann man das nicht über eine Funktion mit einer for ... Schleife lösen
also ungefähr so: bool Innenstab = true; for (int i=1;i< 20 ;i++) { if (iHigh(NULL,0,i+1)<iHigh(NULL,0,i) && (iLow(NULL,0,i+1)>iLow(NULL,0,i)) { Innenstab=false; return(Innenstab); } return(Innenstab) } also sinngemäß so, wenn in den letzten 20 Perioden kein Stab höher und tiefer als der Vorgänger war liefert die Variable Innenstab den Wert true, ansonsten false |
|
||||
Ich habs so gemacht (Eigentlich ist es damit meiner Meinung nach gelöst):
Code:
//---Trailing - Stoploss int total = OrdersTotal(); for(int i=0;i<=total-1;i++) { //Stoploss für Long-Positionen if (OrderSelect(i,SELECT_BY_POS) && OrderType() == OP_BUY){ int a = 2; int b = 3; if(High[a] > Close[1] && Low[a] < Open[1]){ bool ordermodify = OrderModify(OrderTicket(),OrderOpenPrice(),Low[b],0,0); if (ordermodify == false) Print("Stoploss ",OrderTicket()," NICHT nachgezogen! ERROR!"); else Print("StopLoss ",OrderTicket()," nachgezogen"); a++; b++; } else { bool ordermodify = OrderModify(OrderTicket(),OrderOpenPrice(),Low[1],0,0); if (ordermodify == false) Print("Stoploss ",OrderTicket()," NICHT nachgezogen! ERROR!"); else Print("StopLoss ",OrderTicket()," nachgezogen"); } } //Stoploss für Shortpositionen if (OrderSelect(i,SELECT_BY_POS) && OrderType() == OP_SELL){ int a = 2; int b = 3; if(High[a] > Open[1] && Low[a] < Close[1]){ bool ordermodify = OrderModify(OrderTicket(),OrderOpenPrice(),High[b],0,0); if (ordermodify == false) Print("Stoploss ",OrderTicket()," NICHT nachgezogen! ERROR!"); else Print("StopLoss ",OrderTicket()," nachgezogen"); a++; b++; } else { bool ordermodify = OrderModify(OrderTicket(),OrderOpenPrice(),High[1],0,0); if (ordermodify == false) Print("Stoploss ",OrderTicket()," NICHT nachgezogen! ERROR!"); else Print("StopLoss ",OrderTicket()," nachgezogen"); } } }
__________________
Ich arbeite aktuell an einem eigenen EA und komme nicht weiter! Wäre cool, wenn mir Coder ein wenig weiterhelfen könnten: www.expert-advisor.com/etsbh |
|
|||
jo sieht auf'm ersten Blick aus als wäre es dasselbe
|
|
|||
Auch wenn ich damit etwas spät komme - so einen EA gibt es doch schon (von divebubble aus der Forexfabrik). Der hat(te) auch ein Innenstabproblem, wenn ich mich recht entsinne.
|
|
|||
Stimmt Thilo. Das Ding von divebubble war's nicht wirklich. Hab ich ausprobiert.
Bin nach längerer Suche fündig geworden: Habe den "InsideBarStop" seit längerer Zeit im Einsatz. Zwar nicht ganz umsonst, funzt aber einwandfrei. Im mql5-Market gibts for free den "InsideBarStop"-Indikator zum EA. Damit kann man testen wie der Stop-Algorithmus funktioniert. Den zugehörigen Expert für den halbautomatischen Handel - man eröffnet die Position selbst und der EA handelt die Position durch - gibt's für faire 39 Dollar. Die Firma bietet seit kurzer Zeit auch eine Version 2.0 für den vollautomatische Handel mit integriertem Moneymanagement an. Is super, da wird die Positionsgröße automatisch berechnet. Als Käufer der mql5-Version hab ich den Upgrade umsonst bekommen. Kann ich allen empfehlen die nicht unbedingt was selbstgebasteltes brauchen |
Lesezeichen |
Stichworte |
ea voigt, expert advisor voigt, mql4, programmierung, programmierung metatrader, sl voigt, stoploss voigt, voigt |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|