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.
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.
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.
Después de abrir la posición, la estrategia sigue la línea de stop loss:
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.
La estrategia tiene las siguientes ventajas:
También hay algunos riesgos a tener en cuenta:
Soluciones:
La estrategia se puede optimizar aún más en los siguientes aspectos:
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)