Estrategia para detener el impulso de Bitcoin

El autor:¿ Qué pasa?, Fecha: 2024-03-08 16:20:16
Las etiquetas:

img

Resumen de la estrategia

La estrategia de stop de movimiento de Bitcoin es una estrategia basada en el impulso diseñada para capturar las tendencias alcistas de Bitcoin mientras se mitiga el riesgo a la baja a través de stop-loss ajustados dinámicamente. La estrategia emplea una técnica de stop de movimiento simple pero inteligente, que aprieta la stop-loss durante la volatilidad muy bajista para proteger las ganancias abiertas y afloja la stop-loss durante el impulso alcista sostenido para dejar correr las ganancias. La estrategia permanece invertida mientras el precio de Bitcoin esté por encima del promedio móvil exponencial de 20 semanas (EMA) y salga cuando el precio cierre por debajo de él.

Principio de la estrategia

  1. El precio actual de Bitcoin debe cotizar por encima de la EMA de mayor plazo (20 semanas).
  2. Bitcoin no debe estar en un estado de "cautela", definido como el máximo de oscilación reciente menos el mínimo de la barra actual que sea mayor de 1,5 veces el ATR, o el cierre diario que sea menor que el 20 EMA diario.
  3. El valor de la pérdida de liquidación se fijará en el máximo de oscilación más reciente menos 1 ATR, o menos el 20% del ATR (es decir, 0,2 ATR) si se encuentra en el estado de precaución.
  4. La salida en la siguiente barra se abre cuando el precio cierra por debajo del stop-loss.

La estrategia utiliza el gráfico semanal y la EMA de 20 semanas como un filtro de tendencia, ingresando solo cuando el precio está por encima de la EMA de 20 semanas. Se utiliza un ATR de 5 períodos para ajustar dinámicamente la distancia de la parada de seguimiento, que se aprieta en el estado de cautela. El estado de cautela se define por dos condiciones: la distancia desde el máximo de oscilación reciente hasta el mínimo actual es mayor de 1.5 veces la ATR, o el cierre diario está por debajo de la EMA diaria de 20. Este enfoque dinámico de ajuste de stop-loss permite un mayor margen de retroceso cuando la tendencia es fuerte y bloquea rápidamente las ganancias cuando la tendencia se debilita.

Ventajas estratégicas

  1. Simplicidad y eficacia: La lógica de la estrategia es simple, clara, fácil de entender e implementar, al tiempo que captura de manera efectiva las principales tendencias alcistas de Bitcoin.

  2. La posición de stop-loss dinámica se ajusta dinámicamente en función de las condiciones de volatilidad del mercado, controlando las reducciones y dejando correr las ganancias, que es un enfoque relativamente equilibrado y robusto para la gestión de stop-loss.

  3. Filtración de tendencias: Al filtrar con un promedio móvil de nivel más alto (EMA de 20 semanas), la estrategia solo entra durante tendencias alcistas claras, mejorando enormemente la tasa de ganancia y la relación riesgo-recompensación de la estrategia.

  4. Tamaño de la posición: El valor predeterminado es el comercio con una posición completa, maximizando la utilización del capital y mejorando la eficiencia del capital.

  5. Amplia aplicabilidad: La lógica de la estrategia se puede adaptar fácilmente a otros activos y mercados, teniendo una buena generalización.

Riesgos estratégicos

  1. Aplicabilidad de parámetros: los parámetros de la estrategia se establecen en función de las características del mercado de Bitcoin, y su aplicabilidad a otros mercados debe validarse y puede requerir la optimización de parámetros para diferentes activos.

  2. Identificación de tendencias: la estrategia se basa principalmente en indicadores técnicos como las EMA y ATR de nivel superior para juzgar las tendencias, que no son tan completos como el análisis fundamental para comprender las condiciones del mercado y son propensos a errores en los puntos de inflexión del mercado.

  3. Riesgo de stop-loss: aunque los stop-loss dinámicos pueden controlar el riesgo hasta cierto punto, aún pueden producirse reducciones significativas en condiciones extremas de mercado (como caídas bruscas o fluctuaciones profundas rápidas).

  4. Potencial de ganancias: la estrategia tiene un buen rendimiento en tendencias alcistas unidireccionales, pero es más probable que caiga en el dilema de las frecuentes pérdidas de parada en los mercados de rango, lo que podría limitar el potencial de ganancia general.

  5. Rendimiento en vivo: si bien la estrategia tiene un buen rendimiento en las pruebas de retroceso, el comercio en vivo se ve afectado por factores como el deslizamiento y las comisiones, y los resultados reales pueden diferir de los rendimientos teóricos, lo que requiere una evaluación cuidadosa.

Direcciones de optimización

  1. Determinación de tendencias: Considere la introducción de medias móviles de mayor nivel, indicadores de volatilidad o incluso datos fundamentales para mejorar la precisión y fiabilidad de la identificación de tendencias.

  2. Parámetros dinámicos: Las posiciones de stop-loss y los parámetros ATR pueden optimizarse aún más mediante la introducción de mecanismos de ajuste dinámico relacionados con el precio o la volatilidad para adaptarse a los diferentes estados del mercado.

  3. Tamaño de la posición: ajustar dinámicamente el tamaño de la posición en función de indicadores como la fuerza de la tendencia y la volatilidad, aumentar el tamaño de la posición cuando la tendencia es fuerte y reducir el tamaño de la posición durante la alta volatilidad para mejorar la relación riesgo-rendimiento.

  4. Mecanismo largo/corto: introducir un mecanismo de venta a corto en los mercados bajistas para ampliar la aplicabilidad y la rentabilidad potencial de la estrategia.

  5. Combinación de estrategias: Combinar esta estrategia con otras estrategias (como la inversión media) para complementar las fortalezas de cada una y mejorar la estabilidad y rentabilidad de la estrategia.

Resumen de la estrategia

La Estrategia de Stop Trailing de Momentum de Bitcoin es una estrategia de impulso simple y efectiva que captura las fuertes tendencias alcistas de Bitcoin utilizando promedios móviles de nivel más alto e indicadores ATR mientras controla el riesgo a la baja a través de stop-loss ajustados dinámicamente. Esta estrategia puede servir como una plantilla básica, y los inversores pueden refinarla aún más en función de sus propias necesidades y experiencia en áreas como la determinación de tendencias, la optimización de parámetros, la gestión de posiciones y los mecanismos largo / corto, o combinarla con otras estrategias para lograr una mayor relación riesgo-recompensa. Sin embargo, debe tenerse en cuenta que el rendimiento en vivo de la estrategia puede diferir de los resultados de backtesting, lo que requiere una cuidadosa evaluación y control del riesgo.


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

Más.