Die Ressourcen sind geladen. Beförderung...

Handelsstrategie für den doppelten gleitenden Durchschnitt und den dreifachen exponentiellen Indikator

Schriftsteller:ChaoZhang, Datum: 15.12.2023
Tags:

img

Übersicht

Diese Strategie verwendet doppelte gleitende Durchschnittsindikatoren und dreifache exponentielle gleitende Durchschnittsindikatoren, kombiniert mit stochastischen Indikatoren, um eine relativ stabile und zuverlässige Trendverfolgungsstrategie zu bilden.

Grundsätze

Diese Strategie besteht hauptsächlich aus vier Teilen:

  1. Dual Moving Average Indicator: Berechnet die exponentiellen gleitenden Durchschnittswerte (EMA) für 50 und 100 Perioden. Es erzeugt ein Kaufsignal, wenn die kurzfristige EMA über die langfristige EMA überschreitet, und ein Verkaufssignal, wenn sie darunter geht.

  2. Triple Exponential Indicator: Berechnet die 50-Perioden-, 100-Perioden- und 200-Perioden-exponentiellen gleitenden Durchschnitte, um die Markttrendrichtung zu bestimmen. Wenn 50EMA>100EMA>200EMA, ist es ein bullischer Markt. Wenn 50EMA<100EMA<200EMA, ist es ein bärischer Markt.

  3. Stochastischer Indikator: Berechnet die 6-Tage-K- und D-Werte des RSI, um Überkauf- und Überverkaufszustände zu bestimmen. Wenn der K-Wert über den D-Wert geht, ist er überverkauft. Wenn er darunter geht, ist er überkauft.

  4. Handelssignale: Nur wenn der doppelte gleitende Durchschnittsindikator gleichzeitig ein Signal erzeugt, wenn der Markt dem bullischen oder bärischen Zustand des dreifachen exponentiellen gleitenden Durchschnitts entspricht, und der stochastische Indikator keine Überkäufe oder Überverkaufsergebnisse zeigt, werden echte Handelsoptionen ausgegeben.

Vorteile

Diese Strategie kombiniert die Vorteile von gleitenden Durchschnittsindikatoren und stochastischen Indikatoren. Sie berücksichtigt sowohl die Beurteilung der Trendrichtung als auch den Überkauf/Überverkaufszustand des Marktes bei der Ausgabe von Handelssignalen und filtert dadurch das Rauschen effektiver aus, um klarere Trends zu verfolgen. Darüber hinaus verwendet sie den dreifachen exponentiellen gleitenden Durchschnitt, um den Gesamttrend zu bestimmen, wodurch die Signale zuverlässiger werden. Diese Strategie ist einfach, einfach zu implementieren und einfach zu optimieren.

Risiken und Gegenmaßnahmen

Das größte Risiko dieser Strategie besteht darin, dass sie auf Indikatorurteile beruht. Wenn der Indikator falsche Signale gibt, kann dies leicht zu fehlgeschlagenen Trades führen. Darüber hinaus können bei der Verwendung längerer Zyklus gleitender Durchschnitte zur Bestimmung des Gesamttrends auch einige kurzfristige Chancen verpasst werden. Die wichtigsten Risikobegrenzungsmaßnahmen sind wie folgt:

  1. Optimierung der Indikatorparameter und Anpassung der Zykluskombinationen von doppelten gleitenden Durchschnitten und dreifachen exponentiellen gleitenden Durchschnitten, um sie besser an die Merkmale des Marktes anzupassen.

  2. Mehr Indikatoren für CANCEL-Operationen einzubeziehen und laufende Geschäfte zu beenden, wenn der Markt drastische Schwankungen zeigt.

  3. Verwenden Sie kurzfristige bullische Strategien, um kurzfristige Chancen in langfristigen Bullenmärkten zu nutzen.

Optimierungsrichtlinien

Zu den wichtigsten Aspekten, in denen diese Strategie optimiert werden kann, gehören:

  1. Anpassung der Zyklusparameter des doppelten gleitenden Durchschnitts und des dreifachen exponentiellen gleitenden Durchschnitts, um die Anpassung der Indikatoren an die Merkmale des Marktes zu optimieren.

  2. Erhöhung des Volumens, des MACD und anderer Beurteilungen, um abnormale Kursbewegungen zu vermeiden, die falsche Signale verursachen.

  3. Es ist besser, Trends mit Kerzenmustern zu bestätigen, um falsche Signale nach kurzfristigen Rückschlägen zu vermeiden.

  4. Erweitern Sie es auf weitere Varianten wie Aktien, Forex und testen Sie die Anpassungsfähigkeit der Strategie.

  5. Einbeziehung von VIX-Indikatoren zur Bestimmung der allgemeinen Marktvolatilität und zur Kontrolle der Positionsgröße.

Schlussfolgerung

Diese Strategie verwendet zwei gleitende Durchschnittsindikatoren, um Handelssignale auszugeben, mit dreifachen exponentiellen gleitenden Durchschnitten und stochastischen Indikatoren als Ergänzungen, wodurch eine relativ stabile Trendverfolgungsstrategie aufgebaut wird.


/*backtest
start: 2023-12-07 00:00:00
end: 2023-12-12 08:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='5212 EMA Strategy', shorttitle='5212 EMA', overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=10, calc_on_every_tick=false)

//**Backtest Date sof
useStartPeriodTime  = input.bool(true                       , 'Start Date & Time'   , group='Date Range'    , inline='Start Period')
startPeriodTime     = input(timestamp('16 Apr 2021')   , ''                    , group='Date Range'    , inline='Start Period')
useEndPeriodTime    = input.bool(false                      , 'End Date & Time'     , group='Date Range'    , inline='End Period')
endPeriodTime       = input(timestamp('31 Dec 2222')   , ''                    , group='Date Range'    , inline='End Period')
enableHighlight     = input.bool(false                      , 'Highlight'           , group='Date Range'    , inline='Highlight')
highlightType       = input.string('Anchors'                , ''                    , group='Date Range'    , inline='Highlight'    , options=['Anchors', 'Background'])
highlightColor      = input.color(color.white               , ''                    , group='Date Range'    , inline='Highlight')
start = useStartPeriodTime ? startPeriodTime >= time : false
end = useEndPeriodTime ? endPeriodTime <= time : false
calcPeriod = true
// var line startAnchor    = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2)
// var line endAnchor      = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2)
// useBgcolor = false
// if enableHighlight
//     if highlightType == 'Anchors'
//         if useStartPeriodTime
//             line.set_xy1(startAnchor, startPeriodTime, low)
//             line.set_xy2(startAnchor, startPeriodTime, high)
//         if useEndPeriodTime
//             line.set_xy1(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), low)
//             line.set_xy2(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), high)

//     if highlightType == 'Background'
//         useBgcolor := true
//         useBgcolor

// bgcolor(useBgcolor and calcPeriod ? color.new(highlightColor,90) : na, editable=false)
//**Backtest Date eof

src         =input(close    , 'Source'      , group='Support')
showEMA     = input(true    , 'Show EMA'    , group='Support')

//**Stochastic RSI sof
smoothK     = input.int(6   , "K"               , group='Stochastic RSI'    , minval=1)
smoothD     = input.int(6   , "D"               , group='Stochastic RSI'    , minval=1)
lengthRSI   = input.int(28  , "RSI Length"      , group='Stochastic RSI'    , minval=1)
lengthStoch = input.int(28  , "Stoch Length"    , group='Stochastic RSI'    , minval=1)

rsi1    = ta.rsi(src, lengthRSI)
k       = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d       = ta.sma(k, smoothD)
//**STochastic RSI eof

//** EMA sof
emain01     = input.int(50  , "EMAma Girang"    , group='Moving Average Exponential'    , minval=1)
emain02     = input.int(100 , "EMAma Muda"      , group='Moving Average Exponential'    , minval=1)
emain03     = input.int(200 , "EMAma Tua"       , group='Moving Average Exponential'    , minval=1)

ema01 = ta.ema(src, emain01)
ema02 = ta.ema(src, emain02)
ema03 = ta.ema(src, emain03)
plot(showEMA ? ema01 : na, 'EMAma Girang'   , color = color.new(color.orange, 0))
plot(showEMA ? ema02 : na, 'EMAma Muda'     , color = color.new(color.blue, 0))
plot(showEMA ? ema03 : na, 'EMAma Tua'      , color = color.new(color.red, 0))
//** EMA eof

//**Condition sof
emaLong     = ema01 > ema02 and ema02 > ema03 and low > ema03
emaShort    = ema01 < ema02 and ema02 < ema03 and high < ema03

longCond    = ta.crossover(k,d) and k <= 23 and emaLong
shortCond   = ta.crossunder(k,d) and k >= 77 and emaShort

longClose   = ta.crossunder(k,d) and k <= 77
shortClose  = ta.crossover(k,d) and k >= 23
longCross   = ta.crossover(ema01, ema02)
shortCross  = ta.crossunder(ema01, ema02)
//**Condition eof

//**Strategy sof
if calcPeriod and longCond
    strategy.entry('long', strategy.long, when=longCond, comment='EN Long')
strategy.close('long', when=shortClose, comment='EX Long')
strategy.close('long', when=shortCross, comment='MD Short')

if calcPeriod and shortCond
    strategy.entry('short', strategy.short, when=shortCond, comment='EN Short')
strategy.close('short', when=longClose, comment='EX Short')
strategy.close('short', when=longCross, comment='MD Long')

if calcPeriod == false and ta.crossover(ema01, ema02) or ta.crossunder(ema01, ema02)
    strategy.cancel('long')
    strategy.cancel('short')
//**Strategy eof

//**Label sof
entryText       = str.tostring(strategy.position_avg_price, '##.###')
longText    = 'Long Entry : ' + entryText 
shortText   = 'Short Entry : ' + entryText
noTrade     = 'Sleeping Mode'

LongTrade = strategy.position_size > 0
ShortTrade = strategy.position_size < 0

Tekslabel = LongTrade ? longText : ShortTrade ? shortText : noTrade

xPosition = timenow + math.round(ta.change(time)*1)
yPosition = ta.highest(1)
labelColor = LongTrade ? color.new(color.aqua, 0) : ShortTrade ? color.new(color.red, 0) : color.new(color.gray, 0)
textColor   = LongTrade ? color.new(color.black, 0) : ShortTrade ? color.new(color.white, 0) : color.new(color.white, 0)

// lab_l = label.new(
//           xPosition, yPosition, Tekslabel,
//           color=labelColor, 
//           textcolor=textColor, 
//           style =  label.style_label_left,
//           textalign=text.align_left,
//           xloc=xloc.bar_time, yloc = yloc.price)

// label.delete(lab_l[1])
//**Strategy eof


Mehr