271 lines
7.6 KiB
MQL5
271 lines
7.6 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| EACore.mqh |
| |||
//| Copyright 2025, Your Company Name |
| |||
//| https://www.yoursite.com |
| |||
//+------------------------------------------------------------------+
| |||
#property copyright "Copyright 2025, Your Company Name"
| |||
#property link "https://www.yoursite.com"
| |||
#property version "1.00"
| |||
#property strict
| |||
| |||
#include "EAEvents.mqh"
| |||
#include "EAState.mqh"
| |||
#include "EALogger.mqh"
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Core EA Class |
| |||
//+------------------------------------------------------------------+
| |||
class CEACore
| |||
{
| |||
private:
| |||
CEAEvents* m_events; // Event manager
| |||
CEAState* m_state; // State manager
| |||
CEALogger* m_logger; // Logger instance
| |||
| |||
// Core configuration
| |||
string m_symbol; // Trading symbol
| |||
ENUM_TIMEFRAMES m_timeframe; // Chart timeframe
| |||
| |||
// Core flags
| |||
bool m_isInitialized;
| |||
bool m_isBacktest;
| |||
| |||
public:
| |||
CEACore();
| |||
~CEACore();
| |||
| |||
// Core methods
| |||
bool Initialize(string symbol, ENUM_TIMEFRAMES timeframe, bool isBacktest = false);
| |||
void Deinitialize();
| |||
| |||
// Event processing
| |||
void OnTick();
| |||
void OnTimer();
| |||
void OnTrade();
| |||
| |||
// State management
| |||
bool IsInitialized() const { return m_isInitialized; }
| |||
| |||
private:
| |||
// Internal methods
| |||
bool InitializeComponents();
| |||
void CleanupComponents();
| |||
| |||
// Event handlers
| |||
void HandleTick();
| |||
void HandleTimer();
| |||
void HandleTrade();
| |||
};
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Constructor |
| |||
//+------------------------------------------------------------------+
| |||
CEACore::CEACore() : m_events(NULL), m_state(NULL), m_logger(NULL),
| |||
m_isInitialized(false), m_isBacktest(false), m_symbol(""), m_timeframe(PERIOD_CURRENT)
| |||
{
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Destructor |
| |||
//+------------------------------------------------------------------+
| |||
CEACore::~CEACore()
| |||
{
| |||
Deinitialize();
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Initialize core EA components |
| |||
//+------------------------------------------------------------------+
| |||
bool CEACore::Initialize(string symbol, ENUM_TIMEFRAMES timeframe, bool isBacktest = false)
| |||
{
| |||
if (m_isInitialized)
| |||
{
| |||
Print("EA Core already initialized");
| |||
return true;
| |||
}
| |||
| |||
m_symbol = symbol;
| |||
m_timeframe = timeframe;
| |||
m_isBacktest = isBacktest;
| |||
| |||
if (!InitializeComponents())
| |||
{
| |||
Print("Failed to initialize EA Core components");
| |||
return false;
| |||
}
| |||
| |||
m_isInitialized = true;
| |||
Print("EA Core initialized successfully");
| |||
return true;
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Deinitialize EA core |
| |||
//+------------------------------------------------------------------+
| |||
void CEACore::Deinitialize()
| |||
{
| |||
if (!m_isInitialized)
| |||
return;
| |||
| |||
CleanupComponents();
| |||
m_isInitialized = false;
| |||
Print("EA Core deinitialized");
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Initialize all components |
| |||
//+------------------------------------------------------------------+
| |||
bool CEACore::InitializeComponents()
| |||
{
| |||
// Initialize logger first
| |||
m_logger = new CEALogger();
| |||
if (!m_logger.Initialize("EALog.txt"))
| |||
{
| |||
Print("Failed to initialize logger");
| |||
return false;
| |||
}
| |||
| |||
// Initialize state manager
| |||
m_state = new CEAState();
| |||
if (!m_state.Initialize(m_logger))
| |||
{
| |||
Print("Failed to initialize state manager");
| |||
return false;
| |||
}
| |||
| |||
// Initialize event system
| |||
m_events = new CEAEvents();
| |||
if (!m_events.Initialize(m_logger, m_state))
| |||
{
| |||
Print("Failed to initialize event system");
| |||
return false;
| |||
}
| |||
| |||
return true;
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Cleanup all components |
| |||
//+------------------------------------------------------------------+
| |||
void CEACore::CleanupComponents()
| |||
{
| |||
if (m_events != NULL)
| |||
{
| |||
m_events.Deinitialize();
| |||
delete m_events;
| |||
m_events = NULL;
| |||
}
| |||
| |||
if (m_state != NULL)
| |||
{
| |||
m_state.Deinitialize();
| |||
delete m_state;
| |||
m_state = NULL;
| |||
}
| |||
| |||
if (m_logger != NULL)
| |||
{
| |||
m_logger.Deinitialize();
| |||
delete m_logger;
| |||
m_logger = NULL;
| |||
}
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Process tick event |
| |||
//+------------------------------------------------------------------+
| |||
void CEACore::OnTick()
| |||
{
| |||
if (!m_isInitialized)
| |||
return;
| |||
| |||
try
| |||
{
| |||
HandleTick();
| |||
}
| |||
catch (const string error)
| |||
{
| |||
if (m_logger != NULL)
| |||
m_logger.LogError("Error in OnTick: " + error);
| |||
}
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Process timer event |
| |||
//+------------------------------------------------------------------+
| |||
void CEACore::OnTimer()
| |||
{
| |||
if (!m_isInitialized)
| |||
return;
| |||
| |||
try
| |||
{
| |||
HandleTimer();
| |||
}
| |||
catch (const string error)
| |||
{
| |||
if (m_logger != NULL)
| |||
m_logger.LogError("Error in OnTimer: " + error);
| |||
}
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Process trade event |
| |||
//+------------------------------------------------------------------+
| |||
void CEACore::OnTrade()
| |||
{
| |||
if (!m_isInitialized)
| |||
return;
| |||
| |||
try
| |||
{
| |||
HandleTrade();
| |||
}
| |||
catch (const string error)
| |||
{
| |||
if (m_logger != NULL)
| |||
m_logger.LogError("Error in OnTrade: " + error);
| |||
}
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Handle tick processing |
| |||
//+------------------------------------------------------------------+
| |||
void CEACore::HandleTick()
| |||
{
| |||
// Process pending events
| |||
if (m_events != NULL)
| |||
m_events.ProcessTick();
| |||
| |||
// Update state with latest market data
| |||
if (m_state != NULL)
| |||
m_state.UpdateMarketData(m_symbol, m_timeframe);
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Handle timer processing |
| |||
//+------------------------------------------------------------------+
| |||
void CEACore::HandleTimer()
| |||
{
| |||
// Process timed events
| |||
if (m_events != NULL)
| |||
m_events.ProcessTimer();
| |||
| |||
// Update state periodically
| |||
if (m_state != NULL)
| |||
m_state.UpdateIndicators();
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Handle trade processing |
| |||
//+------------------------------------------------------------------+
| |||
void CEACore::HandleTrade()
| |||
{
| |||
// Process trade-related events
| |||
if (m_events != NULL)
| |||
m_events.ProcessTrade();
| |||
| |||
// Update state with latest trade information
| |||
if (m_state != NULL)
| |||
m_state.UpdateTradeState();
| |||
}
|