Strategie für eine Super-Impulsentwicklung

Schriftsteller:ChaoZhang, Datum: 2023-11-06 09:24:02
Tags:

img

Übersicht

Die Super Momentum-Strategie kombiniert mehrere Momentum-Indikatoren. Sie kauft, wenn mehrere Momentum-Indikatoren gleichzeitig bullisch sind, und verkauft, wenn sie gleichzeitig bärisch sind. Durch die Integration mehrerer Momentum-Indikatoren zielt sie darauf ab, Preistrends genauer zu erfassen und falsche Signale von einzelnen Indikatoren zu vermeiden.

Strategie Logik

Die Strategie verwendet 4 RMI-Indikatoren von Everget und 1 Chande Momentum Oscillator. RMI misst die Preisdynamik, um die bullische und bärische Stärke zu messen. Chande MO berechnet die Preisänderung, um Überkauf- und Überverkaufszustände zu identifizieren.

Es geht lang, wenn RMI5 über seine Kauflinie, RMI4 unter seiner Kauflinie, RMI3 unter seiner Kauflinie, RMI2 unter seiner Kauflinie, RMI1 unter seiner Kauflinie und Chande MO über seiner Kauflinie kreuzt.

Es geht kurz, wenn RMI5 unter seine Verkaufslinie, RMI4 über seine Verkaufslinie, RMI3 über seine Verkaufslinie, RMI2 über seine Verkaufslinie, RMI1 über seine Verkaufslinie und Chande MO unter seine Verkaufslinie geht.

Der RMI5 wird gegenüber anderen RMI eingestellt, um Trends für den Pyramidenhandel besser zu identifizieren.

Analyse der Vorteile

  • Die Kombination mehrerer Indikatoren verbessert die Trendgenauigkeit und vermeidet falsche Signale

  • Indikatoren über Zeiträume hinweg erfassen größere Trends

  • Umgekehrte RMI-Hilfen bei der Trendenidentifizierung und Pyramidenbildung

  • Chande MO verhindert schlechte Trades bei Überkauf/Überverkauf

Risikoanalyse

  • Komplexe Parameter mit mehreren Indikatoren müssen gründlich optimiert werden

  • Gleichzeitige Indikatorbewegungen können falsche Signale erzeugen

  • Niedrigere Handelsfrequenz mit mehreren Filtern

  • Die Parameter entsprechen möglicherweise nicht den unterschiedlichen Produkten und Marktsystemen

Optimierungsrichtlinien

  • Prüfung und Optimierung von Parametern für die Strategie-Robustheit

  • Hinzufügen/Entfernen von Indikatoren zur Bewertung der Auswirkungen auf die Signalqualität

  • Einführung von Filtern zur Vermeidung falscher Signale auf bestimmten Märkten

  • Anpassung der Kauf-/Verkaufslinien des Indikators, um optimale Kombinationen zu finden

  • Überlegen Sie, einen Stop-Loss zur Risikokontrolle hinzuzufügen.

Schlussfolgerung

Diese Strategie verbessert die Trendbeurteilung durch die Integration von Momentum-Indikatoren. Aber die Optimierung von Parametern ist aufgrund der Komplexität entscheidend. Wenn sie gut abgestimmt ist, kann sie qualitativ hochwertige Signale generieren und einen Vorteil beim Trendverfolgen haben. Aber Händler sollten auf Risiken achten, optimale Parameter finden und Risikokontrollen für einen stetigen Handel einbeziehen.


/*backtest
start: 2023-10-29 00:00:00
end: 2023-11-05 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Super Momentum Strat", shorttitle="SMS", format=format.price, precision=2)

//* Backtesting Period Selector | Component *//
//* https://www.tradingview.com/script/eCC1cvxQ-Backtesting-Period-Selector-Component *//
//* https://www.tradingview.com/u/pbergden/ *//
//* Modifications made *//
testStartYear = input(2021, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(999999, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(26, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
/////////////// END - Backtesting Period Selector | Component ///////////////


src = input(close, "Price", type = input.source)
highlightBreakouts = input(title="Highlight Overbought/Oversold Breakouts ?", type=input.bool, defval=true)

CMOlength = input(9, minval=1, title="Alpha Chande Momentum Length")


//CMO
momm = change(src)
f1(m) => m >= 0.0 ? m : 0.0
f2(m) => m >= 0.0 ? 0.0 : -m
m1 = f1(momm)
m2 = f2(momm)
sm1 = sum(m1, CMOlength)
sm2 = sum(m2, CMOlength)
percent(nom, div) => 100 * nom / div
chandeMO = percent(sm1-sm2, sm1+sm2)+50
plot(chandeMO, "Chande MO", color=color.blue)

obLevel = input(75, title="Chande Sellline")
osLevel = input(25, title="Chande Buyline")
hline(obLevel, color=#0bc4d9)
hline(osLevel, color=#0bc4d9)




///
///RMIS 
//
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Relative Momentum Index script may be freely distributed under the MIT license.
//
///
///


//RMI1
length1 = input(title="RMI1 Length", type=input.integer, minval=1, defval=8)
momentumLength1 = input(title="RMI1 Momentum ", type=input.integer, minval=1, defval=3)
up1 = rma(max(change(src, momentumLength1), 0), length1)
down1 = rma(-min(change(src, momentumLength1), 0), length1)

rmi1 = down1 == 0 ? 100 : up1 == 0 ? 0 : 100 - (100 / (1 + up1 / down1))

obLevel1 = input(57, title="RMI1 Sellline")
osLevel1 = input(37, title="RMI1 Buyline")

rmiColor1 = rmi1 > obLevel1 ? #0ebb23 : rmi1 < osLevel1 ? #ff0000 : #ffe173
plot(rmi1, title="RMI 1", linewidth=2, color=rmiColor1, transp=0)
hline(obLevel1, color=#0b57d9)
hline(osLevel1, color=#0b57d9)


//RMI2
length2 = input(title="RMI2 Length", type=input.integer, minval=1, defval=12)
momentumLength2 = input(title="RMI2 Momentum ", type=input.integer, minval=1, defval=3)
up2 = rma(max(change(src, momentumLength1), 0), length2)
down2 = rma(-min(change(src, momentumLength1), 0), length2)

rmi2 = down2 == 0 ? 100 : up1 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))

obLevel2 = input(72, title="RMI2 Sellline")
osLevel2 = input(37, title="RMI2 Buyline")

rmiColor2 = rmi1 > obLevel1 ? #0ebb23 : rmi2 < osLevel2 ? #ff0000 : #c9ad47
plot(rmi2, title="RMI 2", linewidth=2, color=rmiColor2, transp=0)
hline(obLevel2, color=#5a0bd9)
hline(osLevel2, color=#5a0bd9)

//RMI3
length3 = input(title="RMI3 Length", type=input.integer, minval=1, defval=30)
momentumLength3 = input(title="RMI3 Momentum ", type=input.integer, minval=1, defval=53)
up3 = rma(max(change(src, momentumLength3), 0), length3)
down3 = rma(-min(change(src, momentumLength3), 0), length3)

rmi3 = down3 == 0 ? 100 : up3 == 0 ? 0 : 100 - (100 / (1 + up3 / down3))

obLevel3 = input(46, title="RMI3 Sellline")
osLevel3 = input(24, title="RMI3 Buyline")

rmiColor3 = rmi3 > obLevel3 ? #0ebb23 : rmi3 < osLevel3 ? #ff0000 : #967d20
plot(rmi3, title="RMI 3", linewidth=2, color=rmiColor3, transp=0)
hline(obLevel3, color=#cf0bd9)
hline(osLevel3, color=#cf0bd9)
//RMI4
length4 = input(title="RMI4 Length", type=input.integer, minval=1, defval=520)
momentumLength4 = input(title="RMI4 Momentum ", type=input.integer, minval=1, defval=137)
up4 = rma(max(change(src, momentumLength4), 0), length4)
down4 = rma(-min(change(src, momentumLength4), 0), length4)

rmi4 = down4 == 0 ? 100 : up4 == 0 ? 0 : 100 - (100 / (1 + up4 / down4))

obLevel4 = input(0, title="RMI4 Sellline")
osLevel4 = input(100, title="RMI4 Buyline")

rmiColor4 = rmi4 > obLevel4 ? #0ebb23 : rmi4 < osLevel4 ? #ff0000 : #7a630b
plot(rmi4, title="RMI 4", linewidth=2, color=rmiColor4, transp=0)
hline(obLevel4, color=#bd1150)
hline(osLevel4, color=#bd1150)


//RMI5
length5 = input(title="RMI5 Length", type=input.integer, minval=1, defval=520)
momentumLength5 = input(title="RMI5 Momentum ", type=input.integer, minval=1, defval=137)
up5 = rma(max(change(src, momentumLength5), 0), length5)
down5 = rma(-min(change(src, momentumLength5), 0), length5)

rmi5 = down5 == 0 ? 100 : up4 == 0 ? 0 : 100 - (100 / (1 + up5 / down5))

buy5 = input(0, title="RMI5 Buy Above")
sell5 = input(47, title="RMI5 Sell Below")

rmiColor5 = rmi5 > buy5 ? #0ebb23 : rmi5 < sell5 ? #ff0000 : #7a630b
plot(rmi5, title="RMI 5", linewidth=2, color=rmiColor5, transp=0)
hline(buy5, color=#bd1150)
hline(sell5, color=#bd1150)
///
///END RMIS 
//
// 
// Relative Momentum Index script may be freely distributed under the MIT license.
//
///
///

hline(50, color=#C0C0C0, linestyle=hline.style_dashed, title="Zero Line")

//alerts


longcondition1 = crossover(chandeMO, osLevel)
shortcondition1 = crossunder(chandeMO, obLevel)
longcondition2 = rmi5>buy5 and rmi4<osLevel4 and rmi3<osLevel3 and rmi2<osLevel2 and rmi1<osLevel1 and longcondition1
shortcondition2 =  rmi5<sell5 and rmi4>obLevel4 and rmi3>obLevel3 and rmi2>obLevel2 and rmi1>obLevel1 and shortcondition1

if testPeriod()
    if longcondition2
        strategy.entry("Buy", strategy.long)
    if shortcondition2
        strategy.entry("Sell", strategy.short)

Mehr