Estratégia alargada de comércio de mercadorias da pesca de fundo adaptativa da CCI

Autora:ChaoZhang, Data: 21-12-2023 14:30:03
Tags:

img

Resumo

Esta estratégia baseia-se no indicador de canal de commodities (CCI) e emprega níveis de entrada adaptativos dinâmicos para determinar o tempo de reversão da tendência, ao mesmo tempo em que usa um stop loss para bloquear os lucros.

Estratégia lógica

O indicador central é o CCI, usado para detectar zonas de sobrevenda, sugerindo oportunidades de reversão da tendência. Além disso, a extensão das zonas de sobrevenda CCI varia em diferentes instrumentos e ambientes de mercado. Portanto, esta estratégia adota uma abordagem "vidente", examinando os níveis mais baixos do CCI em determinados períodos de retrospectiva, para definir dinamicamente o nível de entrada de compra do CCI. Se o CCI mais baixo nos últimos 40 dias estiver acima de -90, então -90 se torna o novo limiar da zona de sobrevenda, e assim por diante. Este design adaptativo permite que os níveis de entrada se adequem dinamicamente a diferentes condições de mercado, perseguindo entradas mais conservadoras durante fortes tendências de queda, enquanto entradas mais agressivas durante mercados de gama.

Especificamente, o nível padrão do sinal de compra do CCI é -145. A estratégia então verifica as leituras mais baixas do CCI nos últimos 40 dias, 50 dias etc. Se o menor CCI estiver acima do próximo nível, como -90, então -90 se torna o novo nível de entrada. E assim por diante, o nível de entrada pode alternar entre -145 / -90 / -70 / -50 / -4 / 0 / +25 / +50 / +70 dinamicamente. Um sinal de entrada longo é desencadeado quando o CCI cai abaixo do nível correspondente.

Além disso, um trailing stop loss é usado para bloquear os lucros, com o nível de stop subindo junto com o preço.

Análise das vantagens

  • A Comissão concluiu que o auxílio não foi concedido em condições de concorrência.
  • A concepção adaptativa dos níveis de entrada permite que a estratégia se adapte automaticamente a diferentes ambientes de mercado
  • Trailing stop loss ajuda a bloquear os lucros de forma eficaz

Em comparação com os níveis de entrada fixos, esse design dinâmico permite otimizar o tempo de entrada.

O próprio CCI é um indicador claro e fiável para identificar os níveis de sobrecompra/supervenda. A lógica de julgar inversões de tendência com base no CCI é comprovada.

Análise de riscos

  • O CCI não é perfeito e tem alguns atributos atrasados.
  • O ajustamento dinâmico dos níveis de entrada também não pode corresponder perfeitamente às mudanças no ambiente de mercado.
  • Alta volatilidade nos mercados de commodities.

A lógica de detectar pontos de reversão de tendência tem alguns atributos atrasados. O tempo de entrada pode não ser preciso durante os aumentos repentinos de preços ou quedas. Além disso, o mecanismo adaptativo pode não se adequar perfeitamente ao ambiente atual do mercado, levando a entradas não ideais. Finalmente, altas flutuações nos mercados de commodities podem causar grandes perdas se os parâmetros de stop loss não forem definidos corretamente.

Orientações para melhorias

  • Otimizar os parâmetros e os períodos de suavização do CCI, e testar a eficácia de diferentes comprimentos do CCI
  • Teste mais tipos de níveis de entrada, encontre melhores valores padrão ou projetos adaptativos
  • Teste diferentes parâmetros de stop loss, aumente adequadamente o intervalo de stop loss para corresponder aos atributos de alta volatilidade dos mercados de commodities

Os parâmetros de stop loss podem ser melhorados, principalmente o próprio CCI, o projeto de nível de entrada e a localização precisa dos parâmetros ótimos para instrumentos específicos podem melhorar o desempenho da estratégia.

Resumo

Esta estratégia combina a lógica de usar o CCI para detectar zonas de sobrecompra / sobrevenda e o design de nível de entrada adaptativo dinâmico para capturar inversões de tendência. Em comparação com parâmetros fixos, os níveis de entrada dinâmicos melhoram significativamente a adaptabilidade. Este modelo de captura de reversão de entrada com stop loss traseiro pode aproveitar oportunidades com forte impulso e cortar perdas no tempo. Com parâmetros configurados corretamente, esta estratégia demonstra viabilidade e robustez. Mais melhorias podem ser feitas continuamente otimizando os parâmetros do CCI e as regras de nível de entrada para alcançar maior estabilidade e lucratividade.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Extended Adaptive CCI Entry Strategy for Commodities", shorttitle="Ext_Adaptive_CCI_Entry_Com", overlay=true)

// Inputs
cciLength = input(20, title="CCI Period")
defaultCCIEntryOversold = input(-145, title="Default CCI Entry Oversold Level")
adaptiveCCIEntryLevel90 = input(-90, title="Adaptive CCI Entry Level for 40 Days")
adaptiveCCIEntryLevel70_50Days = input(-70, title="Adaptive CCI Entry Level for 50 Days")
adaptiveCCIEntryLevel50 = input(-50, title="Adaptive CCI Entry Level for 60 Days")
adaptiveCCIEntryLevel4 = input(-4, title="Adaptive CCI Entry Level for 90 Days")
adaptiveCCIEntryLevel0 = input(0, title="Adaptive CCI Entry Level for 120 Days")
adaptiveCCIEntryLevel25 = input(25, title="Adaptive CCI Entry Level for 140 Days")
adaptiveCCIEntryLevel50_160Days = input(50, title="Adaptive CCI Entry Level for 160 Days")
adaptiveCCIEntryLevel70_180Days = input(70, title="Adaptive CCI Entry Level for 180 Days")
lookback40 = input(40, title="Lookback Period for -90 Level")
lookback50 = input(50, title="Lookback Period for -70 Level")
lookback60 = input(60, title="Lookback Period for -50 Level")
lookback90 = input(90, title="Lookback Period for -4 Level")
lookback120 = input(120, title="Lookback Period for 0 Level")
lookback140 = input(140, title="Lookback Period for +25 Level")
lookback160 = input(160, title="Lookback Period for +50 Level")
lookback180 = input(180, title="Lookback Period for +70 Level")

// Indicator Calculation
cci = ta.cci(close, cciLength)

// Determine adaptive entry level based on lookback periods
var float entryLevel = defaultCCIEntryOversold // Initialize with the default level
if ta.lowest(cci, lookback40) > adaptiveCCIEntryLevel90
    entryLevel := adaptiveCCIEntryLevel90
if ta.lowest(cci, lookback50) > adaptiveCCIEntryLevel70_50Days
    entryLevel := adaptiveCCIEntryLevel70_50Days
if ta.lowest(cci, lookback60) > adaptiveCCIEntryLevel50
    entryLevel := adaptiveCCIEntryLevel50
if ta.lowest(cci, lookback90) > adaptiveCCIEntryLevel4
    entryLevel := adaptiveCCIEntryLevel4
if ta.lowest(cci, lookback120) > adaptiveCCIEntryLevel0
    entryLevel := adaptiveCCIEntryLevel0
if ta.lowest(cci, lookback140) > adaptiveCCIEntryLevel25
    entryLevel := adaptiveCCIEntryLevel25
if ta.lowest(cci, lookback160) > adaptiveCCIEntryLevel50_160Days
    entryLevel := adaptiveCCIEntryLevel50_160Days
if ta.lowest(cci, lookback180) > adaptiveCCIEntryLevel70_180Days
    entryLevel := adaptiveCCIEntryLevel70_180Days

// Entry Condition
longCondition = cci < entryLevel

// Entry and Exit
if (longCondition)
    strategy.entry("Long", strategy.long, qty=1)
    alert("Long entry executed at " + str.tostring(close), alert.freq_once_per_bar)

trailOffset = input(10.0, title="Trailing Stop Offset in USD")
strategy.exit("Trailing Stop", "Long", trail_offset = trailOffset, trail_price = close)
if (close < entryLevel - trailOffset)
    alert("Long position closed at " + str.tostring(close), alert.freq_once_per_bar)

// Plotting
plot(series=cci, color=color.purple, title="CCI")
hline(price=defaultCCIEntryOversold, color=color.red, title="Default CCI Entry Oversold Level")
hline(price=adaptiveCCIEntryLevel90, color=color.orange, title="CCI -90 Level (40 Days)")
hline(price=adaptiveCCIEntryLevel70_50Days, color=color.yellow, title="CCI -70 Level (50 Days)")
hline(price=adaptiveCCIEntryLevel50, color=color.green, title="CCI -50 Level (60 Days)")
hline(price=adaptiveCCIEntryLevel4, color=color.blue, title="CCI -4 Level (90 Days)")
hline(price=adaptiveCCIEntryLevel0, color=color.purple, title="CCI 0 Level (120 Days)")
hline(price=adaptiveCCIEntryLevel25, color=color.aqua, title="CCI +25 Level (140 Days)")
hline(price=adaptiveCCIEntryLevel50_160Days, color=color.black, title="CCI +50 Level (160 Days)")
hline(price=adaptiveCCIEntryLevel70_180Days, color=color.gray, title="CCI +70 Level (180 Days)")


Mais.