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)
-   -   High and Low für bestimmten Zeitraum (http://www.expert-advisor.com/forum/showthread.php?t=5308)

nobtrade 25.11.16 08:52

High and Low für bestimmten Zeitraum
 
Hallo liebe Trader,
mein Broker hat jetzt den Nachthandel eingeführt.
Bisher habe ich immer durch einen Indikator die Tageshighs and Tageslows vom aktuellen und vorangegangenen Tag mir einzeichnen lassen.
Die möchte ich auch weiterhin tun, allerding nicht für die Zeit von 22.00 bis 8.00 Uhr.
Bisher habe ich mir einfach ein Objekt kreiert:
ObjectCreate ("Vortageshoch", OBJ,HLINE, 0 ,0, iHigh(Symbol(),PERIOD_D1,1);
Dann habe ich aber auch die nicht gewollten Zeiten dabei.
Wie kann ich MT4 sagen, dass er aus der Zeit z.B. von 8.00 Uhr bis 22.00 Uhr das High and Low einzeichnen soll?

Danke und Gruß

traderdoc 25.11.16 10:41

Über iHighest() und iLowest() werden die Kerzenpositionen zurückgegeben, wo sich das High bzw Low zwischen den beiden Zeiten befindet.
Das eigentliche High und Low dann über High[] bzw. Low[].

traderdoc

nobtrade 25.11.16 11:03

Hallo Traderdoc,
vielen Dank für die super schnelle Antwort!!!
Kann Du mir kurz noch schreiben, wie ich das machen muss, wenn ich z.B. für die Zeit von 8.00 bis 9.00 Uhr das High und Low ermitteln möchte.
Das habe ich mit Deiner ersten Antwort noch nicht hinbekommen.

Danke

einser34 25.11.16 11:22

Hallo
 
Liste der Anhänge anzeigen (Anzahl: 1)
mit,diesem kannst die Zeit einstellen,wie du willst,zeigt Hoch und Tief an.

nobtrade 29.11.16 08:25

Hallo Traderdoc,
könntest Du meine Frage noch beantworten oder ist dies Gebührenpflichtig? :)

Viele Grüße
nobtrade

traderdoc 29.11.16 12:12

Das ist noch nicht gebührenpflichtig.

int shift8 = iBarShift(NULL, 0, StringToTime("08:00"));
int shift9 = iBarShift(NULL, 0, StringToTime("09:00"));
int highest = iHighest(NULL, 0, MODE_HIGH, shift8 - shift9 + 1, shift9);
int lowest = iHighest(NULL, 0, MODE_LOW, shift8 - shift9 + 1, shift9);

double high = iHigh(NULL, 0, highst);
double low = iLow(NULL, 0, lowest);

Viel Erfolg!

traderdoc

nobtrade 01.12.16 11:18

Hallo Traderdoc,

vielen, vielen Dank.

Es hat aber noch nicht 100%ig geklappt.

Zum einen wandert der OpenRange_unten_aktuell, wenn ich in andere Zeiteinheiten wechsel (z.B. vom 1Min Chart in den 15 Min Chart).
Desweiteren wird der OpenRange_oben_aktuell nicht vom Chartfenster gelöscht, wenn ich den Indicator entferne.
Und die letzte Frage, wie kann ich den OpenRange Bereich für den Vortag einzeichnen? Deine Antwort funktioniert ja nur für den laufenden Tag.

Hier mein Code:

int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("Vortageshoch");
ObjectDelete("Vortagestief");
ObjectDelete("Schlusskurs");
ObjectDelete("Eröffnungskurs");
ObjectDelete("aktuelles Tageshoch");
ObjectDelete("aktuelles Tagestief");
ObjectDelete("OpenRange_oben_aktuell");
ObjectDelete("OpenRange_unten_aktuell");

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
ObjectDelete ("Vortageshoch");
ObjectDelete ("Vortagestief");
ObjectDelete ("Schlusskurs");
ObjectDelete ("Eröffnungskurs");
ObjectDelete ("aktuelles Tageshoch");
ObjectDelete ("aktuelles Tagestief");
ObjectDelete ("OpenRange_oben_aktuell");
ObjectDelete ("OpenRange_unten_aktuell");

int shift9 = iBarShift(NULL, 0, StringToTime("09:00"));
int shift10 = iBarShift(NULL, 0, StringToTime("10:00"));
int highest = iHighest(NULL, 0, MODE_HIGH, shift9 - shift10+1, shift10);
int lowest = iLowest(NULL, 0, MODE_LOW, shift9 - shift10+1, shift10);

ObjectCreate ("OpenRange_oben_aktuel", OBJ_HLINE, 0,0, iHigh(NULL, 0, highest));
ObjectSet ("OpenRange_oben_aktuel", OBJPROP_COLOR, clrOrange);
ObjectSet ("OpenRange_oben_aktuel", OBJPROP_WIDTH, 2);
ObjectSet ("OpenRange_oben_aktuel", OBJPROP_HIDDEN, true);

ObjectCreate ("OpenRange_unten_aktuell", OBJ_HLINE, 0,0, iLow(NULL, 0, lowest));
ObjectSet ("OpenRange_unten_aktuell", OBJPROP_COLOR, clrOrange);
ObjectSet ("OpenRange_unten_aktuell", OBJPROP_WIDTH, 2);
ObjectSet ("OpenRange_unten_aktuell", OBJPROP_HIDDEN, true);

traderdoc 01.12.16 12:59

Was verstehst Du denn unter "wandern"? Da das High und Low zwischen 8 und 9Uhr nicht vom Timeframe abhängt (die Differenz dieser Zeitgrenzen in Minuten sollte allerdings immer ohne Rest teilbar durch die Minuten des Timeframes sein!), müsste ja auch immer dasselbe High und Low ermittelt werden.

In Deinem Code fehlt überall ein l bei aktuel.

Einen Tag vorher:

int shift9 = iBarShift(NULL, 0, StringToTime("09:00")-86400);

86400 sind die Anzahl Sekunden pro Tag.

traderdoc

nobtrade 01.12.16 13:31

Hallo Traderdoc,

mit dem vergessenen "l" ist das Problem gelöst, dass die horizontale Linie nicht gelöscht wird, wenn man den Indikator löscht. Vielen Dank :)

Wandern heißt, wenn ich im 1min Chart bin, zeigt er mir die Linien korrekt an, beim 5min Chart und höher nimmt er das low der ersten nächsten Kerze.

Den Vortag probiere ich gleich mal aus...

nobtrade 01.12.16 14:22

Hallo einser34,
hatte vergessen, mich auch bei Dir zu bedanken...

Hallo Traderdoc,

hier noch mal der komplette Code. Die Tageshigh und -lows klappen super.
Die Linien der OpenRange Horizontalen sind im Minutenchart korrekt, in jeder anderen Zeiteinheit falsch.

Was habe ich falsch genmacht??????

int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("Vortageshoch");
ObjectDelete("Vortagestief");
ObjectDelete("Schlusskurs");
ObjectDelete("Eröffnungskurs");
ObjectDelete("aktuelles Tageshoch");
ObjectDelete("aktuelles Tagestief");
ObjectDelete("OpenRange_oben_aktuell");
ObjectDelete("OpenRange_unten_aktuell");
ObjectDelete("OpenRange_oben_Vortag");
ObjectDelete("OpenRange_unten_Vortag");

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
ObjectDelete ("Vortageshoch");
ObjectDelete ("Vortagestief");
ObjectDelete ("Schlusskurs");
ObjectDelete ("Eröffnungskurs");
ObjectDelete ("aktuelles Tageshoch");
ObjectDelete ("aktuelles Tagestief");
ObjectDelete ("OpenRange_oben_aktuell");
ObjectDelete ("OpenRange_unten_aktuell");
ObjectDelete ("OpenRange_oben_Vortag");
ObjectDelete ("OpenRange_unten_Vortag");

int shift9 = iBarShift(NULL, 0, StringToTime("09:00"));
int shift10 = iBarShift(NULL, 0, StringToTime("10:00"));
int highest = iHighest(NULL, 0, MODE_HIGH, shift9 - shift10+1, shift10);
int lowest = iLowest(NULL, 0, MODE_LOW, shift9 - shift10+1, shift10);

ObjectCreate ("OpenRange_oben_aktuell", OBJ_HLINE, 0,0, iHigh(NULL, 0, highest));
ObjectSet ("OpenRange_oben_aktuell", OBJPROP_COLOR, clrOrange);
ObjectSet ("OpenRange_oben_aktuell", OBJPROP_WIDTH, 2);
ObjectSet ("OpenRange_oben_aktuell", OBJPROP_HIDDEN, true);

ObjectCreate ("OpenRange_unten_aktuell", OBJ_HLINE, 0,0, iLow(NULL, 0, lowest));
ObjectSet ("OpenRange_unten_aktuell", OBJPROP_COLOR, clrOrange);
ObjectSet ("OpenRange_unten_aktuell", OBJPROP_WIDTH, 2);
ObjectSet ("OpenRange_unten_aktuell", OBJPROP_HIDDEN, true);

shift9 = iBarShift(NULL, 0, StringToTime("09:00")-86400);
shift10 = iBarShift(NULL, 0, StringToTime("10:00")-86400);
highest = iHighest(NULL, 0, MODE_HIGH, shift9 - shift10+1, shift10);
lowest = iLowest(NULL, 0, MODE_LOW, shift9 - shift10+1, shift10);

ObjectCreate ("OpenRange_oben_Vortag", OBJ_HLINE, 0,0, iHigh(NULL, 0, highest));
ObjectSet ("OpenRange_oben_Vortag", OBJPROP_COLOR, clrGreen);
ObjectSet ("OpenRange_oben_Vortag", OBJPROP_WIDTH, 2);
ObjectSet ("OpenRange_oben_Vortag", OBJPROP_HIDDEN, true);

ObjectCreate ("OpenRange_unten_Vortag", OBJ_HLINE, 0,0, iLow(NULL, 0, lowest));
ObjectSet ("OpenRange_unten_Vortag", OBJPROP_COLOR, clrGreen);
ObjectSet ("OpenRange_unten_Vortag", OBJPROP_WIDTH, 2);
ObjectSet ("OpenRange_unten_Vortag", OBJPROP_HIDDEN, true);

shift9 = iBarShift(NULL, 0, StringToTime("09:00")-86400);
int shift23 = iBarShift(NULL, 0, StringToTime("23:00")-86400);
highest = iHighest(NULL, 0, MODE_HIGH, shift9 - shift23+1, shift23);
lowest = iLowest(NULL, 0, MODE_LOW, shift9 - shift23+1, shift23);

ObjectCreate ("Vortageshoch", OBJ_HLINE, 0,0, iHigh(NULL, 0, highest));
ObjectSet ("Vortageshoch", OBJPROP_COLOR, clrDarkViolet);
ObjectSet ("Vortageshoch", OBJPROP_WIDTH, 2);
ObjectSet ("Vortageshoch", OBJPROP_HIDDEN, true);

ObjectCreate ("Vortagestief", OBJ_HLINE, 0,0, iLow(NULL, 0, lowest));
ObjectSet ("Vortagestief", OBJPROP_COLOR, clrDarkViolet);
ObjectSet ("Vortagestief", OBJPROP_WIDTH, 2);
ObjectSet ("Vortagestief", OBJPROP_HIDDEN, true);

ObjectCreate ("Schlusskurs", OBJ_HLINE, 0,0, iClose(Symbol(),PERIOD_D1,1));
ObjectSet ("Schlusskurs", OBJPROP_COLOR, clrDarkViolet);
ObjectSet ("Schlusskurs", OBJPROP_STYLE, STYLE_DASH);
ObjectSet ("Schlusskurs", OBJPROP_WIDTH, 1);
ObjectSet ("Schlusskurs", OBJPROP_HIDDEN, true);

ObjectCreate ("Eröffnungskurs", OBJ_HLINE, 0,0, iOpen(Symbol(),PERIOD_D1,0));
ObjectSet ("Eröffnungskurs", OBJPROP_COLOR, clrRed);
ObjectSet ("Eröffnungskurs", OBJPROP_STYLE, STYLE_DASH);
ObjectSet ("Eröffnungskurs", OBJPROP_WIDTH, 1);
ObjectSet ("Eröffnungskurs", OBJPROP_HIDDEN, true);

shift9 = iBarShift(NULL, 0, StringToTime("09:00"));
shift23 = iBarShift(NULL, 0, StringToTime("23:00"));
highest = iHighest(NULL, 0, MODE_HIGH, shift9 - shift23 + 1, shift23);
lowest = iLowest(NULL, 0, MODE_LOW, shift9 - shift23 + 1, shift23);

ObjectCreate ("aktuelles Tageshoch", OBJ_HLINE, 0,0, iHigh(NULL, 0, highest));
ObjectSet ("aktuelles Tageshoch", OBJPROP_COLOR, clrRed);
ObjectSet ("aktuelles Tageshoch", OBJPROP_WIDTH, 2);
ObjectSet ("aktuelles Tageshoch", OBJPROP_HIDDEN, true);

ObjectCreate ("aktuelles Tagestief", OBJ_HLINE, 0,0, iLow(NULL, 0, lowest));
ObjectSet ("aktuelles Tagestief", OBJPROP_COLOR, clrRed);
ObjectSet ("aktuelles Tagestief", OBJPROP_WIDTH, 2);
ObjectSet ("aktuelles Tagestief", OBJPROP_HIDDEN, true);



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

nobtrade 01.12.16 14:48

Hallo Traderdoc,
ich habe jetzt bei den Funktionen iBarShift, iHighest, iHigh etc. als Timeframe immer die "1" statt der "0" eingegeben. Jetzt läuft das.

Jetzt brauche ich nur noch den Schlusskurs um 22.00 Uhr und den Eröffnungskurs um 8.00 Uhr und ich bin mit diesem Indikator wunschlos glücklich......
Kannst Du mir dies auch noch sagen. Ich kann ja sicherlich nicht iOpen und iClose verwenden, da ich nicht weiß, auf welche Periode ich dies anwenden soll.

traderdoc 01.12.16 16:21

Zitat:

Zitat von nobtrade (Beitrag 36735)
Hallo Traderdoc,
ich habe jetzt bei den Funktionen iBarShift, iHighest, iHigh etc. als Timeframe immer die "1" statt der "0" eingegeben. Jetzt läuft das.

Jetzt brauche ich nur noch den Schlusskurs um 22.00 Uhr und den Eröffnungskurs um 8.00 Uhr und ich bin mit diesem Indikator wunschlos glücklich......
Kannst Du mir dies auch noch sagen. Ich kann ja sicherlich nicht iOpen und iClose verwenden, da ich nicht weiß, auf welche Periode ich dies anwenden soll.

Da kannst Du genauso die 1 als Periode nehmen. die steht für den TimeFrame M1.
Übrigens die 0 als Periodenangabe bedeutet, es wird die Periode benutzt, die derzeitig dem Chart entspricht.
Ansonsten das gleiche Spiel: zuerst mittels iBarShift den Index der Kerze ermitteln und den in iOpen() bzw. iClose() laut Funktionsbeschreibung einsetzen.

traderdoc

nobtrade 01.12.16 16:33

Hallo Traderdoc,

ich habe ja schon für das Tageshoch und Tagestief "Deine" iBarShift, iHighest angewendet.
Kannst Du mir bitte sagen, wie ich dies in iOpen einsetzen muss.
Trotz mehrmaligem Lesen der Beschreibungen von iOpen, iBarShift und iHighest, habe ich deren genaue Vorgehensweise nicht verstanden.

Danke

traderdoc 01.12.16 17:11

Das hatte ich doch gerade geschrieben - genauso wie mit iHighest und iLowest.
Das wirst Du Doch wohl hinbekommen. Die Struktur der Funktionen sind doch völlig identisch.

Zuerst mittels iBarShift den Index der Kerze ermitteln und den in iOpen() bzw. iClose() laut Funktionsbeschreibung einsetzen.

traderdoc

nobtrade 01.12.16 17:44

Hallo Traderdoc,

habe es mit iOpen nicht hinbekommen. Habe es jetzt mit Open gemacht:

shift9 = iBarShift(NULL, 1, StringToTime("09:00"));
ObjectCreate("Eröffnungskurs", OBJ_HLINE, 0,0, Open[shift9]);

Gibt es einen Unterschied oder Vorteil, wenn ich iOpen verwende?

Danke und Gruß

traderdoc 01.12.16 18:10

Zitat:

Zitat von nobtrade (Beitrag 36739)
Hallo Traderdoc,

habe es mit iOpen nicht hinbekommen. Habe es jetzt mit Open gemacht:

shift9 = iBarShift(NULL, 1, StringToTime("09:00"));
ObjectCreate("Eröffnungskurs", OBJ_HLINE, 0,0, Open[shift9]);

Gibt es einen Unterschied oder Vorteil, wenn ich iOpen verwende?

Danke und Gruß

Ich habe den Code jetzt deshalb nicht geschrieben, weil Du ja auch was lernen sollst. Was jetzt so kompliziert daran ist, statt
iHighest(NULL, 1, shift9);
nun
iOpen(NULL, 1, shift9);
verstehe ich nicht ganz. Der Unterschied zu Open[shift9] ist der, dass mit Open[shift9] nur die Kerze shift9 in dem TimeFrame des aktuellen Charts (man ist also auf das TimeFrame und! das jeweilige Währungspaar festgelegt) ausgelesen werden kann. Mit iOpen(NULL, 1, shift9); kann man sich statt NULL auf jedes andere WP beziehen und das auf jedes zur Verfügung stehende TimeFrame. Da ist man einfach flexibler. Außerdem müsste nach Deinem o.g. Code auch wirklich das TimeFrame M1 offen sein. Das Problem besteht nämlich darin, wenn Du den Schlusskurs haben willst und ermitteltst den mit Close[shift9] und Du hast z.B. das TimeFrame M30 auf, dann wird der Schlusskurs der Kerze ermittelt, die von 22:00 bis 22:30 geht, d.h. also der Kurs um 22:30. Um nun wirklich den Schlußkurs um 22:00 zu bekommen, müsste man den Schlußkurs der Kerze vor! 22:00 nehmen. Dann würde das lauten Close[shift9 +1], denn die Kerze ginge von 21:30 bis 22:00!!
Selbst im M1 würde der CloseKurs mit Close[shift9] zu 22:01 ermittelt werden.
In Deinem o.g. Code könnte das alles noch viel mehr durcheinander geraten, weil der Kerzenindex mittels iBarShift definitiv im TF M1 ermittlet wird und Open[shift9] in dem TimeFrame, mit dem der Chart offen ist. Ist das nicht M1, dann kommt nur Quatsch raus, weil Open[shift9] dann auf eine ganz andere Kerze zeigt.

traderdoc

nobtrade 01.12.16 18:32

Hallo Traderdoc,

vielen Dank für Deine Geduld und Unterstützung.
Bin jetzt super zufrieden mit meinem Indikator und kann mich morgen dann wieder auf Traden konzentrieren...

traderdoc 01.12.16 19:03

Aber ich sage es nochmal:
Damit
shift9 = iBarShift(NULL, 1, StringToTime("09:00"));
ObjectCreate("Eröffnungskurs", OBJ_HLINE, 0,0, Open[shift9]);
bekommst Du nur im TimeFrame M1 die richtigen Ergebnisse.

traderdoc


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