Estratégia de negociação multi-time frame baseada em canais de banda


Data de criação: 2023-09-20 15:47:46 última modificação: 2023-09-20 15:47:46
cópia: 0 Cliques: 772
1
focar em
1617
Seguidores

Visão geral

A estratégia é baseada em um canal de banda de onda adaptável, com dois tipos diferentes de estratégias de tracking e stop loss, com verificação de retrospectiva sistemática em múltiplos períodos de tempo, e é uma estratégia de negociação de tipo de tracking de tendência.

Princípio da estratégia

  1. Calcula-se a trajetória ascendente e descendente do canal de banda de onda adaptável, com a largura do canal ajustada por parâmetros.

  2. A estratégia de rastreamento de breakout é abrir uma posição após a ruptura do canal e parar a perda dentro do canal.

  3. A estratégia de reversão de retorno, abrindo posição quando o preço chega ao canal e parando quando o preço retorna dentro do canal.

  4. Os indicadores CCI ajudam a avaliar o número de linhas aéreas.

  5. A retrospectiva de múltiplos períodos de tempo verificou a viabilidade de ambas as estratégias.

Análise de vantagens

  1. O canal de ondas é simples e intuitivo, e pode capturar de forma eficaz as tendências de preços.

  2. As duas estratégias podem ser adaptadas a diferentes situações de mercado, aumentando a estabilidade.

  3. Os indicadores do CCI podem ajudar a avaliar a disponibilidade de vagas.

  4. O retrospecto de vários períodos de tempo torna os resultados mais convincentes.

  5. As regras da estratégia são simples, claras e fáceis de aplicar.

Análise de Riscos

  1. Caso o canal de banda possa falhar.

  2. As duas estratégias apresentam riscos de cessação prematura ou tardia.

  3. O indicador CCI pode emitir sinais errados.

  4. Os dados de retrospecção de anomalias devem ser tratados com cautela.

  5. Pode haver um excesso de compatibilidade na otimização dos parâmetros.

Direção de otimização

  1. Teste diferentes parâmetros para encontrar a combinação ideal.

  2. Avaliação de outros indicadores para filtragem de sinais.

  3. Optimizar a estratégia de stop loss para reduzir o risco.

  4. Estudar métodos de cálculo de largura de corredor adaptada.

  5. Revisão e validação em mais variedades e ciclos.

  6. Parâmetros de otimização dinâmica usando métodos de aprendizagem de máquina.

Resumir

A estratégia baseia-se em dois tipos de estratégias de tracking de stop loss, com verificação de retrospectiva em vários períodos de tempo. A robustez do sistema pode ser aumentada por meio de otimização de parâmetros e melhorias na estratégia de stop loss, desenvolvendo-a como um sistema de negociação de tracking de tendências confiável e maduro.

Código-fonte da estratégia
/*backtest
start: 2022-09-13 00:00:00
end: 2023-09-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title = "Underworld Hunter", overlay=true)

len = input(75, minval=1, title="Length")
src = input(close, title="Source")
basis = 0.0
basis := na(basis[1]) ? sma(src, len) : ema(ema(ema(src,len),len),len)

mult = input(1.9, minval=0.001, maxval=50, title="Deviation")
dev = mult * stdev(src, len)
upper = basis + dev
lower = basis - dev

//CCI calculation and inputs

lengthcci = input(20, minval=1, title="Period for CCI")
ma = sma(close, lengthcci)
ccivalue = (src - ma) / (0.015 * dev(src, lengthcci))

//CCI plotting

cciover0 = ccivalue >= 100 and ccivalue <= 120
cciover1 = ccivalue > 120 and ccivalue <= 140
cciover2 = ccivalue > 140 and ccivalue <= 160
cciover3 = ccivalue > 160 and ccivalue <= 180
cciover4 = ccivalue > 180

cciunder0 = ccivalue <= -100 and ccivalue >= -120
cciunder1 = ccivalue <= -120 and ccivalue > -140
cciunder2 = ccivalue <= -140 and ccivalue > -160
cciunder3 = ccivalue <= -160 and ccivalue > -180
cciunder4 = ccivalue <= -180

plotshape(cciover0, title="CCIO0", location=location.abovebar, color=#c6ff1a, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder0, title="CCIU0", location=location.belowbar, color=#c6ff1a, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover1, title="CCIO1", location=location.abovebar, color=#ffff00, transp=0,style=shape.circle, size=size.tiny)
plotshape(cciunder1, title="CCIU1", location=location.belowbar, color=#ffff00, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover2, title="CCIO2", location=location.abovebar, color=#ff9900, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder2, title="CCIU2", location=location.belowbar, color=#ff9900, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover3, title="CCIO3", location=location.abovebar, color=#ff0000, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder3, title="CCIU3", location=location.belowbar, color=#ff0000, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover4, title="CCIO4", location=location.abovebar, color=#cc00cc, transp=0,style=shape.circle, size=size.tiny)
plotshape(cciunder4, title="CCIU4", location=location.belowbar, color=#cc00cc, transp=0,style=shape.circle, size=size.tiny)

//plotting

plot(upper, title="Upper shadow", color=color.black, transp = 30, linewidth = 4)
plot(upper, title="Upper line", color=#FF2E00, transp = 0, linewidth = 2)
plot(lower, title="Lower shadow", color=color.black, transp = 30, linewidth = 4)
plot(lower, title="Lower line", color=#FF2E00, transp = 0, linewidth = 2)
plot(basis, title="Basic line", color=color.red, transp = 50, linewidth = 2)

mean = input(title="Test Reverse to the Mean instead", type=input.bool, defval=false)
test = input(title="Enable testing", type=input.bool, defval=true)

ordersize=floor(50000/close)

if(close>upper and strategy.opentrades==0 and not mean and test)
    strategy.entry("Hunt Up", strategy.long, ordersize)
if (close<upper and close[1]<upper and close[2]<upper)
    strategy.close("Hunt Up", qty_percent = 100, comment = "Hunt End")

if(close<lower and strategy.opentrades==0 and not mean and test)
    strategy.entry("Hunt Down", strategy.short, ordersize)
if (close>lower and close[1]>lower and close[2]>lower)
    strategy.close("Hunt Down", qty_percent = 100, comment = "Hunt End")

//bounce of bands

if(close>upper and strategy.opentrades==0 and mean and test)
    strategy.entry("Sneak Down", strategy.short, ordersize)
if (close<upper and close[1]<upper and close[2]<upper and close>high[1])
    strategy.close("Sneak Down", qty_percent = 100, comment = "SneakEnd")

if(close<lower and strategy.opentrades==0 and mean and test)
    strategy.entry("Sneak Up", strategy.long, ordersize)
if (close>lower and close[1]>lower and close[2]>lower and close<low[1])
    strategy.close("Sneak Up", qty_percent = 100, comment = "Sneak End")