Estratégia de seguimento da tendência de ruptura do canal ATR

Autora:ChaoZhang, Data: 2024-01-03 11:53:52
Tags:

img

Resumo

Esta estratégia utiliza o canal ATR e a teoria do breakout para seguir as tendências entrando quando o canal é quebrado.

Princípio

Esta estratégia constrói bandas superiores e inferiores com preços altos, baixos, fechados e indicador ATR para formar um canal ATR. A largura do canal é determinada pelo tamanho do parâmetro ATR. Quando o preço atravessa o canal, ele é julgado como o início de uma tendência, em que os pontos de posições longas ou curtas são inseridas. A estratégia tem duas camadas de sinais de negociação. Quando o preço atravessa uma largura ATR, ele é considerado uma tendência emergente, desencadeando a primeira camada de pontos de compra/venda. Quando o preço atravessa duas larguras ATR, ele é considerado uma tendência acelerada, desencadeando a segunda camada de pontos de compra/venda.

Análise das vantagens

As principais vantagens desta estratégia são:

  1. O uso de indicadores ATR para a construção de canais considera a volatilidade do mercado melhor do que as médias móveis simples.
  2. Os pontos de compra/venda de dois níveis permitem a entrada por etapas com riscos controláveis.
  3. A teoria da ruptura localiza com precisão os pontos-chave da tendência.
  4. O código conciso é fácil de compreender e implementar.

Análise de riscos

Os principais riscos desta estratégia são:

  1. A dependência de um único indicador significa uma elevada probabilidade de falha caso o ATR falhe.
  2. A ausência de stop loss e gestão de posições leva a um controlo insuficiente do risco.
  3. A utilidade necessita de verificação e pode apresentar um desempenho inferior em condições de negociação em tempo real.
  4. Parâmetros inadequados podem causar surpresas ou excesso de negociação.

Orientações de otimização

As direcções de otimização desta estratégia incluem:

  1. Adicionar filtros com múltiplos indicadores para evitar erros de julgamento.
  2. Adicionar módulos de stop loss para melhorar o controlo de riscos.
  3. Adicionar controlo de posição e gestão de dinheiro.
  4. Ajuste de parâmetros para diferentes produtos.
  5. Reduzir a frequência de negociação e o dimensionamento das posições para negociação ao vivo.

Resumo

O quadro geral desta estratégia é claro e utilizável como prova de conceito. Mas existem lacunas no comércio ao vivo que permitem otimizações substanciais. Se os controles de risco e as frequências de negociação puderem ser melhorados, as perspectivas de aplicação seriam boas.


/*backtest
start: 2023-12-03 00:00:00
end: 2024-01-02 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Myhaj_Lito

//@version=5
strategy("Renko Trend Strategy",shorttitle = "RENKO-Trend str.",overlay = true)
TF = input.timeframe(title='TimeFrame', defval="60")
ATRlength = input.int(title="ATR length", defval=60, minval=2, maxval=1000)

HIGH = request.security(syminfo.tickerid, TF, high)
LOW = request.security(syminfo.tickerid, TF, low)
CLOSE = request.security(syminfo.tickerid, TF, close)
ATR = request.security(syminfo.tickerid, TF, ta.atr(ATRlength))


RENKOUP = float(na)
RENKODN = float(na)
H = float(na)
COLOR = color(na)
BUY = int(na)
SELL = int(na)
UP = bool(na)
DN = bool(na)
CHANGE = bool(na)

RENKOUP := na(RENKOUP[1]) ? (HIGH + LOW) / 2 + ATR / 2 : RENKOUP[1]
RENKODN := na(RENKOUP[1]) ? (HIGH + LOW) / 2 - ATR / 2 : RENKODN[1]
H := na(RENKOUP[1]) or na(RENKODN[1]) ? RENKOUP - RENKODN : RENKOUP[1] - RENKODN[1]
COLOR := na(COLOR[1]) ? color.white : COLOR[1]
BUY := na(BUY[1]) ? 0 : BUY[1]
SELL := na(SELL[1]) ? 0 : SELL[1]
UP := false
DN := false
CHANGE := false

// calculating 
if not CHANGE and close >= RENKOUP[1] + H * 2
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1] + ATR * 2
    RENKODN := RENKOUP[1] + ATR
    COLOR := color.rgb(0, 255, 170,60)
    SELL := 0
    BUY += 2
    BUY


if not CHANGE and close >= RENKOUP[1] + H
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1] + ATR
    RENKODN := RENKOUP[1]
    COLOR := color.rgb(0, 230, 38,60)
    SELL := 0
    BUY += 1
    BUY

if not CHANGE and close <= RENKODN[1] - H * 2
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1] - ATR * 2
    RENKOUP := RENKODN[1] - ATR
    COLOR := color.rgb(255, 92, 43,60)
    BUY := 0
    SELL += 2
    SELL
if not CHANGE and close <= RENKODN[1] - H
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1] - ATR
    RENKOUP := RENKODN[1]
    COLOR := color.rgb(245, 69, 69,60)
    BUY := 0
    SELL += 1
    SELL
//// STRATEGY 
if(UP)
    strategy.entry("Long",strategy.long)
if(DN)
    strategy.entry("Short",strategy.short)


// ploting 

bgcolor(COLOR)


Mais.