Einzelnen Beitrag anzeigen
  #5 (permalink)  
Alt 01.08.19
Leopold Leopold ist offline
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---