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 MQL5 (http://www.expert-advisor.com/forum/forumdisplay.php?f=221)
-   -   Laufzeitbegrenzung der Trades (http://www.expert-advisor.com/forum/showthread.php?t=3815)

Eberhard 20.08.14 20:37

Laufzeitbegrenzung der Trades
 
Ich habe folgendes Problem:

Ich habe einen ExpertAdvisor unter Anwendung bzw. Änderung von CExpert erstellt, indem ich darin einen Array-Algorithmus eingesetzt habe und ihn dann (mittels StrategieTester) auf eine optimale TakeProfit-Einstellung eingestellt habe.

Jetzt möchte ich zusätzlich noch alle auf diese Weise generierten Trades auf eine bestimmte Laufzeit von z.B. drei Tagen begrenzen.

D.h. wenn nicht vorher schon das von mir eingestellte TakeProfit erfüllt ist, sollen die ausgelösten Trades spätestens nach drei Tagen stoppen.

Kann mir jemand einen guten Tipp geben?

Danke im Voraus!

fxdaytrader 20.08.14 20:53

google bspw. nach timebased sl, da findet man einiges, bspw. How to code time-based stops @ Forex Factory

Eberhard 21.08.14 10:11

Danke, fxdaytrader,

vielleicht hätte ich hervorheben sollen, dass mein Programm in MQL5 innerhalb von CExpert geschrieben ist.

Jedenfalls finde ich in der MQL5-Anleitung keine vergleichbare, offensichtlich sehr einfache Funktion wie

TimeBasedSLdays.

Habe ich etwas übersehen?

traderdoc 21.08.14 13:05

Zitat:

Zitat von Eberhard (Beitrag 27218)
Ich habe folgendes Problem:

Ich habe einen ExpertAdvisor unter Anwendung bzw. Änderung von CExpert erstellt, indem ich darin einen Array-Algorithmus eingesetzt habe und ihn dann (mittels StrategieTester) auf eine optimale TakeProfit-Einstellung eingestellt habe.

Jetzt möchte ich zusätzlich noch alle auf diese Weise generierten Trades auf eine bestimmte Laufzeit von z.B. drei Tagen begrenzen.

D.h. wenn nicht vorher schon das von mir eingestellte TakeProfit erfüllt ist, sollen die ausgelösten Trades spätestens nach drei Tagen stoppen.

Kann mir jemand einen guten Tipp geben?

Danke im Voraus!

Ja, kann ich.
1. Hängt das jetzt von Deinen Programmierkenntnissen ab,
ob
2. Du die Zeile if (TimeCurrent() > OrderOpenTime() + 259200) Closing();
an die richtige Stelle platzieren kannst.
3. oder Du über CExpert Deinen Wunsch nacheingeben kannst.
4. Möglichkeit ist, einen Programmierer das tun zu lassen.
5. Möglichkeit sollte evtl. für die Zukunft sein, die Programme gleich über einen Programmierer erarbeiten zu lassen. Dann kannst Du in der Regel zu jeder Zeit irgendetwas einfügen oder ändern lassen, ohne sich später die Frage zu stellen, ob es tatsächlich so funktioniert, wie man es wollte.

Zur o.g. Zeile:
Dort wird abgefragt, ob die Summe aus der Zeit der Eröffnung der Order und 3 weiteren Tagen (259200 Sekunden!) größer ist als die derzeitige Brokerzeit.
Sollte das der Fall sein, soll über das Anspringen der Funktion Closing() ein Schleißen erreicht werden.

traderdoc

Eberhard 21.08.14 19:33

Danke, traderdoc,

doch wie ich bereits fxdaytrader in meiner Antwort geschrieben hatte, arbeite ich mit MetaTrader5 und hier mit dem bereits dort vorgefertigten CExpert, d.h. in der Programmiersprache MQL5.

MQL5 unterscheidet zwischen Order und Position, also einem bereits begonnenen Trade.

In MQL5 gibt es die von Dir vorgeschlagenen Funktionen "OrderOpenTime()" und "Closing" nicht.

Mein ursprünglicher MQL5-Lösungsversuch, von mir plaziert im CExpert-TrailingStopLong(double sl,double tp), war:

if((long)TimeCurrent() - (long)PositionGetInteger(POSITION_TIME_MSC)>=3*24* 3600*1000)
sl=m_symbol.NormalizePrice(m_position.PriceCurrent ());

Doch dieser Versuch mit StopLoss (sl) scheitert zumindest im StrategieTester. Dies wäre aber notwendig, damit ich die reale Renditeentwicklung unter verschiedenen Laufzeitbegrenzungseinstellungen überhaupt jeweils einigermaßen abschätzen kann.

Auch bin ich mir nicht sicher, ob meine if-Bedingung überhaupt im StrategierTester richtig erkannt bzw. umgesetzt werden kann.


Vielleicht hast Du noch eine Idee für die Lösung dieses Problems?

traderdoc 21.08.14 19:57

Sorry, hatte ich überlesen.
Dann sollte aber über
if (TimeCurrent() - PositionGetInteger(POSITION_TIME_MSC)>=259200000)
wenigstens möglich sein, das Überschreiten von 3 Tagen nach Orderöffnung zu erhalten.

Die Funkton Closing() gibt es weder im MQL4 noch in MQL5. Die mußt Du natürlich selber schreiben, je nachdem was und wie geschlossen werden soll.

traderdoc

Eberhard 21.08.14 21:01

Danke, traderdoc,

immerhin scheint meine if-Bedingung eigentlich nicht ganz falsch zu sein.

Möglicherweise hängt es deshalb tatsächlich an der "Closing"-Bedingung.

Wie gesagt, ich habe es mit StopLoss in Verbindung mit PriceCurrent versucht, bin aber damit nicht weitergekommen.

Eigentlich kann es doch nicht sein, dass das vorgefertigte MQL5-CExpert für eine Laufzeitbegrenzung keine Lösung erlaubt. Könnte es sein, dass das StopLoss in MQL5 selbst gar nicht auf eine zeitbezogene if-Bedingung reagiert. Es scheint nur auf einen eingestellten Price zu reagieren???

Dann müsste es doch wenigstens eine andere "Closing"-Bedingung geben, die auf eine zeitbegrenzende if-Bedingung reagiert?


Jedenfalls würde ich mich über einen weiteren Lösungsvorschlag freuen!

traderdoc 21.08.14 21:46

Die if-Bedingung ist entweder true oder false!
Die Anweisung, die darauf folgt, hat nichts mit der Struktur der if-Bedingung zu tun.
D.h.
if(.......) { //falls true
......
} else { //falls false
......
}
D.h. wenn die if -Bedingung eben true ist, dass werden die Anweisungen in der ersten {} ausgeführt.
Was in den Anweisungen drin steht, ist dem Klammerausdruck der Bedingung völlig egal!!

traderdoc

Eberhard 22.08.14 10:00

Hallo traderdoc,

da ist wohl etwas schief gelaufen, denn eine if-Bedingung kenne ich in- und auswendig. Vielleicht habe ich mich ja auch etwas umständlich ausgedrückt.

Deshalb noch einmal mein ursprünglicher, aber zumindest im StrategieTester leider nicht funktionierender MQL5-Lösungsversuch. (Mir kommt es schon fast so vor, als wenn der StrategieTester immun ist für solche zeitabhängigen if-Bedingungen und dass es im realen Handelsablauf möglicherweise sogar doch funktioniert):

if((long)TimeCurrent() - (long)PositionGetInteger(POSITION_TIME_MSC)>=3*24* 3600*1000)
sl=m_symbol.NormalizePrice(m_position.PriceCurrent ());


Wenn die if-Bedingung

if((long)TimeCurrent() - (long)PositionGetInteger(POSITION_TIME_MSC)>=3*24* 3600*1000)

implementiert im CExpert von MetaTrader 5 so aber tatsächlich funktionieren sollte (wovon ich eben nicht sicher ausgehen kann), dann funktioniert jedenfalls nicht das sich anschließende StopLoss-Closing:

sl=m_symbol.NormalizePrice(m_position.PriceCurrent ());

Hier stellt sich schlichtweg die Frage, ob es zu diesem leider nicht richtig funktionierenden StopLoss-Closing noch eine Alternative gibt.

Denn es müsste doch möglich sein, eine Laufzeitbegrenzung aller Trades auf z.B. drei Tage hinzubekommen.

Und hier wäre ich wirklich dankbar, wenn mir eine Alternative zu diesem Closingversuch oder überhaupt eine insgesamt ganz andere Lösung vorgeschlagen werden könnte - falls es sie überhaupt gibt.

fxdaytrader 22.08.14 10:46

Wie wäre es entweder den EA hier mit anzuhängen oder gleich einen kompetenten Programmierer zu beauftragen? :)


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