Esta é uma estratégia de rastreamento de tendência baseada na volatilidade dos preços. Ele usa a faixa média verdadeira (ATR) para definir linhas de perda de parada para flutuações de preços. ATR reflete a volatilidade e o nível de risco dos preços. Quando o preço excede a linha de perda de parada, a estratégia julga a inversão da tendência e toma as ações correspondentes para abrir posições ou parar as perdas.
A estratégia primeiro calcula a faixa média verdadeira (ATR) durante um determinado período. Em seguida, com base na direção da tendência atual do preço, se for uma tendência de alta, a linha de stop loss é definida no preço mais alto atual menos n vezes o ATR; se for uma tendência de baixa, a linha de stop loss é definida no preço mais baixo atual mais n vezes o ATR. O valor n pode ser ajustado através de parâmetros para controlar a distância entre a linha de stop loss e o preço.
Quando o preço atravessa a linha de stop loss da tendência de alta ou baixa, a tendência é julgada ter mudado. Neste ponto, a estratégia limpa posições para stop loss e define uma nova linha de stop loss com base na direção da nova tendência.
Em resumo, a estratégia usa a volatilidade dos preços para definir linhas de stop loss para alcançar um julgamento preciso das mudanças de tendência.
No geral, esta é uma boa implementação de algoritmo para definir linhas de stop loss com base na volatilidade dos preços. Sua precisão na avaliação das tendências de preços é alta e pode capturar pontos de virada importantes das tendências. Também fornece algum espaço para ajuste de parâmetros para melhor adaptabilidade. Como uma estratégia de stop loss, pode evitar efetivamente os riscos de inversões de mercado e vale a pena ser aplicada na negociação ao vivo.
/*backtest start: 2022-11-30 00:00:00 end: 2023-11-30 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/ // © laptevmaxim92 //@version=4 strategy("Volatility stop strategy", overlay=true) length = input(20) mult = input(2, step = 0.1) utp = input(false, "Use take profit?") pr = input(100, "Take profit pips") usl = input(false, "Use stop loss?") sl = input(100, "Stop loss pips") fromday = input(01, defval=01, minval=01, maxval=31, title="From Day") frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month") fromyear = input(2000, minval=1900, maxval=2100, title="From Year") today = input(31, defval=01, minval=01, maxval=31, title="To Day") tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month") toyear = input(2039, minval=1900, maxval=2100, title="To Year") use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)) atr_ = atr(length) max_ = 0.0 min_ = 0.0 max1 = 0.0 max1 := max(nz(max_[1]), close) min1 = 0.0 min1 := min(nz(min_[1]), close) vstop = 0.0 is_uptrend = false is_uptrend_prev = false is_uptrend_prev := nz(is_uptrend[1], true) stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_ vstop_prev = nz(vstop[1]) vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop) is_uptrend := close - vstop1 >= 0 is_trend_changed = is_uptrend != is_uptrend_prev max_ := is_trend_changed ? close : max1 min_ := is_trend_changed ? close : min1 vstop := is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1 plot(vstop, color = is_uptrend ? color.green : color.red, linewidth=2) longCondition = is_uptrend if (longCondition and use_date) strategy.entry("BUY", strategy.long) shortCondition = not is_uptrend if (shortCondition and use_date) strategy.entry("SELL", strategy.short) if (utp and not usl) strategy.exit("TP", "BUY", profit = pr) strategy.exit("TP", "SELL", profit = pr) if (usl and not utp) strategy.exit("SL", "BUY", loss = sl) strategy.exit("SL", "SELL", loss = sl) if (usl and utp) strategy.exit("TP/SL", "BUY", loss = sl, profit = pr) strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)