En la carga de los recursos... Cargando...

EMA/SMA sigue la tendencia con la estrategia de negociación oscilante combinada con el filtro de volumen y el sistema de toma de ganancias/detención de pérdidas por porcentaje

El autor:¿ Qué pasa?, Fecha: 2024-12-11 15:12:35
Las etiquetas:El EMALa SMA

img

Resumen general

Esta estrategia es un sistema de negociación integral que combina el seguimiento de tendencias con métodos de negociación swing, utilizando cruces EMA y SMA, identificación swing high/low, filtrado de volumen y mecanismos de take-profit y trailing stop-loss basados en porcentajes.

Principios de estrategia

La estrategia emplea un mecanismo de filtrado de señales de múltiples capas, comenzando con cruces de EMA (10) y SMA (21) para la determinación básica de la tendencia, luego utilizando breakouts de puntos de pivote izquierdo / derecho de 6 bares para el tiempo de entrada, mientras que requiere un volumen por encima del promedio móvil de 200 períodos para garantizar una liquidez suficiente.

Ventajas estratégicas

  1. La confirmación de múltiples señales reduce las falsas señales a través de la tendencia, la ruptura de precios y la verificación de la expansión del volumen.
  2. Gestión flexible de pérdidas y ganancias mediante un porcentaje basado en la obtención de ganancias con un stop-loss posterior
  3. Sistema de visualización integral para el seguimiento de operaciones y señales
  4. Alta personalizabilidad con parámetros clave ajustables
  5. Gestión sistemática del riesgo mediante niveles de stop-loss y take profit preestablecidos

Riesgos estratégicos

  1. Posibilidad de false breakouts en mercados variados
  2. El filtro de volumen puede no tener algunas señales válidas
  3. El porcentaje fijo de ganancia podría salir demasiado pronto en tendencias fuertes
  4. El sistema de media móvil tiene un retraso inherente en las inversiones rápidas
  5. Necesidad de considerar el impacto de los costes de negociación en los rendimientos de la estrategia

Direcciones de optimización

  1. Introducir un ajuste de volatilidad para el ajuste dinámico de las operaciones de toma de ganancias/dejan de perder
  2. Añadir filtro de fuerza de tendencia para evitar la negociación en tendencias débiles
  3. Optimizar el algoritmo de filtración de volumen teniendo en cuenta los cambios de volumen relativo
  4. Implementar filtros basados en el tiempo para evitar períodos comerciales desfavorables
  5. Considerar la clasificación del régimen de mercado para la adaptación de parámetros

Resumen de las actividades

La estrategia construye un sistema de negociación completo a través de promedios móviles, breakouts de precios y verificación de volumen, adecuado para seguir tendencias a medio y largo plazo. Sus fortalezas se encuentran en la confirmación de múltiples señales y la gestión de riesgos integral, aunque el rendimiento en mercados variados necesita atención. A través de las optimizaciones sugeridas, particularmente en adaptabilidad, la estrategia tiene margen para mejorar la estabilidad y el rendimiento.


/*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)

Relacionados

Más.