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)
-   -   Handelszeit in MT4 begrenzen - Vortageshoch/tief (http://www.expert-advisor.com/forum/showthread.php?t=4994)

markttechniker 11.06.16 20:18

Handelszeit in MT4 begrenzen - Vortageshoch/tief
 
Hallo zusammen,

ich bitte euch um einen Rat! Und zwar, ob es in MT4 möglich ist, das Vortageshoch bzw. Vortagestief in einem Zeitfenster von 8 Uhr bis 22 Uhr abzufragen und anzuzeigen. Könnt ihr mir bitte einen Tipp geben, mit welcher Funktion ich das anstelle? Mein Broker zeigt mir DAX rund um die Uhr. Mich interessieren aber nur die Handelszeiten von 8 Uhr bis 22 Uhr.

Ich habe zunächst an iHigh im Tageschart gedacht. Aber dort sind ja auch die Hochs und Tiefs in den Zeiten von 0 bis 8 Uhr und von 22 bis 24 Uhr vorhanden:
iHigh(Symbol(),PERIOD_D1,1)

Außerdem würde ich gern den Handel des EA nur auf den Zeitrahmen von 8 bis 22 Uhr begrenzen. Ich würde euch wirklich sehr dankbar sein, wenn mir jemand eine Idee gibt!
Danke schön!

MA-EA 12.06.16 18:39

Globale Variablen
Code:

extern string Open_Orders_From = "07:00:00";
extern string Open_Orders_Till = "21:15:00";

nach start
Code:

datetime TC = TimeCurrent();
datetime F = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + Open_Orders_From);
datetime T = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + Open_Orders_Till);

Order-Bedingung
Code:

if...(TC>F && TC<T)...

markttechniker 13.06.16 10:39

Zitat:

Zitat von MA-EA (Beitrag 34841)
Globale Variablen
Code:

extern string Open_Orders_From = "07:00:00";
extern string Open_Orders_Till = "21:15:00";

nach start
Code:

datetime TC = TimeCurrent();
datetime F = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + Open_Orders_From);
datetime T = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + Open_Orders_Till);

Order-Bedingung
Code:

if...(TC>F && TC<T)...

Vielen vielen Dank!

markttechniker 13.06.16 11:30

Leute, bitte um Hilfe! Lässt sich dieser Code vielleicht so ändern, dass ich das Vortageshoch bzw. -tief NUR von 8 bis 22 Uhr angezeigt bekomme? Im Moment ist es ja so, dass wenn der Broker die Kurse rund um die Uhr stellt, dann wird das Vortageshoch bzw. -tief auch in der Zeit zw. 24 bis 8 Uhr angezeigt.. Danke für eure Tipps!

int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("LineHigh"+Symbol());
ObjectDelete("LineLow"+Symbol());
ObjectDelete("LineClose"+Symbol());

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
ObjectDelete ("LineHigh"+Symbol());
ObjectDelete ("LineLow"+Symbol());
ObjectDelete ("LineClose"+Symbol());

ObjectCreate ("LineHigh"+Symbol(), OBJ_HLINE, 0,0, iHigh(Symbol(),PERIOD_D1,1));
ObjectSet ("LineHigh"+Symbol(), OBJPROP_COLOR, High_Color);
ObjectSet ("LineHigh"+Symbol(), OBJPROP_WIDTH, High_Width);

ObjectCreate ("LineLow"+Symbol(), OBJ_HLINE, 0,0, iLow(Symbol(),PERIOD_D1,1));
ObjectSet ("LineLow"+Symbol(), OBJPROP_COLOR, Low_Color);
ObjectSet ("LineLow"+Symbol(), OBJPROP_WIDTH, Low_Width);

ObjectCreate ("LineClose"+Symbol(), OBJ_HLINE, 0,0, iClose(Symbol(),PERIOD_D1,1));
ObjectSet ("LineClose"+Symbol(), OBJPROP_COLOR, Close_Color);
ObjectSet ("LineClose"+Symbol(), OBJPROP_WIDTH, Close_Width);

//----
return(0);
}

markttechniker 13.06.16 12:57

Zitat:

Zitat von markttechniker (Beitrag 34844)
Leute, bitte um Hilfe! Lässt sich dieser Code vielleicht so ändern, dass ich das Vortageshoch bzw. -tief NUR von 8 bis 22 Uhr angezeigt bekomme? Im Moment ist es ja so, dass wenn der Broker die Kurse rund um die Uhr stellt, dann wird das Vortageshoch bzw. -tief auch in der Zeit zw. 24 bis 8 Uhr angezeigt.. Danke für eure Tipps!

int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("LineHigh"+Symbol());
ObjectDelete("LineLow"+Symbol());
ObjectDelete("LineClose"+Symbol());

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
ObjectDelete ("LineHigh"+Symbol());
ObjectDelete ("LineLow"+Symbol());
ObjectDelete ("LineClose"+Symbol());

ObjectCreate ("LineHigh"+Symbol(), OBJ_HLINE, 0,0, iHigh(Symbol(),PERIOD_D1,1));
ObjectSet ("LineHigh"+Symbol(), OBJPROP_COLOR, High_Color);
ObjectSet ("LineHigh"+Symbol(), OBJPROP_WIDTH, High_Width);

ObjectCreate ("LineLow"+Symbol(), OBJ_HLINE, 0,0, iLow(Symbol(),PERIOD_D1,1));
ObjectSet ("LineLow"+Symbol(), OBJPROP_COLOR, Low_Color);
ObjectSet ("LineLow"+Symbol(), OBJPROP_WIDTH, Low_Width);

ObjectCreate ("LineClose"+Symbol(), OBJ_HLINE, 0,0, iClose(Symbol(),PERIOD_D1,1));
ObjectSet ("LineClose"+Symbol(), OBJPROP_COLOR, Close_Color);
ObjectSet ("LineClose"+Symbol(), OBJPROP_WIDTH, Close_Width);

//----
return(0);
}

Wäre das vielleicht eine Lösung? --> iHighest(NULL,0,MODE_HIGH,15,10); Wenn man berücksichtigt, dass der Kurs rund um die Uhr gestellt wird, der Chart 1H ist und die Zählung um 8 Uhr anfängt. Gehe ich richtig in der Annahme, dass der Indikator in diesem Fall nur einmal und zwar um 8 Uhr ausgeführt werden darf?

traderdoc 13.06.16 13:30

Code:

string TimeStart = "08:00";
string TimeEnd = "22:00";

if (OldBar != iTime(Symbol(), Period_D1, 0) {
  int candlestart = iBarShift(Symbol(), Period_M5, StrToTime(TimeStart) - 86400;
  int candleend = iBarShift(Symbol(), Period_M5, StrToTime(TimeEnd) - 86400;
  int candlehighest = iHighest(Symbol(), Period_M5, MODE_HIGH, candlestart-candleend, candleend);
  int candlelowest = iHighest(Symbol(), Period_M5, MODE_LOW, candlestart-candleend, candleend);
  double high = iHigh(Symbol(), Period_M5, candlehighest);
  double low = iLow(Symbol(), Period_M5, candlelowest);
}

high und low werden nur einmal nach Tageswechsel berechnet. Durch Period_M5 ist die Berechnung auf Zeitangaben im minimal 5-Minuten-Takt beschränkt, ansonsten mit Period_M1 oder ggf. auch höheren Timeframe-Angaben.

traderdoc

ralfbenker 13.06.16 19:51

Hallo traderdoc,

Dein Code gefällt zur Berechnung Vortageshoch/tief ist ja wieder mal genial einfach.
Hab mir da bei einer Xetra-Dax Berechnung des Vortageshochs/tiefs furchtbar einen abgebrochen.
Kurze Frage:
Was passiert Montags wenn z.B. Freitag 23:00 Uhr der letzte Kurs gestellt wird und Montags um 01:00 Uhr der erste Kurs (wie bei Admiral Markets)? Sind dann 86400 Sekunden auch 24 Stunden. Ich hatte bei meiner Berechnung immer Probleme mit Montagen und verkürzten Handelstagen.
Ich hab das über:
ArrayCopyRates(rates_m30,Symbol(),PERIOD_M30);
versucht
und dann den Zeitstempel des Arrays rates_m30[zaehler],[0] abgefragt.

traderdoc 13.06.16 19:51

Ich konnte leider mein eigenes Post nicht korrigieren.
Da fehlt vor der } folgende Zeile:

OldBar = iTime(Symbol(), Period_D1, 0);

traderdoc

traderdoc 13.06.16 19:59

Zitat:

Zitat von ralfbenker (Beitrag 34850)
Hallo traderdoc,

Dein Code gefällt zur Berechnung Vortageshoch/tief ist ja wieder mal genial einfach.
Hab mir da bei einer Xetra-Dax Berechnung des Vortageshochs/tiefs furchtbar einen abgebrochen.
Kurze Frage:
Was passiert Montags wenn z.B. Freitag 23:00 Uhr der letzte Kurs gestellt wird und Montags um 01:00 Uhr der erste Kurs (wie bei Admiral Markets)? Sind dann 86400 Sekunden auch 24 Stunden. Ich hatte bei meiner Berechnung immer Probleme mit Montagen und verkürzten Handelstagen.
Ich hab das über:
ArrayCopyRates(rates_m30,Symbol(),PERIOD_M30);
versucht
und dann den Zeitstempel des Arrays rates_m30[zaehler],[0] abgefragt.

Jo, das o.g. war nur das Prinzip. Jetzt müssten wir ins Detail gehen und da gibt es wieder mehrere Lösungen.
Z. B. die über DayOfWeek() zu gehen. Eine 1 wird zurückgegeben, wenn es ein Montag ist, dann müsste - 3*86400 stehen. Und bei 0 für Sonntag und 6 für Samstag würde die Abfrage nicht durchlaufen.
Auf bestimmte Feiertage müsste dann auch noch reagiert werden.

Man könnte auch über die Feststellung der Kursstellung an dem zu untersuchenden Tag gehen. Keine Kursstellung - keine Abfrage, etc.

traderdoc

ralfbenker 13.06.16 20:14

alles klar, sowas hab ich mir schon gedacht. Aber dein Prinzip ist ja schon mal genial einfach. Der Rest ist ja dann bis auf Feiertage/halbe Handelstage auch halb so wild.


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