Preisvolatilitäts-Breakout-Strategie auf der Grundlage doppelter gleitender Durchschnitte

Schriftsteller:ChaoZhang, Datum: 2023-12-08
Tags:

img

Übersicht

Die Kernidee dieser Strategie besteht darin, die Preisvolatilität zu nutzen, um Markttrends zu beurteilen. Wenn die Volatilität steigt, bedeutet dies, dass der Markt einen neuen Trend bildet. Und wenn die Volatilität sinkt, bedeutet dies, dass der aktuelle Trend endet. Die Strategie berechnet die prozentuale Preisänderung und filtert sie dann mit doppelten gleitenden Durchschnitten, um einen Indikator zu erhalten, der die Preisvolatilität widerspiegelt. Sie erzeugt Kaufsignale, wenn der Indikator über seine Signallinie geht, und verkauft Signale, wenn er darunter geht.

Strategie Logik

Die Strategie berechnet zunächst die prozentuale Preisänderung:

i=(src/nz(src[1], src))*100

Dann wird i mit einem gleitenden Durchschnitt von 35 Perioden gefiltert, um den vorläufigen Volatilitätsindikator pmol2 zu erhalten. Pmol2 wird erneut mit einem gleitenden Durchschnitt von 20 Perioden gefiltert, um den endgültigen Indikator pmol zu erhalten. Schließlich wird ein gleitender Durchschnitt von 10 Perioden von pmol als Signallinie pmols verwendet.

Analyse der Vorteile

  • Die doppelte MA-Filterung extrahiert die Volatilität gut und filtert Lärm aus.
  • Die Berechnung der prozentualen Veränderung verstärkt die Preisbewegungen und macht die Trendänderungen sichtbarer.
  • Das Gewinnmodell ist klar: Kaufen am Trendbeginn, verkaufen am Trendende.

Risikoanalyse

  • Das doppelte Filtern verursacht eine gewisse Verzögerung.
  • Die Berechnung der prozentualen Veränderung hängt von der Preisamplitude ab.
  • Ich brauche rechtzeitige Ausgänge bei Bullen-Bären-Übergängen.

Optimierungsrichtlinien

  • Optimierung der MA-Parameter zur Verbesserung des Trendfangs.
  • Versuchen Sie andere Methoden zur Berechnung der Preisänderung.
  • Fügen Sie Filter hinzu, um falsche Signale zu vermeiden.

Zusammenfassung

Diese Strategie verwendet prozentuale Veränderung und doppelte MA-Filterung, um Preisvolatilität zu extrahieren und Trendveränderungen zu beurteilen. Sie gehört zu den relativ ausgereiften technischen Indikatorstrategien. Die Strategie hat eine gute Trendfangfähigkeit, aber eine mittlere Wendepunkterkennungsfähigkeit. Sie kann über Parameter-Tuning und Hinzufügen von Hilfsbedingungen optimiert werden.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Strategy for DPMO", overlay=true)

src=input(close, title="Source")
length1=input(35, title="First Smoothing")
length2=input(20, title="Second Smoothing")
siglength=input(10, title="Signal Smoothing")
ebc=input(false, title="Enable Bar Colors")

upSign = '↑' // indicates the indicator shows uptrend
downSign = '↓' // incicates the indicator showing downtrend
exitSign ='x' //indicates the indicator uptrend/downtrend ending

calc_csf(src, length) => 
	sm = 2.0/length
	csf=(src - nz(csf[1])) * sm + nz(csf[1])
	csf
i=(src/nz(src[1], src))*100
pmol2=calc_csf(i-100, length1)
pmol=calc_csf( 10 * pmol2, length2)
pmols=ema(pmol, siglength)
d=pmol-pmols
hc=d>0?d>d[1]?lime:green:d<d[1]?red:orange

buyDPMO = hc==lime and hc[1]!=lime
closeBuyDPMO = hc==green and hc[1]!=green
sellDPMO = hc==red and hc[1]!=red
closeSellDPMO = hc==orange and hc[1]!=orange

plotshape(buyDPMO, color=lime, style=shape.labelup, textcolor=#000000, text="DPMO", location=location.belowbar, transp=0)
plotshape(closeBuyDPMO, color=green, style=shape.labelup, textcolor=#ffffff,  text="X", location=location.belowbar, transp=0)
plotshape(sellDPMO, color=red, style=shape.labeldown, textcolor=#000000, text="DPMO", location=location.abovebar, transp=0)
plotshape(closeSellDPMO, color=orange, style=shape.labeldown, textcolor=#ffffff,  text="X", location=location.abovebar, transp=0)
barcolor(ebc?hc:na)


strategy.entry("Long", strategy.long, when=buyDPMO)
strategy.close("Long", when=closeBuyDPMO or sellDPMO)   
strategy.entry("Short", strategy.short, when=sellDPMO)
strategy.close("Short", when=closeSellDPMO or buyDPMO)  


Mehr