Idea utama strategi ini adalah untuk menggunakan turun naik harga untuk menilai trend pasaran. Apabila turun naik, ia bermakna pasaran membentuk trend baru. Dan apabila turun naik, ia bermakna trend semasa berakhir. Strategi ini mengira perubahan peratusan harga dan kemudian menapisnya dengan purata bergerak berganda untuk mendapatkan penunjuk yang mencerminkan turun naik harga. Ia menghasilkan isyarat beli apabila penunjuk melintasi di atas garis isyaratnya, dan menjual isyarat apabila melintasi di bawah.
Strategi pertama mengira perubahan peratusan harga:
i=(src/nz(src[1], src))*100
Kemudian ia menapis i dengan purata bergerak 35 tempoh untuk mendapatkan penunjuk turun naik awal pmol2. Pmol2 disaring semula dengan purata bergerak 20 tempoh untuk mendapatkan penunjuk akhir pmol. Akhirnya, purata bergerak 10 tempoh pmol digunakan sebagai garis isyarat pmols. Beli apabila pmol melintasi di atas pmols dan jual apabila melintasi di bawah.
Strategi ini menggunakan perubahan peratusan dan penapisan MA berganda untuk mengekstrak turun naik harga dan menilai perubahan trend. Ia tergolong dalam strategi penunjuk teknikal yang agak matang. Strategi ini mempunyai keupayaan menangkap trend yang baik tetapi keupayaan pengenalan titik balik sederhana.
/*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)