Ý tưởng cốt lõi của chiến lược này là sử dụng biến động giá để đánh giá xu hướng thị trường. Khi biến động tăng, điều đó có nghĩa là thị trường đang hình thành một xu hướng mới. Và khi biến động giảm, điều đó có nghĩa là xu hướng hiện tại đang kết thúc. Chiến lược tính toán tỷ lệ thay đổi tỷ lệ phần trăm của giá và sau đó lọc nó bằng trung bình động đôi để có được một chỉ số phản ánh biến động giá. Nó tạo ra tín hiệu mua khi chỉ số vượt qua đường tín hiệu của nó, và bán tín hiệu khi vượt qua dưới.
Chiến lược đầu tiên tính toán tỷ lệ thay đổi tỷ lệ phần trăm giá:
i=(src/nz(src[1], src))*100
Sau đó, nó lọc i với một trung bình động 35 giai đoạn để có được chỉ số biến động sơ bộ pmol2. Pmol2 được lọc lại với một trung bình động 20 giai đoạn để có được chỉ số cuối cùng pmol. Cuối cùng, một trung bình động 10 giai đoạn của pmol được sử dụng làm đường tín hiệu pmols. Mua khi pmol vượt qua pmols và bán khi vượt qua dưới.
Chiến lược này sử dụng thay đổi tỷ lệ phần trăm và lọc MA đôi để trích xuất biến động giá và đánh giá thay đổi xu hướng. Nó thuộc về các chiến lược chỉ số kỹ thuật tương đối trưởng thành. Chiến lược có khả năng bắt xu hướng tốt nhưng khả năng nhận dạng điểm chuyển đổi trung bình. Có thể tối ưu hóa thông qua điều chỉnh tham số và thêm các điều kiện phụ trợ.
/*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)