Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Estoy creando un EA para un amigo basado en tamaños de mecha y fase de mercado usando ADX, ATR y 3 EMA, pero ahora me gustaría escuchar ideas sobre cómo llevar esto al siguiente nivel.
ENUM_MARKET_PHASE AnalyzeMarketPhase() { // Return uncertain if no filters enabled if (!UseTrendFilter && !UseADXFilter && !UseVolatilityFilter) return MARKET_UNCERTAIN; double adxValue = 0 , atrValue = 0 ; double fastMA[], slowMA[], longMA[]; ArraySetAsSeries (fastMA, true ); ArraySetAsSeries (slowMA, true ); ArraySetAsSeries (longMA, true ); // Get ADX value if (UseADXFilter) { double adxBuffer[]; ArraySetAsSeries (adxBuffer, true ); if ( CopyBuffer (adx_Handle, 0 , 0 , 3 , adxBuffer) < 3 ) return MARKET_UNCERTAIN; // Now index 0 is truly the CURRENT bar adxValue = adxBuffer[ 0 ]; bool adxRising = adxBuffer[ 0 ] > adxBuffer[ 1 ] && adxBuffer[ 1 ] > adxBuffer[ 2 ]; } // Get ATR value if (UseVolatilityFilter) { double atrBuffer[]; ArraySetAsSeries (atrBuffer, true ); if ( CopyBuffer (atr_Handle, 0 , 0 , 3 , atrBuffer) < 3 ) return MARKET_UNCERTAIN; atrValue = atrBuffer[ 0 ] / pipValue; } // Get MA values if (UseTrendFilter) { if ( CopyBuffer (fastMA_Handle, 0 , 0 , 3 , fastMA) < 3 || CopyBuffer (slowMA_Handle, 0 , 0 , 3 , slowMA) < 3 || CopyBuffer (longMA_Handle, 0 , 0 , 3 , longMA) < 3 ) return MARKET_UNCERTAIN; } // Check for extreme volatility first if (UseVolatilityFilter && atrValue > ATR_MaxMultiplier * 50 ) return MARKET_HIGH_VOLATILITY; //DX logic with proper gap handling if (UseADXFilter) { // Strong trend: ADX > ADX_MinTrend (typically 25) if (adxValue > ADX_MinTrend) { return DetermineTrendDirection(fastMA, slowMA, longMA); } // Transition zone: Between ADX_MaxRange and ADX_MinTrend (20-25) else if (adxValue >= ADX_MaxRange && adxValue <= ADX_MinTrend) { // In transition zone - check if trend is developing or weakening double adxBuffer[]; if ( CopyBuffer (adx_Handle, 0 , 0 , 3 , adxBuffer) >= 3 ) { bool adxRising = adxBuffer[ 0 ] > adxBuffer[ 1 ] && adxBuffer[ 1 ] > adxBuffer[ 2 ]; bool adxFalling = adxBuffer[ 0 ] < adxBuffer[ 1 ] && adxBuffer[ 1 ] < adxBuffer[ 2 ]; if (adxRising) { // ADX rising in transition zone - potential trend developing return DetermineTrendDirection(fastMA, slowMA, longMA); } else if (adxFalling) { // ADX falling in transition zone - trend weakening return MARKET_SIDEWAYS; } else { // ADX flat in transition zone - uncertain return MARKET_UNCERTAIN; } } return MARKET_UNCERTAIN; } // Clear ranging: ADX < ADX_MaxRange (typically 20) else if (adxValue < ADX_MaxRange) { return MARKET_SIDEWAYS; } } else if (UseTrendFilter) { // If ADX filter disabled but trend filter enabled return DetermineTrendDirection(fastMA, slowMA, longMA); } return MARKET_UNCERTAIN; }