mql5/Experts/_FrameWork/Market/TimeFrameDataSeries.mqh

90 lines
3.2 KiB
MQL5

2026-09-30 09:06:59 +02:00
//+------------------------------------------------------------------+
//| 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 <Collection/DynamicArrayList.mqh>
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class TimeFrameDataSeries
{
private:
public:
string symbol;
ENUM_TIMEFRAMES tf;
Candles* bar;
CArrayList<Indicator*>* 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<Indicator*>();
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;
}
//+------------------------------------------------------------------+