Estratégia de rastreamento da volatilidade

Autora:ChaoZhang, Data: 2023-12-01 17:53:36
Tags:

img

Resumo

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.

Princípio da estratégia

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.

Vantagens da estratégia

  • Usar as características da volatilidade dos preços para avaliar as tendências e compreender com precisão os pontos de virada dos preços
  • Parar perdas e mudar de posição em tempo útil para reduzir os riscos de reversões de mercado
  • Ajuste flexível dos parâmetros para controlar a distância entre a linha de stop loss e as flutuações de preço
  • Os parâmetros podem ser otimizados para produtos específicos para melhor adaptabilidade

Riscos da Estratégia

  • Riscos de erro de julgamento devido a rupturas inválidas Os preços podem ter rupturas inválidas insustentáveis, causando erros de julgamento das alterações de tendência
  • Por exemplo, quando o valor n é muito grande, a linha de stop loss é muito próxima e pequenas flutuações podem desencadeá-la.
  • Os valores ATR menores significam que as linhas de stop loss estão mais próximas dos preços

Orientações de otimização

  • Podem ser introduzidos indicadores auxiliares como o volume de negociação ou a aceleração da volatilidade para evitar um erro de apreciação de breakouts inválidos
  • Ajustar o valor n com base nas características dos diferentes produtos para tornar mais adequada a distância de parada de perdas
  • O período ATR também pode ser otimizado para escolher o parâmetro de período mais adequado para julgar a volatilidade da diferença de preços

Resumo

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)

Mais.