|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
erster EA
Hallo Zusammen,
ich bin neu hier und dabei mich in mql4 einzuarbeiten, verstehe aber nicht wie ich den Startkurs in einer Variable speichern kann. Ich versuche mal zu beschreiben was der EA machen soll. 1. Egal auf welcher Zeitebene oder Währungspaar man den EA startet, soll in diesem Moment des starten´s, eine horizontale Linie in den Chart gezeichnet werden die den aktuellen Kurs, beim Starten des EAs anzeigt. Dieser Kurs soll jetzt in einer Variable (Startkurs) gespeichert werden, damit die PendingOrders erstellt werden können. 2. Jetzt sollen zwei PendingOrders erstellt werden: • Buystop 1lot mit 100pip Abstand zum Startkurs und eine • Sellstop 1lot mit 100pip Abstand zum Startkurs Jeweils ohne TP & SL. Viele Grüße und Danke vorab |
|
|||
Helas, um den Startkurs in eine Variable zu speichern, musst du diese nur zuweisen.
Code:
double Startkurs = 0.0; int init() { Startkurs = Bid; return (0); } Code:
ObjectCreate("Startkurs", OBJ_HLINE,0,Time[0],Startkurs); ObjectSet("Startkurs", OBJPROP_COLOR, Yellow); Code:
OrderSend(Symbol(), OP_BUYSTOP, 1.0, Bid+0.01, 0, 0, 0, "Buystop", 123, Blue); An sonsten hilft dir das Syntaxhighlighting sicher weiter. Bei nem Sellstop entsprechend anpassen |
|
|||
Zitat:
Kurze prägnante Lösung ;-) Gruß Joe |
|
|||
das hat alles soweit geklappt, danke.
Hallo Racki,
Ich versuche gerade in der expert start function eine Abfrage einzubauen, die Prüft wann eine der beiden Pending Oders in den Markt eintritt. Meine Überlegung ist jetzt, dass ich die PendingOrder, die er in der initialization function absetzt vorher auch mit einer Variable versehen muss oder? z.B. double SellStopOrderNr [0] double BuyStopOrderNr [0] Wenn eine der beiden StopOrders in den Markt eintritt soll die andere nämlich gelöscht werden und eine neue erstellt werden. Ich hoffe es ist alles verständlich was ich hier Schreibe, ich poste mal den aktuellen EA damit man die Zusammenhänge besser verstehen kann. Grüße Code:
#property link "" #define MAGIC 08042010 double startkurs = 0.0; double diff = 1.2; double buystop; double sellstop; bool CheckedToday = FALSE; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- startkurs = Bid; buystop = startkurs + diff; sellstop = startkurs - diff; //+------------------------------------------------------------------+ //| Horizontale Linie zeichnen | //+------------------------------------------------------------------+ ObjectCreate("startkurs", OBJ_HLINE,0,Time[0],startkurs); ObjectSet("startkurs", OBJPROP_COLOR, Yellow); //+------------------------------------------------------------------+ //| Pending Orders absetzen | //+------------------------------------------------------------------+ { OrderSend(Symbol(), OP_SELLSTOP, 0.01, (sellstop), 0, 0.0, 0.0, "SellStop Order", MAGIC); OrderSend(Symbol(), OP_BUYSTOP, 0.01, (buystop), 0, 0.0, 0.0, "SellStop Order", MAGIC); { Print("OrderSend failed with error #",GetLastError()); return(0); } } //---- return; } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int Tick; int start() { Tick++; Comment("Ticknummer: ",Tick); Print ("Letztes Hoch = ", High[0]); Print ("Letztes Tief = ", Low[0]); Print ("Startpreis = ", startkurs); Print ("BUYSTOP ist = ",buystop); Print ("SELLSTOP ist = ",sellstop); //+------------------------------------------------------------------+ //| Prüfe ob eine Pending Order ausgefürt wurde | //+------------------------------------------------------------------+ //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } |
|
|||
Ich habe deinen Code entsprechend angepasst und so ein paar Kleinigkeiten eingesetzt.
Z.B. die Prints durch Comment ersetzt, damit mir die Logs nicht vollgeschrieben werden^^ PHP-Code:
|
|
|||
OrderSend failed with errors
ich hab den EA jetzt 1zu1 kopiert. Wenn ich ihn auf EUR/USD starte kommt die Meldung: OrderSend failed with error#130, bei USD/JPY auch.
Bei Gold kommt die Meldung: OrderSend failed with error#4107, invalid price 1557.8720000000 for OrderSend function |
|
|||
130 invalid Stops , 4107 ist invalid Price param.
Teste mal auf eurusd. Da hat es vorher funktioniert, oder zwischen CoRD und Der Zwischenablage bestand noch ein älterer Code. |
|
|||
Die ThisPip()-Funktion ist unzureichend definiert. Die Unterscheidung, ob es ein 4- oder 5-Digitbroker ist, muß anders automatisiert werden. So wie es umgesetzt wurde, funktioniert es nur z.T. richtig.
Bei der Berechnung des TP und SL muß unbedingt der Wert für MarketInfo(Sysmbol(), MODE_STOPLEVEL) berücksichtigt werden. Die beiden Marken müssen mindestens um diesen Wert vom Entry entfernt sein. Schönheitsfehler: im OrderSend des BuyStop muss auch im Kommentar das Richtige stehen. traderdoc |
|
|||
Schritt zurück
Hallo Racki,
vielen Dank nochmal für die Mühen. Ich bin dafür wir gehen nochmal einen Schritt zurück. Ich verstehe nämlich gerade den EA selbst nicht mehr und das war genau das was ich nicht wollte! Der Teil der mir klar ist Poste ich jetzt hier: Code:
#property link "" #define MAGIC 08042010 double startkurs = 0.0; double diff = 1.2; double buystop; double sellstop; bool CheckedToday = FALSE; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- startkurs = Bid; buystop = startkurs + diff; sellstop = startkurs - diff; //+------------------------------------------------------------------+ //| Horizontale Linie zeichnen | //+------------------------------------------------------------------+ ObjectCreate("startkurs", OBJ_HLINE,0,Time[0],startkurs); ObjectSet("startkurs", OBJPROP_COLOR, Yellow); //+------------------------------------------------------------------+ //| Pending Orders absetzen | //+------------------------------------------------------------------+ { OrderSend(Symbol(), OP_SELLSTOP, 0.01, (sellstop), 0, 0.0, 0.0, "SellStop Order", MAGIC); OrderSend(Symbol(), OP_BUYSTOP, 0.01, (buystop), 0, 0.0, 0.0, "SellStop Order", MAGIC); { Print("OrderSend failed with error #",GetLastError()); return(0); } } //---- return; } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int Tick; int start() { string ThisComment = "Ticknummer: " + Tick + "\nLetztes Hoch = " + High[0]; ThisComment = ThisComment + "\nLetztes Tief = " + Low[0] + "\nStartpreis = " + startkurs; ThisComment = ThisComment + "\nBUYSTOP ist = " + buystop + "\nSELLSTOP ist = " + sellstop; Tick++; Comment(ThisComment); //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } Ganz einfach, bis dato, beim aktivieren des EAs: 1. Zeichnet er eine Line mit dem Aktuellen Kurs in den Chart 2. Setzt je eine PedingOrder, Sellstop und Buystop 3. Die Comments sind im Chart zu sehen Nächster Schritt wäre folgender. Wenn eine der beiden PendingOrders ausgeführt wird. Soll die nicht ausgeführte PendingOrder gelöscht werden und durch eine neue ersetzt werden. Die neue PendingOrder, soll exakt den gleichen Kurseinstieg haben wie die alte PendingOrder, nur mit einer erhöhten lotsitze. z.B. +0.01 lot |
|
|||
@traderdoc Also perfekt umgesetzt ist es nicht, aber die Methoden lassen sich ja anpassen
Wenn CKAE das allerdings leicht verständlich haben möchte, dann könnte man allerdings auch eine extern double ThisPip = 0.*; je nach Symbol als Parameter verwenden. Mit der Zeile PHP-Code:
s.l. Racki |
Lesezeichen |
Stichworte |
ea, erster ea, erster expert advisor, expert advisor, metatrader, mql4, mql4 lernen, programmieren, programmierung metatrader |
|
|