Chiến lược giá trung bình chuyển động chéo

Tác giả:ChaoZhang, Ngày: 2023-11-27 16:52:19
Tags:

img

Tổng quan

Chiến lược này về cơ bản là một chiến lược chéo trung bình động. Bằng cách tính toán trung bình động của giá và thiết lập một số trung bình động ngắn hạn và dài hạn, đi dài khi trung bình động ngắn hạn vượt qua trên trung bình động dài hạn từ dưới; đi ngắn khi trung bình động ngắn hạn vượt qua dưới trung bình động dài hạn từ trên.

Nguyên tắc

Ý tưởng cốt lõi của chiến lược chéo trung bình động giá là: trung bình động của giá có thể phản ánh hiệu quả xu hướng thay đổi giá. Chiến lược đánh giá sự thay đổi xu hướng thị trường bằng cách thiết lập hai trung bình động của các chu kỳ khác nhau và logic giao dịch nhất định để tạo ra tín hiệu giao dịch.

Chiến lược tính toán một đường trung bình động dài hạn và một đường ngắn hạn. Dòng dài chủ yếu đánh giá xu hướng chính, và đường ngắn được sử dụng để nắm bắt biến động trung hạn trong xu hướng chính. Các tín hiệu giao dịch của chiến lược chủ yếu đến từ sự giao thoa của đường ngắn trên đường dài: tín hiệu dài khi đường ngắn vượt qua đường dài, và tín hiệu ngắn khi đường ngắn vượt qua bên dưới. Ngoài ra, chiến lược lọc các tín hiệu để tránh các tín hiệu sai.

Đặc biệt, chiến lược sử dụng 7 loại trung bình động khác nhau, bao gồm SMA, EMA, VWMA, vv. Người dùng có thể chọn loại trung bình động. Độ dài của trung bình động cũng có thể được đặt linh hoạt. Ngoài ra, chiến lược cũng cung cấp các hạn chế đối với các khoảng thời gian giao dịch nhất định và cơ chế quản lý vị trí. Thông qua các thiết lập này, người dùng có thể linh hoạt điều chỉnh các tham số của chiến lược để thích nghi với các loại và môi trường thị trường khác nhau.

Phân tích lợi thế

Những lợi thế chính của chiến lược chéo giá trung bình động là như sau:

  1. Logic chiến lược là rõ ràng và đơn giản, dễ hiểu và thực hiện, phù hợp cho người mới bắt đầu học.

  2. Nguyên tắc chiến lược là vững chắc, dựa trên các quy tắc giao dịch trung bình động đã được xác minh đầy đủ, và đã được thử nghiệm thực tế trên thị trường.

  3. Các tham số của chiến lược linh hoạt và có thể điều chỉnh. Người dùng có thể chọn các tham số phù hợp theo đánh giá và sở thích của riêng họ trên thị trường.

  4. Chiến lược có một số cơ chế kiểm soát rủi ro để giảm thời gian giữ lệnh thua lỗ và ngăn chặn các vị trí đảo ngược không cần thiết.

  5. Chiến lược này chứa nhiều loại đường trung bình động. Người dùng có thể chọn loại đường trung bình động phù hợp nhất cho các loại giao dịch của họ.

  6. Chiến lược hỗ trợ cho phép logic giao dịch trong các khoảng thời gian giao dịch cụ thể để tránh biến động bất thường trên các thị trường kỳ nghỉ lớn.

Phân tích rủi ro

Mặc dù chiến lược chéo giá trung bình động có nhiều lợi thế, nhưng vẫn có một số rủi ro trong giao dịch thực tế, chủ yếu được phản ánh trong hai khía cạnh sau:

  1. Do sự chậm trễ của hầu hết các đường trung bình động, các tín hiệu chéo có thể xuất hiện ở giai đoạn sau khi đảo ngược giá được hoàn thành, dễ bị mắc kẹt.

  2. Trong trường hợp cài đặt tham số không đúng, tín hiệu chéo có thể quá thường xuyên, dẫn đến hoạt động giao dịch quá cao và chi phí giao dịch cao hơn.

Để đáp ứng các rủi ro trên, các biện pháp kiểm soát và đối phó được thực hiện theo các cách sau:

  1. Kiểm soát rủi ro mất mát đơn bằng cách đặt phạm vi dừng lỗ thích hợp.

  2. Giảm tần suất giao dịch và ngăn chặn giao dịch quá mức bằng cách thêm các điều kiện lọc. ví dụ, thiết lập kênh giá hoặc điều kiện dao động giá.

  3. Tối ưu hóa các tham số của trung bình động để chọn sự kết hợp phù hợp nhất của các tham số cho các loại giao dịch và chu kỳ của riêng bạn. Kiểm tra sự ổn định của chiến lược trong các điều kiện thị trường khác nhau.

Tối ưu hóa

Vẫn còn chỗ để tối ưu hóa hơn nữa chiến lược chéo giá trung bình động này.

  1. Tăng cơ chế bảo vệ trong điều kiện thị trường cực đoan. Ví dụ, tạm dừng giao dịch trong thời gian dao động giá mạnh mẽ để tránh điều kiện thị trường bất thường.

  2. Tăng điều kiện lọc và kết hợp các tín hiệu giao dịch để cải thiện chất lượng và sự ổn định của tín hiệu.

  3. Sử dụng hệ thống tham số động. Theo điều kiện thị trường và đặc điểm của các giống, tự động điều chỉnh các tham số chính như chiều dài trung bình động, chuyển đổi giao dịch, v.v. thay vì sử dụng các giá trị cố định.

  4. Áp dụng tín hiệu chéo trung bình chuyển động này trong các chiến lược tiên tiến như điều khoản đa dạng tổng hợp. Kết hợp nó với các thông tin khác để tối ưu hóa chiến lược sâu sắc.

Những gợi ý trên có thể mở rộng môi trường áp dụng và hiệu quả của chiến lược này và đạt được sự cân bằng rủi ro-lợi nhuận tốt hơn.

Kết luận

Bài viết này đưa ra một phân tích mã chi tiết và giải thích về chiến lược chéo trung bình động đơn giản - Noros CrossMA. Chúng tôi phân tích ý tưởng chiến lược, cấu trúc nguyên tắc, lợi thế chính và các hướng cải tiến có thể. Nhìn chung, chiến lược này có logic rõ ràng và đơn giản và thực tế. Việc điều chỉnh tham số linh hoạt có thể thích nghi với nhiều môi trường giao dịch. Chúng tôi cũng phân tích các vấn đề và rủi ro hiện có trong chiến lược và đưa ra lời khuyên có mục tiêu. Người ta tin rằng thông qua các phân tích và thảo luận toàn diện này, các nhà giao dịch có thể hiểu rõ hơn về các loại chiến lược và giúp họ tối ưu hóa liên tục các hệ thống giao dịch thực.


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's CrossMA", shorttitle = "CrossMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.1)

needlong = input(true, "long")
needshort = input(true, "short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
type = input(defval = "SMA", options = ["SMA", "EMA", "VWMA", "DEMA", "TEMA", "KAMA", "PCMA"], title = "MA type")
src = input(close, defval = close, title = "MA Source")
len = input(30, defval = 30, minval = 1, title = "MA length")
off = input(00, defval = 00, minval = 0, title = "MA offset")
anti = input(true, defval = true, title = "Anti-saw filter")
showma = input(true, defval = true, title = "Show MA")
showbg = input(false, defval = false, title = "Show background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2)
kama = 0.0
kama := nz(kama[1]) + nsmooth * (src - nz(kama[1]))

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

sma_1 = sma(src, len)
ema_1 = ema(src, len)
vwma_1 = vwma(src, len)
ma2 = type == "SMA" ? sma_1 : type == "EMA" ? ema_1 : type == "VWMA" ? vwma_1 : type == "DEMA" ? dema : type == "TEMA" ? tema : type == "KAMA" ? kama : type == "PCMA" ? center : 0
ma = ma2[off]

macol = showma ? color.blue : na
plot(ma, color = macol, linewidth = 3, transp = 0)

//Background
trend = 0
trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1]
bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na
bgcolor(bgcol, transp = 70)

//Trading
size = strategy.position_size
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if trend == 1 and trend[1] == -1
    strategy.entry("Long", strategy.long, lot, when = needlong and truetime)
if trend == -1 and trend[1] == 1
    strategy.entry("Short", strategy.short, lot, when = needshort and truetime)
if size > 0 and needshort == false and trend == -1
    strategy.close_all()
if size < 0 and needlong == false and trend == 1
    strategy.close_all()
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Thêm nữa