Mehrjährige dynamische gleitende Durchschnittsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-10-27 16:07:16
Tags:

img

Diese Strategie wählt dynamisch verschiedene Arten von gleitenden Durchschnitten über mehrere Zeitrahmen aus, um Handelssignale zu generieren.

Strategie Logik

Die Strategie ermöglicht die Auswahl aus SMA, EMA, TEMA, WMA und HMA gleitenden Durchschnitten, mit anpassbaren Periodenlängen.

Insbesondere definiert die Strategie zunächst den Backtest-Zeitraum anhand von Eingabeparametern und berechnet dann fünf Arten gleitender Durchschnitte:

  • SMA einfacher gleitender Durchschnitt
  • EMA exponentieller gleitender Durchschnitt
  • TEMA Dreifacher exponentieller gleitender Durchschnitt
  • Gewichteter gleitender Durchschnitt der WMA
  • HMA Hull gleitender Durchschnitt

Der entsprechende gleitende Durchschnitt wird auf der Grundlage der Auswahl gezeichnet.

Durch die Kombination verschiedener Arten von gleitenden Durchschnitten kann die Strategie Preisdaten glätten und Marktlärm filtern, um zuverlässigere Handelssignale zu generieren.

Vorteile

  • Kombiniert mehrere gleitende Durchschnitte für mehr Zuverlässigkeit
  • Anpassungsfähige Zeiträume für verschiedene Handelszeitrahmen
  • Dynamisches Wechseln der Durchschnittswerte ermöglicht eine flexible Optimierung
  • Einfache und intuitive Trendbeobachtung für Anfänger

Risiken

  • Verzögerungen bei gleitenden Durchschnitten können Trendwendepunkte verpassen
  • Überanpassung mit festen Parametern, unterdurchschnittliche Leistung beim Live-Handel
  • Aggressive Long/Short-Signale beeinflussen die Effizienz der Kapitalnutzung

Die Risiken können verringert werden, indem

  • Hinzufügen anderer Indikatoren zur genaueren Ermittlung der Einträge
  • Optimierung von Parametern für den realen Handel für verschiedene Marktordnungen
  • Optimierung der Positionsgröße auf der Grundlage von Kontogröße und Risikomanagement

Möglichkeiten zur Verbesserung

Die Strategie kann in mehreren Aspekten verbessert werden:

  1. Hinzufügen anderer Filter für stabilere Signale

    z. B. Volumenindikatoren, um falsche Ausbrüche ohne Volumenbestätigung zu vermeiden.

  2. Optimierung der Ein- und Ausstiegslogik

    Preiskanäle festlegen und Verluste stoppen, um unnötige Verluste zu reduzieren.

  3. Dynamische gleitende Durchschnittsperioden

    Bei starken Trends länger und bei Konsolidierungen kürzer.

  4. Verbesserung des Geldmanagements

    Anpassung der Positionsgrößen anhand von Abzügen und Gewinngewinnung.

Schlussfolgerung

Die Strategie kombiniert verschiedene gleitende Durchschnitte über Zeitrahmen hinweg, um relativ stabile Trendfolgenwirkungen zu generieren.


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

//@version=3
strategy("MA_strategy ", shorttitle="MA_strategy", overlay=true, initial_capital=100000)

qty = input(100000000, "Buy quantity")

testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testStartMin = input(0, "Backtest Start Minute")

testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,testStartMin)

testStopYear = input(2099, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false


ma1 = input( "SMA",title="Select MA", options=["SMA", "EMA","TEMA", "WMA","HMA"])


len1 = input(7, minval=1, title="Period")

s=sma(close,len1)

e=ema(close,len1)


xEMA1 = ema(close, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
t = 3 * xEMA1 - 3 * xEMA2 + xEMA3


f_hma(_src, _length)=>
    _return = wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))

h = f_hma(close, len1)

w = wma(close, len1)

ma = ma1 == "SMA"?s:ma1=="EMA"?e:ma1=="WMA"?w:ma1=="HMA"?h:ma1=="TEMA"?t:na

buy= close>ma
sell= close<ma

alertcondition(buy, title='buy', message='buy')
alertcondition(sell, title='sell', message='sell')

ordersize=floor(strategy.equity/close)

if testPeriod()
    strategy.entry("long",strategy.long,ordersize,when=buy)
    strategy.close("long", when = sell )


    
  









Mehr