Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4482
Beiträge: 40712
Benutzer: 6.866
Aktive Benutzer: 252
Links: 80
Wir begrüßen unseren neuesten Benutzer: hk0163
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 19 Stunden
- hk0163
vor einem Tag
- magnr1
vor einem Tag
- boypac007
vor 2 Tagen
- Anja
vor 4 Tagen
- ThaScorp

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 80
Gesamt: 81
Team: 0
Team:  
Benutzer:  Alex60
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 29.07.19
Neues Mitglied
 
Registriert seit: Jul 2019
Beiträge: 5
Matze66 befindet sich auf einem aufstrebenden Ast
Standard Breakout bestimmtes Zeitfenster

Hallo,

Ich möchte gerne den Breakout traden von den Kerzen 8 Uhr bis 10 Uhr! Geht der Kurs nach dem erreichen des TP wieder nach unten und bricht nochmals auf Tageshöchstkurs aus, dann möchte ich auch diesen traden!

Der Expert Advisor müsste also von 8 Uhr an bis zur aktuellen Kerze immer das High und das Low erfassen und dann eine Order eröffnen.


Ich habe von traderdoc diesen Codeschnipsel gefunden:

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);

Aber damit funktioniert es nicht! Der Metatrader erkennt immer nur die vergangenen Kerzen, die bei "StringToTime" angegeben sind und nicht bis zur aktuellen Kerze!

Was müßte ich denn bei "09:00" eingeben, so das alle Kerzen von 08:00 bis zur aktuelle Kerze berücksichtigt wären!

Grüße, Matze
  #2 (permalink)  
Alt 30.07.19
Premium Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 362
Leopold befindet sich auf einem aufstrebenden Ast
Standard

Ich kann dir was heraus suchen, wie ich das gemacht habe, komme aber frühestens morgen Abend dazu.

---Leopold---
  #3 (permalink)  
Alt 30.07.19
Neues Mitglied
 
Registriert seit: Jul 2019
Beiträge: 5
Matze66 befindet sich auf einem aufstrebenden Ast
Standard

Hallo Leopold,

Danke, dass wäre nett.

Habe mir inzwischen damit beholfen, dass ich bei 09:00 TimeCurrent() eingefügt habe. Damit funktioniert es eigentlich sehr gut.

Aber bestimmt ist dein Lösungsweg vielversprechender.
  #4 (permalink)  
Alt 31.07.19
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 949
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

https://docs.mql4.com/series/itime
  #5 (permalink)  
Alt 01.08.19
Premium Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 362
Leopold befindet sich auf einem aufstrebenden Ast
Standard

Also bei mir schaut das Folgendermaßen aus:

Beim ersten Tick des Tages führe ich eine "Tagesinitialisierung" durch und unter anderen werden auch die Zeiten Festgelegt:

Code:
Time_RangeBegin         = iTime(MarketCurrent, PERIOD_D1, 0)   + (DayMinute_RangeBegin_I * 60);
Time_RangeEnd           = iTime(MarketCurrent, PERIOD_D1, 0)   + (DayMinute_RangeEnd_I * 60);
Meine Parameter für die Tageszeit sind immer Minuten nach Tagesbeginn, damit kann man besser Parametrieren, weil das nur ein Parameter ist und dieser dann fortlaufend ist.


Dann gehts so weiter:

Code:
if (TickTime >= Time_RangeEnd && Last_TickTime < Time_RangeEnd)
Damit stelle ich sicher, dass der nachfolgende Code auch nur einmal am Ende der Range ausgeführt wird.


Jetzt kommt die Ermittlung von High und Low der Range:

Code:
...
int Shift_RangeBegin = iBarShift(MarketCurrent, 0, Time_RangeBegin, True);
int Shift_RangeEnd   = iBarShift(MarketCurrent, 0, Time_RangeEnd, True) + 1;
         
         if (Shift_RangeBegin > 0 && Shift_RangeEnd > 0)
            {
            int NumberCandles = Shift_RangeBegin - Shift_RangeEnd + 1;
            double RangeHigh  = iHigh  (MarketCurrent, 0, iHighest(MarketCurrent, 0, MODE_HIGH, NumberCandles, Shift_RangeEnd));
            double RangeLow   = iLow   (MarketCurrent, 0, iLowest (MarketCurrent, 0, MODE_LOW,  NumberCandles, Shift_RangeEnd));
...

Zusammengefasst sieht das dann so aus:

Code:
...
if (TagesStartZeit != iTime(MarketCurrent, PERIOD_D1, 0))
   {
   Time_RangeBegin         = iTime(MarketCurrent, PERIOD_D1, 0)   + (DayMinute_RangeBegin_I * 60);
   Time_RangeEnd           = iTime(MarketCurrent, PERIOD_D1, 0)   + (DayMinute_RangeEnd_I * 60);
   ...
   }

if (TickTime >= Time_RangeEnd && Last_TickTime < Time_RangeEnd)
   {
   int Shift_RangeBegin = iBarShift(MarketCurrent, 0, Time_RangeBegin, True);
   int Shift_RangeEnd   = iBarShift(MarketCurrent, 0, Time_RangeEnd, True) + 1;
         
         if (Shift_RangeBegin > 0 && Shift_RangeEnd > 0)
            {
            int NumberCandles = Shift_RangeBegin - Shift_RangeEnd + 1;
            double RangeHigh  = iHigh  (MarketCurrent, 0, iHighest(MarketCurrent, 0, MODE_HIGH, NumberCandles, Shift_RangeEnd));
            double RangeLow   = iLow   (MarketCurrent, 0, iLowest (MarketCurrent, 0, MODE_LOW,  NumberCandles, Shift_RangeEnd));
            ...
            }
   }

---Leopold---
  #6 (permalink)  
Alt 02.08.19
Neues Mitglied
 
Registriert seit: Jul 2019
Beiträge: 5
Matze66 befindet sich auf einem aufstrebenden Ast
Standard

Danke Leopold für deinen sehr ausführlichen Code!
Ich habe das jetzt mal versucht auf ein Rectangle umzusetzen.
Leider wird mir kein Rectangle im Chart angezeigt!

Kannst Du mir sagen, wo hier der Fehler ist?
Wie sieht denn der Code aus, wenn die Daten über 24 Uhr gesammelt werden sollen?
Was muss ich da zusätzlich einfügen?

Grüße, Mathias

siehe bitte Anhang!!!
Weiß leider nicht wie man sonst einen Codeschnipsel eingefügt.
Wenn ich den Code kopiere und so einfüge, wirds unübersichtlich!
Angehängte Grafiken
Dateityp: jpg Codeschnipsel.JPG (85,4 KB, 6x aufgerufen)
  #7 (permalink)  
Alt 02.08.19
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 196
RetepM befindet sich auf einem aufstrebenden Ast
Standard

Hi, den nachfolgenden Code habe ich aus dem Netz. Ein Indikator, Du kannst den Code aber ohne Probleme in einem EA umsetzen. Have fun!

//+------------------------------------------------------------------+
//| ranges.mq4 |
//+------------------------------------------------------------------+

#property indicator_chart_window

//+------------------------------------------------------------------+
extern bool DrawRange = true;
extern string RangeBegin = "00:05";
extern string RangeEnd = "07:30";
extern color RangeColor = clrGreen;
extern bool DrawTrading = true;
extern string TradingBegin = "08:00";
extern string TradingEnd = "16:59";
extern color TradingColor = clrDarkOrange;
extern bool DrawDaily = true;
extern string DailyBegin = "00:05";
extern string DailyEnd = "23:59";
extern color DailyColor = clrLightGray;
extern bool ShowRecBgrd = true;
extern int NumberOfDays = 1;

int dig;
double pnt, spr, tickval;
string ccy;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void init() {
ccy = Symbol();
pnt = MarketInfo(ccy,MODE_POINT);
dig = MarketInfo(ccy,MODE_DIGITS);
spr = MarketInfo(ccy,MODE_SPREAD);
tickval = MarketInfo(ccy,MODE_TICKVALUE);
if (dig == 3 || dig == 5) {
pnt *= 10;
spr /= 10;
tickval *= 10;
}
DeleteObjects();
for (int i=0; i<NumberOfDays; i++) {
CreateObjects("RB"+i, RangeColor);
CreateObjects("TB"+i, TradingColor);
CreateObjects("DB"+i, DailyColor);
}
Comment("");
}

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
void deinit() {
DeleteObjects();
Comment("");
}

//+------------------------------------------------------------------+
void CreateObjects(string no, color cl) {
//+------------------------------------------------------------------+
ObjectCreate(no, OBJ_RECTANGLE, 0, 0,0, 0,0);
ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(no, OBJPROP_COLOR, cl);
ObjectSet(no, OBJPROP_BACK, ShowRecBgrd);
}

//+------------------------------------------------------------------+
void DeleteObjects() {
//+------------------------------------------------------------------+
for (int i=0; i<NumberOfDays; i++) {
ObjectDelete("RB"+i);
ObjectDelete("TB"+i);
ObjectDelete("DB"+i);
}
ObjectDelete("TBup");
ObjectDelete("TBdn");
ObjectDelete("RBup");
ObjectDelete("RBdn");
ObjectDelete("DBup");
ObjectDelete("DBdn");
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
void start() {
datetime dt= TimeCurrent();
for (int i=0; i<NumberOfDays; i++) {
if(DrawRange == true) DrawObjects(dt, "RB"+i, RangeBegin, RangeEnd);
if(DrawTrading == true) DrawObjects(dt, "TB"+i, TradingBegin, TradingEnd);
if(DrawDaily == true) DrawObjects(dt, "DB"+i, DailyBegin, DailyEnd);
dt=decDateTradeDay(dt);
while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
}
}

//+------------------------------------------------------------------+
void DrawObjects(datetime dt, string no, string tb, string te) {
//+------------------------------------------------------------------+
datetime t1, t2;
double p1, p2;
int b1, b2;

t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t2);
p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2, b2)];
p2=Low [Lowest (NULL, 0, MODE_LOW , b1-b2, b2)];
ObjectSet(no, OBJPROP_TIME1 , t1);
ObjectSet(no, OBJPROP_PRICE1, p1);
ObjectSet(no, OBJPROP_TIME2 , t2);
ObjectSet(no, OBJPROP_PRICE2, p2);
ObjectSetText(no,DoubleToStr((p1-p2)/pnt,0));
}

//+------------------------------------------------------------------+
datetime decDateTradeDay (datetime dt) {
//+------------------------------------------------------------------+
int ty=TimeYear(dt);
int tm=TimeMonth(dt);
int td=TimeDay(dt);
int th=TimeHour(dt);
int ti=TimeMinute(dt);

td--;
if (td==0) {
tm--;
if (tm==0) {
ty--;
tm=12;
}
if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28;
if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
}
return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}

//+------------------------------------------------------------------+
  #8 (permalink)  
Alt 02.08.19
Premium Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 362
Leopold befindet sich auf einem aufstrebenden Ast
Standard

Was meinst du mit über 24 Uhr gesammelt werden?

---Leopold---
  #9 (permalink)  
Alt 02.08.19
Neues Mitglied
 
Registriert seit: Jul 2019
Beiträge: 5
Matze66 befindet sich auf einem aufstrebenden Ast
Standard

Leopold, ich hab mich undeutlich ausgedrückt!

Meinte über Nacht!

z.B. 22:00 Uhr - 06:00 Uhr!

Du sagtest ja deine Tagesberechnung fängt bei 00:00 an und Endet um 23:59 Uhr.
Deine Parameter für die Tageszeit sind immer Minuten nach Tagesbeginn,
z. B. 1380 für 23:00 Uhr.
  #10 (permalink)  
Alt 02.08.19
Neues Mitglied
 
Registriert seit: Jul 2019
Beiträge: 5
Matze66 befindet sich auf einem aufstrebenden Ast
Standard

Hallo RetepM!

Danke für den Code!!
Werde Ihn am Wochenende ausprobieren!
Vielen, vielen Dank!!!!
Thema geschlossen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 09:28 Uhr.





Die Suchmaschine - Der Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2020 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2020 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------