Chiến lược theo xu hướng dựa trên sự giao nhau của đường trung bình động


Ngày tạo: 2024-02-23 12:21:40 sửa đổi lần cuối: 2024-02-23 12:21:40
sao chép: 4 Số nhấp chuột: 619
1
tập trung vào
1617
Người theo dõi

Chiến lược theo xu hướng dựa trên sự giao nhau của đường trung bình động

Tổng quan

Chiến lược này được sử dụng để xác định xu hướng của giá bằng cách tính toán các đường trung bình di chuyển của hai thiết lập tham số khác nhau và so sánh các trường hợp chéo của chúng để thực hiện giao dịch theo xu hướng. Khi đường trung bình di chuyển nhanh phá vỡ đường trung bình di chuyển chậm từ phía dưới, nó được coi là tín hiệu lạc quan; khi đường trung bình di chuyển nhanh phá vỡ đường trung bình di chuyển chậm từ phía trên xuống, nó được coi là tín hiệu đi xuống.

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

Chiến lược này so sánh các đường trung bình di chuyển với hai nhóm các tham số khác nhau, tham số trung bình di chuyển đầu tiên được thiết lập bởi len1 và type1, tham số trung bình di chuyển thứ hai được thiết lập bởi len2 và type2. Trong đó len1 và len2 đại diện cho độ dài chu kỳ của hai đường trung bình di chuyển, và type1 và type2 đại diện cho loại thuật toán của đường trung bình di chuyển.

Khi đường trung bình di chuyển nhanh từ dưới phá vỡ đường trung bình di chuyển chậm để tạo ra một cái gai vàng, nó được coi là tín hiệu đi lên; khi đường trung bình di chuyển nhanh từ trên xuống phá vỡ đường trung bình di chuyển chậm để tạo ra một cái gai chết, nó được coi là tín hiệu đi xuống.

Theo hướng của tín hiệu chéo, thực hiện các hoạt động mua nhiều hoặc mua ít. Khi tín hiệu giá lên được kích hoạt, nếu tham số needlong là đúng, hãy mua nhiều theo số lượng hoặc tỷ lệ phần trăm của giá trị_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt_đặc biệt.

Lợi thế chiến lược

  1. Hỗ trợ kết hợp 7 loại moving average khác nhau để thích ứng linh hoạt với môi trường thị trường
  2. Các tham số có thể tùy chỉnh cho hai đường trung bình di chuyển để đánh giá xu hướng dài hạn và xu hướng trung hạn
  3. Quy tắc đánh giá tín hiệu chiến lược đơn giản, rõ ràng và dễ hiểu
  4. Hỗ trợ cho các giao dịch mua và bán để theo dõi xu hướng

Rủi ro và giải pháp

  1. Trung bình di chuyển có tính chậm trễ, có thể bỏ lỡ điểm biến động giá Giải pháp: Sử dụng một chu kỳ trung bình di chuyển ngắn hơn hoặc kết hợp với các chỉ số khác

  2. Không áp dụng cho thị trường có tỷ lệ biến động cao và biến động thường xuyên Giải pháp: Thêm các điều kiện lọc để tránh giao dịch trong thời gian chấn động

  3. Có một số rủi ro về tín hiệu sai Giải pháp: Kết hợp các chỉ số lọc khác để tăng độ tin cậy của tín hiệu

Hướng tối ưu hóa

  1. Tối ưu hóa kết hợp chu kỳ của trung bình di chuyển, thử nghiệm ảnh hưởng của các tham số chu kỳ dài và ngắn đến lợi nhuận của chiến lược
  2. Kiểm tra hiệu suất của các loại moving average khác nhau để tìm ra thuật toán moving average tốt nhất
  3. Thêm các chỉ số như khối lượng giao dịch VARIABLE hoặc kênh Brin để kết hợp, cải thiện chất lượng tín hiệu
  4. Tối ưu hóa chiến lược quản lý vị trí, cải thiện cách %_of_equity của vị trí cố định

Tóm tắt

Chiến lược này đánh giá xu hướng giá bằng cách so sánh sự giao thoa của hai đường trung bình di chuyển và thực hiện các hoạt động giảm giá phù hợp để có thể nắm bắt và theo dõi xu hướng. Ưu điểm của chiến lược là quy tắc tín hiệu đơn giản và rõ ràng, tham số có thể điều chỉnh, khả năng áp dụng mạnh mẽ, có thể điều chỉnh tối ưu cho nhiều môi trường thị trường.

Mã nguồn chiến lược
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's MAs Cross Tests v1.0", shorttitle = "MAs Cross tests 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0)

needlong = input(true, "long")
needshort = input(true, "short")

len2 = input(15, defval = 15, minval = 2, maxval = 1000, title = "Fast MA length")
type2 = input(1, defval = 1, minval = 1, maxval = 7, title = "Fast MA Type")
src2 = input(close, defval = close, title = "Fast MA Source")

len1 = input(30, defval = 30, minval = 2, maxval = 1000, title = "Slow MA length")
type1 = input(1, defval = 1, minval = 1, maxval = 7, title = "Slow MA Type")
src1 = input(close, defval = close, title = "Slow MA Source")

col = input(false, defval = false, title = "Color of bar")

o = input(false, title = "1 SMA, 2 EMA, 3 VWMA, 4 DEMA, 5 TEMA, 6 KAMA, 7 Price Channel") 

//DEMA 1
dema1 = 2 * ema(src1, len1) - ema(ema(close, len1), len1)

//TEMA 1
xEMA1 = ema(src1, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
tema1 = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA 1
xvnoise = abs(src1 - src1[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src1 - src1[len1])
nnoise = sum(xvnoise, len1)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
kama1 = nz(kama1[1]) + nsmooth * (src1 - nz(kama1[1]))

//PriceChannel 1
lasthigh1 = highest(src1, len1)
lastlow1 = lowest(src1, len1)
center1 = (lasthigh1 + lastlow1) / 2

//DEMA 2
dema2 = 2 * ema(src2, len2) - ema(ema(close, len2), len2)

//TEMA 2
xEMA12 = ema(src2, len2)
xEMA22 = ema(xEMA12, len2)
xEMA32 = ema(xEMA22, len2)
tema2 = 3 * xEMA12 - 3 * xEMA22 + xEMA32

//KAMA 2
xvnoise2 = abs(src2 - src2[1])
nfastend2 = 0.20
nslowend2 = 0.05
nsignal2 = abs(src2 - src2[len2])
nnoise2 = sum(xvnoise2, len2)
nefratio2 = iff(nnoise2 != 0, nsignal2 / nnoise2, 0)
nsmooth2 = pow(nefratio2 * (nfastend2 - nslowend2) + nslowend2, 2) 
kama2 = nz(kama2[1]) + nsmooth2 * (src2 - nz(kama2[1]))

//PriceChannel 2
lasthigh2 = highest(src2, len2)
lastlow2 = lowest(src2, len2)
center2 = (lasthigh2 + lastlow2) / 2

//MAs
ma1 = type1 == 1 ? sma(src1, len1) : type1 == 2 ? ema(src1, len1) : type1 == 3 ? vwma(src1, len1) : type1 == 4 ? dema1 : type1 == 5 ? tema1 : type1 == 6 ? kama1 : type1 == 7 ? center1 : 0
ma2 = type2 == 1 ? sma(src2, len2) : type2 == 2 ? ema(src2, len2) : type2 == 3 ? vwma(src2, len2) : type2 == 4 ? dema2 : type2 == 5 ? tema2 : type2 == 6 ? kama2 : type2 == 7 ? center2 : 0
plot(ma1, color = blue, linewidth = 3, transp = 0)
plot(ma2, color = red, linewidth = 3, transp = 0)

//Signals
trend = ma2 > ma1 ? 1 : ma2 < ma1 ? -1 : trend[1]
up = trend == 1 and ((close < open and close[1] < open[1]) or col == false)
dn = trend == -1 and ((close > open and close[1] > open[1]) or col == false)

if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)