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);
| |||
}
| |||
//+------------------------------------------------------------------+
|