90 lines
3.2 KiB
MQL5
90 lines
3.2 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| 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;
| |||
}
| |||
//+------------------------------------------------------------------+
|