Dynamischer gleitender Durchschnittswert

Schriftsteller:ChaoZhang, Datum: 2023-12-13 16:37:05
Tags:

img

Übersicht

Diese Strategie verwendet die Neigung des gleitenden Durchschnitts (MA) und die Neigung der Impulsindikatoren für Handelsentscheidungen. Sie vergleicht die Neigung des MA und die Neigung des Impuls mit festgelegten Schwellenwerten und erzeugt Handelssignale, wenn beide Neigungen die Schwellenwerte überschreiten. Die Strategie enthält auch einen Filter für niedrige Volatilität, der einen anderen MA verwendet, um Signale zu erzeugen, wenn die Marktvolatilität niedrig ist.

Strategie Logik

Der Kern dieser Strategie besteht darin, zwei Neigungskurven zu vergleichen. Erstens berechnet sie die Neigung des MA- und Impulsindikators. Die Neigung spiegelt die Veränderungsrate und Richtung der Kurve wider. Dann werden zwei Schwellenwerte verwendet, wenn sowohl die MA-Neigung als auch die Impulsneigung die entsprechenden Schwellenwerte überschreiten, werden Handelssignale generiert.

Wenn beispielsweise sowohl die MA- als auch die Momentumsneigung die obere Linie überschreiten, wird ein Kaufsignal erzeugt; wenn beide Kurven unter die untere Linie fallen, wird ein Verkaufssignal erzeugt. Dies kann einige falsche Signale herausfiltern.

Der Filter für niedrige Volatilität verwendet einen langfristigen MA zur Bestimmung der Marktvolatilität.

Analyse der Vorteile

Diese Strategie hat folgende Vorteile:

  1. Der Doppelfilter für das Einrichten von Handelssignalen kann Lärm filtern und die Signalqualität verbessern.

  2. Der Filter mit geringer Volatilität ermöglicht es der Strategie, sich mit Elastizität an unterschiedliche Marktbedingungen anzupassen.

  3. Eine hohe Anpassbarkeit für verschiedene Parameter kann für verschiedene Produkte optimiert werden.

  4. Es enthält keine Neubemalungsfunktion zur Verringerung der Auswirkungen der Kurvenanpassung.

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Der Dualfilter kann einige reale Signale ausfiltern und Gelegenheiten verpassen.

  2. Die Schwellenwerte des Filters mit geringer Volatilität müssen sorgfältig geprüft werden, da eine falsche Einstellung Signalentfernungen verursachen kann.

  3. Die Parametereinstellungen für die MA und die Impulsindikatoren müssen für bestimmte Produkte optimiert werden, und es ist schwierig, universelle Parameter zu bestimmen.

  4. Die Funktion "keine Neubemalung" kann das Problem der Backtest-Kurvenanpassung nicht vollständig vermeiden, und die tatsächliche Handelsleistung muss noch überprüft werden.

  5. Eine hohe Anpassbarkeit erhöht die Komplexität des Parameterraums und die Schwierigkeit der Optimierung.

Optimierungsrichtlinien

Die Strategie kann in folgenden Richtungen optimiert werden:

  1. Testen Sie mehr Kombinationen von MA- und Impulsindikatoren, um die am besten übereinstimmenden Indikatoren zu finden.

  2. Optimierung der Längenparameter der MA und der Impulsindikatoren, um Verzögerung und Lärm auszugleichen.

  3. Optimierung der Parameter zur Berechnung der Steigung, um stabilere Indikatorenkombinationen zu finden.

  4. Versuche verschiedene Indikatoren und Parameter für eine geringe Volatilität, um die Elastizität zu verbessern.

  5. Test auf verschiedenen Produkten und Zeitrahmen, um den am besten geeigneten Anwendungsbereich zu finden.

  6. Erstellen von parameteradaptiven Mechanismen zur Verringerung der manuellen Optimierungslast.

Schlussfolgerung

Dies ist eine sehr flexible und anpassbare Dual-MA-Strategie. Sie verweist sowohl auf Preis- als auch auf Impulsinformationen für die Entscheidungsfindung, die falsche Signale effektiv filtern können. Der Filter mit geringer Volatilität macht die Strategie auch elastischer, um sich an Marktveränderungen anzupassen.

Mit Verbesserungen bei der Optimierung von Parametern und der Indikatorauswahl kann diese Strategie eine praktikable Wahl für den Handel im realen Leben werden.


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

Mehr