
A melhor estratégia de stop loss multiplicador de ATR é uma estratégia de acompanhamento de tendências que usa o multiplicador da amplitude real média ((ATR) para definir o ponto de parada, o risco de ajuste dinâmico. Quando a tendência dos preços muda, ele pode parar em tempo hábil e evitar grandes perdas.
A estratégia primeiro calcula a média móvel simples dos períodos de SMA rápido e SMA lento, fazendo mais quando atravessa SMA lento no SMA rápido e fazendo menos quando atravessa SMA lento no SMA rápido.
Após a entrada, ele monitora o valor do ATR em tempo real. O ATR representa a amplitude média de flutuação em um determinado período anterior. A estratégia permite que configuremos o comprimento do período do ATR (default 14) e o múltiplo (default 2). O sistema calcula o valor do ATR na entrada e multiplica o múltiplo configurado como a distância de parada.
Por exemplo, se o ATR após a entrada é de 50 pontos e o múltiplo é definido como 2, o intervalo de parada é de 100 pontos. Se o preço for executado posteriormente acima de 100 pontos, o aviso de parada será acionado. Isso pode interromper o prejuízo a tempo, evitando perdas excessivas.
A estratégia leva em consideração o discernimento de tendências e só ativa a parada de posição longa quando o sinal de compra coincide com a tendência de alta. O sinal de curto prazo é ativado quando coincide com a tendência de baixa.
As linhas de stop-loss são traçadas no gráfico e podem ser verificadas em tempo real. Quando as condições de stop-loss são ativadas, as posições correspondentes também são automaticamente eliminadas pelo sistema.
A maior vantagem da estratégia é o ajuste dinâmico do intervalo de parada, que pode ser modificado automaticamente de acordo com a variação da taxa de volatilidade do mercado. Quando a taxa de volatilidade aumenta, o intervalo de parada também aumenta, reduzindo a probabilidade de o intervalo de parada ser ultrapassado.
Em comparação com o Stop Loss Fixed, o método permite controlar efetivamente os perdas individuais enquanto segue a tendência. Ele garante espaço para ganhos e também presta atenção ao gerenciamento de riscos.
Além disso, em combinação com o julgamento de tendências, essa forma de parar os prejuízos pode reduzir o número de situações em que a região de liquidação é afetada por tremores.
O principal risco desta estratégia é o risco de uma curta retracção dos preços durante a posse, desencadeando um stop loss. Especialmente quando o ATR é muito curto, a distância de stop loss não pode filtrar completamente os efeitos das flutuações de curto prazo.
Outro risco é que, em situações extremas, os movimentos de salto de preço podem atravessar diretamente a linha de stop loss. Isso requer um maior multiplicador de stop loss, mas também significa uma menor margem de lucro.
Finalmente, a estratégia não leva em consideração o impacto da noite e da negociação antes do prazo no valor do ATR. Isso pode levar a que os dados do ATR calculados pela estratégia sejam imprecisos no início ou no fim do prazo.
A estratégia pode ser melhorada em vários aspectos:
Optimizar os parâmetros do ciclo ATR para testar a melhor combinação de parâmetros em diferentes mercados
Comparação entre a taxa de retorno dos conjuntos de múltiplos fixos e variáveis dinâmicos
ATR calculado em combinação com o dia de lançamento e o dia anterior ao lançamento para minimizar o impacto do salto do preço de abertura
Configuração de condição ATR: ativada somente após o ATR atingir um determinado nível, para evitar perdas desnecessárias em mercados de baixa volatilidade
Combinação de mais condições de filtragem: informações como tendências de grande escala, indicadores de quantidade de energia, etc.
A melhor estratégia de stop loss multiplicador de ATR permite um equilíbrio eficaz entre o acompanhamento de tendências e o controle de risco, ajustando dinamicamente a distância de parada. Em comparação com a distância de parada fixa, ela pode limitar efetivamente as perdas individuais, garantindo espaço para ganhos.
É claro que ainda há alguns riscos potenciais a serem considerados, tais como os saltos de preço, paradas de perda excessivamente sensíveis, etc. Podemos continuar a otimizar a estratégia em vários níveis, aumentando a estabilidade e a taxa de retorno.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//@author=Daveatt
//This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
SystemName = "BEST ATR Stop Multiple Strategy"
TradeId = "BEST"
InitCapital = 100000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 1
CalcOnorderFills = true
CalcOnTick = true
DefaultQtyType = strategy.fixed
DefaultQtyValue = strategy.fixed
Precision = 2
Overlay=true
strategy(title=SystemName, shorttitle=SystemName, overlay=Overlay )
fastSMAperiod = input(defval=15, title='Fast SMA', type=input.integer, minval=2, step=1)
slowSMAperiod = input(defval=45, title='Slow SMA', type=input.integer, minval=2, step=1)
src = close
// Calculate moving averages
fastSMA = sma(src, fastSMAperiod)
slowSMA = sma(src, slowSMAperiod)
// Calculate trading conditions
enterLong = crossover(fastSMA, slowSMA)
enterShort = crossunder(fastSMA, slowSMA)
// trend states
since_buy = barssince(enterLong)
since_sell = barssince(enterShort)
buy_trend = since_sell > since_buy
sell_trend = since_sell < since_buy
is_signal = enterLong or enterShort
// get the entry price
entry_price = valuewhen(enterLong or enterShort, src, 0)
// Plot moving averages
plot(series=fastSMA, color=color.teal)
plot(series=slowSMA, color=color.orange)
// Plot the entries
plotshape(enterLong, style=shape.circle, location=location.belowbar, color=color.green, size=size.small)
plotshape(enterShort, style=shape.circle, location=location.abovebar, color=color.red, size=size.small)
///////////////////////////////
//======[ Trailing STOP ]======//
///////////////////////////////
// use SL?
useSL = input(true, "Use stop Loss")
// ATR multiple Stop
stop_atr_length = input(14,title="ATR Length", minval=1, type=input.integer)
stop_atr_mult = input(2,title="ATR Multiple", minval=0.05, step=0.1, type=input.float)
// Global STOP
stop_price = 0.0, stop_price := nz(stop_price[1])
// STOP ATR
var stop_atr = 0.0
var entry_stop_atr = 0.0
stop_atr := nz(atr(stop_atr_length))
if enterLong or enterShort
entry_stop_atr := stop_atr * stop_atr_mult
// display the ATR value multiple
plotshape(enterLong, title='ATR Long Stop value', style=shape.labelup,
location=location.bottom, color=color.green, transp=0, text='', textcolor=color.navy, editable=true, size=size.small, show_last=1, size=size.small)
// var label atr_long_label = na
// var label atr_short_label = na
lapos_y_entry_up = lowest(30)
lapos_y_entry_dn = highest(30)
// text_label = "ATR value: " + tostring(stop_atr, '#.#') + "\n\nATR Multiple value: " + tostring(entry_stop_atr, '#.#')
// if enterLong
// label.delete(atr_long_label)
// atr_long_label := label.new(bar_index, lapos_y_entry_up, text=text_label,
// xloc=xloc.bar_index, yloc=yloc.price, color=color.green, style=label.style_labelup, textcolor=color.white,
// size=size.normal)
// if enterShort
// label.delete(atr_short_label)
// atr_short_label := label.new(bar_index, lapos_y_entry_dn, text=text_label,
// xloc=xloc.bar_index, yloc=yloc.price, color=color.red, style=label.style_labeldown, textcolor=color.black,
// size=size.normal)
// Determine trail stop loss prices
longStopPrice = 0.0, shortStopPrice = 0.0
longStopPrice := if useSL and buy_trend
stopValue = entry_price - entry_stop_atr
else
0
shortStopPrice := if useSL and sell_trend
stopValue = entry_price + entry_stop_atr
else
999999
//////////////////////////////////////////////////////////////////////////////////////////
//*** STOP LOSS HIT CONDITIONS TO BE USED IN ALERTS ***//
//////////////////////////////////////////////////////////////////////////////////////////
cond_long_stop_loss_hit = useSL and buy_trend and crossunder(low, longStopPrice[1])
cond_short_stop_loss_hit = useSL and sell_trend and crossover(high, shortStopPrice[1])
// Plot stop loss values for confirmation
plot(series=useSL and buy_trend and low >= longStopPrice
? longStopPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Long Trail Stop")
plot(series=useSL and sell_trend and high <= shortStopPrice
? shortStopPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Short Trail Stop")
close_long = cond_long_stop_loss_hit
close_short = cond_short_stop_loss_hit
// Submit entry orders
strategy.entry(TradeId + " L", long=true, when=enterLong)
strategy.close(TradeId + " L", when=close_long)
//if (enterShort)
strategy.entry(TradeId + " S", long=false, when=enterShort)
strategy.close(TradeId + " S", when=close_short)