//+------------------------------------------------------------------+ //| CExpertAdvisor.mqh | //| Copyright 2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "SoloTrade Official, Solomon" #property link "https://www.mql5.com/en/users/SoloTradeOfficial" #property version "1.00" #property description "THE WORLD MOST INTELLIGENT FOREX AI/ALGO BOTS EVER IN" "HUMAN HISTORY OF FINTECH, BY SOLOMON ESHUN" "\nTrading Bots in MQL5" // Include the files for the parts #include "CRiskManager.mqh" #include "CTradeExecutor.mqh" #include "CTradeSignal.mqh" //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CExpertAdvisor { private: // --- COMPOSITION HAPPENS HERE --- // The EA "has-a" signal, a risk manager, and an executor. CTradeSignal m_signal; CRiskManager m_risk_manager; CTradeExecutor m_trade_executor; public: // The EA's constructor initializes its component parts CExpertAdvisor(string symbol, int magic_number) : m_signal(symbol, magic_number), m_risk_manager(1.0, 5), // 1% risk, 5 trades max m_trade_executor() { Print("Expert Advisor object created and ready."); } // The EA's main logic function void OnTick() { // The EA delegates work to its parts. // 1. It asks its signal component for a signal. // m_signal.CheckSignal(); // Pretend this returns a trade direction ENUM_TRADE_DIRECTION tradeDirection = GetSignalFromSomewhere(); // Fake signal if(tradeDirection != TRADE_DIRECTION_NONE) { // 2. It asks its risk manager component if a trade is allowed. if(m_risk_manager.isTradeAllowed(30.0)) { // 30 pips SL // 3. If everything is OK, it tells its trade executor to place the trade. m_trade_executor.ExecuteBuy(_Symbol, 0.1); } } } // Fake function for demonstration ENUM_TRADE_DIRECTION GetSignalFromSomewhere() { return TRADE_DIRECTION_BUY; } }; //+------------------------------------------------------------------+