
Die Kernidee dieser Strategie ist es, die Preisfluktuation zu nutzen, um die Markttrends zu beurteilen. Wenn die Fluktuation steigt, bedeutet dies, dass ein neuer Trend entsteht. Wenn die Fluktuation sinkt, bedeutet dies, dass der aktuelle Trend endet.
Die Strategie berechnet zunächst die prozentuale Veränderung der Preise:
i=(src/nz(src[1], src))*100
Anschließend wird die Primärpreisfluktuationsindikator pmol2 durch einen Durchschnittsfilter mit einer Länge von 35 gefiltert. Anschließend wird die Endpreisfluktuationsindikator pmol2 durch einen Durchschnittsfilter mit einer Länge von 20 gefiltert. Schließlich werden die Signalstränge von pmol durch einen Durchschnittsfilter mit einer Länge von 10 gefiltert.
Optimierung:
Diese Strategie, die durch die Berechnung von prozentualen Veränderungen und doppelte Gleichgewichtsfilterungen die Preisfluktuation auswertet, um Markttrendänderungen zu beurteilen, gehört zu den eher ausgereiften Strategien der Technischen Indikator-Klasse. Die Strategie hat eine starke Fähigkeit, Trends zu erfassen, aber die Fähigkeit, Wechselpunkte zu identifizieren.
/*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)