O recurso está a ser carregado... Carregamento...

Estratégia de adaptação dinâmica de lucros e paralisação de perdas baseada no ATR e na EMA

Autora:ChaoZhang, Data: 2024-05-28 14:15:56
Tags:ATREMA

img

Resumo

Esta estratégia utiliza dois indicadores, ATR (Average True Range) e EMA (Exponential Moving Average), para ajustar dinamicamente os níveis de take profit e stop loss, a fim de se adaptar à volatilidade do mercado. A ideia principal da estratégia é usar o indicador ATR para medir a volatilidade do mercado e definir os níveis de take profit e stop loss com base na magnitude da volatilidade. Ao mesmo tempo, o indicador EMA é usado para determinar a direção da negociação. Quando o preço ultrapassa a EMA, uma posição longa é aberta, e quando o preço ultrapassa a EMA, uma posição curta é aberta. Esta estratégia pode ajustar automaticamente os níveis de take profit e stop loss de acordo com as mudanças na volatilidade do mercado, alcançando assim o objetivo do controle de risco dinâmico.

Princípio da estratégia

  1. Calcular o indicador ATR para medir a magnitude da volatilidade do mercado.
  2. Calcular o nível dinâmico de stop loss com base no valor ATR e no parâmetro múltiplo de entrada.
  3. Usar o indicador EMA como condição de filtro: abrir uma posição longa quando o preço ultrapassa a EMA e abrir uma posição curta quando o preço ultrapassa a EMA.
  4. Durante a detenção de uma posição, ajustar continuamente os níveis de take profit e stop loss com base nas alterações de preço e nas alterações dinâmicas do nível de stop loss.
  5. Quando o preço atingir o nível dinâmico de stop loss, feche a posição e abra uma posição reversa.

Vantagens da estratégia

  1. Forte adaptabilidade: ao ajustar dinamicamente os níveis de tomada de lucro e de stop loss, a estratégia pode adaptar-se às alterações da volatilidade em diferentes condições de mercado e controlar os riscos.
  2. Forte capacidade de acompanhamento de tendências: O indicador EMA é utilizado para determinar a direcção das negociações, o que permite captar eficazmente as tendências do mercado.
  3. Parâmetros ajustáveis: ao ajustar o período de ATR e vários parâmetros, o risco e o rendimento da estratégia podem ser controlados de forma flexível.

Riscos estratégicos

  1. Definição de parâmetros de risco: a definição do período de ATR e de vários parâmetros afetará diretamente o desempenho da estratégia.
  2. Risco de mercado oscilante: num mercado oscilante, a abertura e o encerramento frequentes de posições podem conduzir a grandes perdas de deslizamento e taxas de transacção.
  3. Risco de reversão da tendência: quando a tendência do mercado se inverte, a estratégia pode sofrer perdas consecutivas.

Orientações para a otimização da estratégia

  1. Introduzir mais indicadores técnicos, como o MACD e o RSI, para melhorar a precisão do julgamento da tendência.
  2. Otimizar o método de cálculo dos níveis de take profit e stop loss, como a introdução de métodos de stop loss de trailing e de stop loss de ratio dinâmico.
  3. Otimizar os parâmetros para encontrar a melhor combinação de período de ATR e vários parâmetros para melhorar a estabilidade e a rentabilidade da estratégia.
  4. Adicionar um módulo de gestão de posições para ajustar dinamicamente o tamanho da posição com base na volatilidade do mercado e no nível de risco da conta.

Resumo

Esta estratégia utiliza os indicadores ATR e EMA para ajustar dinamicamente os níveis de take profit e stop loss para se adaptar às mudanças na volatilidade do mercado, enquanto usa o indicador EMA para determinar a direção da negociação. A estratégia tem forte adaptabilidade e capacidades de tendência, mas pode enfrentar certos riscos em configurações de parâmetros, mercados oscilantes e inversões de tendência. No futuro, o desempenho da estratégia pode ser melhorado através da introdução de mais indicadores técnicos, otimização de algoritmos de take profit e stop loss, otimização de parâmetros e adição de módulos de gerenciamento de posição.


/*backtest
start: 2024-04-27 00:00:00
end: 2024-05-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy(title='UT MB&SS Bot', overlay=true)

// Inputs
a = input(1, title='Key Value. \'This changes the sensitivity\'')
c = input(10, title='ATR Period')
h = input(false, title='Signals from Heikin Ashi Candles')
stoploss = input(2.0, title='Stop Loss (ATR Multiples)')

xATR = ta.atr(c)
nLoss = a * xATR

src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close

var xATR_trailing_stop = 0.0
iff_1 = src > nz(xATR_trailing_stop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATR_trailing_stop[1], 0) and src[1] < nz(xATR_trailing_stop[1], 0) ? math.min(nz(xATR_trailing_stop[1]), src + nLoss) : iff_1
xATR_trailing_stop := src > nz(xATR_trailing_stop[1], 0) and src[1] > nz(xATR_trailing_stop[1], 0) ? math.max(nz(xATR_trailing_stop[1]), src - nLoss) : iff_2

pos = 0
iff_3 = src[1] > nz(xATR_trailing_stop[1], 0) and src < nz(xATR_trailing_stop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATR_trailing_stop[1], 0) and src > nz(xATR_trailing_stop[1], 0) ? 1 : iff_3

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

ema = ta.ema(src, 1)
above = ta.crossover(ema, xATR_trailing_stop)
below = ta.crossover(xATR_trailing_stop, ema)

buy = src > xATR_trailing_stop and above
sell = src < xATR_trailing_stop and below

barbuy = src > xATR_trailing_stop
barsell = src < xATR_trailing_stop

plotshape(buy, title='Buy', text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(sell, title='Sell', text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)

barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)

stop_level = pos == 1 ? xATR_trailing_stop - stoploss * xATR : xATR_trailing_stop + stoploss * xATR
stop_level := math.max(stop_level, nz(stop_level[1]))

if pos == 1
    strategy.exit('Exit Long', 'UT Long', stop=stop_level)
else if pos == -1
    strategy.exit('Exit Short', 'UT Short', stop=stop_level)





if buy
    strategy.entry("Enter Long", strategy.long)
else if sell
    strategy.entry("Enter Short", strategy.short)

Relacionados

Mais.