Estrategia de seguimiento de tendencias utilizando la media móvil EMA doble y el indicador ATR


Fecha de creación: 2023-11-15 15:53:57 Última modificación: 2023-11-15 15:53:57
Copiar: 1 Número de Visitas: 823
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias utilizando la media móvil EMA doble y el indicador ATR

Descripción general

La estrategia utiliza el doble EMA para formar forquillas de oro en el exceso, las forquillas muertas en el vacío y la estrategia de seguimiento de la tendencia clásica, y utiliza el indicador ATR y el indicador ADX para filtrar adicionalmente, para seguir el rastro en una tendencia fuerte y controlar el riesgo en una convulsión.

Principio de estrategia

La estrategia se basa en los siguientes puntos:

  1. El uso de una media EMA de 8 períodos más corta y una media EMA de 20 períodos más larga para formar señales de horquilla dorada y horquilla muerta. La media EMA en sí tiene una naturaleza de seguimiento de tendencia.

  2. El indicador ATR refleja la amplitud de las fluctuaciones recientes. A través de la normalización del indicador ATR, se pueden ajustar dinámicamente las condiciones de filtración del cruce de la línea media del EMA, reduciendo los requisitos cuando se sigue una tendencia fuerte y aumentando los requisitos de filtración en situaciones de crisis, controlando el riesgo.

  3. El indicador ADX determina la fuerza de la tendencia. Cuando el ADX es mayor que 30, se considera que hay una tendencia fuerte, en este momento se detiene la defensa de pérdidas a tiempo.

  4. En el mercado alcista, los forks dorados hacen más, en el mercado bajista, los forks muertos hacen más.

  5. Se filtran las transacciones y se accede a ellas cuando aumentan.

  6. El índice de USD simplemente determina la fortaleza del dólar y el aumento de las pérdidas y paros cuando el dólar es fuerte.

  7. En combinación con el indicador de tendencias súper para juzgar el movimiento general de la situación, auxiliar a juzgar el tiempo de hacer más deuda pública.

La estrategia combina perfectamente los indicadores de tendencia con los de convulsión, permitiendo ajustar los parámetros dinámicamente y controlar el riesgo mientras se sigue la tendencia.

Ventajas estratégicas

  1. Utiliza el sistema de doble EMA para juzgar tendencias. El EMA es suave y puede filtrar efectivamente las falsas rupturas.

  2. El indicador ATR ajusta dinámicamente las condiciones de filtración de la EMA para que las estrategias puedan adaptarse con flexibilidad a diferentes entornos de mercado.

  3. El indicador ADX y el volumen de operaciones sirven como indicadores auxiliares de juicio para evitar ser aplastados en situaciones de crisis.

  4. El índice del dólar y el indicador de tendencias súper pueden ayudar a evaluar las tendencias y mejorar la precisión de las decisiones.

  5. Los parámetros de gestión de riesgos se ajustan automáticamente en función de la fortaleza del dólar, aumentando el stop loss y el stop loss cuando el dólar es fuerte.

  6. Utiliza una sencilla e intuitiva señal de negociación de Forex y una estrategia de stop loss que es fácil de implementar y de retroceder.

Riesgo estratégico

  1. El sistema de doble línea de la EMA elimina el criterio de la tendencia de que hay un retraso.

  2. La elección incorrecta de los parámetros ATR puede conducir a ser demasiado radical o conservador.

  3. Los parámetros del indicador ADX necesitan ser optimizados, y la elección incorrecta de los puntos altos del ADX puede perder la tendencia.

  4. El índice del dólar y el indicador de tendencias súper pueden estar equivocados.

  5. El límite de pérdidas demasiado pequeño puede aumentar las pérdidas; el límite de pérdidas demasiado amplio es fácil de cubrir.

Optimización de las ideas

  1. Se puede considerar la combinación de otros indicadores como el MACD para determinar los puntos críticos de tendencia.

  2. Utiliza más datos históricos para entrenar el espacio de parámetros ATR y encontrar el rango óptimo de parámetros.

  3. Prueba de diferentes parámetros de ADX, optimiza la determinación de puntos altos de ADX.

  4. Añadir más variables para juzgar el índice del dólar y el movimiento general del mercado.

  5. Calcula el límite óptimo de pérdidas basado en los datos de retroalimentación.

  6. Se puede considerar la modificación del stop loss a stop loss móvil o stop loss por vibración.

  7. Seguir optimizando el tamaño de las reservas y el ciclo de tenencia de las mismas.

Resumir

Esta estrategia integra el clásico sistema de doble línea de medias EMA con varios indicadores auxiliares, optimizando automáticamente los parámetros, para lograr una estrategia de seguimiento de tendencias más completa. Puede adaptarse con flexibilidad a los cambios en el entorno del mercado y controlar el riesgo mientras sigue la tendencia.

Código Fuente de la Estrategia
/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Refactored Advanced EMA Cross with Normalized ATR Filter, Controlling ADX", shorttitle="ALP V5", overlay=true)

// Initialize variables to track if a buy order has been placed and number of periods since the last buy
var bool hasBought = false
var int barCountSinceBuy = 0

// Define EMA periods
emaShort = ta.ema(close, 8)
emaLong = ta.ema(close, 20)

// Define ATR period and normalization
atrLength = 14
atrValue = ta.atr(atrLength)
maxHistoricalATR = ta.highest(atrValue, 20)
minHistoricalATR = ta.lowest(atrValue, 20)
normalizedATR = (atrValue - minHistoricalATR) / (maxHistoricalATR - minHistoricalATR)

// Define ADX parameters
adxValue = ta.rma(close, 14)
adxHighLevel = 30
isADXHigh = adxValue > adxHighLevel

// Initialize risk management variables
var float stopLossPercent = na
var float takeProfitPercent = na
var float trailingStop = na

// Calculate USD strength (simplified)
usd_strength = close / ta.ema(close, 50) - 1

// Adjust risk parameters based on USD strength
if (usd_strength > 0)
    stopLossPercent := 3
    takeProfitPercent := 6
else
    stopLossPercent := 4
    takeProfitPercent := 8

// Initialize position variable
var float positionPrice = na

// Volume filter
minVolume = ta.sma(volume, 14) * 1.5
isVolumeHigh = volume > minVolume



// Piyasa yönü için süper trend göstergesi
[supertrendValue, supertrendDirection] = ta.supertrend(4, 14)  // Use a factor of 3 and ATR period of 10
bool isBullMarket = supertrendDirection < 0
bool isBearMarket = supertrendDirection > 0

// Yükselen piyasa için alım koşulu
buyConditionBull = isBullMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.2
// Düşen piyasa için alım koşulu
buyConditionBear = isBearMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.5
// Genel alım koşulu
buyCondition = buyConditionBull or buyConditionBear

// Yükselen ve düşen piyasalar için farklı satış koşulları
sellConditionBull = isBullMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
sellConditionBear = isBearMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
// Genel satış koşulu
sellCondition = sellConditionBull or sellConditionBear


// Buy condition
if (buyCondition)
    strategy.entry("Buy", strategy.long)
    positionPrice := close
    hasBought := true // Set the flag to true when a buy order is placed
    barCountSinceBuy := 0 // Reset the bar counter when a buy order is placed

// Increase the bar counter if a buy has been executed
if (hasBought)
    barCountSinceBuy := barCountSinceBuy + 1

// Calculate stop-loss and take-profit levels
longStopLoss = positionPrice * (1 - stopLossPercent / 100)
longTakeProfit = positionPrice * (1 + takeProfitPercent / 100)


// Final Sell condition, now also checks if a buy has occurred before and if at least 5 periods have passed
finalSellCondition = sellCondition and hasBought and barCountSinceBuy >= 3 and isVolumeHigh

if (finalSellCondition)
    strategy.close("Buy")
    positionPrice := na
    hasBought := false // Reset the flag when a sell order is placed
    barCountSinceBuy := 0 // Reset the bar counter when a buy order is closed

// Implement stop-loss, take-profit, and trailing stop
strategy.exit("Stop Loss", "Buy", stop=longStopLoss)
strategy.exit("Take Profit", "Buy", limit=longTakeProfit)
//strategy.exit("Trailing Stop", "Buy", trail_price=close, trail_offset=trailingStop * close / 100)


var label l = na

if (buyCondition)
    l := label.new(bar_index, high, text="buy triggered " + str.tostring(usd_strength))
    label.delete(l[1])

if (finalSellCondition)
    l := label.new(bar_index, high, text="sell triggered " + str.tostring(usd_strength))
    label.delete(l[1])

// Plot signals
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=finalSellCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")