Momentum Smoothed Moving Average und Moving Average Crossover-Strategie


Erstellungsdatum: 2023-11-27 17:35:09 zuletzt geändert: 2023-11-27 17:35:09
Kopie: 0 Klicks: 673
1
konzentrieren Sie sich auf
1617
Anhänger

Momentum Smoothed Moving Average und Moving Average Crossover-Strategie

Überblick

Die Strategie verwendet eine Kreuzung von dynamischen gleitenden gleitenden Durchschnitten (ALMA) mit zwei Indizes mit unterschiedlichen Parameter-Sätzen (EMA) um ein Handelssignal zu erzeugen. Die Strategie kombiniert auch einen randomisierten gleitenden gleitenden Durchschnitt (Stochastic RSI) um übermäßige Kauf- und Verkaufssituationen zu vermeiden.

Strategieprinzip

Leistung der ALMA-Leitung

Die Strategie nutzt ALMA als Hauptindikator für die Preisentwicklung. ALMA verfügt über die Funktion, Preisdaten zu glätten und die zufällige Schwankung der Preise zu filtern. ALMA kann durch Anpassung der Periodizität, der Verlagerung und der Sigma-Parameter sensibeler oder stabiler gemacht werden.

Kurz und gut, EMA-Linie kreuzt.

Die Strategie verwendet zwei EMA-Linien unterschiedlicher Länge. Wenn die schnelle EMA-Linie aufwärts durch die langsame EMA-Linie fährt, erzeugt sie ein Kaufsignal. Wenn die schnelle EMA-Linie nach unten durch die langsame EMA fährt, erzeugt sie ein Verkaufsignal.

Stochastic RSI

Der Stochastic RSI dient dazu, Handelssignale in überkauften und überverkauften Bereichen zu vermeiden. Er kombiniert die Vorzüge der beiden Indikatoren RSI und Stochastic, um die Höhen- und Talbereiche besser zu beurteilen. Wenn der Stochastic RSI überkauft oder überverkauft wird, wird die Strategie die ursprüngliche Mehr- oder Leerposition aufgehoben.

Strategische Stärkenanalyse

Das ist eine gute Idee.

Die Strategie nutzt die Vorteile der EMA-Kreuzung, um die Richtung der Preisentwicklung zu bestimmen, und arbeitet mit dem ALMA-Indikator zusammen, um die wichtigsten Über- und Hohlkopf-Gelegenheiten zu identifizieren und einen Übergang zu erzielen.

Parameter sind anpassungsfähig

Die EMA-Zyklen, ALMA-Parameter usw. bieten einen flexiblen Spielraum für Benutzer, die die Parameter nach ihren Bedürfnissen optimieren können, um die Strategie besser an die verschiedenen Marktbedingungen anzupassen.

Die Zinssperre

Die Strategie enthält eine Stop-Loss-Stopp-Einstellung. Die Verwendung von Floating Stop-Loss reduziert die Wahrscheinlichkeit, dass der Stop-Loss gejagt wird.

Risikoanalyse

Trends werden falsch beurteilt

In komplexen Situationen können EMA- und ALMA-Leitungen falsche Signale abgeben. In diesem Fall ist auf Stop-Loss-Kontrolle angewiesen.

Die Parameter sind falsch.

Wenn die Parameter nicht korrekt eingestellt sind, können die EMA- und ALMA-Leitung nicht richtig funktionieren, was das Handelsrisiko erhöht. Es muss getestet und optimiert werden, um die beste Kombination von Parametern zu wählen.

Richtung der Strategieoptimierung

  1. Optimierung der Parameter-Einstellungen von EMA und ALMA, um die optimalen Parameter auszuwählen.

  2. In Kombination mit anderen Indikatoren filtern Sie die Signale, um Fehlsignale zu vermeiden, die zu Verlusten führen.

  3. Optimierung der Stop-Loss-Marge, eine Balance zwischen Risiken und Gewinnen.

  4. Verschiedene Sorten und Zyklusparameter wurden getestet, um die Strategie für mehr Märkte anzuwenden.

Zusammenfassen

Die Strategie ist insgesamt eine einfache und praktische Trend-Tracking-Strategie. Sie nutzt die EMA-Kreuzung, um die Richtung des Trends zu bestimmen, die ALMA-Anzeige, um die Position zu positionieren, und die Stochastic RSI, um das Risiko eines Überkaufs zu vermeiden, während Stop-Loss- und Stop-Stops eingerichtet werden, um das Risiko zu kontrollieren. Durch Parameteranpassung und Optimierung der Indikatoren kann die Strategie eine bessere Wirkung erzielen.

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

//@version=5

////Arranged by @ClassicScott
//Strategy Created by @CheatCode1


strategy('ALMA/EMA Strategy', shorttitle='ALMA/EMA Strategy', overlay=true )



////Source Selection & ALMA Variables

//Dominant Momentum ALMA
dsource = input.source(close, title='Source', group='Dominant ALMA')
dperiod = input.int(title='Period', defval=130, group='Dominant ALMA')
doffset = input.float(title='Offset', step=0.025, defval=0.775, group='Dominant ALMA')
dsigma = input.float(title='Sigma', step=0.5, defval=4.5, group='Dominant ALMA')

dalma = ta.alma(dsource, dperiod, doffset, dsigma)

dalma_up_color = input.color(#66bb6a, 'Going Up!', group='Dominant ALMA', inline = '1')
dalma_down_color = input.color(#ef5350, 'Going Down :(', group='Dominant ALMA', inline = '1')
dcolor = close[1] > dalma ? dalma_up_color : dalma_down_color

////ALMA Plots
plot(dalma, color=dcolor, style=plot.style_stepline, linewidth=2, title='Dominant Momentum MA')



//Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1

//Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1

cheatcode = input.bool(true, '-----------CHEATC0DE1------------', group = 'Strategy Inputs', confirm = true)

//Variable Declerations/Plot Assingments

inp1 = input.int(49, 'Slow Ema Length', 1, 100, group = 'Strategy Inputs', confirm = true)
inp2 = input.int(9, 'Fast Ema Length', 1, 200, group = 'Strategy Inputs', confirm = true)
inp3 = int(200)
sma1 = ta.sma(close, inp3)
ema1 = ta.ema(close, inp1)
ema2 = ta.ema(close, inp2)

eplot1 = plot(ema1, 'Slow Ema', color.aqua, 1,  plot.style_linebr)
eplot2 = plot(ema2, 'Fast Ema', color.yellow, 1,  plot.style_linebr)
splot1 = plot(sma1, 'Long MA', close[1] < sma1 ? color.red:color.green, 1, plot.style_line, display = display.none)

cross1 = ta.crossover(ema1, ema2)
cross2 = ta.crossunder(ema1, ema2)

plotchar(cross1, '', '↑', location.belowbar,  close[1] > dalma and dalma > sma1 ? na:color.green, size = size.normal, editable = false)
plotchar(cross2, '', '↓', location.abovebar, close[1] < dalma and dalma < sma1 ? na:color.red, size = size.normal, editable = false)
bgcolor(cross1 and close[1] > dalma ? color.new(color.green, 80):cross2 and close[1] < dalma ? color.new(color.red, 80):na)

valueL = ta.valuewhen(cross1 and close[1] > dalma, close, 0)
valueS = ta.valuewhen(cross2 and close[1] < dalma, close, 0)

//Entries

if cross1 and close[2] > dalma[2] and close[1] > dalma[1]
    strategy.entry('Long', strategy.long)
if cross2 and close[2] < dalma[2] and close[1] < dalma[1]
    strategy.entry('Short', strategy.short)
    
//StochRsi
    
smoothK = input.int(3, "K", minval=1)
smoothD = input.int(15, "D", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(8, "Stochastic Length", minval=1)
src = input(close, title="RSI Source")
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)

//Cancellations

if k > 75
    strategy.cancel('Long')
if k < 25
    strategy.cancel('Short')
    
//Closures

if ta.crossunder(k, d) and k > 92
    strategy.close('Long')
if ta.crossover(k,d) and k < 8
    strategy.close('Short')

//Exit Percents

takeP = input.float(3, title='Take Profit', group = 'Take Profit and Stop Loss') / 100
stopL = input.float(5.49, title = 'Stop Loss', group = 'Take Profit and Stop Loss')/100
// Pre Directionality

Stop_L = strategy.position_avg_price * (1 - stopL)

Stop_S = strategy.position_avg_price * (1 + stopL)

Take_S= strategy.position_avg_price * (1 - takeP)

Take_L = strategy.position_avg_price * (1 + takeP)
     
     
//Post Excecution
if strategy.position_size > 0
    strategy.exit("Flat", limit=Take_L, stop = Stop_L)

if strategy.position_size < 0
    strategy.exit("Flat", limit=Take_S, stop = Stop_S)