Estratégia de rastreamento de tendências baseada em rupturas de canais

Autora:ChaoZhang, Data: 2023-11-23 14:04:59
Tags:

img

Resumo

Esta estratégia é uma estratégia de rastreamento de tendências projetada com base na teoria do rompimento do canal. Ela constrói um canal usando o preço mais alto e o preço mais baixo durante um determinado período e gera sinais de negociação quando o preço sai do canal. Esta estratégia é adequada para mercados de tendências e pode capturar a direção de tendência do preço para rastreamento de tendências.

Estratégia lógica

A estratégia primeiro calcula o preço mais alto e o preço mais baixo durante um período de comprimento para construir a banda superior e a banda inferior do canal. Quando o preço de fechamento atravessa a banda superior, uma posição longa é aberta. Quando o preço de fechamento atravessa a banda inferior, uma posição curta é aberta. A posição será fechada quando o preço cair de volta no canal.

A estratégia também traça um indicador EMA com comprimento *2 para determinar a direção da tendência.

Análise das vantagens

  • A estratégia pode capturar as tendências de preços e é adequada para mercados de tendências com elevado potencial de lucro.
  • Usar breakouts de canal para gerar sinais pode reduzir falsos breakouts e melhorar a qualidade do sinal.
  • Combinar com a EMA para evitar a negociação contra a tendência e garantir o acompanhamento da tendência principal.

Análise de riscos

  • As estratégias de ruptura tendem a gerar operações frequentes durante a consolidação dos preços, possivelmente incorrendo em custos elevados de negociação.
  • A estratégia não pode sair imediatamente das posições quando a tendência se inverter, o que pode levar a grandes perdas.
  • A estratégia é sensível às configurações dos parâmetros e diferentes parâmetros podem levar a resultados completamente diferentes.

Orientações de otimização

  • Incorporar outros indicadores como MACD, RSI para evitar falhas.
  • Usar algoritmos de aprendizagem de máquina para otimizar automaticamente os parâmetros e melhorar a robustez.
  • Configure stop loss para controlar a retirada máxima.

Resumo

Em resumo, esta é uma estratégia simples de rastreamento de tendências baseada em breakouts de canal para capturar tendências. Ele tem forte capacidade de rastreamento de tendências e pode alcançar bons retornos em mercados de tendências. Mas também tem alguns riscos e precisa de otimização adicional para melhorar a estabilidade. Através do ajuste de parâmetros, configuração de stop loss e combinação com outros indicadores, esta estratégia pode ser aplicada à negociação ao vivo.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3


initial_capital = 1000,
default_qty_value = 90,
default_qty_type = strategy.percent_of_equity,
pyramiding = 0,
commission_value = 0.002,
commission_type = strategy.commission.percent,
calc_on_every_tick = true
length_val = 2
max_bars_back = 1440
risk_max_drawdown = 9


strategy("Channel Break",max_bars_back=max_bars_back,initial_capital = initial_capital,default_qty_value = default_qty_value,default_qty_type = default_qty_type,pyramiding = pyramiding,commission_value = commission_value,commission_type = commission_type,calc_on_every_tick = calc_on_every_tick)
// strategy.risk.max_drawdown(risk_max_drawdown, strategy.percent_of_equity) 

length = input(title="Length",  minval=1, maxval=1000, defval=length_val)

upBound = highest(high, length)
downBound = lowest(low, length)

//plot (upBound)
//plot (downBound)
//plot (close, color=red)
//plot (ema(close,length * 2), color=green)
//
if (not na(close[length]) and time>timestamp(2018, 02, 24, 0, 00) )
    strategy.entry("Buy", strategy.long, stop=upBound + syminfo.mintick, comment="Buy")
    strategy.entry("Short", strategy.short, stop=downBound - syminfo.mintick, comment="Short")
    
position = strategy.position_size
    
    
//plot(position , title="equity", color=red,style=cross,linewidth=4)
plot(variance(position,2)>0?1:0,style=circles,linewidth=4)

message = ""

if (position > 0) 
    message = "BTCUSD L: " + tostring(strategy.position_size)
    na(position)
    
if (position < 0) 
    message = "BTCUSD S: " + tostring(strategy.position_size)
    na(position)

alertcondition(variance(strategy.position_size,2) > 0, "test", message )

Mais.