Estratégia de negociação de combinação de múltiplos indicadores

Autora:ChaoZhang, Data: 2023-10-26 15:22:28
Tags:

img

Resumo

Esta estratégia combina os indicadores CCI, ADX e AO para gerar sinais de negociação para posições longas e curtas. O CCI identifica os níveis de sobrecompra e sobrevenda, o ADX determina a força e a direção da tendência e o AO auxilia na oscilação dos mercados. A combinação de vários indicadores melhora a estabilidade e a eficiência do sistema de negociação.

Estratégia lógica

  1. O CCI indica uma sobrecompra acima de 100 e uma sobrevenda abaixo de -100.

  2. ADX mede a força da tendência. DI+ mostra a força da tendência de alta, DI- mostra a força da tendência de baixa. ADX é a força média da tendência. Esta estratégia vai longo quando DI+ está abaixo de 25.

  3. AO é SMA rápida menos SMA lenta. AO crescente representa fortalecimento do ímpeto de alta, e AO caindo representa fortalecimento do ímpeto de baixa. Esta estratégia vai longo quando AO está abaixo de 0.

  4. As regras de negociação são as seguintes: Largar quando o CCI < 0 e o DI+ < 25 e o AO < 0; Fechar longo quando o DI+ > 25.

  5. Calcular de forma dinâmica o tamanho das ordens em termos de património líquido dividido pelo preço de fechamento e arredondado para baixo, para ajustar as ordens à medida que o património líquido da conta muda.

  6. Use a estratégia.entrada para sinais longos e a estratégia.fecha para sinais de saída.

Vantagens

  1. A CCI filtra o ruído proveniente de diferentes mercados, reduzindo os falsos sinais.

  2. O ADX identifica tendências mais fortes desde cedo.

  3. A AO evita negociar mercados agitados.

  4. Vários indicadores verificam os sinais, aumentando a fiabilidade.

  5. O dimensionamento dinâmico da posição gerencia o risco de forma eficaz.

  6. Lógica simples e clara, fácil de seguir.

Riscos

  1. CCI dificuldades na identificação de intervalos vkosd.

  2. A ADX está atrasada em captar tendências.

  3. AO luta com a consolidação agitada.

  4. As configurações de indicadores inadequadas levam a filtragem excessiva e perdas de negociações.

  5. Dimensão dinâmica dependente da volatilidade e dos mercados.

  6. Potencial de grandes saques, que exigem uma gestão rigorosa do risco.

Melhorias

  1. Otimizar os parâmetros do CCI para os diferentes mercados.

  2. Otimizar os parâmetros do ADX para detectar mudanças de tendência.

  3. Ajustar os parâmetros de AO para ambientes de volatilidade.

  4. Combinações de ensaios para determinar a ponderação ideal dos indicadores.

  5. Adicionar stop loss para controle de retirada.

  6. Incorpore volume para evitar falhas.

  7. Personalizar o dimensionamento da posição fixa por instrumento.

Conclusão

Esta estratégia combina CCI, ADX e AO para gerar sinais longos bastante confiáveis. Dimensão dinâmica e controle de risco de gestão de posição. A lógica é simples e clara para os iniciantes seguirem. Mas luta em mercados variados, com potencial de otimização significativo necessário para diferentes mercados. Mais testes e ajustes são necessários para robustez em todos os instrumentos e ambientes.


/*backtest
start: 2022-10-19 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Strategy Niel", shorttitle="Strategy Niel", max_bars_back=2000, initial_capital=1000)

//Input variables
buywhenadxabove = input(25)
buywhendiplusbelow = input(10)
buywhenccibelow = input(0)
buywhenawesomeoscillatorbelow = input(0)
sellwhendiplusabove = input(25)

//CCI script
numberofbarsforcci = input(20)
CCI = cci(close,numberofbarsforcci)

//+DI and ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]

[sig, up, down] = adx(dilen, adxlen)

//plot(sig, color=red, title="ADX")
//plot(up, color=blue, title="+DI")
//plot(down, color=orange, title="-DI")


//Awesome Oscillator
nLengthSlow = input(34, minval=1, title="Length Slow")
nLengthFast = input(5, minval=1, title="Length Fast")
xSMA1_hl2 = sma(hl2, nLengthFast)
xSMA2_hl2 = sma(hl2, nLengthSlow)
xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
cClr = xSMA1_SMA2 > xSMA1_SMA2[1] ? blue : red
//plot(xSMA1_SMA2, style=histogram, linewidth=1, color=cClr)

buy = sig > buywhenadxabove and up < buywhendiplusbelow  and CCI < buywhenccibelow and xSMA1_SMA2 < buywhenawesomeoscillatorbelow 

ordersize=floor(strategy.equity/close) // Floor returns largest integer, strategy.equity gives total equity remaining - allows to dynamically calculate the order size as the account equity increases or decreases.
strategy.entry("long",strategy.long,ordersize,when= buy) //strategy.entry let's you enter the market variables id ("long"), strategy.long (long position entry), size of the order and when the order should happen
bought = strategy.position_size[0] > strategy.position_size[1]
entry_price = valuewhen(bought, open, 0)
sell = up > sellwhendiplusabove 
strategy.close("long", when=sell ) //strategy.close let's you close your position with variables id ('long') and when this should happen




Mais.