O recurso está a ser carregado... Carregamento...

A CCI + MA aplicam uma estratégia de compra de retorno

Autora:ChaoZhang, Data: 2024-05-24 17:45:49
Tags:CCIMA

img

Resumo

O CCI + MA Crossover Pullback Buy Strategy é uma estratégia de negociação quantitativa que combina o Índice do Canal de Commodities (CCI) e sinais de crossover de média móvel dupla. A estratégia compra quando o preço retorna à média móvel rápida e o CCI indica condições de sobrevenda após um crossover de alta. Vende quando o preço sobe para a média móvel rápida e o CCI indica condições de sobrecompra após um crossover de baixa. Combinando o CCI e os sinais de crossover de média móvel dupla, esta estratégia pode capturar melhor as oportunidades de tendência, alcançando melhores pontos de entrada e saída através de compras de pullback e vendas de rali, melhorando assim a relação risco-recompensa.

Estratégia lógica

  1. Calcular o indicador CCI com base em parâmetros CCI definidos pelo utilizador (fonte, período, tipo de média móvel, limiares de sobrecompra/supervenda).
  2. Determinar as condições de sobrecompra/supervenda do CCI. Definir a cor de fundo em vermelho quando o CCI está acima do limiar de sobrecompra e verde quando está abaixo do limiar de sobrevenda.
  3. Calcular as médias móveis rápidas e lentas com base em parâmetros definidos pelo utilizador (fonte, período, tipo de média móvel).
  4. Identificar cruzes de alta e baixa. Traçar um sinal de alta quando o MA rápido cruza acima do MA lento, e um sinal de baixa quando o MA rápido cruza abaixo do MA lento.
  5. Tomar decisões comerciais:
    • Entrada longa: quando a MA rápida está acima da MA lenta, a vela anterior fecha abaixo da MA rápida, a vela atual é de alta e o CCI está abaixo do limiar de sobrevenda, comprar para abrir uma posição longa.
    • Entrada curta: quando o MA rápido está abaixo do MA lento, a vela anterior fecha acima do MA rápido, a vela atual é de baixa e o CCI está acima do limiar de sobrecompra, vender para abrir uma posição curta.

Vantagens da estratégia

  1. Seguimento da tendência: os sinais duplos de cruzamento da média móvel ajudam a identificar a direcção da tendência e a alinhá-la melhor com as tendências do mercado.
  2. Entrada contra-tendência: esperar que os preços recuem para comprar ou que os preços subam para vender após a confirmação da tendência pode levar a melhores preços de entrada e melhorar a relação risco-recompensa.
  3. Redução dos falsos sinais: a combinação do CCI com os sinais cruzados da média móvel pode efetivamente reduzir os falsos sinais gerados por um único indicador.
  4. Parâmetros flexíveis: os utilizadores podem definir de forma flexível os parâmetros do CCI e da média móvel de acordo com as suas preferências para otimizar o desempenho da estratégia.

Riscos estratégicos

  1. Risco de mercado agitado: Em um mercado agitado, cruzes de alta e baixa freqüentes podem levar a mais perdas nos negócios.
  2. Risco de parâmetros: configurações inadequadas de parâmetros podem resultar em mau desempenho da estratégia.
  3. Risco de tendência: quando as tendências do mercado se revertem, a estratégia pode atrasar as saídas e sofrer maiores retrações.

Orientações para a otimização da estratégia

  1. Introduzir o dimensionamento das posições para ajustar dinamicamente o tamanho das posições de cada operação com base na força e volatilidade da tendência atual para um melhor controlo do risco.
  2. Otimizar as condições de entrada incorporando indicadores de volume ou outros indicadores de confirmação auxiliares para melhorar a fiabilidade dos sinais de entrada.
  3. Otimizar as condições de saída definindo trailing stops ou time stops para reduzir a perda máxima por transação.
  4. Realizar a otimização dos parâmetros para diferentes mercados e instrumentos separadamente para melhorar a adaptabilidade e a robustez da estratégia.

Resumo

A estratégia de compra crossover Pullback é uma estratégia de negociação quantitativa que combina as vantagens de seguir tendências e entrar em contra-tendências. Ao capturar a direção da tendência com médias móveis duplas e identificar zonas de sobrecompra/supervenda com o indicador CCI, enquanto espera por pullbacks e rali de preços para alcançar melhores preços de entrada, a estratégia pode potencialmente melhorar a lucratividade e a relação risco-recompensa até certo ponto. No entanto, a estratégia também enfrenta riscos como otimização de parâmetros, mercados agitados e mudanças bruscas de tendência.


/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tradedots

//@version=5
strategy("CCI + MA Crossover Pullback Buy Strategy [TradeDots]", overlay=true)


ma(source, length, type) =>
  type == "SMA" ? ta.sma(source[1], length) :
  type == "EMA" ? ta.ema(source[1], length) :
  type == "SMMA (RMA)" ? ta.rma(source[1], length) :
  type == "WMA" ? ta.wma(source[1], length) :
  type == "VWMA" ? ta.vwma(source[1], length) :
  na

//CCI settings
cci_coloring  = input.bool(true, "CCI Background Color", group = "Commodity channel index")
cci_length    = input.int(20,"CCI Length", group = "Commodity channel index")
cci_ma_type   = input.string("EMA","CCI MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group = "Commodity channel index")
cci_soruce    = input(hlc3, "CCI Source", group = "Commodity channel index")
cci_threshold = input.int(100, "CCI Threshold", group = "Commodity channel index")
cci_ma = ma(cci_soruce, cci_length, cci_ma_type)
cci = (cci_soruce - cci_ma) / (0.015 * ta.dev(cci_soruce, cci_length))

bgcolor(cci > cci_threshold and cci_coloring ? color.new(#f9396a, 80) : cci < -cci_threshold and cci_coloring? color.new(#9cff87, 80) : na, title = "CCI Overbought / Oversold")

//ma crossover settings
input_crossover_labels = input.bool(true, "Show Crossover Labels", group="Moving average")

fastma_type   = input.string("EMA","", inline="fastma", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Moving average")
fastma_source = input(close, "", inline="fastma", group="Moving average")
fastma_length = input.int(10, "", inline="fastma", minval=1,group="Moving average")
fastma_color  = input(#e2fdff, "", inline="fastma",group="Moving average")
fastma = ma(fastma_source, fastma_length, fastma_type)
fastmaPlot = plot(fastma, color = #b7e4c7, linewidth = 2, title = "Fast MA")

slowma_type   = input.string("EMA","", inline="slowma", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Moving average")
slowma_source = input(close, "", inline="slowma", group="Moving average")
slowma_length = input.int(30, "", inline="slowma", minval=1,group="Moving average")
slowma_color  = input(#e2fdff, "", inline="slowma",group="Moving average")
slowma = ma(slowma_source, slowma_length, slowma_type)
slowmaPlot = plot(slowma, color = #2d6a4f, linewidth = 2, title = "Slow MA")

bullish_crossover = ta.crossover(fastma, slowma)
bearish_crossover = ta.crossunder(fastma, slowma)

// // strategy
// if bullish_crossover and input_crossover_labels
//     line.new(bar_index, close, bar_index, close * 1.01, extend = extend.both, color = color.new(#9cff87, 30), style = line.style_dotted, width = 3)
//     label.new(bar_index,low, "Bullish Crossover", style = label.style_label_up, color = #9cff87)

// else if bearish_crossover and input_crossover_labels
//     line.new(bar_index, close, bar_index, close * 1.01, extend = extend.both, color = color.new(#f9396a, 30), style = line.style_dotted, width = 3)
//     label.new(bar_index, high, "Bearish Crossover", style = label.style_label_down, color = #f9396a, textcolor = color.white)

if fastma > slowma and close[1] < fastma and close > open and cci < -cci_threshold
    strategy.entry("Long", strategy.long)
    // if strategy.opentrades == 0 or strategy.opentrades.size(strategy.opentrades -1) < 0
    //     label.new(bar_index,low, "🟢 Long", style = label.style_label_up, color = #9cff87)

if fastma < slowma and close[1] > fastma and close < open and cci > cci_threshold
    strategy.entry("Short", strategy.short)
    // if strategy.opentrades == 0 or strategy.opentrades.size(strategy.opentrades -1) > 0
    //     label.new(bar_index, high, "🔴 Short", style = label.style_label_down, color = #f9396a, textcolor = color.white)

Relacionados

Mais.