Seguimiento de tendencias de SMA en múltiples escalas temporales y estrategia de stop loss dinámico

SMA Trend
Fecha de creación: 2024-06-03 10:57:05 Última modificación: 2024-06-03 10:57:05
Copiar: 3 Número de Visitas: 553
1
Seguir
1617
Seguidores

Seguimiento de tendencias de SMA en múltiples escalas temporales y estrategia de stop loss dinámico

Descripción general

La estrategia se basa en un simple promedio móvil (SMA) en diferentes escalas de tiempo para capturar la tendencia del mercado. Generando señales de compra y venta mediante la comparación de la posición relativa de los SMA a corto y largo plazo. Al mismo tiempo, la estrategia utiliza condiciones de confirmación de tendencias para filtrar falsas señales y mejorar la precisión de la negociación.

Principio de estrategia

  1. Cálculo de SMA a corto y largo plazo para determinar la dirección de la tendencia del mercado.
  2. Cuando el SMA corto lleva el SMA largo, genera una señal de compra; cuando el SMA corto lleva el SMA largo, genera una señal de venta.
  3. Utiliza la condición de confirmación de tendencia para filtrar falsas señales, y solo ejecuta la compra cuando la tendencia principal es un polinomio, y solo ejecuta la venta cuando la tendencia principal es un blanco.
  4. Configurar las funciones de stop y stop loss para controlar el riesgo de la transacción. Cuando el precio alcance el nivel de stop o stop predeterminado, se saldrá de la posición.
  5. Ajuste dinámico de la posición según la condición de confirmación de la tendencia. Cuando la tendencia principal cambia, cierre la posición a tiempo para evitar la pérdida causada por la reversión de la tendencia.

Ventajas estratégicas

  1. Seguimiento de tendencias: Esta estrategia se basa en SMA de diferentes escalas de tiempo, capaz de capturar eficazmente las principales tendencias del mercado y adaptarse a las diferentes condiciones del mercado.
  2. Confirmación de tendencias: mediante la introducción de condiciones de confirmación de tendencias, filtración de falsas señales, aumento de la fiabilidad de las señales de negociación y reducción de las operaciones no válidas.
  3. Gestión de riesgos: Función de bloqueo y deterioro integrada para ayudar a controlar el riesgo de las transacciones y proteger la seguridad de los fondos de los inversores.
  4. Ajuste dinámico: ajuste dinámico de las posiciones en función de la confirmación de la tendencia, para responder a los cambios en el mercado a tiempo y reducir las pérdidas provocadas por la reversión de la tendencia.

Riesgo estratégico

  1. Riesgo de optimización de parámetros: el rendimiento de la estrategia depende del ciclo SMA y de la elección de los parámetros de equilibrio de pérdidas y pérdidas. La configuración inadecuada de los parámetros puede causar un mal rendimiento de la estrategia.
  2. Riesgo de mercado en turbulencia: En un entorno de mercado en turbulencia, las señales de negociación frecuentes pueden conducir a una sobrecomercialización, aumentando los costos de negociación y el riesgo.
  3. Riesgo de emergencia: los mercados pueden ser muy volátiles ante una emergencia importante, y la estrategia puede no responder a tiempo y causar grandes pérdidas.

Dirección de optimización de la estrategia

  1. Introducción de más indicadores técnicos: en combinación con otros indicadores técnicos, como MACD, RSI, etc., para mejorar la precisión y solidez de la determinación de tendencias.
  2. Optimización de la selección de parámetros: la búsqueda de la mejor combinación de parámetros de parálisis y pérdida de equilibrio de SMA, para mejorar el rendimiento de la estrategia a través de la retroalimentación de datos históricos y la optimización de parámetros.
  3. Mejorar la gestión de riesgos: introducir técnicas de gestión de riesgos más avanzadas, como el stop loss dinámico, la gestión de posiciones, etc., para controlar aún más los riesgos.
  4. Adaptación a las diferentes condiciones del mercado: ajuste dinámico de los parámetros de la estrategia en función de la volatilidad del mercado y la intensidad de la tendencia para que la estrategia pueda adaptarse a las diferentes condiciones del mercado.

Resumir

La estrategia de seguimiento de tendencias de SMA de múltiples escalas de tiempo y la estrategia de parada de pérdidas dinámicas utilizan las SMA de diferentes escalas de tiempo para capturar las tendencias del mercado, filtrar las falsas señales a través de la condición de confirmación de tendencias, y configurar la función de parada de pérdidas y ajuste de posición dinámica, para lograr los objetivos de seguimiento de tendencias y gestión de riesgos. A pesar de que la estrategia tiene ciertas ventajas, aún se enfrenta a riesgos como la optimización de parámetros, mercados de temblores y eventos repentinos.

Código Fuente de la Estrategia
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("market slayer v3", overlay=true)

// Input parameters
showConfirmationTrend = input(title='Show Trend', defval=true)
confirmationTrendTimeframe = input.timeframe(title='Main Trend', defval='240')
confirmationTrendValue = input(title='Main Trend Value', defval=2)
showConfirmationBars = input(title='Show Confirmation Bars', defval=true)
topCbarValue = input(title='Top Confirmation Value', defval=60)
short_length = input.int(10, minval=1, title="Short SMA Length")
long_length = input.int(20, minval=1, title="Long SMA Length")
takeProfitEnabled = input(title="Take Profit Enabled", defval=false)
takeProfitValue = input.float(title="Take Profit (points)", defval=20, minval=1)
stopLossEnabled = input(title="Stop Loss Enabled", defval=false)
stopLossValue = input.float(title="Stop Loss (points)", defval=50, minval=1)

// Calculate SMAs
short_sma = ta.sma(close, short_length)
long_sma = ta.sma(close, long_length)

// Generate buy and sell signals based on SMAs
buy_signal = ta.crossover(short_sma, long_sma)
sell_signal = ta.crossunder(short_sma, long_sma)

// Plot SMAs
plot(short_sma, color=color.rgb(24, 170, 11), title="Short SMA")
plot(long_sma, color=color.red, title="Long SMA")

// Confirmation Bars
f_confirmationBarBullish(cbValue) =>
    cBarClose = close
    slowConfirmationBarSmaHigh = ta.sma(high, cbValue)
    slowConfirmationBarSmaLow = ta.sma(low, cbValue)
    slowConfirmationBarHlv = int(na)
    slowConfirmationBarHlv := cBarClose > slowConfirmationBarSmaHigh ? 1 : cBarClose < slowConfirmationBarSmaLow ? -1 : slowConfirmationBarHlv[1]
    slowConfirmationBarSslDown = slowConfirmationBarHlv < 0 ? slowConfirmationBarSmaHigh : slowConfirmationBarSmaLow
    slowConfirmationBarSslUp = slowConfirmationBarHlv < 0 ? slowConfirmationBarSmaLow : slowConfirmationBarSmaHigh
    slowConfirmationBarSslUp > slowConfirmationBarSslDown

fastConfirmationBarBullish = f_confirmationBarBullish(topCbarValue)
fastConfirmationBarBearish = not fastConfirmationBarBullish
fastConfirmationBarClr = fastConfirmationBarBullish ? color.green : color.red

fastConfirmationChangeBullish = fastConfirmationBarBullish and fastConfirmationBarBearish[1]
fastConfirmationChangeBearish = fastConfirmationBarBearish and fastConfirmationBarBullish[1]

confirmationTrendBullish = request.security(syminfo.tickerid, confirmationTrendTimeframe, f_confirmationBarBullish(confirmationTrendValue), lookahead=barmerge.lookahead_on)
confirmationTrendBearish = not confirmationTrendBullish
confirmationTrendClr = confirmationTrendBullish ? color.green : color.red

// Plot trend labels
plotshape(showConfirmationTrend, style=shape.square, location=location.top, color=confirmationTrendClr, title='Trend Confirmation Bars')
plotshape(showConfirmationBars and (fastConfirmationChangeBullish or fastConfirmationChangeBearish), style=shape.triangleup, location=location.top, color=fastConfirmationChangeBullish ? color.green : color.red, title='Fast Confirmation Bars')
plotshape(showConfirmationBars and buy_signal and confirmationTrendBullish, style=shape.triangleup, location=location.top, color=color.green, title='Buy Signal')
plotshape(showConfirmationBars and sell_signal and confirmationTrendBearish, style=shape.triangledown, location=location.top, color=color.red, title='Sell Signal')

// Generate trade signals
buy_condition = buy_signal and confirmationTrendBullish and not (strategy.opentrades > 0)
sell_condition = sell_signal and confirmationTrendBearish and not (strategy.opentrades > 0)

strategy.entry("Buy", strategy.long, when=buy_condition, comment ="BUY CALLS")
strategy.entry("Sell", strategy.short, when=sell_condition, comment ="BUY PUTS")

// Take Profit
if (takeProfitEnabled)
    strategy.exit("Take Profit Buy", from_entry="Buy", profit=takeProfitValue)
    strategy.exit("Take Profit Sell", from_entry="Sell", profit=takeProfitValue)

// Stop Loss
if (stopLossEnabled)
    strategy.exit("Stop Loss Buy", from_entry="Buy", loss=stopLossValue)
    strategy.exit("Stop Loss Sell", from_entry="Sell", loss=stopLossValue)

// Close trades based on trend confirmation bars
if strategy.opentrades > 0
    if strategy.position_size > 0
        if not confirmationTrendBullish
            strategy.close("Buy", comment ="CLOSE CALLS")
    else
        if not confirmationTrendBearish
            strategy.close("Sell", comment ="CLOSE PUTS")

// Define alert conditions as booleans
buy_open_alert = buy_condition
sell_open_alert = sell_condition
buy_closed_alert = strategy.opentrades < 0
sell_closed_alert = strategy.opentrades > 0

// Alerts
alertcondition(buy_open_alert, title='Buy calls', message='Buy calls Opened')
alertcondition(sell_open_alert, title='buy puts', message='buy Puts Opened')
alertcondition(buy_closed_alert, title='exit calls', message='exit calls ')
alertcondition(sell_closed_alert, title='exit puts', message='exit puts Closed')