192 lines
5.3 KiB
Markdown
192 lines
5.3 KiB
Markdown
# TradeExecutor Component Documentation
| |||
| |||
## Overview
| |||
The TradeExecutor is the core component responsible for executing trades with safety checks, retry logic, and circuit breaker patterns to ensure reliable trade execution.
| |||
| |||
## Class Diagram
| |||
| |||
```mermaid
| |||
classDiagram
| |||
class CTradeExecutor {
| |||
+bool Initialize()
| |||
+void Deinitialize()
| |||
+bool Buy()
| |||
+bool Sell()
| |||
+bool CloseAllPositions()
| |||
+bool IsCircuitBreakerActive()
| |||
+bool CheckCircuitBreaker()
| |||
-bool ValidateTrade()
| |||
-bool ExecuteTrade()
| |||
-void UpdateTradeStats()
| |||
-bool m_isInitialized
| |||
-int m_magicNumber
| |||
-int m_retryCount
| |||
-datetime m_circuitBreakerTime
| |||
}
| |||
```
| |||
| |||
## Public Methods
| |||
| |||
### Initialize
| |||
```cpp
| |||
bool Initialize()
| |||
```
| |||
Initializes the TradeExecutor with default values and performs system checks.
| |||
| |||
**Returns:**
| |||
- `true` if initialization was successful
| |||
- `false` if initialization failed
| |||
| |||
---
| |||
| |||
### Deinitialize
| |||
```cpp
| |||
void Deinitialize()
| |||
```
| |||
Cleans up resources and resets the TradeExecutor to its initial state.
| |||
| |||
---
| |||
| |||
### Buy
| |||
```cpp
| |||
bool Buy(double volume, double stopLoss = 0, double takeProfit = 0, string comment = "")
| |||
```
| |||
Executes a buy order with the specified parameters.
| |||
| |||
**Parameters:**
| |||
- `volume`: Trade volume in lots
| |||
- `stopLoss`: Stop loss price (0 = no stop loss)
| |||
- `takeProfit`: Take profit price (0 = no take profit)
| |||
- `comment`: Trade comment
| |||
| |||
**Returns:**
| |||
- `true` if the order was placed successfully
| |||
- `false` if the order failed
| |||
| |||
---
| |||
| |||
## Unified Order Validation
| |||
| |||
All order validation is now performed exclusively via the `ValidateOrder` method. This function consolidates all previous validation logic (including what was in `ValidateOrderRequest` and `ValidateRequest`) and leverages `CInputValidator` for robust, consistent, and traceable validation of all input parameters and trade conditions.
| |||
| |||
**Key Points:**
| |||
- No other validation functions should be called for order execution.
| |||
- All input checks (symbol, volume, price, stops, magic, slippage, comment) are handled by `ValidateOrder`.
| |||
- `CInputValidator` is used internally for all parameter checks, ensuring maintainability and extensibility.
| |||
- Error messages and traceability are improved for debugging and audit.
| |||
| |||
**Usage Example:**
| |||
```cpp
| |||
if(!ValidateOrder(symbol, type, volume, price, sl, tp, magic, slippage, comment)) {
| |||
Print("Order validation failed: ", GetLastError());
| |||
return false;
| |||
}
| |||
```
| |||
| |||
### Sell
| |||
```cpp
| |||
bool Sell(double volume, double stopLoss = 0, double takeProfit = 0, string comment = "")
| |||
```
| |||
Executes a sell order with the specified parameters.
| |||
| |||
**Parameters:**
| |||
- `volume`: Trade volume in lots
| |||
- `stopLoss`: Stop loss price (0 = no stop loss)
| |||
- `takeProfit`: Take profit price (0 = no take profit)
| |||
- `comment`: Trade comment
| |||
| |||
**Returns:**
| |||
- `true` if the order was placed successfully
| |||
- `false` if the order failed
| |||
| |||
---
| |||
| |||
### CloseAllPositions
| |||
```cpp
| |||
bool CloseAllPositions()
| |||
```
| |||
Closes all open positions for the current symbol and magic number.
| |||
| |||
**Returns:**
| |||
- `true` if all positions were closed successfully
| |||
- `false` if any position failed to close
| |||
| |||
---
| |||
| |||
### IsCircuitBreakerActive
| |||
```cpp
| |||
bool IsCircuitBreakerActive()
| |||
```
| |||
Checks if the circuit breaker is currently active.
| |||
| |||
**Returns:**
| |||
- `true` if the circuit breaker is active
| |||
- `false` otherwise
| |||
| |||
---
| |||
| |||
### CheckCircuitBreaker
| |||
```cpp
| |||
bool CheckCircuitBreaker()
| |||
```
| |||
Checks if the circuit breaker can be reset.
| |||
| |||
**Returns:**
| |||
- `true` if the circuit breaker was reset
| |||
- `false` if it's still too early to reset
| |||
| |||
## Error Handling
| |||
| |||
The TradeExecutor implements several error handling mechanisms:
| |||
| |||
1. **Input Validation**: All input parameters are validated before processing using the unified `ValidateOrder` method, which integrates CInputValidator for comprehensive checks. All previous validation methods (ValidateOrderRequest, ValidateRequest) are deprecated and removed. See the new section below for details.
| |||
2. **Retry Logic**: Failed trade attempts are automatically retried (configurable)
| |||
3. **Circuit Breaker**: Automatically pauses trading after multiple failures
| |||
4. **Error Logging**: Detailed error messages are logged for debugging
| |||
| |||
## Usage Example
| |||
| |||
```cpp
| |||
// Initialize the TradeExecutor
| |||
CTradeExecutor executor;
| |||
if(!executor.Initialize())
| |||
{
| |||
Print("Failed to initialize TradeExecutor!");
| |||
return;
| |||
}
| |||
| |||
// Execute a buy order
| |||
double volume = 0.1;
| |||
double stopLoss = 1.2000;
| |||
double takeProfit = 1.2100;
| |||
| |||
if(executor.Buy(volume, stopLoss, takeProfit, "Trend Following Buy"))
| |||
{
| |||
Print("Buy order placed successfully!");
| |||
}
| |||
else
| |||
{
| |||
Print("Failed to place buy order!");
| |||
}
| |||
```
| |||
| |||
## Best Practices
| |||
| |||
1. Always check the return value of trade execution methods
| |||
2. Implement proper error handling for trade execution failures
| |||
3. Monitor the circuit breaker status to prevent excessive failed trades
| |||
4. Use appropriate logging levels for different types of messages
| |||
| |||
## Troubleshooting
| |||
| |||
### Common Issues
| |||
| |||
1. **Order Rejections**: Check account balance, margin requirements, and trading permissions
| |||
2. **Invalid Stops/Targets**: Ensure stop loss and take profit levels are valid for the current price
| |||
3. **Circuit Breaker Activation**: Review logs to identify the cause of multiple trade failures
| |||
| |||
## Performance Considerations
| |||
| |||
- The TradeExecutor is optimized for low-latency execution
| |||
- Circuit breaker checks add minimal overhead
| |||
- Logging can be adjusted based on performance requirements
|