333 lines
9.4 KiB
Text
333 lines
9.4 KiB
Text
/**
| |||
\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
|