Umkehrung der Crossover-Strategie mit doppeltem gleitendem Durchschnitt


Erstellungsdatum: 2023-12-28 12:00:27 zuletzt geändert: 2023-12-28 12:00:27
Kopie: 0 Klicks: 543
1
konzentrieren Sie sich auf
1623
Anhänger

Umkehrung der Crossover-Strategie mit doppeltem gleitendem Durchschnitt

Beschreibung: Diese Strategie ist eine klassische Handelsstrategie, die auf einer durchschnittlichen Kreuzung basiert. Der Indikator verwendet eine doppelte durchschnittliche Linie, einschließlich eines einfachen Moving Average (SMA), eines Index Moving Average (EMA), eines linear gewichteten Moving Average (VWMA) und eines schwingungsgewichteten Moving Average (HMA).

Grundsatz: Die Kernlogik der Strategie ist die doppelte Durchschnittslinie. Durch die Berechnung der Durchschnittslinie mit zwei unterschiedlichen Parametern wird ein Kaufsignal erzeugt, wenn die schnelle Durchschnittslinie die langsame Durchschnittslinie überschreitet. Es wird ein Verkaufsignal erzeugt, wenn die schnelle Durchschnittslinie die langsame Durchschnittslinie unterschreitet.

Vorteilsanalyse: Die Vorteile der doppelten Gleichgewichts-Kreuzstrategie liegen hauptsächlich in der einfachen Bedienung, der Möglichkeit, die grundlegendsten Trends durch ein Signal zu beurteilen, ohne dass zu viele Parameter ausgewählt und angepasst werden müssen. Sie eignet sich sehr gut für Anfänger. Die verschiedenen Arten von Gleichgewichten werden getestet und können mit verschiedenen Kombinationen optimiert werden.

Risikoanalyse: Das Hauptrisiko dieser Strategie besteht darin, dass die übliche Durchschnittslinie-Kreuzung-Strategie eine große Anzahl von Falschsignalen aufweist, was zu Problemen mit kleineren Gewinnen und mehreren Ausgleichspositionen führt, die sich auf die Gesamtergebnisse auswirken. Darüber hinaus kann die Festlegung der Schnell- oder Langschnell-Durchschnittslinie-Länge in bestimmten Zyklen nicht wirksam sein.

Optimierungsrichtung: 1) Versuchen Sie verschiedene Zyklus-Tests, um die beste Kombination von Durchschnittslinien-Kreuzungszyklen zu bestimmen. 2) Berücksichtigen Sie die Einführung von Parametern für die zweite Gruppe von Durchschnittslinien und die Hilfsurteile des RSI-Indikators, um falsche Signale zu reduzieren. 3) Einführung von bedingten Beurteilungen basierend auf der Veränderung des MA-Indikators und nicht auf einfachen Kreuzungen, um zuverlässigere Kreuzungsurteile zu erhalten.

Zusammenfassung: Diese Strategie verwendet den Rahmen der traditionellen Linear-Cross-Strategie, bi-Linear-Tests zur Suche nach der optimalen Kombination von Linear-Perioden, während die Stop-Loss-Bestimmung auf Basis von Linear-ROC und Preis hinzugefügt wird. Insgesamt ist eine einfache und benutzerfreundliche Linear-Strategie, die mit der Quantifizierungslogik übereinstimmt.

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