Estratégia de avanço forte da CCI

Autora:ChaoZhang, Data: 2023-11-15 16:52:06
Tags:

img

Resumo

Esta estratégia baseia-se no índice clássico do canal de commodities (CCI) e só dura por muito tempo.Entra no mercado quando o indicador CCI está num nível extremamente baixo (CCI <-150 ou limiar definido pelo utilizador) e recupera a força (ou seja, CCI> CCI da vela anterior), com um filtro sobre a força dos próprios preços (ou seja, o fechamento da barra de sinal deve ser superior a uma certa diferença - fixada em 0,25% - da abertura).

A estratégia termina quando o stop loss é acionado ou quando os preços sobem acima da faixa superior do CCI.

O objectivo é alcançar uma elevada percentagem de transacções rentáveis (bem acima de 50%), em vez de capturar a duração total de uma tendência.

Estratégia lógica

  1. Construir indicador CCI e bandas utilizando ta.sma() eta.dev() funções.

  2. Utilize a entrada para selecionar a data de início do backtest.

  3. Sinal de entrada: CCI atravessa abaixo da banda inferior e começa a aumentar.

  4. No que diz respeito à primeira medida, a Comissão considera que a medida não é susceptível de constituir um auxílio estatal.

  5. Saída 2: O preço cai abaixo do nível de stop loss, corte as perdas.

  6. A estratégia só é duradoura com base na força da CCI, com paradas para controlar o risco.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. Identificar as operações de sobrecompra/supervenda com o CCI para capitalizar as reversões.

  2. Apenas a direcção longa evita riscos excessivos de maus negócios.

  3. O filtro de força do preço garante o suporte formado antes da entrada.

  4. O mecanismo de stop loss limita a perda por transação e gere o capital.

  5. Parâmetros flexíveis de backtest para ajustar filtros de entrada.

  6. A alta taxa de ganhos favorece os investidores focados na gestão de riscos.

  7. Lógica clara e implementação simples.

Análise de riscos

Há também alguns riscos:

  1. A tendência de longo prazo pode perder as tendências de baixa de curto prazo.

  2. Uma má regulação dos parâmetros CCI leva a falhas.

  3. Stop loss demasiado solto não limita as perdas.

  4. A forte tendência de alta atravessa as paradas causando grandes perdas.

  5. A alta frequência do comércio aumenta os custos das transacções.

Possíveis soluções:

  1. Otimizar os parâmetros CCI para encontrar os melhores valores.

  2. Ajustar o stop loss para equilibrar o risco e o deslizamento.

  3. Gerenciar a frequência de entrada considerando os custos.

  4. Combinar com filtros de tendência e de intervalo.

Oportunidades de melhoria

Algumas formas de melhorar a estratégia:

  1. Implementar paradas dinâmicas com base na volatilidade do mercado.

  2. Adicione filtros como o MACD para evitar que as paradas sejam muito largas.

  3. Incorporar o lado curto quando CCI superaquecer.

  4. Considere os custos, defina um objetivo de lucro mínimo.

  5. Otimize os parâmetros para o período de tempo.

  6. Aprendizagem automática para ajuste automático de parâmetros.

  7. Adicionar dimensionamento de posição para atribuição dinâmica.

Conclusão

Em resumo, esta estratégia de longo prazo capitaliza os níveis de sobrecompra / sobrevenda do CCI com filtro de força de preço e stop losses. Ele oferece uma implementação fácil, bom controle de risco e alta porcentagem de ganho. As limitações de ser longo prazo e paradas fixas podem ser abordadas através de otimização de parâmetros, entradas curtas, paradas dinâmicas, etc. A estratégia é adequada para investidores que buscam altas taxas de ganho e gestão de risco adequada.


/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='CCI High Performance long only', overlay=false )
src = input(close)
length = input.int(20, title='Period', minval=1)
lossp = input.float(8, title='Stop Loss percentage', minval=0.5, step=0.5)
scart = input.float(0.25, title='Close of the signal bar higher than Open %', minval = 0)
upperline = input.int(150, title='Upper Band', minval=0, step=10)
lowline = input.int(-150, title='Low Band', maxval=0, step=10)


// construction of CCI (not on close but in totalprice) and of bands
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
plot(cci, 'CCI', color=color.new(#996A15, 0))
band1 = hline(upperline, 'Upper Band', color=#C0C0C0, linestyle=hline.style_dashed)
band0 = hline(lowline, 'Lower Band', color=#C0C0C0, linestyle=hline.style_dashed)
fill(band1, band0, color=color.new(#9C6E1B, 90), title='Background')
// === INPUT BACKTEST RANGE ===
fromMonth = input.int(defval = 1,    title = "From Month",  minval = 1, maxval = 12)
fromDay   = input.int(defval = 1,    title = "From Day",    minval = 1, maxval = 31)
fromYear  = input.int(defval = 2016, title = "From Year",   minval = 1970)
thruMonth = input.int(defval = 1,    title = "Thru Month",  minval = 1, maxval = 12)
thruDay   = input.int(defval = 1,    title = "Thru Day",    minval = 1, maxval = 31)
thruYear  = input.int(defval = 2112, title = "Thru Year",   minval = 1970)
// === FUNCTION EXAMPLE limit for backtest ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)            // backtest start  window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)            // backtest finish window
window()  => time >= start and time <= finish ? true : false           // create function "within window of time"
//ENTRY CONDITIONS

// strategy: enter when CCI is under the low line and starts increasing. The filter is that the signal candle should mark a close higher than a x-percent
// (0.25%) of the open
// Exit when either when it reaches the target of a prices highest than high level of CCI or fixed stop loss (in percentage)
scart_level = open * (1+scart/100)
entryl = cci[1] < lowline[1] and cci > cci[1] and close > scart_level and window()
exit1 = cci> upperline
strategy.entry('Long', strategy.long, when=entryl)
strategy.close('Long', when=exit1, comment='target')

// money management (only stop loss)
losspel = strategy.position_avg_price * (1 - lossp / 100)
fixed_stop_long = close < losspel
strategy.close('Long', when=fixed_stop_long, comment='Stop Loss')



Mais.