
Esta estrategia es una estrategia de seguimiento de la tendencia de la línea media larga basada en el diseño de indicadores de ruptura y parada dinámica. La estrategia utiliza el precio para romper la línea de parada dinámica para determinar la dirección de la tendencia, entrar en el campo cuando el precio rompe la línea de parada, y luego utilizar la línea de parada para seguir la tendencia y bloquear las ganancias. La estrategia tiene como objetivo capturar la tendencia de la línea media larga y, al mismo tiempo, utilizar la parada dinámica para controlar el riesgo.
La estrategia utiliza el indicador de parada dinámica Volatility Stop para determinar la dirección de la tendencia y el seguimiento de la parada. La parada de volatilidad calcula una línea de parada dinámica en función del rango de fluctuación del precio.
De esta manera, la línea de pérdidas se mueve hacia arriba y hacia abajo con la fluctuación de los precios, formando un canal dinámico.
La estrategia abre posiciones cuando el precio supera la línea de stop loss, lo que indica que la tendencia se ha invertido:
Una vez abierta la posición, la estrategia utiliza la línea de stop loss para seguir el stop loss:
Cuando el precio vuelve a tocar la línea de stop loss, la estrategia se cierra.
De esta manera, la estrategia puede ser fluida, seguir la tendencia a tiempo para revertirla, y al mismo tiempo usar los stop-loss para controlar el riesgo.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene sus riesgos:
Respuesta:
La estrategia puede ser optimizada en los siguientes aspectos:
La estrategia de ruptura de la tendencia - la parada dinámica es una estrategia de seguimiento de la tendencia muy práctica en general. Puede aprovechar las oportunidades de reversión de la tendencia, por lo tanto, la tendencia, mientras que el uso de la parada dinámica para controlar eficazmente el riesgo. Si los parámetros se optimizan correctamente, se puede obtener un mejor rendimiento en la situación de la tendencia.
/*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)