Estrategia de stop dinámico de Bitcoin


Fecha de creación: 2024-03-08 16:20:16 Última modificación: 2024-03-08 16:20:16
Copiar: 0 Número de Visitas: 747
1
Seguir
1617
Seguidores

Estrategia de stop dinámico de Bitcoin

Descripción general de la estrategia

La estrategia de stop loss de seguimiento dinámico de Bitcoin es una estrategia de posición larga basada en la dinámica, diseñada para capturar la tendencia ascendente de Bitcoin y evitar el riesgo de caída mediante el ajuste dinámico del stop loss. La estrategia utiliza una técnica de stop loss de seguimiento dinámico simple y ingeniosa, para cerrar el stop loss durante períodos de alta volatilidad a la baja para proteger el margen de ganancias, mientras que libera el stop loss durante el movimiento de la postura continua para que las ganancias corran.

Principio de estrategia

  1. El precio actual de Bitcoin debe ser más alto que el EMA del marco de tiempo de alto nivel (EMA de 20 semanas)
  2. Bitcoin no puede estar en estado de “alerta”, es decir, el pico más reciente de Bitcoin menos el precio mínimo de la línea K actual de más de 1.5 veces el ATR, o el precio de cierre del día por debajo de la 20 EMA del día
  3. El stop loss se establece como el pico más reciente de la ola menos 1 ATR, si está en alerta, menos el 20% de ATR (es decir, 0,2 ATR)
  4. Cuando el precio se cierra por debajo del precio de parada, se abre una posición cerrada en la siguiente línea K

La estrategia utiliza el gráfico de la línea de circunferencia y el EMA de 20 semanas como filtro de tendencia, que entra en juego solo cuando el precio está por encima del EMA de 20 semanas. El ATR de 5 períodos se utiliza para ajustar dinámicamente el seguimiento de la distancia de la parada de pérdidas y el cierre de las paradas en estado de alerta. El estado de alerta se define mediante dos condiciones: la distancia entre el pico reciente de la ola y el mínimo actual es mayor que 1,5 veces el ATR, o el precio de cierre del día es inferior al 20EMA del día.

Ventajas estratégicas

  1. Sencilla y eficaz: La lógica de la estrategia es simple y clara, fácil de entender e implementar, y capta eficazmente las principales tendencias al alza de Bitcoin.

  2. Detención dinámica: un método de detención más equilibrado y robusto que permite controlar el retiro y hacer que las ganancias corran, ajustando dinámicamente la posición de parada en función de las fluctuaciones del mercado.

  3. Filtración de tendencias: se filtra a través de la línea media de alto nivel ((EMA de 20 semanas), se juega solo en tendencias al alza claras, lo que mejora significativamente las tasas de victoria y pérdidas de la estrategia.

  4. Administración de posiciones: por defecto, el comercio de todas las posiciones permite aprovechar al máximo los fondos y mejorar la eficiencia de la utilización de los fondos. También se puede ajustar el tamaño de las posiciones de forma flexible.

  5. Amplia aplicabilidad: La lógica de la estrategia puede ser fácilmente trasladada a otros estándares y mercados, con una buena universalidad.

Riesgo estratégico

  1. Aplicabilidad de los parámetros: los parámetros de la estrategia se establecen en función de las características del mercado de Bitcoin, la aplicabilidad en otros mercados está pendiente de verificación y puede requerir la optimización de los parámetros para diferentes estándares.

  2. Identificación de tendencias: la estrategia se basa principalmente en indicadores técnicos de alto nivel como EMA y ATR para juzgar las tendencias. La comprensión de la situación del mercado no es tan completa como el análisis fundamental, y es susceptible a errores en los puntos de inflexión del mercado.

  3. Riesgo de stop loss: aunque el stop loss dinámico puede controlar el riesgo hasta cierto punto, en situaciones extremas (como caídas bruscas o movimientos rápidos y profundos), aún puede haber una gran retirada. Y el punto de stop loss es más cercano, y puede detenerse con frecuencia en situaciones de movimiento.

  4. Espacio de ganancias: La estrategia funciona bien en una tendencia al alza unilateral, pero puede tener un espacio de ganancias limitado en un mercado convulso, donde es más fácil caer en la dificultad de detenerse con frecuencia.

  5. El rendimiento del disco físico: La estrategia ha funcionado bien en la retrospectiva, pero el disco físico se ve afectado por factores como el punto de deslizamiento y los honorarios, que pueden tener una cierta diferencia con los ingresos teóricos y deben evaluarse con cautela.

Dirección de optimización

  1. Determinación de tendencias: se puede intentar introducir más medias de alto nivel, indicadores de volatilidad e incluso datos básicos para mejorar la precisión y fiabilidad de la identificación de tendencias.

  2. Parámetros dinámicos: los parámetros de stop loss y ATR se pueden optimizar aún más, introduciendo mecanismos de ajuste dinámico relacionados con el precio o la volatilidad para adaptarse a diferentes estados de mercado.

  3. Administración de posiciones: puede ajustar dinámicamente el tamaño de las posiciones en función de indicadores como la intensidad de la tendencia y la volatilidad, aumentar las posiciones cuando la tendencia es fuerte, reducir las posiciones cuando la volatilidad es alta y aumentar el riesgo de ganancias.

  4. Mecanismo de más espacio: Introducción de un mecanismo de corto plazo en los mercados bajistas, que amplía el alcance de las estrategias y el espacio de ganancias potenciales. Sin embargo, es necesario rediseñar las reglas de entrada y parada de pérdidas.

  5. Estrategia de combinación: combinación de esta estrategia con otras estrategias (como la inversión, la regresión a la media, etc.) para obtener ventajas complementarias y mejorar la estabilidad y la rentabilidad de la estrategia.

Resumen de la estrategia

La estrategia de stop loss de seguimiento de la dinámica de Bitcoin es una estrategia de movimiento simple y efectiva que utiliza una media de nivel superior y un indicador ATR para capturar una fuerte tendencia alcista de Bitcoin y controlar el riesgo descendente mediante el ajuste dinámico de los stop losses. La estrategia tiene una lógica clara, es fácil de implementar y optimizar, y es adecuada para inversores de línea media que buscan ganancias sólidas. Esta estrategia puede servir como un modelo básico, y los inversores pueden perfeccionarla en función de sus necesidades y experiencias, en aspectos como el juicio de tendencias, la optimización de parámetros, la gestión de posiciones, el mecanismo de espacio amplio, etc., o en combinación con otras estrategias con el fin de obtener una mayor proporción de riesgo de ganancias. Sin embargo, tenga en cuenta que el rendimiento de la estrategia en el mundo real puede diferir de los resultados de la retroalimentación, por lo que se debe evaluar y controlar el riesgo con cuidado.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ZenAndTheArtOfTrading
// ------------------------------------------------------------------------------------------------------
// System Concept: Capture as much Bitcoin upside volatility as possible while side-stepping downside volatility.
//  Entry Rule #1: Bitcoin must be trading above higher-timeframe EMA (Weekly 20 EMA)
//  Entry Rule #2: Bitcoin must not be in 'caution' condition
//      -> Caution: True if BTC's recent swing high minus its current low is > 1.5x ATR OR close < Daily EMA
//  Trailing Stop: Stop is trailed 1 ATR from recent swing high, OR 20% of ATR if in caution condition
// ------------------------------------------------------------------------------------------------------
// @version=5
strategy("Bitcoin Momentum Strategy", 
     overlay=true)

// Get user input
var const string    G_STRATEGY  = "Strategy Entry Settings"
var const string    G_EXIT      = "Strategy Exit Settings"
var const string    G_FILTER    = "Strategy Filters"
i_HigherTimeframe   = input.timeframe("W", "Higher Timeframe", group=G_STRATEGY, tooltip="Higher timeframe MA reference")
i_EmaLength         = input.int(20, "EMA Length", group=G_STRATEGY, tooltip="Moving average period length")
i_AtrLength         = input.int(5, "ATR Length", group=G_STRATEGY, tooltip="ATR period length")
i_TrailStopSource   = input.source(low, "Trail Stop Source", group=G_EXIT, tooltip="Lowest price source for trailing stop")
i_TrailStopLookback = input.int(7, "Trail Stop Lookback", group=G_EXIT, tooltip="How many bars to look back for trailing price source")
i_TrailStopMulti    = input.float(0.2, "Trailing Stop Ratchet Multiplier", group=G_EXIT, tooltip="When momentum is yellow (caution), shrink ATR distance for TS by this much")
i_StartTime         = input(timestamp("01 Jan 2000 13:30 +0000"), "Start Filter", group=G_FILTER, tooltip="Start date & time to begin searching for setups")
i_EndTime           = input(timestamp("1 Jan 2099 19:30 +0000"), "End Filter", group=G_FILTER, tooltip="End date & time to stop searching for setups")

// Define custom security function which does not repaint
RequestSecurity_NonRP(_market, _res, _exp) => request.security(_market, _res, _exp[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

// Define date filter check
DateFilter(int start, int end) => time >= start and time <= end

// Get indicator values
float   atrValue    = ta.atr(i_AtrLength)
float   emaValue    = ta.ema(close, i_EmaLength)
float   htfEmaValue = RequestSecurity_NonRP(syminfo.tickerid, i_HigherTimeframe, emaValue)
float   marketPrice = close

// Check for bullishness / bearish volatility caution
bool    isBullish   = marketPrice > htfEmaValue
bool    isCaution   = isBullish and (ta.highest(high, 7) - low > (atrValue * 1.5) or marketPrice < emaValue) 

// Set momentum color
color bgCol = color.red
if isBullish[1]
    bgCol := color.green
if isCaution[1]
    bgCol := color.orange

// Handle strategy entry, and reset trailing stop
var float trailStop = na
if isBullish and strategy.position_size == 0 and not isCaution
    strategy.entry(id="Buy", direction=strategy.long)
    trailStop := na

// Update trailing stop
float temp_trailStop = ta.highest(i_TrailStopSource, i_TrailStopLookback) - (isCaution[1] ? atrValue * i_TrailStopMulti : atrValue)
if strategy.position_size > 0
    if temp_trailStop > trailStop or na(trailStop)
        trailStop := temp_trailStop

// Handle strategy exit
if (close < trailStop or close < htfEmaValue) and barstate.isconfirmed
    strategy.close("Buy", comment="Sell")

// Draw trailing stop, HTF EMA and color-coded momentum indicator
plotshape(true, color=bgCol, style=shape.square, location=location.bottom, size=size.auto, title="Momentum Strength")
plot(htfEmaValue, color=close > htfEmaValue ? color.green : color.red, linewidth=2, title="HTF EMA")
plot(emaValue, color=close > emaValue ? color.green : color.red, linewidth=1, title="CTF EMA")
plot(strategy.position_size[1] > 0 ? trailStop : na, style=plot.style_linebr, color=color.red, title="Stop Loss")