//+------------------------------------------------------------------+ //| TimeFrameDataSeries.mqh | //| Copyright 2026, Concrete Goonies | //| https://concrete-goonies.web.app | //+------------------------------------------------------------------+ #property copyright "Copyright 2026, Concrete Goonies" #property link "https://concrete-goonies.web.app" #property version "1.00" #include "Candles.mqh" #include "Indicator.mqh" #include "../Configs/EAConfig.mqh" #include //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class TimeFrameDataSeries { private: public: string symbol; ENUM_TIMEFRAMES tf; Candles* bar; CArrayList* indicators; bool relaunchInitialized; ENUM_TIME_FETCH_TYPE fetchType; int fetchCount; bool relaunchOnNewPeriod; datetime nextRelaunchTime; bool isReset; TimeFrameDataSeries(); ~TimeFrameDataSeries(); // Update all underlying data bool Update(int count = 3); void AddIndicator(Indicator* ind) { indicators.Add(ind); } int TotalBars() const { return bar.Size(); } double Close(int pShift) { return bar.Close(pShift); } double High(int pShift) { return bar.High(pShift); } double Low(int pShift) { return bar.Low(pShift); } double Open(int pShift) { return bar.Open(pShift); } datetime Time(int pShift) { return bar.Time(pShift); } int IndicatorCount() { return indicators.Size(); } Indicator* GetIndicator(int idx) { return indicators.At(idx); } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ TimeFrameDataSeries::TimeFrameDataSeries(): bar(NULL), relaunchOnNewPeriod(false), isReset(false), nextRelaunchTime(0) { indicators = new CArrayList(); bar = new Candles(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ TimeFrameDataSeries::~TimeFrameDataSeries() { for(int s = 0; s < indicators.Size(); s++) delete indicators.At(s); delete indicators; delete bar; } //+------------------------------------------------------------------+ // Update all underlying data bool TimeFrameDataSeries::Update(int count = 3) { //Print("TimeFrameDataSeries: ",count); if(bar == NULL || indicators == NULL) return false; if(!bar.Update(count)) return false;/**/ for(int i = 0; i < indicators.Size(); i++) indicators.At(i).Update(count); return true; } //+------------------------------------------------------------------+