Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Zeitgleiche Orderschließung (http://www.expert-advisor.com/forum/showthread.php?t=144)

lala12 04.08.10 08:06

Zeitgleiche Orderschließung
 
hallo,
ich bin neu in der Sprache mq4 und versuche gerade mein erstes system zu schreiben. Bin überwältig von den Möglichkeiten / Angeboten der Funktionen, wenn man das mal mit ctl (Chart Studio) vergleicht.

Mein Problem ist, das der EA eine Order ausführt, aber leider auch zeitgleich wieder schließt, obwohl weder sl oder tp vom Balken / Kerze erreicht wurden. Kann jemand mir das erklären. Wäre super, vielen Dank!

Gruß lala12

Fuchs 04.08.10 22:34

Servus,

ohne den Quellcode von Dir gesehen zu haben, würde ich mal tippen das Du etwas falsch programmiert hast wenn nicht das passiert was Du dir gerne wünscht.

Am besten Du postest einfach den Quellcode und dann kann Dir mit Sicherheit auch geholfen werden.

Fuchs

lala12 05.08.10 07:54

moin fuchs,

also ich habe gestern nochmals den Quelltext geändert:

int start()
{
//----
double atraktuell, zielpreis;
int total,ticket,expiration ;
bool trigger;
//----
if(Bars<20) // Keine Daten vorhanden für ATR
{
Print("bars less than 20");
return(0);
}

atraktuell = iATR(NULL,0,14,0);
total=OrdersTotal();
zielpreis = Close[1] + atraktuell * 2;
zielpreis = MathRound(zielpreis);
expiration = TimeCurrent()+5 *60; // Wenn order nicht ausgeführt wird, wieder Ende des 5min Balkens schließen
if(total<1) // keine offene Order
{
ticket= OrderSend(Symbol(),OP_BUYSTOP,1,zielpreis,2,zielpr eis-20,zielpreis+20,"Start",16384,expiration,Green);
}
}

1. Variante
Ich glaube es liegt an der function OrderSend: Jetzt erhalte ich error 3, nachdem ich die expiration geändert habe. Wenn ich diesen Wert auf Null setzte wird die Order zwar ausgeführt, würde aber erwarten, dass durch den sl oder tp die Order wieder gesschlossen wird, wenn low <= sl oder high >= tp.

2. Variante
ticket= OrderSend(Symbol(),OP_BUY,1,zielpreis,2,zielpreis-20,zielpreis+20,"Start",16384,0,Green);

In diesem Fall wird die Order geöffnet und zeitglich wieder geschlossen. Beide Varianten bzw. Ergebnisse verstehe ich nicht.

Danke und Gruß
lala12

Fuchs 05.08.10 10:49

ERR_INVALID_TRADE_PARAMETERS 3 Invalid trade parameters.

deine komplette Berechnung der Tradeparameter
EntryPrice / SL / TP ist falsch.

1. du musst den absoluten Wert angeben und dabei richtig umrechnen. wenn du zum Beispiel bei EUR/USD den SL vom aktuellen Wert - 20 rechnest, dann kommt da irgendwas im Bereich von -18,7 raus! 1,3 - 20 = -18,7. ich glaube nicht das dein SL auf -18,7 liegen soll. für USD/JPY wäre es zwar möglich, aber 85,5 - 20 ist dann ein SL von 65,5 macht knackige 20.000 Punkte. ich weiß nicht ob du das willst, dann kannst du dir den SL gleich sparen.

2. du musst immer korrekt runden. nimm einfach Digits und runde auf die letzte Kommastelle die dir der Broker per Marketinfo für das jeweilige Währungspaar gibt.

check das mal, nun solltest du dem richtigen Ergebnis schon näher kommen

lala12 05.08.10 17:16

hallo fuchs,

danke für das feedback; das system soll auf den dax (cfd) handeln; negative werte können also (praktisch) nicht entstehen; aufgerundet habe ich ja mit mathround() gearbeitet. kann aber sein, das 20 als 200 interpretiert wird; schaue mal inder marktinfo nach..

bei der Variante 1 gibt es ja keine Fehlermeldung auf (dax30 5min). Die Order wird aber nicht nach 5 min wieder geschlossen, wenn keine ausführung stattgefunden hat.

gruß lala12

Fuchs 05.08.10 17:27

okay, für den DAX wird es wohl funktionieren, aber dann bleibt noch das Thema Runden.

du musst den Wert SL/TP/Price mit normalizedouble auf Digits runden.
dann sollte es gehen.

lala12 05.08.10 19:28

Liste der Anhänge anzeigen (Anzahl: 1)
hallo,

ja wir nähern uns der lösung. wie du im bild sehen kannst, wird die order plaziert (pending), aber sie müsste m.M. nach 5 min wieder geschlossen werden, da das high < einstiegskus ist..:rolleyes: dies muss mit der ordergültikeit zusammenhängen, die aber 5 min ist bzw. wenn order nicht ausgeführt dann stornieren..

gruß
lala12


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:30 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum