135 lines
4.5 KiB
MQL5
135 lines
4.5 KiB
MQL5
//+------------------------------------------------------------------+
| |
//| DataProcessor.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 <Collection/DynamicArraylist.mqh>
| |
#include "../Analysers/AbstractAnalyser.mqh"
| |
#include "../Events/Events/NewBarEvent.mqh"
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
class DataProcessor : public IEventListener
| |
{
| |
private:
| |
EventBus* eventBus;
| |
DataManager* m_data;
| |
| |
CArrayList<AbstractAnalyser*>* analysers;
| |
| |
int FindExist(const string symbol, ENUM_TIMEFRAMES tf);
| |
| |
void RunAnalyser(TimeFrameDataSeries* series, int barIndex)
| |
{
| |
for(int c = 0; c < analysers.Size(); c++)
| |
analysers.At(c).ProcessBar(series, barIndex);
| |
}
| |
| |
public:
| |
DataProcessor(EventBus* p_eventBus, DataManager* data);
| |
~DataProcessor();
| |
void AddAnalyser(AbstractAnalyser* p_analyser);
| |
void Launch();
| |
void Update(string symbol, ENUM_TIMEFRAMES tf);
| |
| |
virtual void OnEvent(AbstractEvent * event) override
| |
{
| |
| |
if(event.GetType() != NEW_BAR)
| |
return;
| |
| |
NewBarEvent* e = (NewBarEvent*)event;
| |
Update(e.GetSymbolName(), e.GetTimeFrame());
| |
}
| |
};
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
DataProcessor::DataProcessor(EventBus* p_eventBus, DataManager* data): eventBus(p_eventBus), m_data(data)
| |
{
| |
analysers = new CArrayList<AbstractAnalyser*>();
| |
| |
}
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
DataProcessor:: ~DataProcessor()
| |
{
| |
delete analysers;
| |
| |
}
| |
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
void DataProcessor::Update(string symbol, ENUM_TIMEFRAMES tf)
| |
{
| |
if(m_data == NULL)
| |
return;
| |
| |
CArrayList<TimeFrameDataSeries*>* rawData = m_data.GetRawData();
| |
int totalSeries = rawData.Size();
| |
| |
for(int i = 0; i < totalSeries; i++)
| |
{
| |
TimeFrameDataSeries* series = rawData.At(i);
| |
| |
if(series.tf != tf || series.symbol != symbol)
| |
continue;
| |
| |
//Check Reset
| |
if(m_data.CheckAndRelaunch(i))
| |
{
| |
series.isReset = false;
| |
for(int k = 0; k < analysers.Size(); k++)
| |
{
| |
analysers.At(k).Reset(series.symbol, series.tf);
| |
}
| |
}
| |
| |
int total = series.TotalBars();
| |
// series.Update(total);
| |
| |
for(int barIdx = 0; barIdx < total; barIdx++)
| |
RunAnalyser(series, barIdx);
| |
}
| |
| |
}
| |
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
void DataProcessor::Launch()
| |
{
| |
if(m_data == NULL)
| |
return;
| |
| |
CArrayList<TimeFrameDataSeries*>* rawData = m_data.GetRawData();
| |
| |
int totalSeries = rawData.Size();
| |
| |
for(int i = 0; i < totalSeries; i++)
| |
{
| |
TimeFrameDataSeries* series = rawData.At(i);
| |
int total = series.TotalBars();
| |
series.Update(total);
| |
| |
for(int barIdx = 0; barIdx < total; barIdx++)
| |
RunAnalyser(series, barIdx);
| |
}
| |
| |
}
| |
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
void DataProcessor::AddAnalyser(AbstractAnalyser* p_analyser)
| |
{
| |
p_analyser.Init(eventBus);
| |
analysers.Add(p_analyser);
| |
}
| |
//+------------------------------------------------------------------+
|