Momentumindikator Aggregation Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-02-21 11:59:22
Tags:

img

Übersicht

Diese Strategie integriert mehrere technische Indikatoren, einschließlich gleitender Durchschnitte, MACD, RSI und Bollinger-Bänder, um eine Vielzahl von Kauf- und Verkaufssignalen zu generieren und eine relativ vollständige Handelsstrategie zur Aggregation von Momentumindikatoren zu bilden.

Strategie Logik

Die Kernlogik der Strategie besteht darin, die Kauf- und Verkaufssignale mehrerer technischer Indikatoren zu aggregieren, die hauptsächlich folgende Aspekte umfassen:

  1. Gleitender Durchschnittsindikator: Berechnet die schnellen und langsamen gleitenden Durchschnittslinien und erzeugt Kaufsignale, wenn die schnelle Linie über die langsame Linie überschreitet, und Verkaufssignale, wenn sie darunter überschreitet.

  2. MACD-Indikator: Berechnet die MACD-Linie und die Signallinie und erzeugt Kaufsignale, wenn die MACD-Linie über die Signallinie geht, und Verkaufssignale, wenn sie darunter geht.

  3. RSI-Indikator: Berechnen Sie die RSI-Werte, um festzustellen, ob er in Überkauf- oder Überverkaufszonen eintritt, kombiniert mit dem goldenen Kreuz und dem Todeskreuz der RSI-Linie und der mittleren Linie 50, um Handelssignale zu erzeugen.

  4. Bollinger-Band-Indikator: Bestimmt, ob die Preise die oberen und unteren Bands durchbrechen, kombiniert mit Signalen zur Rückkehr in das mittlere Band, um Handelssignale zu erzeugen.

  5. Ausstiegskriterien: Festlegen von Stop-Profit- und Stop-Loss-Standards, Ausstiegspositionen bei Erreichen bestimmter Prozentsätze.

Die Signale jedes Indikatormoduls arbeiten unabhängig voneinander. Die Strategie überwacht diese Signale in Echtzeit, geht lang, wenn Kaufsignale ausgelöst werden, und geht kurz, wenn Verkaufssignale ausgelöst werden, um dynamisch profitable Positionen zu aggregieren.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Richtige Signalquellen mit verschiedenen Indikatorsignalen, nicht leicht zu verpassen.

  2. Falsche Signale reduzieren, indem Signale mit verschiedenen Indikatoren überprüft werden.

  3. Gute Anpassungsfähigkeit an Trends und Umkehrungen mit Trending- und Average-Reversing-Indikatoren.

  4. Der automatische Stop-Profit- und Stop-Loss-Mechanismus hilft, Risiken zu kontrollieren.

Risikoanalyse

Es bestehen auch einige Risiken in dieser Strategie:

  1. Invaliditätsrisiko von Indikatoren unter bestimmten Marktbedingungen.

  2. Das Problem der Übervereinfachung bei der Aggregation zu vieler Signale führt zu einer unzureichenden Auflösung.

  3. Schwierigkeiten bei der Optimierung von Parametern mit vielen Indikatoren.

  4. Hohe Umsatzrate und erhöhte Handelskosten.

Optimierungsrichtlinien

Es gibt einige Möglichkeiten für weitere Optimierungen:

  1. Test und Optimierung der Kombinationen von Indikatoren und Parametern.

  2. Verwenden Sie maschinelle Lernmethoden, um automatisch optimale Parameter zu finden.

  3. Versuche verschiedene Gewichtungsmethoden für die Signalaggregation.

  4. Hinzufügen von anpassungsfähigen Stop-Loss-Mechanismen, die auf der Volatilität des Marktes basieren.

  5. Hinzufügen von Öffnungsalgorithmen zur Steuerung der einzelnen Öffnungsanteile zur besseren Risikokontrolle.

Schlussfolgerung

Zusammenfassend ist dies eine typische und universelle Dynamik-Indikator-Aggregation-Handelsstrategie, die Handelssignale aus verschiedenen gemeinsamen technischen Indikatoren integriert und die Performance durch Signalaggregation verbessert. Im Vergleich zu Einzelindikator-Strategien hat sie die Vorteile von reichhaltigeren Signalquellen und einer besseren Identifizierung von Trends und Umkehrungen. In der Zwischenzeit sollten auch die Schwierigkeiten bei der Optimierung von Parametern und erhöhte Invaliditätsrisiken beachtet werden. Mit weiteren Tests und Optimierungen kann diese Strategie zu einem sehr praktischen quantitativen Handelswerkzeug werden.


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

Mehr