Dynamische gleitende Durchschnitt-Doppelstrategie


Erstellungsdatum: 2023-12-13 16:37:05 zuletzt geändert: 2023-12-13 16:37:05
Kopie: 2 Klicks: 669
1
konzentrieren Sie sich auf
1621
Anhänger

Dynamische gleitende Durchschnitt-Doppelstrategie

Überblick

Die Strategie nutzt die Schräglage des Moving Averages (MA) und die Schräglage des Dynamic Indicators für ihre Handelsentscheidungen. Sie vergleicht die MA-Schräglage und die Dynamic-Schräglage mit den eingestellten Thresholds und erzeugt ein Handelssignal, wenn beide Schräglagen die Thresholds überschreiten. Die Strategie enthält auch einen Low-Volation-Filter, der bei geringer Marktvolatilität ein anderes MA-Signal erzeugt.

Strategieprinzip

Der Kern dieser Strategie besteht darin, zwei Verlaufskurven zu vergleichen. Zuerst berechnet sie die Verlaufskurve für MA und Dynamikindikator. Die Verlaufskurve spiegelt die Geschwindigkeit und Richtung der Kurve wider.

Wenn beispielsweise sowohl die MA-Schlange als auch die Dynamik-Schlange über der Oberbahn liegen, wird ein Kaufsignal erzeugt; wenn beide Kurven unter der Oberbahn liegen, wird ein Verkaufsignal erzeugt. Auf diese Weise können einige falsche Signale herausgefiltert werden.

Der Low-Volatility-Filter verwendet eine langfristige MA, um die Marktvolatilität zu beurteilen. Wenn die Volatilität niedrig ist, wird ein MA mit verschiedenen Parametern verwendet, um ein Handelssignal zu erzeugen, das sich an unterschiedliche Marktbedingungen anpasst.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Die Doppelfilter, mit denen die Handelssignale eingestellt werden, filtern die Geräusche ab und verbessern die Signalqualität.

  2. Der Low-Overflow-Filter ermöglicht die Anpassung der Strategie an unterschiedliche Marktbedingungen und bietet eine hohe Elastizität.

  3. Ermöglicht eine hohe Anpassung der verschiedenen Parameter, die für verschiedene Sorten optimiert werden können.

  4. Mit einer Lackfreiheit reduziert die Kurvenanpassung den Einfluss auf die Ergebnisse.

Risikoanalyse

Die Strategie birgt auch Risiken:

  1. Die Doppelfilterung kann einige echte Signale filtern, was zu verpassten Chancen führt. Diese können durch Anpassung der Parameter optimiert werden.

  2. Bei einem Low-Overflow-Filter muss der Tiefstwert sorgfältig getestet werden. Bei falschen Parametern kann es zu Signalverzerrungen kommen.

  3. Die Parameter für die MA und die Dynamikindikatoren müssen für bestimmte Sorten optimiert werden. Die allgemeinen Parameter für den gesamten Markt sind schwer zu bestimmen.

  4. Die Lacklos-Funktion kann die Rücklaufkurve nicht vollständig umgehen. Die Festplattenwirkung muss noch überprüft werden.

  5. Die hohen Anpassungen der Parameter machen den Parameterraum komplizierter und machen die Optimierung schwieriger.

Optimierungsrichtung

Diese Strategie kann in folgenden Richtungen optimiert werden:

  1. Test mehrere Arten von MA und Kombinationen von Bewegungsindikatoren, um die am besten geeigneten zu finden.

  2. Optimierung der Längenparameter für MA und Dynamometer, Ausgleich von Verzögerung und Geräusch.

  3. Optimieren Sie die Parameter für die Berechnung der Schräglage und finden Sie eine Kombination aus stabileren Indikatoren.

  4. Verschiedene Indikatoren und Parameter für eine geringe Volatilität werden getestet, um die Elastizität zu erhöhen.

  5. Tests an verschiedenen Sorten und Perioden zur Suche nach dem optimalen Anwendungsbereich.

  6. Die Einrichtung von Parameter-Adaptionsmechanismen reduziert die manuelle Optimierung.

Zusammenfassen

Die Strategie als Ganzes ist eine sehr flexible und anpassbare Doppel-MA-Strategie. Sie bezieht sich auf Preis- und Volumeninformationen, um Entscheidungen zu treffen, und kann falsche Signale effektiv filtern. Die Low-Vibration-Filter machen die Strategie auch flexibler und können sich an Marktveränderungen anpassen.

Durch die Optimierung der Parameter und die Verbesserung der Indikator-Auswahl kann diese Strategie eine Option sein, die es wert ist, in der Realität in Betracht zu ziehen. Sie bietet eine Referenz-Template für Handelsentscheidungen unter Verwendung von MA und Dynamikindikatoren.

Strategiequellcode
/*backtest
start: 2023-11-12 00:00:00
end: 2023-12-12 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/
// © Allenlk
//@version=4
strategy("DRSI DMA Scalping Strategy", shorttitle="DRSIDMA", overlay=false, initial_capital=1000, pyramiding=2, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//Inputs
matype             = input(7, minval=1, maxval=8, title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA, 8=Tilson T3", group="Moving Average")
masrc              = input(close, title="MA Source", group="Moving Average")
malen              = input(5, title="Moving Average Length - LookBack Period", group="Moving Average")
factorT3           = input(defval=7, title="Tilson T3 Factor - *.10 - so 7 = .7 etc.", minval=0, group="Moving Average")
maderiv            = input(3, title="MA Slope Lookback", minval=1, group="Moving Average")
masmooth           = input(5, title="MA Slope Smoothing", minval=1, group="Moving Average")
momtype            = input(3, minval=1, maxval=3, title="1=RSI, 2=CCI, 3=RSI/ROC", group="Momentum Moving Average")
momsrc             = input(close, title="Momentum Source", group="Momentum Moving Average")
momlen             = input(3, title="Momentum Length", minval=1, group="Momentum Moving Average")
momderiv           = input(8, title="Momentum Slope Lookback", minval=1, group="Momentum Moving Average")
momsmooth          = input(7, title="Momentum Slope Smoothing", minval=1, group="Momentum Moving Average")
higherTf           = input("1", title="Higher timeframe?", type = input.resolution, group="Time Resolution")
higherTfmult       = input(130, title="MA Slope multiplier for Alternate Resolutions (Make the waves of the blue line similar size as the orange line)", group="Time Resolution")
buffup             = input(0.02, title="Buy when both slopes cross this line", step=0.01, group="Buy and Sell Threshold")
bufflow            = input(-0.03, title="Sell when both slopes cross this line", step=0.01, group="Buy and Sell Threshold")
lowVolMALength     = input(28, title="Big MA Length", minval=1, group="Low Volatility Function")
MAlength           = input(10, title="Low Volatility Moving Average Length", minval=1, group="Low Volatility Function")
MAThresh           = input(0.05, title="Low Volatility Buy and Sell Threshold", step=0.01, group="Low Volatility Function")
Volminimum         = input(2.5, title="Minimum volatility to trade", minval=0, step=0.01, group="Low Volatility Function")

//Low Volatility Function
//When Volatility is low refer to the slope of a long moving average
low_vol_MA         = sma(close, lowVolMALength)
low_vol_down       = (low_vol_MA[3] - low_vol_MA[1]) > MAThresh
low_vol_up         = (low_vol_MA[3] - low_vol_MA[1]) < MAThresh * -1
percent_volatility = (1 - (low / high)) * 100
chng_MA            = sma(percent_volatility, MAlength)
bad_vol            = chng_MA < Volminimum

//No repaint function
nrp_funct(_symbol, _res, _src) => security(_symbol, _res, _src[barstate.isrealtime ? 1 : 0])

//hull ma definition
hullma = wma(2*wma(masrc, malen/2)-wma(masrc, malen), round(sqrt(malen)))

//TEMA definition
ema1 = ema(masrc, malen)
ema2 = ema(ema1, malen)
ema3 = ema(ema2, malen)
tema = 3 * (ema1 - ema2) + ema3

//Tilson T3
factor = factorT3 *.10
gd(masrc, malen, factor) => ema(masrc, malen) * (1 + factor) - ema(ema(masrc, malen), malen) * factor 
t3(masrc, malen, factor) => gd(gd(gd(masrc, malen, factor), malen, factor), malen, factor) 
tilT3 = t3(masrc, malen, factor) 
 
//MA Type 
avg = matype == 1 ? sma(masrc,malen) : matype == 2 ? ema(masrc,malen) : matype == 3 ? wma(masrc,malen) : matype == 4 ? hullma : matype == 5 ? vwma(masrc, malen) : matype == 6 ? rma(masrc,malen) : matype == 7 ? 3 * (ema1 - ema2) + ema3 : tilT3

//MA Slope Percentage
DeltaAvg      = (avg / avg[maderiv]) - 1
SmoothedAvg   = sma(DeltaAvg, masmooth) 
MAout         = nrp_funct(syminfo.tickerid, higherTf, SmoothedAvg) * higherTfmult

//Momentum indicators
Momentum = momtype == 1 ? rsi(momsrc, momlen) : momtype == 2 ? cci(momsrc, momlen) : momtype == 3 ? rsi(roc(momsrc,momlen),momlen) : na

//Momentum Slope Percentage
Deltamom = (Momentum / Momentum[momderiv]) - 1
SmoothedMom = sma(Deltamom, momsmooth) 
Momout   = nrp_funct(syminfo.tickerid, higherTf, SmoothedMom)

//Plottings
plot(buffup, color=color.green, title="Buy line")
plot(bufflow, color=color.red, title="Sell line")
plot(MAout, color=color.blue, linewidth=2, title="MA Slope")
plot(Momout, color=color.orange, linewidth=2, title="Momentum Slope")

longCondition = bad_vol ? low_vol_up : MAout > buffup and Momout > buffup
if (longCondition)
    strategy.entry("Buy", strategy.long)

shortCondition = bad_vol ? low_vol_down : MAout < bufflow and Momout < bufflow
if (shortCondition)
    strategy.entry("Sell", strategy.short)