Estrategia de seguimiento de tendencias EMA/SMA y swing trading combinada con filtrado de volumen y sistema de stop loss y take profit porcentuales

EMA SMA
Fecha de creación: 2024-12-11 15:12:35 Última modificación: 2024-12-11 15:12:35
Copiar: 1 Número de Visitas: 444
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias EMA/SMA y swing trading combinada con filtrado de volumen y sistema de stop loss y take profit porcentuales

Descripción general

La estrategia es un sistema de negociación integral que combina el seguimiento de tendencias con el método de negociación de bandas para construir un sistema de negociación completo a través del cruce de líneas medias de EMA y SMA, la identificación de puntos altos y bajos de la banda, el filtrado de volumen de transacción y el mecanismo de stop loss y seguimiento de porcentaje. El diseño de la estrategia se centra en la confirmación de señales multidimensionales y mejora la precisión y la fiabilidad de la negociación a través de la sincronización de los indicadores técnicos.

Principio de estrategia

La estrategia utiliza un mecanismo de filtración de señales de varios niveles, primero para determinar la tendencia de la base de formación cruzada con EMA (10) y SMA (21), y luego para determinar el momento de entrada a través de brechas altas y bajas de seis líneas K a la izquierda y a la izquierda, mientras que se requiere que el volumen de transacciones sea mayor que la media móvil de 200 ciclos, para garantizar que se negocie en un entorno de suficiente liquidez. El sistema utiliza un porcentaje de stop loss del 2% y un stop loss de seguimiento del 1% para administrar el riesgo.

Ventajas estratégicas

  1. El mecanismo de confirmación de múltiples señales reduce las señales falsas: aumenta la triple verificación a través de tendencias medias, brechas de precios y volúmenes de transacción, aumentando la fiabilidad de las transacciones
  2. Mecanismo de stop loss flexible: configuración de stop loss en porcentaje y bloqueo de ganancias con seguimiento de stop loss
  3. Sistema de visualización completo: ofrece una representación gráfica de las líneas de equilibrio y los puntos de ruptura para facilitar la supervisión de las transacciones
  4. Alta personalización: los parámetros clave se pueden ajustar para adaptarse a diferentes entornos del mercado
  5. Gestión de riesgos sistematizada: control de riesgos mediante paros y paradas de posición predeterminados

Riesgo estratégico

  1. El mercado horizontal podría generar falsas rupturas frecuentes
  2. El filtro de volumen de entrega puede haber perdido parte de la señal válida
  3. El porcentaje fijo de paradas puede ser prematuro en situaciones fuertes.
  4. El sistema de línea media está rezagado en un rápido cambio de mercado
  5. Es necesario considerar el impacto de los costos de transacción en los retornos de la estrategia

Dirección de optimización de la estrategia

  1. Introducción de un mecanismo de adaptación de la volatilidad para ajustar dinámicamente los parámetros de stop loss
  2. Incrementar la filtración de la intensidad de la tendencia y evitar el comercio en tendencias débiles
  3. Optimización de los algoritmos de filtración de tráfico, teniendo en cuenta las variaciones de tráfico relativo
  4. Añadir un mecanismo de filtración de tiempo para evitar el comercio en tiempos adversos
  5. Considerar la inclusión de clasificaciones de entornos de mercado con diferentes parámetros para diferentes mercados

Resumir

La estrategia construye un sistema de negociación completo, adecuado para el seguimiento de tendencias a medio y largo plazo, a través de un sistema de línea uniforme, brechas de precios y verificación de volúmenes de transacción. La ventaja del sistema radica en la confirmación de múltiples señales y un mecanismo de gestión de riesgos mejorado, pero también se debe tener en cuenta el rendimiento en el mercado horizontal. Con la dirección de optimización sugerida, la estrategia tiene espacio para mejorar, especialmente las mejoras en la adaptabilidad ayudarán a mejorar la estabilidad de la estrategia.

Código Fuente de la Estrategia
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// Strategy combining EMA/SMA Crossover, Swing High/Low, Volume Filtering, and Percentage TP & Trailing Stop
strategy("Swing High/Low Strategy with Volume, EMA/SMA Crossovers, Percentage TP and Trailing Stop", overlay=true)

// --- Inputs ---
source = close
TITLE = input(false, title='Enable Alerts & Background Color for EMA/SMA Crossovers')
turnonAlerts = input(true, title='Turn on Alerts?')
colorbars = input(true, title="Color Bars?")
turnonEMASMA = input(true, title='Turn on EMA1 & SMA2?')
backgroundcolor = input(false, title='Enable Background Color?')

// EMA/SMA Lengths
emaLength = input.int(10, minval=1, title='EMA Length')
smaLength = input.int(21, minval=1, title='SMA Length')
ema1 = ta.ema(source, emaLength)
sma2 = ta.sma(source, smaLength)

// Swing High/Low Lengths
leftBars = input.int(6, title="Left Bars for Swing High/Low", minval=1)
rightBars = input.int(6, title="Right Bars for Swing High/Low", minval=1)

// Volume MA Length
volMaLength = input.int(200, title="Volume Moving Average Length")

// Percentage Take Profit with hundredth place adjustment
takeProfitPercent = input.float(2.00, title="Take Profit Percentage (%)", minval=0.01, step=0.01) / 100

// Trailing Stop Loss Option
useTrailingStop = input.bool(true, title="Enable Trailing Stop Loss?")
trailingStopPercent = input.float(1.00, title="Trailing Stop Loss Percentage (%)", minval=0.01, step=0.01) / 100

// --- Swing High/Low Logic ---
pivotHigh(_leftBars, _rightBars) =>
    ta.pivothigh(_leftBars, _rightBars)

pivotLow(_leftBars, _rightBars) =>
    ta.pivotlow(_leftBars, _rightBars)

ph = fixnan(pivotHigh(leftBars, rightBars))
pl = fixnan(pivotLow(leftBars, rightBars))

// --- Volume Condition ---
volMa = ta.sma(volume, volMaLength)

// Declare exit conditions as 'var' so they are initialized
var bool longExitCondition = na
var bool shortExitCondition = na

// --- Long Entry Condition: Close above Swing High & Volume >= 200 MA ---
longCondition = (close > ph and volume >= volMa)
if (longCondition)
    strategy.entry("Long", strategy.long)

// --- Short Entry Condition: Close below Swing Low & Volume >= 200 MA ---
shortCondition = (close < pl and volume >= volMa)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// --- Take Profit and Trailing Stop Logic ---

// For long position: Set take profit at the entry price + takeProfitPercent
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercent)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercent)

// --- Long Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Long
    strategy.exit("Long Exit", "Long", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=longTakeProfitLevel)
else
    // Exit Long on Take Profit only
    strategy.exit("Long Exit", "Long", limit=longTakeProfitLevel)

// --- Short Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Short
    strategy.exit("Short Exit", "Short", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=shortTakeProfitLevel)
else
    // Exit Short on Take Profit only
    strategy.exit("Short Exit", "Short", limit=shortTakeProfitLevel)

// --- Plot Swing High/Low ---

plot(ph, style=plot.style_circles, linewidth=1, color=color.blue, offset=-rightBars, title="Swing High")
plot(ph, style=plot.style_line, linewidth=1, color=color.blue, offset=0, title="Swing High")
plot(pl, style=plot.style_circles, linewidth=1, color=color.red, offset=-rightBars, title="Swing High")
plot(pl, style=plot.style_line, linewidth=1, color=color.red, offset=0, title="Swing High")
// --- Plot EMA/SMA ---
plot(turnonEMASMA ? ema1 : na, color=color.green, title="EMA")
plot(turnonEMASMA ? sma2 : na, color=color.orange, title="SMA")

// --- Alerts ---
alertcondition(longCondition, title="Long Entry", message="Price closed above Swing High with Volume >= 200 MA")
alertcondition(shortCondition, title="Short Entry", message="Price closed below Swing Low with Volume >= 200 MA")

// --- Bar Colors for Visualization ---
barcolor(longCondition ? color.green : na, title="Long Entry Color")
barcolor(shortCondition ? color.red : na, title="Short Entry Color")
bgcolor(backgroundcolor ? (ema1 > sma2 ? color.new(color.green, 50) : color.new(color.red, 50)) : na)