Meta de lucro dinâmico da ATR e estratégia de stop loss

Autora:ChaoZhang, Data: 14 de setembro de 2023 16:22:53
Tags:

Estratégia lógica

Esta estratégia utiliza metas de lucro dinâmicas e stop losses que se ajustam com base no preço e na volatilidade atuais.

A lógica é:

  1. Calcular o intervalo médio verdadeiro (ATR) durante um período (por exemplo, 20 dias)

  2. Em tendência de alta, o objetivo de lucro/parada é o preço mais alto menos o múltiplo ATR

  3. Em tendência descendente, o objetivo de lucro/parada é o preço mais baixo mais o múltiplo ATR

  4. Comércio reverso quando o preço excede a meta de lucro/paragem

  5. Mudanças de tendência quando o preço ultrapassa o objectivo de lucro/paragem

  6. Ajustar o objetivo de lucro/paragem com base no novo estado de tendência

A estratégia utiliza a ATR para definir automaticamente metas e paradas de lucro dinâmicas, o que permite o bloqueio oportuno dos lucros e evita perdas excessivas.

Vantagens

  • ATR calcula automaticamente os níveis de lucro/paragem

  • Pistas de ajuste dinâmico do preço em tempo real

  • Controlo do risco de obtenção de lucros e de cessação em tempo útil

Riscos

  • Os parâmetros ATR requerem otimização

  • Paradas muito próximas arriscam-se a ser paradas fora

  • Necessidade de monitorar alterações de ATR em tempo real

Resumo

Esta estratégia usa o ATR para definir dinamicamente os níveis de lucro/stop para trail automático.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-09-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Dhananjay Volatility stop strategy v1.0", overlay=true)


length = input(20)
mult = input(1)
atr_ = atr(length)
max1 = max(nz(max_[1]), close)
min1 = min(nz(min_[1]), close)
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 ? green : red, style=line, linewidth=2)

bearish = close < vstop 
bullish = close > vstop 


if (bullish)
    strategy.entry("Buy", strategy.long, 1)
    
    

if (bearish)
    strategy.entry("Sell", strategy.short, 1)
    
    

Mais.