Melhor Supertrend CCI Multi Timeframe Trading Strategy

Autora:ChaoZhang, Data: 2024-01-18 15:09:33
Tags:

img

Resumo

Esta estratégia integra o indicador Supertrend e o Índice do Canal de Commodities (CCI) para realizar um rastreamento de tendências de vários prazos e geração de sinais comerciais. A ideia principal é usar o indicador CCI para julgar a direção da tendência de curto prazo, combinando o indicador Supertrend para determinar a direção da tendência de médio a longo prazo.

Estratégia lógica

Indicador do CCI para a tendência a curto prazo

O indicador CCI pode identificar cenários de sobrecompra e sobrevenda. Um cruzamento ascendente da linha 0 é um sinal de alta, enquanto um descendente é um sinal de baixa.

cci_period = input(28, "CCI Period")
cci = cci(source, cci_period)  
ML = input(0, "CCI Mid Line pivot")

O código acima define o período do CCI e a posição da linha média.

TrendUp := cci[1] > ML ? max(Up,TrendUp[1]) : Up
TrendDown := cci[1]< ML ? min(Dn,TrendDown[1]) : Dn  

Este código verifica se o cci atravessa acima/abaixo da linha 0 para atualizar a faixa superior/inferior da Supertrend.

Supertendência para a tendência de médio a longo prazo

O indicador Supertrend combina o ATR com o preço para determinar tendências de médio a longo prazo.

Supertrend é calculado como:

Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd)) 

Onde Fator e Pd são parâmetros ajustáveis.

A variável tendência determina a direção actual da Supertendência:

Trend := cci > ML ? 1: cci < ML ? -1: nz(Trend[1],1)  

Integrar o CCI e o Supertrend

Ao integrar o CCI e o Supertrend, esta estratégia realiza o julgamento da tendência de vários prazos.

Quando as direcções concordam, são gerados sinais comerciais mais confiáveis.

isLong = st_trend == 1 
isShort = st_trend == -1

Entrar quando o curto e médio prazo se alinham, sair quando as direcções discordam.

Vantagens

Julgamento de vários prazos

Integra indicadores de curto e médio prazo para sinais mais fiáveis.

Parâmetros personalizáveis

O Fator Supertrend e o Período CCI podem ser ajustados às condições do mercado.

Simples e claro

Lógica simples e fácil de entender, ótimo para iniciantes.

Ampla aplicabilidade

Aplicável a ações, forex, criptomoedas por ajuste de parâmetros.

Riscos e soluções

Preço Whipsaw

Muitos sinais falsos podem ocorrer quando os preços flutuam violentamente.

Atrás dos movimentos fortes

Combine indicadores de impulso para rastrear tendências aceleradas.

Sem Pérdida Stop

Para efeitos de controlo do risco, adicionar o stop loss baseado no ATR.

Orientações de otimização

Correlação de mercado

Ajustar parâmetros para diferentes mercados.

Combinação de Impulso

Combine com MACD, KDJ etc. para captar fortes movimentos de ímpeto.

Aprendizagem de Máquina

Utilize métodos de IA e conjunto para otimizar parâmetros e regras.

Conclusão

Esta estratégia combina com sucesso Supertrend e CCI para rastreamento de tendências em vários prazos. Lógica simples, bom potencial de recompensa e personalização. Pode melhorar ainda mais através de ajuste de parâmetros, stop loss e aprendizado de máquina para se tornar um sistema de negociação sólido.


/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//@author=Daveatt

StrategyName = "Best Supertrend CCI Strategy"
ShortStrategyName = "Best Supertrend CCI Strategy"

strategy(title=StrategyName, shorttitle=ShortStrategyName, overlay=true )

//////////////////////////
//* COLOR CONSTANTS *//
//////////////////////////

AQUA = #00FFFFFF
BLUE = #0000FFFF
RED  = #FF0000FF
LIME = #00FF00FF
GRAY = #808080FF
DARKRED   = #8B0000FF
DARKGREEN = #006400FF
GOLD = #FFD700
WHITE = color.white

// Plots
GREEN_LIGHT     = color.new(color.green, 40)
RED_LIGHT       = color.new(color.red, 40) 
BLUE_LIGHT      = color.new(color.aqua, 40)
PURPLE_LIGHT    = color.new(color.purple, 40) 

source = input(close)

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////// CCI /////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

cci_period = input(28, "CCI Period")
cci = cci(source, cci_period)
//UL = input(80, "Upper level")
//LL = input(20, "Lower Level")
ML = input(0, "CCI Mid Line pivot")

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////// SUPERTREND /////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

Factor=input(3,title="[ST] Factor", minval=1,maxval = 100, type=input.float)
Pd=input(3, title="[ST] PD", minval=1,maxval = 100)

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/////////////////////// SUPERTREND DETECTION //////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

f_supertrend(Factor, Pd) =>

    Up=hl2-(Factor*atr(Pd))
    Dn=hl2+(Factor*atr(Pd))
    
    TrendUp = 0.0
    TrendUp := cci[1] > ML ? max(Up,TrendUp[1]) : Up
    TrendDown = 0.0
    TrendDown := cci[1]< ML ? min(Dn,TrendDown[1]) : Dn
    Trend = 0.0
    Trend := cci > ML ? 1: cci < ML ? -1: nz(Trend[1],1)
    Tsl = Trend==1? TrendUp: TrendDown

    [Trend, Tsl]

[st_trend, st_tsl] = f_supertrend(Factor, Pd)

// Plot the ST
linecolor = close >= st_tsl ? color.green : color.red
plot(st_tsl, color = linecolor , linewidth = 3,title = "SuperTrend", transp=0)

isLong  = st_trend == 1
isShort = st_trend == -1

longClose   = isLong[1] and isShort
shortClose  = isShort[1] and isLong

strategy.entry("Long", 1, when=isLong)
strategy.close("Long", when=longClose )

strategy.entry("Short", 0,  when=isShort)
strategy.close("Short", when=shortClose )


Mais.