60 lines
2.3 KiB
MQL5
60 lines
2.3 KiB
MQL5
|
//+------------------------------------------------------------------+
|
||
|
//| 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;
|
||
|
}
|
||
|
};
|
||
|
//+------------------------------------------------------------------+
|