Chiến lược giao dịch lưới dựa trên hệ thống trung bình động

Tác giả:ChaoZhang, Ngày: 2024-01-03 17:18:22
Tags:

img

Tổng quan

Chiến lược này sử dụng lý thuyết trung bình động để xây dựng một hệ thống giao dịch lưới bằng cách đánh giá xu hướng thị trường thông qua nhiều bộ trung bình động JMA với các thông số khác nhau.

Chiến lược logic

  1. Sử dụng một sự kết hợp của các đường trung bình động JMA 1-20 giai đoạn để xác định xu hướng thị trường.

  2. Mở giao dịch lưới tại các điểm đảo ngược xu hướng, khi MA ngắn vượt qua dưới hoặc trên MA dài.

  3. Một tùy chọn để lọc dựa trên màu nến - chỉ mua trên nến màu đỏ và bán trên nến màu xanh lá cây, nếu không bỏ qua màu sắc và giao dịch chỉ khi chuyển hướng.

  4. Các bước ra là theo dõi stop loss hoặc bước ra dựa trên thời gian khi thời gian chiến lược kết thúc.

Phân tích lợi thế

  1. Sử dụng hệ thống MA để xác định xu hướng có thể xác định hiệu quả sự đảo ngược xu hướng dài hạn.

  2. Giao dịch lưới có thể nắm bắt lợi nhuận từ các thị trường giới hạn phạm vi mà không có xu hướng rõ ràng, với dừng lỗ để kiểm soát rủi ro.

  3. Các tham số JMA có thể tùy chỉnh, có thể tối ưu hóa cho các khoảng thời gian khác nhau, linh hoạt cao.

  4. Bộ lọc nến tránh bị đánh lừa bởi các sự đột phá giả.

Phân tích rủi ro

  1. Các thị trường chọc chích cao mà không có xu hướng rõ ràng có rủi ro dừng lỗ cao hơn.

  2. Lỗi đánh giá từ hệ thống MA có thể dẫn đến các tín hiệu giao dịch không chính xác.

  3. Lọc nến rủi ro mất một số cơ hội giao dịch.

  4. Nếu khoảng cách lưới quá rộng, lợi nhuận không đủ; quá hẹp có thể dẫn đến quá nhiều vị trí và chi phí cao.

Hướng dẫn tối ưu hóa

  1. Kiểm tra nhiều kết hợp tham số hơn để tìm kết hợp JMA MA tối ưu cho các sản phẩm khác nhau.

  2. Kết hợp các bộ lọc khác như băng tần BOLL, KD vv để cải thiện chất lượng tín hiệu.

  3. Tối ưu hóa cấu hình lưới như khoảng cách lưới, lô nhập cảnh vv

  4. Xem xét nhiều phương pháp dừng lỗ hơn như dựa trên khoảng cách, dừng kéo theo vv

Kết luận

Chiến lược này đánh giá sự đảo ngược bằng lý thuyết JMA và mở giao dịch lưới tại các điểm chuyển đổi để nắm bắt lợi nhuận từ sự thay đổi xu hướng dài hạn. Hiệu suất có thể được cải thiện hơn nữa thông qua tối ưu hóa tham số.


/*backtest
start: 2022-12-27 00:00:00
end: 2024-01-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=3
strategy(title = "Noro's Fishnet Strategy", shorttitle = "Fishnet str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
usecf = input(false, defval = false, title = "Use Color-filter")
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")

//JMA
jmax(src, len) =>
    beta = 0.45*(len-1)/(0.45*(len-1)+2)
    alpha = pow(beta, 3)
    L0=0.0, L1=0.0, L2=0.0, L3=0.0, L4=0.0
    L0 := (1-alpha)*src + alpha*nz(L0[1])
    L1 := (src - L0[0])*(1-beta) + beta*nz(L1[1])
    L2 := L0[0] + L1[0]
    L3 := (L2[0] - nz(L4[1]))*((1-alpha)*(1-alpha)) + (alpha*alpha)*nz(L3[1])
    L4 := nz(L4[1]) + L3[0]
	L4

ma01 = jmax(close, 10)
ma02 = jmax(close, 20)
ma03 = jmax(close, 30)
ma04 = jmax(close, 40)
ma05 = jmax(close, 50)
ma06 = jmax(close, 60)
ma07 = jmax(close, 70)
ma08 = jmax(close, 80)
ma09 = jmax(close, 90)
ma10 = jmax(close, 100)
ma11 = jmax(close, 110)
ma12 = jmax(close, 120)
ma13 = jmax(close, 130)
ma14 = jmax(close, 140)
ma15 = jmax(close, 150)
ma16 = jmax(close, 160)
ma17 = jmax(close, 170)
ma18 = jmax(close, 180)
ma19 = jmax(close, 190)
ma20 = jmax(close, 200)

trend = 0
trend := ma01 > ma20 ? 1 : ma01 < ma20 ? -1 : trend[1]
col = trend == 1 ? #00FF7F : #DC143C

plot(ma01, transp = 0, color = col)
plot(ma02, transp = 0, color = col)
plot(ma03, transp = 0, color = col)
plot(ma04, transp = 0, color = col)
plot(ma05, transp = 0, color = col)
plot(ma06, transp = 0, color = col)
plot(ma07, transp = 0, color = col)
plot(ma08, transp = 0, color = col)
plot(ma09, transp = 0, color = col)
plot(ma10, transp = 0, color = col)
plot(ma11, transp = 0, color = col)
plot(ma12, transp = 0, color = col)
plot(ma13, transp = 0, color = col)
plot(ma14, transp = 0, color = col)
plot(ma15, transp = 0, color = col)
plot(ma16, transp = 0, color = col)
plot(ma17, transp = 0, color = col)
plot(ma18, transp = 0, color = col)
plot(ma19, transp = 0, color = col)
plot(ma20, transp = 0, color = col)

//Trading
lot = 0.0
lot := strategy.equity / close * capital / 100

if trend == 1 and (close < open or usecf == false)
    strategy.entry("Long", strategy.long, needlong ? lot : na)

if trend == -1 and (close > open or usecf == false)
    strategy.entry("Short", strategy.short, needshort ? lot : na)
    

Thêm nữa