Chiến lược đột phá đường trung bình động kép dựa trên biến động giá


Ngày tạo: 2023-12-08 16:44:22 sửa đổi lần cuối: 2023-12-08 16:44:22
sao chép: 0 Số nhấp chuột: 637
1
tập trung vào
1621
Người theo dõi

Chiến lược đột phá đường trung bình động kép dựa trên biến động giá

Tổng quan

Ý 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á.

Nguyên tắc chiến lược

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.

Phân tích lợi thế

  • Sử dụng bộ lọc hai dòng đồng đều, có thể trích xuất tốt hơn tỷ lệ biến động giá, lọc tiếng ồn.
  • Tính toán tỷ lệ phần trăm thay đổi của giá, tăng cường thay đổi giá và phản ánh rõ ràng hơn sự thay đổi xu hướng.
  • Phương thức kiếm lợi nhuận khá rõ ràng: xu hướng bắt đầu mua, xu hướng kết thúc bán.

Phân tích rủi ro

  • Lưu ý rằng các sóng có hai đường đồng nhất sẽ gây ra một mức độ chậm trễ.
  • Phương pháp tính toán tỷ lệ phần trăm thay đổi nhạy cảm hơn với giá.
  • Khi chuyển đổi bò gấu, bạn phải thanh toán kịp thời.

Định hướng tối ưu hóa:

  • Tối ưu hóa các tham số đường trung bình để nắm bắt được xu hướng.
  • Hãy thử các cách khác nhau để tính toán thay đổi giá cả.
  • Thêm điều kiện lọc để tránh tín hiệu sai.

Tóm tắt

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ợ.

Mã nguồn chiến lược
/*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)