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

Renko ATR Estratégia de inversão de tendência

Autora:ChaoZhang, Data: 2024-02-01 14:30:24
Tags:

img

Resumo

A Estratégia de Reversão de Tendência Renko ATR é uma abordagem de negociação única que utiliza gráficos Renko em conjunto com o indicador Average True Range (ATR) para identificar pontos de reversão de tendência nos mercados financeiros.

Estratégia lógica

Geração Renko Brick

A estratégia primeiro calcula o valor do ATR durante um período definido e usa esse ATR como o tamanho do tijolo para o gráfico Renko. Novos tijolos Renko são desenhados quando os movimentos de preços excedem um ATR. Desta forma, o gráfico Renko pode se adaptar automaticamente à volatilidade do mercado, com tamanhos de tijolo maiores para períodos de maior volatilidade e tamanhos de tijolo menores para períodos de menor volatilidade.

Geração de sinal de compra e venda

Um sinal de compra é gerado quando o preço de abertura do gráfico Renko cruza abaixo do preço de fechamento.

Parar de Perder e Obter Lucro

A estratégia define dinamicamente os níveis de stop-loss e take-profit para cada negociação como uma porcentagem do preço de abertura da Renko, com base em parâmetros de entrada definidos pelo usuário.

Análise das vantagens

Elimina a repintura

Ao calcular manualmente os preços de abertura e fechamento, a repintura é eliminada, tornando os sinais mais precisos e oportunos.

Auto-adaptação à volatilidade

O tamanho do bloco baseado no ATR permite que a estratégia se adapte automaticamente às diferentes condições de volatilidade do mercado.

Dinâmica Stop Loss e Take Profit

O mecanismo dinâmico de fixação dos níveis de stop loss e take profit permite um melhor controlo do risco com base na volatilidade do mercado.

Visualização de gráfico limpa

O gráfico Renko filtra o ruído do mercado e fornece uma visão clara para detectar inversões de tendência.

Análise de riscos

Riscos de otimização de parâmetros

Os usuários precisam otimizar parâmetros como período ATR, stop loss % e take profit % para diferentes ambientes de mercado.

Riscos de eventos

Eventos noticiosos importantes ou comunicados de política podem causar um rápido deslizamento para além do stop loss ou aumentar os níveis de lucro, levando a grandes perdas.

Riscos de reversão fracassada

Em alguns casos, o padrão de reversão sinalizado pode não se materializar, levando a operações perdedoras.

Oportunidades de melhoria

Usando vários intervalos de tempo

Os prazos mais longos podem ser usados para medir a direção da tendência geral.

Combinação de outros indicadores

A utilização conjunta de impulso, volatilidade ou outros indicadores pode melhorar a qualidade do sinal e evitar falsos sinais.

Ajuste dinâmico dos lucros obtidos

Os rácios de lucro podem ser ajustados dinamicamente com base na volatilidade do mercado e na distância entre o preço de entrada e o preço atual.

Conclusão

A estratégia de reversão de tendência Renko ATR utiliza com sucesso gráficos Renko com indicador ATR para detectar automaticamente pontos de reversão de tendência nos mercados financeiros. As principais vantagens incluem eliminação de repintura, adaptação automática à mudança de volatilidade e stop loss / take profit dinâmico. No entanto, os usuários precisam ter cuidado com os riscos de otimização de parâmetros, riscos de eventos e riscos de reversão fracassada.


/*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=5
strategy(title='[tradinghook] - Renko Trend Reversal Strategy', shorttitle='[tradinghook] - Renko TRS', overlay=true ,initial_capital = 100, commission_value = 0.05, default_qty_value = 5)

// INPUTS
renkoATRLength = input.int(10, minval=1, title='ATR Length')
stopLossPct = input.float(3, title='Stop Loss Percentage', step=0.1)
takeProfitPct = input.float(20, title='Take Profit Percentage', step=0.1)
startDate = input(timestamp("01 July 2023 00:00"), title="Start Date")
endDate = input(timestamp("31 Dec 2025 23:59"), title="End Date")
enableShorts = input.bool(true, title="Enable Shorts")

var float stopLossPrice = na
var float takeProfitPrice = na

atr = ta.atr(renkoATRLength)

// thanks to https://www.tradingview.com/script/2vKhpfVH-Renko-XZ/ for manually calculating renkoClose and renkoOpen in order to remove repaint
getRenkoClose() =>
    p1 = 0.0
    p1 := close > nz(p1[1]) + atr ? nz(p1[1]) + atr : close < nz(p1[1]) - atr ? nz(p1[1]) - atr : nz(p1[1])
    p1

Renko3() =>
    p3 = 0.0
    p3 := open > nz(p3[1]) + atr ? nz(p3[1]) + atr : open < nz(p3[1]) - atr ? nz(p3[1]) - atr : nz(p3[1])
    p3

getRenkoOpen() =>
    open_v = 0.0
    Br_2 = Renko3()
    open_v := Renko3() != Renko3()[1] ? Br_2[1] : nz(open_v[1])
    open_v

renkoOpen = getRenkoOpen()
renkoClose = getRenkoClose()

// COLORS
colorGreen = #089981
colorRed = #F23645
bgTransparency = 95
bgColorRed = color.new(colorRed, bgTransparency)
bgColorGreen = color.new(colorGreen, bgTransparency)
lineColor = renkoClose < renkoOpen ?  colorRed : colorGreen 
bgColor = renkoClose < renkoOpen ?  bgColorRed : bgColorGreen 

// PLOTS
plot(renkoOpen, title="Renko Open", style=plot.style_line, linewidth=2, color=lineColor)
bgcolor(bgColor)

// SIGNALS
isWithinTimeRange = true
buySignal = ta.crossunder(renkoOpen, renkoClose) and isWithinTimeRange
sellSignal = ta.crossover(renkoOpen, renkoClose) and isWithinTimeRange and enableShorts

if (buySignal)
    stopLossPrice := renkoOpen * (1 - stopLossPct / 100)
    takeProfitPrice := renkoOpen * (1 + takeProfitPct / 100)
    strategy.entry("Long", strategy.long)
    strategy.exit("ExitLong", "Long", stop = stopLossPrice, limit = takeProfitPrice, comment="SL: " + str.tostring(stopLossPrice) + ", TP: " + str.tostring(takeProfitPrice))
if (sellSignal)
    stopLossPrice := renkoOpen * (1 + stopLossPct / 100)
    takeProfitPrice := renkoOpen * (1 - takeProfitPct / 100)
    strategy.entry("Short", strategy.short)
    strategy.exit("ExitShort", "Short", stop = stopLossPrice, limit = takeProfitPrice, comment="SL: " + str.tostring(stopLossPrice) + ", TP: " + str.tostring(takeProfitPrice))


Mais.