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.
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.
A estratégia de rastreamento de breakout é abrir uma posição após a ruptura do canal e parar a perda dentro do canal.
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.
Os indicadores CCI ajudam a avaliar o número de linhas aéreas.
A retrospectiva de múltiplos períodos de tempo verificou a viabilidade de ambas as estratégias.
O canal de ondas é simples e intuitivo, e pode capturar de forma eficaz as tendências de preços.
As duas estratégias podem ser adaptadas a diferentes situações de mercado, aumentando a estabilidade.
Os indicadores do CCI podem ajudar a avaliar a disponibilidade de vagas.
O retrospecto de vários períodos de tempo torna os resultados mais convincentes.
As regras da estratégia são simples, claras e fáceis de aplicar.
Caso o canal de banda possa falhar.
As duas estratégias apresentam riscos de cessação prematura ou tardia.
O indicador CCI pode emitir sinais errados.
Os dados de retrospecção de anomalias devem ser tratados com cautela.
Pode haver um excesso de compatibilidade na otimização dos parâmetros.
Teste diferentes parâmetros para encontrar a combinação ideal.
Avaliação de outros indicadores para filtragem de sinais.
Optimizar a estratégia de stop loss para reduzir o risco.
Estudar métodos de cálculo de largura de corredor adaptada.
Revisão e validação em mais variedades e ciclos.
Parâmetros de otimização dinâmica usando métodos de aprendizagem de máquina.
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.
/*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")