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)
-   -   Stecke mit meiner Exitstrategie fest!!! (http://www.expert-advisor.com/forum/showthread.php?t=3405)

Tycoon 06.01.14 20:39

Stecke mit meiner Exitstrategie fest!!!
 
Guten Abend Leute...
ich bin gerade dabei ein EA zu Programmieren der mehrere Strategien fährt.Klappt auch alles hervorragend bislang.
Ich stecke bloss bei meiner Exitstrategie fest.Ich hatte früher etwas ähnliches schon einmal gepostet, nur diesmal geht die Sache etwas tiefer.
Ich möchte nach gewisser Zeit abfragen ob meine Position im Plus ist. Ist dies nicht der Fall, möchte ich eine halbe Position schliessen.

Hier ein Ausschnitt aus meiner Schleife:


if(OrderOpenTime() <=OrderOpenTime()+ PERIOD_H1*3*3600 && OrderOpenPrice() <= Ask )
{
OrderClose(OrderTicket(),Lots/2,Ask,2,Red);
}

Nach 3 Stunden soll die Abfrage kommen ob sich etwas tut.Das Problem ist...es wird eine halbe Position geschlossen aber unmittelbar darauf wird gleich wieder zugekauft.

Vielleicht habt ihr nen kleinen Gedankenschubser für mich...
Danke im voraus schon einmal!!!

fxdaytrader 06.01.14 21:18

Abfrage bspw. so:
Code:

if ((TimeCurrent() - OrderOpenTime()) >= (3 * 3600))
OrderClose (hier für BUY order):

Code:

OrderClose(OrderTicket(),OrderLots()/2,MarketInfo(OrderSymbol(),MODE_BID),9999,CLR_NONE);
Ich weiß nicht wie hoch die Wahrscheinlichkeit für das Auftreten von Problemen bei der Orderschließung sind, aber es schadet nicht die Lotgröße zu normalisieren, also anstelle von "OrderLots()/2" schreiben
"NormalizeLots(OrderSymbol(),OrderLots()/2)"

funktion:

Code:

//see also the original function by WHRoeder, http://forum.mql4.com/45425#564188, fxdaytrader
double NormalizeLots(string symbol, double lots) {
  if (MathAbs(lots)==0.0) return(0.0); //just in case ... otherwise it may happen that after rounding 0.0 the result is >0 and we have got a problem, fxdaytrader
  double ls = MarketInfo(symbol,MODE_LOTSTEP);
  lots = MathMin(MarketInfo(symbol,MODE_MAXLOT),MathMax(MarketInfo(symbol,MODE_MINLOT),lots)); //check if lots >= min. lots && <= max. lots, fxdaytrader
return(MathRound(lots/ls)*ls);
}

Warum Dein EA direkt wieder zukauft weiß ich nicht, dazu müsstest Du die entsprechenden codezeilen hier posten.

Ob sich eine Position im + oder - befindet kannst Du auch ermitteln durch Abfrage:

Code:

if ((OrderProfit()+OrderSwap()+OrderCommission())>0.0)
, ist es größer 0.0 dann ist die Position im +, ... ;)

traderdoc 06.01.14 21:25

Den Rest des Codes sieht man nicht. Damit wirds dann a bisserl kompliziert.

Beim Halbieren der Lotgröße der Order wird immer erst die gesamte Order geschlossen und danach wieder die Hälfte geöffnet.
Falls Du also das meinst, dann ist das völlig in Ordnung.
Solltest Du ein anderes Öffnen meinen, dann muß es am Code liegen, den wir nicht sehen.

Wobei ich mich die ganze Zeit frage, führt
if(OrderOpenTime() <=OrderOpenTime()+ PERIOD_H1*3*3600 && OrderOpenPrice() <= Ask )
nicht sofort nach dem Öffnen der Order zum true der Abfrage?
Erstens ist OrderOpenTime() immer kleiner als OrderOpenTime()+ PERIOD_H1*3*3600
und zweitens handelt es sich hier um eine SellOrder, die mit dem Bid geöffnet wird. Damit ist der OrderOpenPrice() der Bidkurs, der bei der Öffnung immer unter, also kleiner als der darüberliegende Ask-Kurs ist.

Oder brauch ich langsam ne Brille?

traderdoc

Tycoon 06.01.14 21:38

Liste der Anhänge anzeigen (Anzahl: 1)
Will nicht falsch verstanden werden...Habe euch mal das Teil angehangen...
Ab Zeile 134...
Vielleicht könnt ihr ja mal nen Blick drauf schmeissen!
Habe meine oben beschriebene Problematik erst in der BUY Situation eingebaut...also bitte nicht wundern.

fxdaytrader 06.01.14 21:49

Ohne mir den code angeschaut zu haben:
order öffnen und order schließen sind zwei Paar Schuhe.

Dem EA ist es salopp ausgedrückt völlig schnuppe ob Du einige Sekunden oder die bar vorher Deine Order zur Hälfte geschlossen hast - Denn sobald ein buy oder sell signal vorliegt dann kauft/verkauft er.

Dir könnte eine Prüfung helfen: Handele nur sofern noch keine order (ggf. nur prüfen ob es derselbe ordertyp ist) offen ist.

Tycoon 06.01.14 21:57

mmh....kann dir leider nicht ganz folgen.Wenn das Signal noch besteht,dann ist es klar das eine Order eröffnet wird. Der Kontoauszug beim Backtesting gibt auch sehr merkwürdige Zahlen von sich bei der Teilschließung.
Wird wohl wieder ne lange Nacht vorm Rechner!!!!!!!:confused:

traderdoc 06.01.14 22:00

Also erstmal sollte von Dir geklärt werden, wann der EA die Order schließt und v.a. wann genau die Hälfte wieder "dazugekauft" wird.

Ich denke fest, dass Du das Kaufen meinst, welches ich beschrieben hatte. Das wäre völlig normal und kann auch nicht unterbunden werden.

Unberührt von dieser Tatsache bleibt Deine if-Abfrage funktionell falsch.

traderdoc

Tycoon 06.01.14 22:06

Die andere hälfte soll ja gerade nicht mehr zugekauft werden.
Ich werd nochmal step by step alles durchgehen....
Ich bedanke mich trotzdem bei euch für eure Mühe....;)

Tycoon 06.01.14 22:25

Hab jetzt nochmal geschaut! Er kauft nicht zu, sondern er halbiert dann halt jedesmal pö a pö runter bis auf Null.

Mal sehen wie ich das Problem lösen kann...

:rolleyes:

traderdoc 06.01.14 23:02

Zitat:

Zitat von Tycoon (Beitrag 24633)
Hab jetzt nochmal geschaut! Er kauft nicht zu, sondern er halbiert dann halt jedesmal pö a pö runter bis auf Null.

Mal sehen wie ich das Problem lösen kann...

:rolleyes:

Also diese Logik kann ich nun überhaupt nicht mehr nachvollziehen.
Erst verdoppelt er, dann doch nicht und er halbiert bis 0. Ja wie sollen wir denn da die richtigen Antworten geben.

Das er ständig halbiert ist auch deshalb von der Programmlogik her richtig, weil die Zeile
if(OrderOpenTime() <=OrderOpenTime()+ PERIOD_H1*3*3600 && OrderOpenPrice() <= Ask )

Murks ist und den EA jedesmal anweist, eben eine weitere Hälfte der jeweiligen Hälfte zu schließen. (sofern OrderOpenPrice() <= Ask ist), denn der vordere Teil ist immer true!

traderdoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:01 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