Esta é uma estratégia de seguimento de tendências baseada em breakout e stop de volatilidade. A estratégia identifica a direção da tendência por quebra de preço da linha de stop loss dinâmica. Ela entra no comércio quando o preço penetra a linha de stop loss e usa a linha de stop loss para rastrear tendências e bloquear lucros. A estratégia visa capturar tendências de médio e longo prazo enquanto controla o risco com paradas dinâmicas.
A estratégia utiliza o indicador de parada de volatilidade para determinar a direção da tendência e rastrear a perda de parada.
A linha de stop loss flutua para cima e para baixo com o preço, formando um canal dinâmico.
Quando o preço penetra a linha de stop loss, ele sinaliza uma inversão de tendência.
Após a abertura da posição, a estratégia segue a linha stop loss:
Quando o preço atingir a linha de stop loss novamente, a posição será fechada.
Desta forma, a estratégia pode seguir as tendências em tempo útil, controlando o risco com paradas.
A estratégia apresenta as seguintes vantagens:
Há também alguns riscos a considerar:
Soluções:
A estratégia pode ser ainda melhorada nos seguintes aspectos:
Em geral, esta estratégia de ruptura de momento com parada de volatilidade é um sistema de tendência muito prático. Pode capturar oportunidades de reversão de tendência e seguir a tendência, controlando o risco efetivamente com paradas dinâmicas. Com ajuste adequado dos parâmetros, pode alcançar um bom retorno durante os mercados de tendência. Mas algumas questões precisam ser abordadas, como paradas excessivamente sensíveis, alta frequência de negociação, etc. Outras otimizações podem transformá-lo em uma estratégia de negociação quantitativa eficiente e 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)