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
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.
Construir indicador CCI e bandas utilizando ta.sma() eta.dev() funções.
Utilize a entrada para selecionar a data de início do backtest.
Sinal de entrada: CCI atravessa abaixo da banda inferior e começa a aumentar.
No que diz respeito à primeira medida, a Comissão considera que a medida não é susceptível de constituir um auxílio estatal.
Saída 2: O preço cai abaixo do nível de stop loss, corte as perdas.
A estratégia só é duradoura com base na força da CCI, com paradas para controlar o risco.
A estratégia apresenta as seguintes vantagens:
Identificar as operações de sobrecompra/supervenda com o CCI para capitalizar as reversões.
Apenas a direcção longa evita riscos excessivos de maus negócios.
O filtro de força do preço garante o suporte formado antes da entrada.
O mecanismo de stop loss limita a perda por transação e gere o capital.
Parâmetros flexíveis de backtest para ajustar filtros de entrada.
A alta taxa de ganhos favorece os investidores focados na gestão de riscos.
Lógica clara e implementação simples.
Há também alguns riscos:
A tendência de longo prazo pode perder as tendências de baixa de curto prazo.
Uma má regulação dos parâmetros CCI leva a falhas.
Stop loss demasiado solto não limita as perdas.
A forte tendência de alta atravessa as paradas causando grandes perdas.
A alta frequência do comércio aumenta os custos das transacções.
Possíveis soluções:
Otimizar os parâmetros CCI para encontrar os melhores valores.
Ajustar o stop loss para equilibrar o risco e o deslizamento.
Gerenciar a frequência de entrada considerando os custos.
Combinar com filtros de tendência e de intervalo.
Algumas formas de melhorar a estratégia:
Implementar paradas dinâmicas com base na volatilidade do mercado.
Adicione filtros como o MACD para evitar que as paradas sejam muito largas.
Incorporar o lado curto quando CCI superaquecer.
Considere os custos, defina um objetivo de lucro mínimo.
Otimize os parâmetros para o período de tempo.
Aprendizagem automática para ajuste automático de parâmetros.
Adicionar dimensionamento de posição para atribuição dinâmica.
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')