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

O valor da posição em risco deve ser calculado de acordo com o método de cálculo da posição em risco, de acordo com o método de cálculo da posição em risco.

Autora:ChaoZhang, Data: 2024-05-15 16:56:03
Tags:CCIRSIKCSMAEMASMMACMATMA

img

Resumo

Esta estratégia combina três indicadores técnicos: CCI, RSI e Keltner Channels (KC), juntamente com um filtro de tendência para alcançar a negociação bidirecional nos pares de moedas AUDNZD e GBPNZD. Ele usa o CCI e o RSI para determinar as condições de sobrecompra e sobrevenda, o KC como uma referência para stop-loss e take-profit e uma média móvel como um filtro de tendência para abrir posições em linha com a tendência. A estratégia foi testada em dados históricos nos últimos 5 anos, alcançando retornos estáveis.

Princípios de estratégia

  1. Calcule os indicadores CCI, RSI e KC. A linha superior KC é a linha média mais ATR, e a linha inferior é a linha média menos ATR.
  2. Selecionar o tipo de média móvel (SMA, EMA, SMMA, CMA ou TMA) e o método de filtro de tendência (OFF, Normal ou Invertido) com base nos parâmetros de entrada.
  3. Condições de entrada longa: permitir longa, CCI < linha de sobrevenda, fechar < linha inferior KC, RSI < linha de sobrevenda, volume > multiplicador de volume médio de 50 períodos, não existem posições longas atuais.
  4. Condições de entrada em curto prazo: permitir curto prazo, CCI > linha de sobrecompra, fechar > linha superior KC, RSI > linha de sobrecompra, volume > volume médio de 50 períodos * multiplicador, não existem posições curtas atuais.
  5. Condição de saída longa: CCI > 0, condição de saída curta: CCI < 0.
  6. Enviar alertas ao abrir e fechar posições.

Vantagens da estratégia

  1. Combina múltiplos indicadores para uma análise abrangente, melhorando a precisão do sinal.
  2. Utiliza métodos de filtragem de tendências, permitindo ajustamentos flexíveis com base nas tendências do mercado.
  3. Oferece vários tipos de média móvel, adaptando-se às diferentes características do mercado.
  4. Validado com base em dados históricos de longo prazo, demonstrando boa estabilidade e adequação para utilização a longo prazo.
  5. Negociação bidireccional, adequada a várias condições de mercado, proporcionando mais oportunidades de lucro.
  6. Altamente automatizado, sem intervenção manual, poupando tempo e esforço.

Riscos estratégicos

  1. Falta de stop-loss e take-profit tradicionais, que podem levar a reduções significativas em condições de mercado extremas.
  2. Podem ocorrer aberturas e encerramentos frequentes de posições em mercados agitados, aumentando os custos de negociação.
  3. Utiliza períodos de CCI relativamente curtos, gerando potencialmente sinais de ruído.
  4. Os filtros de tendência podem ter uma eficácia limitada quando as tendências não são claras ou a volatilidade do mercado aumenta.
  5. Dimensão fixa das posições, incapaz de se adaptar às alterações da volatilidade do mercado.

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

  1. Considerar a adição de paradas de trailing ou paradas de perdas de ponto fixo para controlar o risco de transação única.
  2. Otimizar ainda mais os parâmetros RSI e CCI para reduzir os sinais de ruído.
  3. Considerar a introdução de indicadores de volatilidade como o ATR para ajustar o tamanho das posições e os stop-loss com base na volatilidade do mercado.
  4. Adicionar mais pares de moedas e otimizar os parâmetros individualmente com base nas características de cada instrumento.
  5. Tentar introduzir aprendizado de máquina e outras tecnologias de IA para otimização de parâmetros adaptativos.

Resumo

Esta estratégia emprega vários indicadores clássicos e é relativamente fácil de codificar e backtestar no TradingView. Embora os resultados do backtesting sejam bons, o controle de risco e os ajustes de parâmetros ainda são necessários para negociação ao vivo. Recomenda-se começar com pequenos fundos para testes e aumentar gradualmente o investimento à medida que a experiência se acumula. Com um alto grau de automação, é adequado para investidores conservadores usarem a longo prazo.


/*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)


Relacionados

Mais.