192 líneas
5,3 KiB
Markdown
192 líneas
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
|