Strategie für die Kombination von Multi-Momentum-Indikatoren

Schriftsteller:ChaoZhang, Datum: 2023-09-24 13:24:47
Tags:

Übersicht

Diese experimentelle Strategie kombiniert Chande Momentum, RMI, Triple HMA RSI, Double EVW RSI, Triple EMA RSI und andere Momentum-Indikatoren und tritt in Positionen ein, wenn alle Indikatoren ausgerichtete Signale geben.

Strategie Logik

  1. Berechnen Sie Chande Momentum und setzen Sie seine Kauf- und Verkaufslinien.

  2. Die Berechnung des RMI, des Triple HMA RSI, des Double EVW RSI, des Triple EMA RSI und anderer Indikatoren.

  3. Für jeden Indikator Kauf- und Verkaufslinien festlegen.

  4. Wenn Chande Momentum über seine Kauflinie geht, überprüfen Sie, ob andere Indikatoren auch unter ihren jeweiligen Kauflinien liegen.

  5. Umgekehrt, wenn Chande Momentum unter der Verkaufslinie überschreitet, während andere Indikatoren ihre Verkaufslinien überschreiten, erzeugen sie ein Kurzsignal.

Vorteile

  1. Die Kombination von Indikatoren ermöglicht eine gegenseitige Validierung und vermeidet falsche Signale.

  2. Chande Momentum erfasst Trendveränderungen sensiblerweise.

  3. Der RMI zeigt die Momentumsniveaus an, mit denen Überkauf/Überverkauf ermittelt werden kann.

  4. Verschiedene RSI-Berechnungen mit HMA RSI, EVW RSI usw. testen.

  5. Eine flexible Kombination mehrerer Indikatoren ermöglicht die Prüfung der Wirksamkeit der Indikatoren.

Risiken

  1. Die Anforderungen an eine Kombination von mehreren Indikatoren sind schwerer zu erfüllen, weniger Trades, fehlende Chancen.

  2. Keine Risikokontrollmechanismen wie Stop Loss.

  3. Die Indikatorleistung ist zeitlich abhängig und funktioniert möglicherweise nicht für alle Zeiträume.

  4. Keine Parameteroptimierung, schlechte Parameter-Tuning möglich.

  5. Unzureichende Backtestdaten zur vollständigen Validierung der Strategie.

Mögliche Lösungen:

  1. Lässt die Indikatorschwellen für mehr Trades.

  2. Verluste zu begrenzen, indem Rücklauf- oder Hard Stop-Verluste einbezogen werden.

  3. Versuche bei verschiedenen Produkten und Zeitrahmen, um optimale Parameter zu finden.

  4. Einsatz von maschinellem Lernen oder Rastersuche zur Parameteroptimierung.

  5. Backtest auf mehr Märkten zur Gewährleistung der Robustheit.

Optimierungsrichtlinien

  1. Versuche verschiedene Parametermengen, um eine optimale Konfiguration zu finden.

  2. Hinzufügen von adaptiven Multimomentumsindikatoren.

  3. Einbeziehung von Trenddetektion, um gegentrendige Trades zu vermeiden.

  4. Verwenden Sie maschinelles Lernen, um die Gewichtung von mehreren Indikatoren zu verbessern.

  5. Kombination mit einem gleitenden Durchschnittssystem zur Verbesserung der Einträge.

Zusammenfassung

Diese Strategie versucht, zuverlässigere Trendwendepunkte zu identifizieren, indem sie mehrere Schwungindikatoren kombiniert. Die diversifizierte Logik hat ein großes Erweiterungs- und Optimierungspotenzial in Bereichen wie Parameterwahl, Indikatorgewichtung, Risikokontrolle usw., um mehr Qualitätssignale zu erwerben und gleichzeitig Robustheit zu gewährleisten, aber Risiken wie Kurvenanpassung müssen verwaltet werden.


/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © burgercrisis

//@version=4
strategy("RMI + Triple HMRSI + Double EVWRSI + TERSI Strategy")

//* 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)
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)
plot(chandeMO, "Chande MO", color=color.blue)




//RMI
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Relative Momentum Index script may be freely distributed under the MIT license.
length3 = input(title="RMI Length", type=input.integer, minval=1, defval=30)
momentumLength3 = input(title="RMI Momentum ", type=input.integer, minval=1, defval=25)
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)))-50
//
//
// end RMI, end Alex Orekhov copywrite
//
//

lengthMA = input(7)
lengthRSI = input(14)
thrsi = hma(hma(hma(rsi(src, lengthRSI), lengthMA), lengthMA), lengthMA)
thrsi1 = (thrsi-50)*10

lengthMA2 = input(7)
lengthRSI2 = input(14)
devwrsi = ((ema(ema(vwma(rsi(src, lengthRSI2), lengthMA2), lengthMA2), lengthMA2))-50)*5

lengthMA3 = input(7)
lengthRSI3 = input(14)
tersi = ((ema(ema(ema(rsi(src, lengthRSI3), lengthMA3), lengthMA3), lengthMA3))-50)*10

rmirsi = ((thrsi*rmi3/25))

//Boundary Lines

obLevel1 = input(0, title="Chande Sellline")
osLevel1 = input(0, title="Chande Buyline")
hline(obLevel1, color=#0bc4d9)
hline(osLevel1, color=#0bc4d9)

obLevel2 = input(0, title="Triple HMRSI Sellline")
osLevel2 = input(0, title="Triple HMRSI Buyline")
hline(obLevel2, color=#5a0bd9)
hline(osLevel2, color=#5a0bd9)

obLevel3 = input(0, title="DEVWRSI Sellline")
osLevel3 = input(0, title="DEVWRSI Buyline")
hline(obLevel3, color=#5a0bd9)
hline(osLevel3, color=#5a0bd9)

obLevel4 = input(0, title="TERSI Sellline")
osLevel4 = input(0, title="TERSI Buyline")
hline(obLevel4, color=#5a0bd9)
hline(osLevel4, color=#5a0bd9)

obLevel5 = input(0, title="RMI Sellline")
osLevel5 = input(0, title="RMI Buyline")
hline(obLevel5, color=#5a0bd9)
hline(osLevel5, color=#5a0bd9)

obLevel6 = input(0, title="RMI*RSI Sellline")
osLevel6 = input(0, title="RMI*RSI Buyline")
hline(obLevel6, color=#5a0bd9)
hline(osLevel6, color=#5a0bd9)

plot((thrsi1), title="THRSI")
plot(devwrsi, color=color.red, title="DEVWRSI")
plot(tersi, color=color.yellow, title="TERSI")
plot(rmirsi, color=color.purple, title="RMI*HMRSI")
plot(rmi3, color=color.orange, title="RMI")




longcondition1 = crossover(chandeMO, osLevel1)
shortcondition1 = crossunder(chandeMO, obLevel1)
longcondition2 = rmirsi<osLevel6 and rmi3<osLevel5 and tersi<osLevel4 and devwrsi<osLevel3 and thrsi1<osLevel2  and longcondition1
shortcondition2 = rmirsi>obLevel6 and rmi3>obLevel5 and tersi>obLevel4 and devwrsi>obLevel3 and thrsi1>obLevel2  and shortcondition1

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






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

Mehr