Estratégia de stop-loss de acompanhamento de tendências com base na volatilidade dos preços


Data de criação: 2023-12-01 17:53:36 última modificação: 2023-12-01 17:53:36
cópia: 6 Cliques: 666
1
focar em
1619
Seguidores

Estratégia de stop-loss de acompanhamento de tendências com base na volatilidade dos preços

Visão geral

A estratégia é uma estratégia de stop loss de acompanhamento de tendências baseada na volatilidade dos preços. Utiliza a amplitude real média de oscilação (ATR) para definir uma linha de stop loss para os movimentos de preços. O ATR reflete a volatilidade dos preços e o nível de risco.

Princípio da estratégia

A estratégia primeiro calcula o ATR, a amplitude real média de flutuação em um determinado período. Em seguida, de acordo com a direção da tendência de preços atual, se for uma tendência ascendente, o stop loss é definido como o ATR n vezes maior do preço atual menos o ATR n vezes maior; se for uma tendência descendente, o stop loss é definido como o ATR n vezes maior do preço atual mais baixo.

Quando o preço cai abaixo da linha de parada de tendência ascendente ou quebra a linha de parada de tendência descendente, determina-se que a tendência se desloca. Nesse momento, a estratégia de liquidação de perda de posição e configura uma nova linha de parada de perda de acordo com a nova direção da tendência.

Em geral, a estratégia usa a volatilidade dos preços para estabelecer uma linha de stop loss e a capacidade de julgar com precisão a mudança de tendência. Quando a tendência muda, o stop loss ajuda a estratégia a capturar a nova direção da tendência.

Vantagens estratégicas

  • Utilizando características de volatilidade de preços para determinar tendências e identificar pontos de inflexão
  • Cessação e troca de posições em tempo hábil para reduzir o risco de reversão
  • Ajuste de parâmetros flexíveis para controlar a distância entre a linha de parada e os movimentos de preço
  • Pode ser ajustado de acordo com os parâmetros de uma variedade específica, com uma maior adaptabilidade

Risco estratégico

  • Risco de erro de julgamento causado por uma ruptura ineficaz. Os preços podem sofrer uma ruptura ineficaz que não pode ser sustentada, levando a uma mudança de tendência de erro de julgamento
  • Parâmetros definidos de forma excessivamente radical podem aumentar os prejuízos. Por exemplo, um valor n excessivo pode provocar um pequeno choque quando o stop loss está muito próximo.
  • As variedades de baixa volatilidade, como as urrencies, podem ter um efeito de parada fraco. Quando o valor do ATR é menor, a linha de parada fica mais próxima do preço.

Otimização de Estratégia

  • Indicadores auxiliares, como volume de transação ou aceleração de flutuação, podem ser introduzidos para evitar erros de julgamento de quebra de validade
  • Ajustar o valor de n de acordo com as características de diferentes variedades para que a distância de parada seja mais adequada
  • O ciclo ATR também pode ser otimizado, selecionando os parâmetros de ciclo mais adequados para determinar a volatilidade da diferença de preço

Resumir

A estratégia é, em geral, uma boa implementação do algoritmo de configuração de linha de parada baseada na volatilidade dos preços. Ela é mais precisa para avaliar o movimento dos preços e é capaz de capturar os pontos críticos de mudança de tendência. Ao mesmo tempo, oferece um certo espaço de ajuste de parâmetros e é mais adaptável.

Código-fonte da estratégia
/*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)