mirror of
https://github.com/dinethlive/dbasket-EA.git
synced 2026-08-26 00:58:11 +00:00
Initial commit: D-Basket EA v2.0 Pro
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
//+------------------------------------------------------------------+
|
||||
//| DBasket_Defines.mqh |
|
||||
//| D-Basket Correlation Hedging EA |
|
||||
//| Constants, Enums, and Macros |
|
||||
//+------------------------------------------------------------------+
|
||||
#property copyright "D-Basket EA"
|
||||
#property version "1.00"
|
||||
#property strict
|
||||
|
||||
#ifndef DBASKET_DEFINES_MQH
|
||||
#define DBASKET_DEFINES_MQH
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| Symbol Configuration |
|
||||
//+------------------------------------------------------------------+
|
||||
#define SYMBOL_AUDCAD 0
|
||||
#define SYMBOL_NZDCAD 1
|
||||
#define SYMBOL_AUDNZD 2
|
||||
#define NUM_SYMBOLS 3
|
||||
|
||||
// Maximum lookback period for correlation calculation
|
||||
#define MAX_LOOKBACK_PERIOD 1000
|
||||
#define MIN_LOOKBACK_PERIOD 50
|
||||
|
||||
// Cache update interval defaults (seconds)
|
||||
#define DEFAULT_CACHE_UPDATE_INTERVAL 30
|
||||
|
||||
// Risk management defaults
|
||||
#define DEFAULT_MAX_DRAWDOWN_PERCENT 15.0
|
||||
#define DEFAULT_DAILY_LOSS_LIMIT 100.0
|
||||
#define DEFAULT_MIN_MARGIN_LEVEL 200.0
|
||||
#define DEFAULT_WARNING_MARGIN_LEVEL 500.0
|
||||
|
||||
// Circuit breaker defaults
|
||||
#define CB_WARNING_DRAWDOWN_PERCENT 8.0
|
||||
#define CB_TRIP_DRAWDOWN_PERCENT 15.0
|
||||
#define CB_MAX_CONSECUTIVE_LOSSES 6
|
||||
|
||||
// Position management
|
||||
#define MAX_OPEN_BASKETS 5
|
||||
#define DEFAULT_MAX_HOLDING_HOURS 24
|
||||
|
||||
// Execution
|
||||
#define DEFAULT_SLIPPAGE_POINTS 10
|
||||
#define MAX_RETRY_ATTEMPTS 3
|
||||
#define RETRY_DELAY_MS 500
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| Enumerations |
|
||||
//+------------------------------------------------------------------+
|
||||
|
||||
//--- Basket Signal Types
|
||||
enum ENUM_BASKET_SIGNAL
|
||||
{
|
||||
SIGNAL_NONE = 0, // No signal
|
||||
SIGNAL_LONG_BASKET, // Long basket (expect AUDNZD to rise)
|
||||
SIGNAL_SHORT_BASKET, // Short basket (expect AUDNZD to fall)
|
||||
SIGNAL_EXIT // Exit existing basket
|
||||
};
|
||||
|
||||
//--- Basket State
|
||||
enum ENUM_BASKET_STATE
|
||||
{
|
||||
BASKET_NONE = 0, // No active basket
|
||||
BASKET_ENTRY_PENDING, // Entry signal detected, awaiting execution
|
||||
BASKET_OPEN, // Basket fully opened
|
||||
BASKET_PARTIAL, // Only some legs opened (error state)
|
||||
BASKET_EXIT_PENDING, // Exit signal detected, closing in progress
|
||||
BASKET_CLOSED // Basket closed, ready for next cycle
|
||||
};
|
||||
|
||||
//--- Circuit Breaker States
|
||||
enum ENUM_CIRCUIT_BREAKER_STATE
|
||||
{
|
||||
CB_NORMAL = 0, // Trading allowed
|
||||
CB_WARNING, // Warning issued, reduced operations
|
||||
CB_TRIPPED // Circuit breaker active, trading halted
|
||||
};
|
||||
|
||||
//--- Logging Levels
|
||||
enum ENUM_LOG_LEVEL
|
||||
{
|
||||
LOG_LEVEL_NONE = 0, // No logging
|
||||
LOG_LEVEL_ERROR, // Critical errors only
|
||||
LOG_LEVEL_WARNING, // Errors and warnings
|
||||
LOG_LEVEL_INFO, // Normal operations
|
||||
LOG_LEVEL_DEBUG // Detailed debugging
|
||||
};
|
||||
|
||||
//--- Position Sizing Modes
|
||||
enum ENUM_SIZING_MODE
|
||||
{
|
||||
SIZING_FIXED = 0, // Fixed lot size
|
||||
SIZING_RISK_BASED // Risk-based position sizing
|
||||
};
|
||||
|
||||
//--- Exit Reasons
|
||||
enum ENUM_EXIT_REASON
|
||||
{
|
||||
EXIT_NONE = 0, // No exit reason
|
||||
EXIT_MEAN_REVERSION, // Z-score returned to exit threshold
|
||||
EXIT_TAKE_PROFIT, // Take profit target reached
|
||||
EXIT_STOP_LOSS, // Stop loss triggered
|
||||
EXIT_MAX_TIME, // Maximum holding time exceeded
|
||||
EXIT_CORRELATION_BREAK, // Correlation dropped below minimum
|
||||
EXIT_RISK_LIMIT, // Risk limit breached
|
||||
EXIT_EMERGENCY, // Emergency exit (margin, massive loss)
|
||||
EXIT_MANUAL // Manual close request
|
||||
};
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| Helper Macros |
|
||||
//+------------------------------------------------------------------+
|
||||
|
||||
// Get opposite order type
|
||||
#define OPPOSITE_ORDER_TYPE(type) ((type) == ORDER_TYPE_BUY ? ORDER_TYPE_SELL : ORDER_TYPE_BUY)
|
||||
|
||||
// Check if value is valid (not NaN or INF)
|
||||
#define IS_VALID_DOUBLE(x) (!MathIsValidNumber(x) ? false : ((x) != EMPTY_VALUE))
|
||||
|
||||
// Safe division to avoid divide by zero
|
||||
#define SAFE_DIVIDE(num, den) ((den) == 0 ? 0 : (num) / (den))
|
||||
|
||||
// Convert pips to points (for 5-digit brokers)
|
||||
#define PIPS_TO_POINTS(pips, symbol) ((int)((pips) / SymbolInfoDouble(symbol, SYMBOL_POINT) * 10))
|
||||
|
||||
// Clamp value within range
|
||||
#define CLAMP(val, minVal, maxVal) (MathMax((minVal), MathMin((maxVal), (val))))
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| String Constants |
|
||||
//+------------------------------------------------------------------+
|
||||
#define EA_NAME "D-Basket Correlation Hedging EA"
|
||||
#define EA_VERSION "1.00"
|
||||
#define EA_COPYRIGHT "2024"
|
||||
|
||||
// Default symbol names (without suffix)
|
||||
#define DEFAULT_SYMBOL_AUDCAD "AUDCAD"
|
||||
#define DEFAULT_SYMBOL_NZDCAD "NZDCAD"
|
||||
#define DEFAULT_SYMBOL_AUDNZD "AUDNZD"
|
||||
|
||||
// Log file prefix
|
||||
#define LOG_FILE_PREFIX "DBasket_"
|
||||
|
||||
// Position comment prefix
|
||||
#define BASKET_COMMENT_PREFIX "DBasket_"
|
||||
|
||||
#endif // DBASKET_DEFINES_MQH
|
||||
//+------------------------------------------------------------------+
|
||||
Reference in New Issue
Block a user