|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Min und Max über bestimmten Zeitraum
Nachdem ich die Erkennung von benutzerdefinierten Zeiten endlich hinbekommen habe, kriege ich jetzt neue Schwierigkeiten mit der Kalkulation von Min/Max (oder High/Low) Werten für diesen Zeitraum. (Dummerweise sind wohl alle entweder nur an glatten H1 Werten oder nur in einem einzigen Zeitfenster interessiert, also alles, was an Beispielen dienen könnte, half mir nicht.)
Die Aufgabe: High/Low zwischen 16:30 und 17:30 ermitteln. Das Problem: im jetzigen Code fehlt mir eine halbe Stunde wegen PERIOD_M30 Code:
static double Max, Min; for(i=limit;i>=0;i--) { // extern values: string RStartHour = "16:30"; string RStopHour = "17:30"; // date string format looks like this: "2018.03.23 16:30" string RStartTime=( TimeYear(Time[i])+"."+TimeMonth(Time[i]) +"."+TimeDay(Time[i]) +" "+RStartHour ); string RStopTime=( TimeYear(Time[i])+"."+TimeMonth(Time[i]) +"."+TimeDay(Time[i]) +" "+RStopHour ); if( (TimeDayOfWeek(Time[i])>=1 && TimeDayOfWeek(Time[i])<=5) && Time[i]>=StringToTime(RStartTime) && Time[i]<StringToTime(RStopTime) ) { Max=iHigh(NULL,PERIOD_M30,iBarShift(NULL,PERIOD_M30,Time[i],false)); Min=iLow(NULL,PERIOD_M30,iBarShift(NULL,PERIOD_M30,Time[i],false)); } } |
|
|||
Das erste, das mir mal auffällt, wieso benutzt du hier eine Schleife?
Vielleicht hilft dir das weiter: https://docs.mql4.com/series/ihighest ---Leopold--- |
|
|||
Zitat:
Die Funktionen sind etwas tricky bei der Festlegung der beiden Kerzenpositionen, aber das sollte für Dich machbar sein. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Ich wüßte nicht, wie ich das sonst für täglich Mo-Fr machen sollte. Das ganze ist nur der problematische Ausschnitt aus einem Indikator.
|
|
|||
Zitat:
Code:
// vor der Schleife definiert: int Hval_index, Lval_index; // Werte ermitteln: Hval_index=iHighest(NULL,PERIOD_M1,MODE_HIGH,60,i); Lval_index=iLowest(NULL,PERIOD_M1,MODE_LOW,60,i); Max=High[Hval_index]; Min=Low[Lval_index]; Sind also noch mehr Kommentare Eurerseits erforderlich, um mich auf die richtige Bahn zu bringen - bitte. Danke. |
|
|||
Wozu das i?
Es soll doch das High und Low zwischen 16:30 und 17:30 gefunden werden? D.h. entweder es soll im laufenden Betrieb ab 16:30 ständig bis 17:30 die Extrema gefunden werden, dann läuft das ab 16:30 über folgenden Code. Code:
//zu Beginn zu setzen: double High_Temp = 0; doubke Low_Temp = 100000; if (OldBar != Time[0]) { if (High[1] > High_Temp) High_Temp = High[1]; if (Low[1] < Low_Temp) Low_Temp = Low[1]; OldBar = Time[0]; } Code:
int i = iBarShift(NULL, PERIOD_M1, StringToTime("16:30")); Hval_index = iHighest(NULL, PERIOD_M1, MODE_HIGH, 60, i); Lval_index = iLowest(NULL, PERIOD_M1, MODE_LOW, 60, i); Max = High[Hval_index]; Min = Low[Lval_index];
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
Soll das ganze in einen EA oder Indikator verwendet werden? Bei einem Indikator würdest du schon einen Zähler (i) benötigen. ---Leopold--- |
|
|||
Zitat:
Ich denke zur Zeit noch über die Antworten von traderdoc nach. AVT |
|
|||
Zwischenbericht
Zitat:
Code:
int TotalSecs=(StringToTime(RStopHour)-StringToTime(RStartHour)); int NoOfBars=TotalSecs/60/Period(); // core M1 without /Period() string RStartTime, RStopTime, PStartTime, PStopTime; static double Max, Min; int Hval_index, Lval_index; int i=iBarShift(NULL,PERIOD_M1,StringToTime(RStopHour)); for(i=limit;i>=0;i--) // MUST count down to zero, 250,249 ... 2,1,0 { // day, start, stop conditions // == core M1 calc: //Hval_index = iHighest(NULL,PERIOD_M1,MODE_HIGH,NoOfBars,i+1); //Lval_index = iLowest(NULL,PERIOD_M1,MODE_LOW,NoOfBars,i+1); Hval_index = iHighest(NULL,Period(),MODE_HIGH,NoOfBars,i+1); Lval_index = iLowest(NULL,Period(),MODE_LOW,NoOfBars,i+1); Max = High[Hval_index]; Min = Low[Lval_index]; } Wenn ich NULL,PERIOD_M1 explizit benutze, dann heißt das für mich Berechnung für aktuellen Markt im M1 Chart und nicht in dem gerade geladenen Chart! Spaßeshalber habe ich mal versucht, im Dow-Chart als Symbol statt NULL den Dax einzutragen - und da ging dann alles durcheinander. Sieht danach aus, als wäre iHighest/Lowest hier nicht die erste Wahl. Also, in diesem Zustand ist der Indikator noch unbrauchbar. AVT |
Lesezeichen |
Stichworte |
hoch, hoch tief, max, min, mql4, programmierung, programmierung metatrader, programmierung mql4, tie, zeitraum |
|
|