Estrategia de ruptura de impulso con parada de volatilidad

El autor:¿ Qué pasa?, Fecha: 2023-11-13 17:20:51
Las etiquetas:

img

Resumen general

Esta es una estrategia de seguimiento de tendencias basada en la ruptura y el stop de volatilidad. La estrategia identifica la dirección de la tendencia por la ruptura del precio de la línea de stop loss dinámica. Ingresa al comercio cuando el precio penetra la línea de stop loss y utiliza la línea de stop loss para rastrear las tendencias y bloquear las ganancias. La estrategia tiene como objetivo capturar las tendencias a medio y largo plazo mientras controla el riesgo con paradas dinámicas.

Estrategia lógica

La estrategia utiliza el indicador de parada de volatilidad para determinar la dirección de la tendencia y realizar un seguimiento de la parada de pérdida.

  1. Calcular el ATR (intervalo verdadero medio) del precio
  2. Obtener línea de pérdida de parada multiplicando ATR con un coeficiente de pérdida de parada
  3. Cuando el precio sube, registro precio más alto, línea de stop loss es el precio más alto menos ATR * coeficiente
  4. Cuando el precio baja, registro precio más bajo, línea de stop loss es el precio más bajo más ATR * coeficiente

La línea de stop loss fluctúa hacia arriba y hacia abajo con el precio, formando un canal dinámico.

Cuando el precio penetra la línea de stop loss, señala una inversión de tendencia.

  • Cuando el precio se rompe por encima de la línea de stop loss, ir largo
  • Cuando el precio se rompe por debajo de la línea de stop loss, sea corto

Después de abrir la posición, la estrategia sigue la línea de stop loss:

  • Para largo, stop loss es el precio más alto menos ATR * coeficiente
  • En resumen, stop loss es el precio más bajo más el coeficiente ATR *

Cuando el precio vuelva a alcanzar la línea de stop loss, la posición se cerrará.

De esta manera, la estrategia puede seguir las tendencias de manera oportuna mientras controla el riesgo con paradas.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. Puede captar las inversiones de tendencia de manera oportuna y seguir la tendencia
  2. Utiliza el stop loss dinámico para ajustar la posición stop en función de la volatilidad del mercado
  3. Actualizaciones de pérdidas de parada con tendencia a bloquear las ganancias máximas
  4. Cabalgando la tendencia a lograr beneficios significativos
  5. Controla eficazmente el riesgo y evita grandes pérdidas

Análisis de riesgos

También hay algunos riesgos a tener en cuenta:

  1. Las pérdidas de detención pueden activarse con frecuencia durante los mercados de variación.
  2. Necesidad de establecer el coeficiente de stop loss adecuado, demasiado pequeño puede ser demasiado sensible
  3. Las tarifas de negociación pueden consumir las ganancias con operaciones frecuentes
  4. Puede perder algunas ganancias en la etapa inicial de las tendencias
  5. Riesgo cuando el stop loss está demasiado lejos del precio

Soluciones:

  1. Optimizar el coeficiente de pérdida de parada mediante backtest para encontrar el mejor parámetro
  2. Utilice plazos más largos para reducir la frecuencia de las operaciones
  3. Añadir filtro para evitar el exceso de comercio
  4. Permitir cierta flexibilidad en la distancia de parada, pero no demasiado grande

Direcciones de optimización

La estrategia se puede optimizar aún más en los siguientes aspectos:

  1. Optimizar el coeficiente de pérdida de parada para encontrar la mejor combinación de parámetros
  2. Añadir filtros para evitar los whipssaws en el mercado de rango
  3. Combinar varios marcos de tiempo para la verificación de señales
  4. Optimizar el tamaño de la posición, aumentar gradualmente el tamaño
  5. Considere el ajuste dinámico del marco de tiempo
  6. Combinar con los fundamentos de las acciones para captar las principales tendencias

Resumen de las actividades

En general, esta estrategia de ruptura de impulso con parada de volatilidad es un sistema de seguimiento de tendencias muy práctico. Puede capturar oportunidades de inversión de tendencias y seguir la tendencia mientras controla el riesgo de manera efectiva con paradas dinámicas. Con el ajuste adecuado de parámetros, puede lograr un buen rendimiento durante los mercados de tendencia. Pero algunos problemas deben abordarse como paradas demasiado sensibles, alta frecuencia de negociación, etc. Optimizaciones adicionales pueden convertirlo en una estrategia de negociación cuantitativa eficiente y robusta.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-11-12 00:00:00
period: 3m
basePeriod: 1m
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/
//@version=4
strategy(shorttitle='Volatility Stop Strategy',title='Volatility Stop Strategy (by Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works better on 3h, 1h, 2h, 4h
// Best time frame 2H

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(3.0, "vStop Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
    var max     = src
    var min     = src
    var uptrend = true
    var stop    = 0.0
    atrM        = nz(atr(atrlen) * atrfactor, tr)
    max         := max(max, src)
    min         := min(min, src)
    stop        := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
    uptrend     := src - stop >= 0.0
    if uptrend != nz(uptrend[1], true)
        max    := src
        min    := src
        stop   := uptrend ? max - atrM : min + atrM
    [stop, uptrend]

[vStop, uptrend] = volStop(src, length, factor)


//Entry 


strategy.entry(id="long", long = true, when = crossover(close, vStop) and window())

//Exit
strategy.close("long", when = crossunder(close, vStop))

plot(vStop,"Vstop", color.black, linewidth=2)


Más.