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