Umkehrung der Kreuzung der doppelten gleitenden Durchschnittswerte

Schriftsteller:ChaoZhang, Datum: 2023-12-28 12:00:27
Tags:

img

Übersicht: Diese Strategie basiert auf der klassischen Handelsstrategie des gleitenden Durchschnitts-Crossovers. Sie verwendet zwei gleitende Durchschnitte, darunter den einfachen gleitenden Durchschnitt (SMA), den exponentiellen gleitenden Durchschnitt (EMA), den variablen gewichteten gleitenden Durchschnitt (VWMA) und den Hull-gleitenden Durchschnitt (HMA).

Prinzip: Die Kernlogik der Strategie ist der doppelte gleitende Durchschnitts-Crossover. Durch die Berechnung von zwei gleitenden Durchschnitten mit verschiedenen Parametern wird ein Kaufsignal erzeugt, wenn der schnelle gleitende Durchschnitt über den langsamen überschreitet, und ein Verkaufssignal wird erzeugt, wenn der schnelle gleitende Durchschnitt unter den langsamen überschreitet. Der gleitende Durchschnitts-Crossover stellt den Wendepunkt der kurz- und langfristigen Preistrends dar.

Vorteilsanalyse: Die Hauptvorteile der doppelten gleitenden Durchschnitts-Crossover-Strategie sind Einfachheit und einfache Bedienung. Mit nur einem Signal kann das grundlegendste Trendbeurteil ohne zu viele Parameterwahlen und Anpassungen erzielt werden, was für Anfänger sehr geeignet ist. Darüber hinaus werden verschiedene Arten von gleitenden Durchschnitten getestet, um verschiedene Kombinationen zu optimieren.

Risikoanalyse: Das Hauptrisiko dieser Strategie besteht darin, dass gängige gleitende Durchschnitts-Crossover-Strategien viele falsche Signale haben, was zu mehreren kleinen Gewinnen und flachen Positionen führt, was sich auf die Gesamtrendite auswirkt.

Optimierungsrichtlinien: 1) Versuche verschiedene Perioden, um die optimale Kombination von gleitenden Durchschnittskreuzen zu ermitteln; 2) Erwäge die Einführung eines zweiten Satzes von gleitenden Durchschnittsparametern und RSI-Indikatoren, um bei der Beurteilung zu helfen, um falsche Signale zu reduzieren; 3) Einführung eines Zustandsurteils auf der Grundlage der inkrementellen Änderung des MA-Indikators anstelle eines einfachen Crossovers, um ein zuverlässigeres Crossover-Urteil zu erhalten.

Zusammenfassung: Diese Strategie nimmt den Rahmen der traditionellen gleitenden Durchschnitts-Crossover-Strategie an, um doppelte gleitende Durchschnitte zu testen, um die optimale Kombination von gleitenden Durchschnittsperioden zu finden. Gleichzeitig fügt sie Stop-Loss-Urteile hinzu, die auf der ROC und dem Preis des gleitenden Durchschnitts basieren. Insgesamt ist es eine einfache und einfach zu bedienende doppelte gleitende Durchschnittsstrategie, die der quantitativen Handelslogik entspricht. Darüber hinaus bieten die reichen Optimierungsideen auch Raum für die weitere Entwicklung dieser Strategie.


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

//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(close, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(5, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

f_hma(_src, _length)=>
    _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    if (type1 == "EMA")
        ema(price, ma1)
    else
        if (type1 == "VWMA")
            vwma(price, ma1)
        else
            f_hma(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    if (type2 == "EMA")
        ema(price, ma2)
    else
        if (type2 == "VWMA")
            vwma(price, ma2)
        else
            f_hma(price, ma2)

//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


longCondition = crossover(price1, price2)
if (longCondition) // and time>timestamp(2018,6,1,9,30)
    strategy.entry("Long", strategy.long)

shortCondition = crossunder(price1, price2)
if (shortCondition) // and time>timestamp(2018,6,1,9,30)
    strategy.entry("Short", strategy.short)

lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)

ma1up = false
ma1down = false
ma2up = false
ma2down = false

ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])

trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01

if crossover(roc1, trendStrength1)
    ma1up := true
    ma1down := false
    
if crossunder(roc1, -trendStrength1) 
    ma1up := false
    ma1down := true

shortexitCondition = ma1up and ma1down[1]
if (shortexitCondition)
    strategy.close("Short")

longexitCondition = ma1down and ma1up[1]
if (longexitCondition)
    strategy.close("Long")



Mehr