Estratégia de negociação bidirecional de filtragem de tendência CCI+RSI+KC longa e curta

CCI RSI KC SMA EMA SMMA CMA TMA
Data de criação: 2024-05-15 16:56:03 última modificação: 2024-05-15 16:56:03
cópia: 1 Cliques: 671
1
focar em
1617
Seguidores

Estratégia de negociação bidirecional de filtragem de tendência CCI+RSI+KC longa e curta

Visão geral

Esta estratégia utiliza três indicadores técnicos CCI, RSI e KC, combinados com filtros de tendência, para realizar negociações bidirecionais multipolares em pares de moedas AUDNZD e GBPNZD. A estratégia usa o CCI e o RSI para julgar a sobrevenda e a sobrevenda, com KC como base de referência para o stop loss, e usa a média móvel como filtro de tendência para abrir posições em situações de tendência. A estratégia já foi retrospectivamente testada em dados históricos dos últimos 5 anos e obteve ganhos estáveis.

Princípio da estratégia

  1. Calcule o CCI, o RSI e o KC. O KC é adicionado ao ATR para a linha média e o ATR é subtraído da linha média.
  2. Selecione o tipo de média móvel (SMA, EMA, SMMA, CMA ou TMA) e o método de filtragem de tendência (OFF, POSITIVO ou INVERSO) de acordo com os parâmetros de entrada.
  3. Condições de abertura de posições múltiplas: Permitido fazer mais, CCI < linha de superalimento, preço de fechamento < KC abaixo da linha, RSI < linha de superalimento, volume de transação > 50 média de ciclo*Não há mais posições atuais.
  4. Condições de abertura de posição a zero: permitida a folga, CCI> linha de sobrecompra, preço de fechamento> KC em linha, RSI> linha de sobrecompra, volume de transação> média de 50 ciclos*Multiplicação de posições em que não há vagas
  5. Condição de liquidação múltipla: CCI> 0 ◦ Condição de liquidação a céu aberto: CCI < 0 ◦
  6. Alerta para abertura e para fechamento de posições.

Vantagens estratégicas

  1. A combinação de vários indicadores para um julgamento integrado aumenta a precisão do sinal.
  2. O método de filtragem de tendências permite um ajuste flexível de acordo com as tendências do mercado.
  3. Os tipos de média móvel são opcionais e adaptam-se a diferentes características do mercado.
  4. Comprovado por dados históricos de longa duração, com boa estabilidade e adequado para uso prolongado.
  5. O que é um negócio bidirecional, adaptado a todos os tipos de situações, com mais oportunidades de lucro?
  6. O nível de automação é alto, não requer intervenção humana, e economiza tempo e energia.

Risco estratégico

  1. A falta de um parâmetro tradicional de parada de prejuízos pode levar a uma maior retração em situações extremas.
  2. A tendência é para que as posições baixas sejam mais frequentes em mercados em turbulência, aumentando os custos de transação.
  3. Com um ciclo CCI relativamente curto, pode haver sinais de ruído.
  4. O filtro de tendências tem um efeito limitado quando a tendência é incerta ou a volatilidade do mercado aumenta.
  5. Posições fixas, que não podem se adaptar às variações da volatilidade do mercado.

Direção de otimização da estratégia

  1. Pode-se considerar aumentar o stop loss móvel ou o stop loss de pontos fixos para controlar o risco de uma única transação.
  2. Os parâmetros do RSI e do CCI podem ser ainda mais otimizados para reduzir o sinal de ruído.
  3. Pode-se considerar a introdução de indicadores de volatilidade, como o ATR, para ajustar as posições e o stop loss de acordo com a volatilidade do mercado.
  4. Adicionar mais pares de moedas e otimizar os parâmetros de acordo com as características de cada variedade.
  5. Tente introduzir tecnologias de inteligência artificial, como aprendizado de máquina, para se adaptar aos parâmetros de otimização.

Resumir

A estratégia usa vários indicadores clássicos, e é mais fácil de escrever e avaliar no trading view. O efeito do feedback é bom, mas também é necessário controlar o risco e ajustar os parâmetros no mercado real. É recomendado testar o capital inicialmente, depois de acumular experiência e aumentar gradualmente o investimento.

Código-fonte da estratégia
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('CCI Strategy with Trend Filter AUDNZD, GBPNZD', overlay=true, default_qty_type=strategy.cash, default_qty_value=50000, commission_value=0.0005, slippage=2, initial_capital=10000)

// State variables to ensure one entry per signal
var bool isLongOpen = false
var bool isShortOpen = false

// Input Parameters for allowing long and short trades
allowLong = input(true, title='Allow Long Trades')
allowShort = input(true, title='Allow Short Trades')

// Trend Filter Inputs
maType = input.string(title='MA Type', options=['OFF', 'SMA', 'EMA', 'SMMA', 'CMA', 'TMA'], defval='OFF')
trendFilterMethod = input.string(title='Trend Filter Method', options=['OFF', 'Normal', 'Reversed'], defval='OFF')
maLength = input(14, title='MA Length')

// Other Input Parameters
lengthKC = input(30, title='Keltner Channels Length')
multKC = input(0.7, title='Keltner Channels Multiplier')
lengthCCI = input(5, title='CCI Length')
overboughtCCI = input(75, title='CCI Overbought Level')
oversoldCCI = input(-75, title='CCI Oversold Level')
rsiPeriod = input(30, title='RSI Period')
rsiOverbought = input(60, title='RSI Overbought Level')
rsiOversold = input(60, title='RSI Oversold Level')
volumeMultiplier = input.float(0, title='Volume Multiplier', step=0.1, minval=0)

// Define Moving Averages
var float maValue = na
if maType == 'SMA'
    maValue := ta.sma(close, maLength)
else if maType == 'EMA'
    maValue := ta.ema(close, maLength)
else if maType == 'SMMA'
    float initialSMMA = ta.sma(close, maLength)
    maValue := na(maValue[1]) ? initialSMMA : (maValue[1] * (maLength - 1) + close) / maLength
else if maType == 'CMA'
    float firstSMA = ta.sma(close, maLength)
    float secondSMA = ta.sma(close, maLength)
    maValue := na(maValue[1]) ? firstSMA : (firstSMA + secondSMA - maValue[1]) / 2
else if maType == 'TMA'
    maValue := ta.sma(ta.sma(close, math.round(maLength / 2)), math.round(maLength / 2) + 1)

// Entry Conditions with Trend Filter
longCondition = allowLong and (trendFilterMethod == 'OFF' or trendFilterMethod == 'Normal' and close > maValue or trendFilterMethod == 'Reversed' and close < maValue)
shortCondition = allowShort and (trendFilterMethod == 'OFF' or trendFilterMethod == 'Normal' and close < maValue or trendFilterMethod == 'Reversed' and close > maValue)

// Keltner Channels
typicalPrice = hlc3
middleLine = ta.sma(typicalPrice, lengthKC)
range_1 = multKC * ta.atr(lengthKC)
upperChannel = middleLine + range_1
lowerChannel = middleLine - range_1

// CCI
cci = ta.cci(close, lengthCCI)

// RSI
rsi = ta.rsi(close, rsiPeriod)

// Volume
volCondition = volume > ta.sma(volume, 50) * volumeMultiplier

// Combined Entry Conditions with Trend Filter and state check
longCondition := longCondition and cci < oversoldCCI and low < lowerChannel and rsi < rsiOversold and volCondition and not isLongOpen
shortCondition := shortCondition and cci > overboughtCCI and high > upperChannel and rsi > rsiOverbought and volCondition and not isShortOpen

// Execute orders at the open of the new bar after conditions are met
if longCondition
    strategy.entry('Long', strategy.long)
    alert('LicenseID,buy,AUDNZD,risk=1')
    isLongOpen := true
if shortCondition
    strategy.entry('Short', strategy.short)
    alert('LicenseID,sell,AUDNZD,risk=1')
    isShortOpen := true

// Exit Conditions and Alerts
longExitCondition = cci > 0
shortExitCondition = cci < 0
if (longExitCondition and isLongOpen)
    strategy.close('Long')
    alert('LiceneseID,closelong,AUDNZD')
    isLongOpen := false
if (shortExitCondition and isShortOpen)
    strategy.close('Short')
    alert('LicenseID,closeshort,AUDNZD')
    isShortOpen := false

// Plotting
plot(upperChannel, color=color.new(color.red, 0), linewidth=1)
plot(lowerChannel, color=color.new(color.green, 0), linewidth=1)
hline(overboughtCCI, 'Overbought', color=color.red)
hline(oversoldCCI, 'Oversold', color=color.green)