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)
-   -   Handelszeiten für EA festlegen (http://www.expert-advisor.com/forum/showthread.php?t=2744)

feelfree 10.03.13 07:19

Handelszeiten für EA festlegen
 
Guten Morgen zusammen,

ich würde meinem EA gerne mitteilen wann er handeln darf und wann eben nicht.
Das würde auch die Qualität der Backtestergebnisse deutlich verbessern.


Am Besten geeignet scheint mir ein eigener Indikator, der die Bedingung prüft und einen Buffer mit 0 oder 1 beschreibt. (0=notrade, 1=trade)
Wichtig hierfür sind die Wochentage (Abfrage mit 0-6 möglich) und die maßgebende Uhrzeit, die ich gern bei jedem Bar auslesen würde.
Handelszeiten sind Montag-Freitag von 09-12 und 14-17.
Wenn die Bedingung bei dem Bar zutrifft soll der Buffer auf 1 oder '"trade" gesetzt werden und der EA soll diesen via iCustom auslesen.

Könnt ihr mir bei der Umsetzung helfen?
Alternative Lösungsideen sind natürlich ebenfalls sehr willkommen.

Grüße,
Dan

naranjoe 10.03.13 17:04

Warum denn erst mit einem Indikator um den dann auszulesen ?:confused:

Das kannst du doch alles mit deinem EA machen.

feelfree 10.03.13 20:50

Das glaub ich dir gern aber ich hab absolut keine Ahnung wie ich das umsetzen bzw. scripten soll. Bei einem Indikator weiß ich jetzt zumindest wie ich die Buffer auslesen und verwerten kann.

Ich bin aber jederzeit bereit alles Nötige zu lernen.
Je mehr desto besser.

LG,
Dan

naranjoe 11.03.13 09:05

OK, dann mal Schritt für Schritt (habe gerade ein bischen Zeit)

Erst mal die Eingabeparameter: (sollte Selbsterklärend sein)
Code:

extern bool MON = true;
extern bool TUE = true;
extern bool WED = true;
extern bool THU = true;
extern bool FRI = true;
extern int StartHour = 10;
extern int EndHour = 12;

Interne Variablen:
Code:

int CurrentTime;
bool TradingDay[6]= { false, false, false, false, false, false };

Im init() fragen wir die Tage ab und setzen im Array Tradingday[] die Schalter entsprechend.
Aufgepasst: Die Elemente des Array passen genau zu den Wochentagen von DayOfWeek().
Code:

void init()
{
 if(MON) TradingDay[1]=true;
 if(TUE) TradingDay[2]=true;
 if(WED) TradingDay[3]=true;
 if(THU) TradingDay[4]=true;
 if(FRI) TradingDay[5]=true;
}

Dann die Abfrage der Zeit als bool die den Rückgabewert true oder false liefert.
Code:

bool TradingTime()
{
 CurrentTime = TimeHour(TimeCurrent());
 if (StartHour < EndHour)
    {
    if ((CurrentTime < StartHour) || (CurrentTime >= EndHour)) return(false);
    }     
 if (StartHour > EndHour)
    {
    if ((CurrentTime < StartHour) && (CurrentTime >= EndHour)) return(false);
    }
 return(true);
}

In Start() brauchst du dann nur noch die Abfrage für Wochentag und Trading Zeit.
Code:

int start()
{
if (TradingDay[DayOfWeek()] == false) return(0);
if (TradingTime() == false) return(0);
//EA Code
//...
}

Ich habe hier die Möglichkeit der Abfrage des Wochentages über ein Array gelöst.
Das ist vieleicht die einfachste Möglichkeit, die am wenigsten Code braucht.

Gruß
naranjoe

feelfree 11.03.13 09:52

Joe, du bist echt der Hammer. :)

Die Zeitabfrage hab ich dank deiner Hilfe bereits umsetzen können und jetzt werde ich mich mal an die Wochentage machen.

Grüße
Dan

Nordlicht 08.02.15 15:57

Danke !
 
Kann man ruhig mal wieder hoch holen und sich für die Unterstützung bedanken.

Vielen Dank :)

Wieder etwas Verlust weggeschaufelt.

suntrader 18.03.15 14:29

Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
wer kann mir einen Zeitfilter in den EA "einbauen" ?
Hab es probiert, wie oben beschrieben.
Aber der EA arbeitet munter weiter, ohne das "Zeitfenster" zu beachten.
Da ich kein "Plan" vom programmieren habe, brauche ich etwas Hilfe.
Also der EA sollte vor allem nur nachts z.B. 22:30 bis 02:30 arbeiten.
Es sollte Sonntag bis Freitag einstellbar sein, Start und Endzeit mit
Stunde und Minuten und nach Lokalzeit arbeiten.
Das Zeitfenster sollte auch ein und abschaltbar sein.
Dann noch die Frage, was passiert mit den offenen Orders, wenn die Zeit
abgelaufen ist ( als z.B. 02:30 ) ? Automatisch schließen lassen ( auch wenn
die Position im Minus ist ) oder die offenen Orders abarbeiten lassen ?

Viele Grüße

PS: ein weiterer Wunsch wäre, ein Tailingstop, der auch alle 5 offenen Tades verarbeitet, nicht nur den letzten Trade


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:35 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