Ide inti dari strategi ini adalah menggunakan volatilitas harga untuk menilai tren pasar. Ketika volatilitas naik, itu berarti pasar membentuk tren baru. Dan ketika volatilitas menurun, itu berarti tren saat ini berakhir. Strategi menghitung perubahan persentase harga dan kemudian menyaringnya dengan rata-rata bergerak ganda untuk mendapatkan indikator yang mencerminkan volatilitas harga. Ini menghasilkan sinyal beli ketika indikator melintasi di atas garis sinyalnya, dan menjual sinyal ketika melintasi di bawah.
Strategi pertama menghitung persentase perubahan harga:
i=(src/nz(src[1], src))*100
Kemudian ia menyaring i dengan rata-rata bergerak 35 periode untuk mendapatkan indikator volatilitas awal pmol2. Pmol2 disaring lagi dengan rata-rata bergerak 20 periode untuk mendapatkan indikator akhir pmol. Akhirnya, rata-rata bergerak 10 periode pmol digunakan sebagai garis sinyal pmols. Beli ketika pmol melintasi di atas pmols dan jual saat melintasi di bawah.
Strategi ini menggunakan perubahan persentase dan penyaringan MA ganda untuk mengekstrak volatilitas harga dan menilai perubahan tren. Ini termasuk dalam strategi indikator teknis yang relatif matang. Strategi ini memiliki kemampuan menangkap tren yang baik tetapi kemampuan pengenalan titik balik sedang. Dapat mengoptimalkan melalui penyesuaian parameter dan menambahkan kondisi tambahan.
/*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)