Estratégia de negociação de agregação do indicador de impulso

Autora:ChaoZhang, Data: 21 de Fevereiro de 2024 11:59:22
Tags:

img

Resumo

Esta estratégia integra múltiplos indicadores técnicos, incluindo a média móvel, o MACD, o RSI e as bandas de Bollinger para gerar uma variedade de sinais de compra e venda, formando uma estratégia de negociação de agregação de indicadores de impulso relativamente completa.

Estratégia lógica

A lógica central da estratégia consiste em agregar os sinais de compra e venda de múltiplos indicadores técnicos, que incluem principalmente os seguintes aspectos:

  1. Indicador de média móvel: Calcula as linhas médias móveis rápidas e lentas e gera sinais de compra quando a linha rápida cruza acima da linha lenta e sinais de venda quando cruza abaixo.

  2. Indicador MACD: Calcula a linha MACD e a linha de sinal, gerando sinais de compra quando a linha MACD cruza acima da linha de sinal e sinais de venda quando cruza abaixo.

  3. Indicador RSI: Calcule os valores do RSI para determinar se entra em zonas de sobrecompra ou sobrevenda, combinado com a cruz dourada e a cruz da morte da linha RSI e da linha média 50 para gerar sinais comerciais.

  4. Indicador de bandas de Bollinger: Determina se os preços atravessam as bandas superior e inferior, combinados com sinais de retorno à banda média para gerar sinais de negociação.

  5. Critérios de saída: definir padrões de stop profit e stop loss, posições de saída quando atingirem certas percentagens.

Os sinais de cada módulo de indicador funcionam de forma independente. A estratégia monitora esses sinais em tempo real, vai longo quando os sinais de compra são acionados e vai curto quando os sinais de venda são acionados, para agregar dinamicamente posições lucrativas.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. Fontes de sinal ricas com vários sinais indicadores, não é fácil perder oportunidades.

  2. Reduzir os falsos sinais verificando os sinais com diferentes indicadores.

  3. Boa adaptabilidade às tendências e inversões com indicadores de tendência e de inversão da média.

  4. O mecanismo automático de stop-profit e stop-loss ajuda a controlar os riscos.

Análise de riscos

Esta estratégia apresenta também alguns riscos:

  1. Risco de invalidez dos indicadores em determinadas condições de mercado.

  2. O problema da simplificação excessiva, ao agregar muitos sinais, leva a uma resolução insuficiente.

  3. Dificuldades na otimização de parâmetros com muitos indicadores.

  4. Alta taxa de rotatividade e aumento dos custos comerciais.

Orientações de otimização

Há alguns espaços para melhorias adicionais:

  1. Teste e otimize as combinações de indicadores e parâmetros.

  2. Usar métodos de aprendizagem de máquina para encontrar parâmetros ideais automaticamente.

  3. Ensaiar diferentes métodos de ponderação para a agregação de sinais.

  4. Adicionar mecanismos de stop loss adaptativos com base na volatilidade do mercado.

  5. Adicionar algoritmos de abertura para controlar as proporções de abertura única para um melhor controlo do risco.

Conclusão

Em conclusão, esta é uma estratégia de negociação de agregação de indicadores de momento típica e universal, que integra sinais de negociação de vários indicadores técnicos comuns e melhora o desempenho através da agregação de sinais. Em comparação com as estratégias de indicador único, tem as vantagens de fontes de sinal mais abundantes e melhor identificação de tendências e reversões. Enquanto isso, as dificuldades na otimização de parâmetros e o aumento dos riscos de invalidez também devem ser notados. Com mais testes e otimização, essa estratégia pode se tornar uma ferramenta de negociação quantitativa muito prática.


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

//@version=5
strategy("Kesin Etkili Analiz V1 - Artun Sinan", overlay=true)
//indicator("Kesin Etkili Analiz V1 - Artun Sinan", overlay=true)

//BackTest
yearin = input (2019, title="BackTestBaşlangıç Tarihi")

// Göstergelerin parametrelerini tanımlayın
emaShrtPeriod = input.int(title="EMA Kısa Periyodu", defval=50, minval=1)
emaLngPeriod = input.int(title="EMA Uzun Periyodu", defval=100, minval=1)

maPeriod = input.int(50, "Hareketli Ortalama Periyodu", minval=1)
fast = input.int(12, "MACD Hızlı Periyodu", minval=1)
slow = input.int(26, "MACD Yavaş Periyodu", minval=1)
signal = input.int(9, "MACD Sinyal Periyodu", minval=1)
rsiPeriod = input.int(14, "RSI Periyodu", minval=1)
rsiOverbought = input.int(70, "RSI Aşırı Alım Eşiği", minval=50, maxval=100)
rsiOversold = input.int(30, "RSI Aşırı Satım Eşiği", minval=0, maxval=50)
bbPeriod = input.int(20, "Bollinger Bantları Periyodu", minval=1)
bbStd = input.float(2, "Bollinger Bantları Standart Sapması", minval=0.1)

//EMA göstergesi ayarları
ema1 = ta.ema (close,emaShrtPeriod)
ema2 = ta.ema (close, emaLngPeriod)

emaCrossUp = ema1 >= ema2
emaCrossDown = ema2 < ema1

plot(ema1, title="EMAKısa", color=color.rgb(0, 255, 13))
plot(ema2, title="EMAUzun", color=color.rgb(255, 251, 1))



// Göstergeleri hesaplayın
ma = ta.sma(close, maPeriod) // Hareketli ortalama
[macd, macdsignal, macdhist] = ta.macd(close, fast, slow, signal) // MACD
rsi = ta.rsi(close, rsiPeriod) // RSI
[upper, middle, lower] = ta.bb(close, bbPeriod, bbStd) // Bollinger Bantları

// Alım veya satım sinyalleri üretin
buySignal = false
sellSignal = false

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Fibonacci seviyelerini tanımlayın
fibLevels = array.new_float(7) // Fibonacci seviyelerini tutacak bir dizi oluşturun
array.set(fibLevels, 0, 0.0) // %0 seviyesini ayarlayın
array.set(fibLevels, 1, 0.236) // %23.6 seviyesini ayarlayın
array.set(fibLevels, 2, 0.382) // %38.2 seviyesini ayarlayın
array.set(fibLevels, 3, 0.5) // %50 seviyesini ayarlayın
array.set(fibLevels, 4, 0.618) // %61.8 seviyesini ayarlayın
array.set(fibLevels, 5, 0.786) // %78.6 seviyesini ayarlayın
array.set(fibLevels, 6, 1.0) // %100 seviyesini ayarlayın

// Tepe ve dip noktasını belirleyin
highpoint = ta.highest (high, 20) // Son 30 mum çubuğunun en yüksek değerini alın
lowpoint = ta.lowest (low, 20) // Son 30 mum çubuğunun en düşük değerini alın
diff = highpoint - lowpoint // Tepe ve dip noktası arasındaki farkı hesaplayın

// Fibonacci seviyelerini hesaplayın
fib0 = lowpoint + diff * array.get(fibLevels, 0) // %0 seviyesini hesaplayın
fib1 = lowpoint + diff * array.get(fibLevels, 1) // %23.6 seviyesini hesaplayın
fib2 = lowpoint + diff * array.get(fibLevels, 2) // %38.2 seviyesini hesaplayın
fib3 = lowpoint + diff * array.get(fibLevels, 3) // %50 seviyesini hesaplayın
fib4 = lowpoint + diff * array.get(fibLevels, 4) // %61.8 seviyesini hesaplayın
fib5 = lowpoint + diff * array.get(fibLevels, 5) // %78.6 seviyesini hesaplayın
fib6 = lowpoint + diff * array.get(fibLevels, 6) // %100 seviyesini hesaplayın

// Alım sinyali: Fiyat %61,8 seviyesinden yukarı yönlü kırılırsa ve MACD çizgisi sinyal çizgisinin üzerine çıkarsa, alım pozisyonu açın
alSignal = close > fib4 and ta.crossover(macd, macdsignal)

// Satım sinyali: Fiyat %61,8 seviyesinden aşağı yönlü kırılırsa ve MACD çizgisi sinyal çizgisinin altına inerse, satım pozisyonu açın
satSignal = close < fib4 and ta.crossunder(macd, macdsignal)

// Çıkış sinyali: Fiyat %38,2 Fibonacci seviyesine ulaşırsa veya belirli bir yüzde oranında kar veya zarar elde ederseniz, pozisyonu kapatın
exitSignal = close >= fib2 or close <= strategy.position_avg_price * 0.95 // Kar oranı olarak %5, zarar oranı olarak %5 belirledik

plot(fib0, title="%0", color=color.rgb(25, 0, 255))
plot(fib1, title="%23.6", color=color.rgb(25, 0, 255))
plot(fib2, title="%38.2", color=color.rgb(25, 0, 255))
plot(fib3, title="%50", color=color.rgb(25, 0, 255))
plot(fib4, title="%61.8", color=color.rgb(25, 0, 255))
plot(fib5, title="%78.6", color=color.rgb(25, 0, 255))
plot(fib6, title="%100", color=color.rgb(25, 0, 255))
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Hareketli ortalama kesişimi sinyali
maCrossUp = ta.crossover(ma, close) // Fiyat hareketli ortalamanın üzerine çıkarsa
maCrossDown = ta.crossunder(ma, close) // Fiyat hareketli ortalamanın altına inerse

// MACD çizgisi ve sinyal çizgisi kesişimi sinyali // Histogram yerine çizgiler
macdCrossUp = ta.crossover(macd, macdsignal) // MACD çizgisi sinyal çizgisinin üzerine çıkarsa
macdCrossDown = ta.crossunder(macd, macdsignal) // MACD çizgisi sinyal çizgisinin altına inerse

// RSI aşırı alım veya aşırı satım sinyali ve 50 seviyesi kesişimi sinyali // Sinyalleri birleştir
// Eşik değerleri doğrudan kullanın
rsiOverboughtSignal = rsi > rsiOverbought and ta.crossover(rsi, 50) // RSI değeri aşırı alım eşiğinin üzerindeyse ve 50 seviyesini yukarı keserse
rsiOversoldSignal = rsi < rsiOversold and ta.crossunder(rsi, 50) // RSI değeri aşırı satım eşiğinin altındaysa ve 50 seviyesini aşağı keserse

// Bollinger Bantları kırılımı sinyali ve orta bant geri dönüşü sinyali // Sinyalleri birleştir
bbBreakUp = close > upper and ta.crossover(close, middle) // Fiyat üst banttan çıkarsa ve orta banta geri dönerse
bbBreakDown = close < lower and ta.crossunder(close, middle) // Fiyat alt banttan inerse ve orta banta geri dönerse

// Sinyalleri birleştirin
buySignal := maCrossUp or macdCrossUp or rsiOversoldSignal or bbBreakUp or emaCrossUp and yearin >= year
sellSignal := maCrossDown or macdCrossDown or rsiOverboughtSignal or bbBreakDown or emaCrossDown and yearin >= year

// Sinyalleri grafikte oklar ile gösterin
plotshape(buySignal, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(sellSignal, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

plot(macd, title="MACD", color=color.blue) // MACD çizgisini mavi renkte çizin
plot(macdsignal, title="Sinyal", color=color.orange) // Sinyal çizgisini turuncu renkte çizin


if buySignal
    strategy.entry("Enter Long", strategy.long)
else if sellSignal
    strategy.entry("Enter Short", strategy.short)

Mais.