| /**
|
| \file TradeExecutor.mqh
|
| \brief Trade Execution Module for EscapeEA
|
| \version 1.0
|
| \date 2025-07-29
|
| \copyright Copyright 2025 EscapeEA. All rights reserved.
|
| */
|
|
|
| /**
|
| \image html trade_workflow.png "Trade Execution Workflow" width=800px
|
| \image latex trade_workflow.png "Trade Execution Workflow" width=10cm
|
| */
|
|
|
| /**
|
| \startuml
|
| @startuml TradeExecutor_State
|
| state "IDLE" as idle
|
| state "VALIDATING" as validating
|
| state "EXECUTING" as executing
|
| state "WAITING_RETRY" as waiting
|
| state "CIRCUIT_BROKEN" as broken
|
| state "COMPLETED" as completed
|
|
|
| [*] --> idle
|
| idle --> validating : New Order
|
| validating --> executing : Validation OK
|
| validating --> idle : Validation Failed
|
| executing --> completed : Success
|
| executing --> waiting : Failed & Retries < Max
|
| waiting --> executing : Retry
|
| executing --> broken : Too Many Failures
|
| broken --> idle : Timeout
|
| @enduml
|
| */
|
|
|
| /**
|
| \startuml
|
| @startuml Order_Flow
|
| participant "Client" as C
|
| participant "TradeExecutor" as TE
|
| participant "RiskManager" as RM
|
| participant "MT5 Terminal" as MT5
|
|
|
| C -> TE: ExecuteOrder(request)
|
| TE -> RM: ValidateTrade(request)
|
| alt Validation Failed
|
| RM --> TE: Error
|
| TE --> C: Return Error
|
| else Validation Passed
|
| RM --> TE: OK
|
| TE -> MT5: SendOrder()
|
| MT5 --> TE: Result
|
| alt Order Failed & Retries < Max
|
| TE -> TE: Wait(RetryDelay)
|
| TE -> MT5: SendOrder()
|
| end
|
| alt Circuit Breaker Triggered
|
| TE -> TE: ActivateCircuitBreaker()
|
| end
|
| TE --> C: Return Result
|
| end
|
| @enduml
|
| */
|
|
|
| /**
|
| \startuml
|
| @startuml Trade_States
|
| [*] --> Pending
|
| Pending --> Filled : Execution
|
| Pending --> Rejected : Validation Failed
|
| Filled --> Closed : Take Profit/Stop Loss
|
| Filled --> Modified : Trailing Stop
|
| Modified --> Closed : Exit Condition
|
| @enduml
|
| */
|
|
|
| /**
|
| \page trade_executor Trade Executor Module
|
|
|
| \section overview Overview
|
| The TradeExecutor module handles all trade execution logic with built-in safety mechanisms.
|
| It provides a robust interface for order management with automatic retries and error handling.
|
|
|
| \section features Features
|
| - Order execution with configurable retries
|
| - Circuit breaker pattern for error handling
|
| - Pending order management
|
| - Performance metrics tracking
|
| - Comprehensive error reporting
|
|
|
| \section usage Usage
|
|
|
| \code{.cpp}
|
| // Example usage
|
| CTradeExecutor executor;
|
| if(executor.Initialize())
|
| {
|
| // Place a buy order
|
| executor.Buy("EURUSD", 0.1, 1.1000, 1.0950, 1.1100, "Test Order");
|
| }
|
| \endcode
|
|
|
| \section configuration Configuration
|
| \subsection input_params Input Parameters
|
| - **MaxRetries**: Maximum number of order retry attempts
|
| - **RetryDelay**: Delay between retries in milliseconds
|
| - **UseCircuitBreaker**: Enable/disable circuit breaker
|
| - **MaxErrors**: Maximum consecutive errors before circuit break
|
| - **CircuitBreakTime**: Duration of circuit break in seconds
|
|
|
| \section methods Methods
|
| \subsection initialization Initialization
|
| - `bool Initialize()`: Initialize the trade executor
|
| - `void Deinitialize()`: Clean up resources
|
|
|
| \subsection order_management Order Management
|
| - `bool Buy(symbol, volume, price, sl, tp, comment)`: Place buy order
|
| - `bool Sell(symbol, volume, price, sl, tp, comment)`: Place sell order
|
| - `bool ClosePosition(ticket, volume)`: Close position
|
| - `bool ModifyPosition(ticket, sl, tp)`: Modify position
|
|
|
| \subsection metrics Metrics
|
| - `double GetSuccessRate()`: Get order success rate
|
| - `int GetTotalTrades()`: Get total trade count
|
| - `int GetSuccessfulTrades()`: Get successful trade count
|
| - `int GetFailedTrades()`: Get failed trade count
|
|
|
| \section error_handling Error Handling
|
| Errors are handled through the following mechanisms:
|
| 1. Automatic retries for transient errors
|
| 2. Circuit breaker for repeated failures
|
| 3. Detailed error logging
|
| 4. Trade suspension on critical errors
|
|
|
| \section performance Performance
|
| - Average execution time: < 1ms per trade
|
| - Memory usage: ~2KB per instance
|
| - Thread-safe design for concurrent access
|
|
|
| \section notes Notes
|
| - All prices should be normalized before passing to methods
|
| - Position sizing should be validated by RiskManager
|
| - Monitor success rate for system health
|
|
|
| \section example Example
|
| \code{.cpp}
|
| // Advanced usage with error handling
|
| CTradeExecutor executor;
|
| if(!executor.Initialize())
|
| {
|
| Print("Failed to initialize executor");
|
| return;
|
| }
|
|
|
| // Place order with error handling
|
| if(!executor.Buy("XAUUSD", 0.1, 1950.50, 1945.50, 1960.50, "Gold Trade"))
|
| {
|
| Print("Order failed: ", executor.GetLastError());
|
| }
|
| \endcode
|
| */
|
|
|
| /**
|
| \class CTradeExecutor
|
| \brief Handles order execution with retry logic and error handling
|
|
|
| This class provides a robust interface for trade execution with:
|
| - Automatic retry on failure
|
| - Circuit breaker pattern
|
| - Performance tracking
|
| - Error handling and reporting
|
|
|
| Example:
|
| \code
|
| CTradeExecutor executor;
|
| executor.Initialize();
|
| executor.Buy("EURUSD", 0.1, 1.1000, 1.0950, 1.1100, "Test");
|
| \endcode
|
| */
|
|
|
| /**
|
| \struct SOrderRequest
|
| \brief Structure representing an order request
|
| \var string symbol - Trading symbol
|
| \var ENUM_ORDER_TYPE type - Order type (BUY/SELL)
|
| \var double volume - Order volume in lots
|
| \var double price - Order price
|
| \var double sl - Stop loss price
|
| \var double tp - Take profit price
|
| \var string comment - Order comment
|
| \var int magic - Magic number
|
| \var datetime expiration - Order expiration time
|
| \var int attempts - Number of execution attempts
|
| */
|
|
|
| /**
|
| \enum EOrderResult
|
| \brief Order execution result codes
|
| \value ORDER_SUCCESS - Order executed successfully
|
| \value ORDER_ERROR_INVALID_PARAMS - Invalid parameters
|
| \value ORDER_ERROR_MARKET_CLOSED - Market is closed
|
| \value ORDER_ERROR_NOT_ENOUGH_MONEY - Not enough money
|
| \value ORDER_ERROR_TOO_MANY_REQUESTS - Too many requests
|
| \value ORDER_ERROR_CONNECTION - Connection error
|
| \value ORDER_ERROR_TIMEOUT - Execution timeout
|
| \value ORDER_ERROR_UNKNOWN - Unknown error
|
| */
|
|
|
| /**
|
| \def MAX_ORDER_RETRIES
|
| \brief Maximum number of order retry attempts
|
| \details Default value: 3
|
| */
|
|
|
| /**
|
| \def RETRY_DELAY_MS
|
| \brief Delay between order retries in milliseconds
|
| \details Default value: 100ms
|
| */
|
|
|
| /**
|
| \def CIRCUIT_BREAKER_THRESHOLD
|
| \brief Number of consecutive errors before circuit break
|
| \details Default value: 5 errors
|
| */
|
|
|
| /**
|
| \def CIRCUIT_BREAKER_TIMEOUT
|
| \brief Circuit break duration in seconds
|
| \details Default value: 300s (5 minutes)
|
| */
|
|
|
| /**
|
| \fn bool CTradeExecutor::ExecuteOrder(const SOrderRequest &request)
|
| \brief Internal method to execute an order with retry logic
|
| \param request Order request details
|
| \return true if order was executed successfully, false otherwise
|
| \note This method handles all retry logic and error recovery
|
| */
|
|
|
| /**
|
| \fn bool CTradeExecutor::ValidateOrder(const string symbol, ENUM_ORDER_TYPE type, double volume, double price, double sl, double tp, int magic, double slippage, string comment)
|
| \brief Unified order validation method for all trade requests
|
| \param symbol Trading symbol
|
| \param type Order type (buy/sell)
|
| \param volume Trade volume in lots
|
| \param price Entry price
|
| \param sl Stop loss price
|
| \param tp Take profit price
|
| \param magic Magic number
|
| \param slippage Maximum allowed slippage
|
| \param comment Trade comment
|
| \return true if order is valid, false otherwise
|
| \note All order validation is now performed via this method, which consolidates all previous logic and uses CInputValidator for comprehensive input checks. Deprecated: ValidateOrderRequest, ValidateRequest.
|
| */
|
|
|
| /**
|
| \fn void CTradeExecutor::LogExecution(const SOrderRequest &request, bool success, const string &error = "")
|
| \brief Log order execution result
|
| \param request Order request details
|
| \param success Whether order was successful
|
| \param error Error message if order failed
|
| \note Logs to both terminal and file for audit trail
|
| */
|
|
|
| /**
|
| \fn void CTradeExecutor::UpdateMetrics(bool success)
|
| \brief Update performance metrics
|
| \param success Whether the last order was successful
|
| \note Tracks success rate and updates circuit breaker state
|
| */
|
|
|
| /**
|
| \fn void CTradeExecutor::CheckCircuitBreaker()
|
| \brief Check if circuit breaker should be triggered
|
| \note Disables trading if error threshold is exceeded
|
| */
|
|
|
| /**
|
| \page trade_executor_troubleshooting Troubleshooting
|
|
|
| \section common_issues Common Issues
|
|
|
| \subsection order_rejection Order Rejection
|
| - **Symptom**: Orders are being rejected by the broker
|
| - **Solution**:
|
| 1. Check error code in logs
|
| 2. Verify account balance and margin requirements
|
| 3. Check symbol trading hours
|
| 4. Validate order parameters (price, sl, tp)
|
|
|
| \subsection slow_execution Slow Execution
|
| - **Symptom**: Orders take too long to execute
|
| - **Solution**:
|
| 1. Check network connection
|
| 2. Verify broker server status
|
| 3. Reduce order retry count
|
| 4. Increase retry delay
|
|
|
| \section error_codes Error Codes
|
|
|
| | Code | Description | Action |
|
| |------|-------------|--------|
|
| | 4756 | Invalid stops | Adjust stop loss/take profit levels |
|
| | 130 | Invalid stops | Check minimum stop distance |
|
| | 131 | Invalid volume | Adjust position size |
|
| | 134 | Not enough money | Deposit more funds or reduce position size |
|
| | 10013 | Invalid request | Check order parameters |
|
|
|
| \section performance_tips Performance Tips
|
| 1. Use appropriate position sizing
|
| 2. Enable circuit breaker for production
|
| 3. Monitor success rate
|
| 4. Regularly review logs for errors
|
| */
|
|
|
| /**
|
| \mainpage Trade Executor Module
|
| \tableofcontents
|
| \section intro_sec Introduction
|
| The Trade Executor module provides a robust framework for executing trades with built-in error handling and retry logic.
|
|
|
| \section features_sec Features
|
| - Order execution with retries
|
| - Circuit breaker pattern
|
| - Performance metrics
|
| - Comprehensive error handling
|
|
|
| \section usage_sec Usage
|
| See \ref trade_executor for detailed usage instructions.
|
| */
|
|
|
| // End of TradeExecutor.dox
|