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