Die Ressourcen sind geladen. Beförderung...

Strategie zur Trendverfolgung mit zwei Signalen

Schriftsteller:ChaoZhang, Datum: 2023-11-02 17:02:06
Tags:

img

Übersicht

Diese Strategie kombiniert doppelte EMA- und Awesome-Oszillator-Indikatoren, um Trends zu identifizieren und zu verfolgen. Die EMA beurteilt schnell die kurzfristige Trendrichtung, während Awesome Oscillator falsche Ausbrüche herausfiltert und den Eintrittszeitplan bereitstellt.

Strategie Logik

Diese Strategie verwendet hauptsächlich zwei technische Indikatoren, den doppelten EMA und den Awesome Oscillator, um Signale mit der folgenden Logik zu filtern:

  1. Berechnen Sie die 2-Perioden- und 20-Perioden-EMA. Wenn die 2-Perioden-EMA die 20-Perioden-EMA nach oben bricht, signalisiert dies einen Aufwärtstrend. Wenn die 2-Perioden-EMA die 20-Perioden-EMA nach unten bricht, signalisiert sie einen Abwärtstrend.

  2. Berechnen Sie den Awesome Oscillator, welches ein MACD-Histogramm ist, das durch eine schnelle EMA minus eine langsame EMA glättet wird. Wenn sich das AO-Histogramm von rot zu blau ändert, ist es ein Kaufsignal. Wenn es von blau zu rot ändert, ist es ein Verkaufssignal.

  3. Nur wenn die EMA einen Aufwärtstrend und der AO gleichzeitig ein Kaufsignal zeigt, wird ein letztes Kaufsignal erzeugt.

  4. Durch diesen doppelten Signalfiltermechanismus können falsche Ausbrüche verringert und mittelfristige Trends verfolgt werden.

Analyse der Vorteile

Die Vorteile dieser Strategie sind:

  1. Die doppelte Liniefilterung reduziert den Lärm, der durch Fehler verursacht wird. Die EMA beurteilt den allgemeinen Trend, während die AO den Eintrittszeitpunkt filtert.

  2. Die extrem schnelle Reaktionsempfindlichkeit erfasst kurzfristige Umkehrungen schnell. Die 2-Perioden-EMA ist sehr empfindlich auf Ausbrüche reagierend und kann schnell feststellen, ob sich die jüngsten Trends geändert haben.

  3. Der Awesome Oscillator filtert den MACD weiter, um falsche Trends zu identifizieren und unnötige Reverse Trades zu vermeiden.

  4. Die Strategie hat eine klare Richtung, um mittelfristige Trends zu verfolgen: Die EMA bestimmt den grundlegenden Trend, während die AO Signale filtert, um den Handel nach den allgemeinen Trends zu gewährleisten.

  5. Eine vernünftige Parameterwahl. Die 2- und 20-Perioden-EMA erfasst Preisveränderungen in verschiedenen Zeitrahmen. Die AO-Parameter 5 und 34 sind für die Ermittlung von kurzfristigen Mustern optimiert.

Risikoanalyse

Es bestehen auch einige Risiken:

  1. Auf den Märkten mit unterschiedlichen EMA- und AO-Regelungen können mehr falsche Signale erzeugt werden, was zu unnötigen Short-Trades führt.

  2. AO-Parameter können für eine schnellere Reaktion optimiert werden.

  3. EMA und AO, die kurz- und mittelfristige Merkmale kombinieren, erfordern qualitativ hochwertige Daten und Rechenleistung.

  4. Häufiger Handel führt zu höheren Provisionen und Verschiebungskosten.

  5. Die Strategie berücksichtigt keine langfristigen Trends und wichtige Unterstützungs-/Widerstandsniveaus.

Optimierungsrichtlinien

Die Strategie kann durch mehrere Aspekte optimiert werden:

  1. Einführung von Trendindikatoren wie gleitenden Durchschnittsbändern und ATR, um die EMA bei der Ermittlung des Gesamttrends zu unterstützen.

  2. Hinzufügen von Support-/Widerstandsdetektionen wie Fibonacci-Retracements, die Signale nur um Schlüsselniveaus erzeugen, um schlechte Einstiegspositionen zu vermeiden.

  3. Optimieren Sie EMA- und AO-Parameterkombinationen, um die Komboeffekte zu verbessern.

  4. Hinzufügen von Stop-Loss-Ausgängen. Ausstieg, wenn der Preis den jüngsten Swing High/Low durchbricht, um einen einzelnen Handelsverlust zu kontrollieren.

  5. Backtest auf historischen Daten, um die Strategieleistung zu bewerten, um zu überprüfen, ob eine stabile Rentabilität den Erwartungen entspricht.

  6. Papierhandel, um die Parameter schrittweise anzupassen und die Live-Leistung zu verbessern.

Schlussfolgerung

Die Gesamtstrategieidee ist klar und kombiniert EMA für den allgemeinen Trend und AO für die Signalfilterung. Es kann Trends effektiv identifizieren und verfolgen, hat aber auch einige Risiken und Einschränkungen für weitere Optimierung und Tests zur Verbesserung der Stabilität. Der Schlüssel besteht darin, geeignete Produkte und Parameter in Kombination mit geeigneten Handelsprinzipien und -stilen zu wählen. Insgesamt hat diese Strategie eine solide Logik und einen praktischen Wert.


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

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 27/04/2022
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov 
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
//    This indicator plots the oscillator as a histogram where blue denotes 
//    periods suited for buying and red . for selling. If the current value 
//    of AO (Awesome Oscillator) is above previous, the period is considered 
//    suited for buying and the period is marked blue. If the AO value is not 
//    above previous, the period is considered suited for selling and the 
//    indicator marks it as red.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
    pos = 0.0
    xPrice = close
    xXA = ta.ema(xPrice, Length)
    nHH = math.max(high, high[1])
    nLL = math.min(low, low[1])
    nXS = nLL > xXA or nHH < xXA ? nLL : nHH
    iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
    pos := nXS > close[1] ? -1 : iff_1
    pos


AC(nLengthSlow,nLengthFast,nLengthMA,nLengthEMA,nLengthWMA,bShowWMA,bShowMA,bShowEMA) =>
    pos = 0.0
    xSMA1_hl2 = ta.sma(hl2, nLengthFast)
    xSMA2_hl2 = ta.sma(hl2, nLengthSlow)
    xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
    xSMA_hl2 = ta.sma(xSMA1_SMA2, nLengthFast)
    nRes =  xSMA1_SMA2 - xSMA_hl2
    xResWMA = ta.wma(nRes, nLengthWMA)
    xResMA = ta.sma(nRes, nLengthMA)
    xResEMA = ta.ema(nRes, nLengthEMA)
    xSignalSeries = bShowWMA ? xResWMA :
                     bShowMA ? xResMA : 
                      bShowEMA ? xResEMA : na
    pos :=  xSignalSeries[2] < 0 and xSignalSeries[1] > 0? 1:
    	     xSignalSeries[2] > 0 and xSignalSeries[1] < 0 ? -1 : nz(pos[1], 0)
    pos

strategy(title='Combo 2/20 EMA & Bill  Awesome Oscillator (AC)', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════  Awesome Oscillator (AC) ═════●'
nLengthSlow = input.int(34, minval=1, title="Length Slow", group=I2)
nLengthFast = input.int(5, minval=1, title="Length Fast", group=I2)
nLengthMA = input.int(15, minval=1, title="MA", group=I2)
nLengthEMA = input.int(15, minval=1, title="EMA", group=I2)
nLengthWMA = input.int(15, minval=1, title="WMA", group=I2)
bShowWMA = input.bool( defval=true, title="trading WMA", group=I2)
bShowMA = input.bool( defval=false, title="trading MA", group=I2)
bShowEMA = input.bool( defval=false, title="trading EMA", group=I2)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosAC = AC(nLengthSlow,nLengthFast,nLengthMA,nLengthEMA,nLengthWMA,bShowWMA,bShowMA,bShowEMA)
iff_1 = posEMA20 == -1 and prePosAC == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosAC == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
if possig == 1
    strategy.entry('Long', strategy.long)
if possig == -1
    strategy.entry('Short', strategy.short)
if possig == 0
    strategy.close_all()
barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)

Mehr