Chiến lược rùa đột phá kênh hai

Tác giả:ChaoZhang, Ngày: 2024-01-05 16:16:44
Tags:

img

Tổng quan

Chiến lược Rùa đột phá kênh đôi là một chiến lược đột phá tạo ra các tín hiệu giao dịch bằng cách sử dụng chỉ số kênh Donchian. Chiến lược này thiết lập cả các kênh nhanh và chậm cùng một lúc. Kênh nhanh được sử dụng để thiết lập giá dừng lỗ, trong khi kênh chậm được sử dụng để tạo ra các tín hiệu mở và đóng. Khi giá vượt qua đường ray trên của kênh chậm, đi dài; khi giá vượt qua đường ray dưới, đi ngắn. Chiến lược này có đặc điểm theo dõi xu hướng mạnh mẽ và kiểm soát giảm tốt.

Nguyên tắc

Chiến lược Double Channel Breakthrough Turtle dựa trên chỉ số kênh Donchian. Kênh Donchian bao gồm đường ray trên, đường ray dưới và đường ray giữa được tính từ giá cao nhất và thấp nhất. Chiến lược này tạo ra cả hai kênh nhanh và chậm đồng thời, với các tham số được thiết lập bởi người dùng và thời gian mặc định là 50 thanh cho kênh chậm và 20 thanh cho kênh nhanh.

Các đường ray phía trên và phía dưới (đường xanh) của kênh chậm được sử dụng để tạo ra tín hiệu giao dịch. Khi giá vượt qua đường ray phía trên, đi dài; khi giá vượt qua đường ray phía dưới, đi ngắn. Đường ray giữa (dòng đỏ) của kênh nhanh được sử dụng để dừng lỗ. Giá dừng lỗ cho các vị trí dài là đường ray giữa của kênh nhanh; giá dừng lỗ cho các vị trí ngắn cũng là đường ray giữa của kênh nhanh.

Vì vậy, kênh chậm tạo ra tín hiệu trong khi kênh nhanh kiểm soát rủi ro. Sử dụng kênh kép đảm bảo cả sự ổn định tín hiệu và kiểm soát rủi ro. Màu nền cho thấy hướng vị trí hiện tại, màu xanh lá cây cho dài và màu đỏ cho ngắn.

Ngoài ra, chiến lược cũng thiết lập tỷ lệ phần trăm rủi ro và kích thước vị trí. tỷ lệ phần trăm rủi ro mặc định là 2%, và kích thước vị trí được tính dựa trên tỷ lệ phần trăm rủi ro và biến động kênh. Điều này có hiệu quả kiểm soát rủi ro mỗi giao dịch và tăng dần vị trí.

Ưu điểm

Chiến lược Rùa đột phá hai kênh có những lợi thế sau:

  1. Khả năng theo dõi xu hướng mạnh mẽ. Sử dụng kênh Donchian để xác định xu hướng có thể nắm bắt hiệu quả xu hướng trung bình đến dài hạn. Thiết kế kênh kép đảm bảo rằng chiến lược chỉ theo dõi các thị trường xu hướng mạnh.

  2. Điều này đảm bảo mất mát có thể kiểm soát được cho mỗi giao dịch. Chiến lược cũng thiết lập tỷ lệ phần trăm rủi ro để trực tiếp hạn chế lỗ tài khoản tối đa.

  3. Các tham số kênh chậm lớn đòi hỏi một thời gian tương đối dài để hình thành các kênh, tránh giao dịch quá mức. Trong khi đó, kênh nhanh dừng lỗ và bắt được các sửa đổi ngắn hạn. Cả hai bổ sung lẫn nhau để tạo ra các tín hiệu giao dịch ổn định.

  4. Chiến lược sử dụng biến động kênh Donchian để tính toán kích thước vị trí để kiểm soát rủi ro. Tăng dần vị trí cũng cân bằng các vị trí dài và ngắn.

  5. Hình ảnh trực quan. Các kênh kép, đường dừng lỗ, nền vị trí đều được vẽ rõ ràng để dễ hiểu logic chiến lược. Trong khi đó, mức rút tối đa, mức lỗ tối đa và các số liệu chính khác cũng được hiển thị.

Rủi ro

Chiến lược Rùa đột phá kênh hai cũng có một số rủi ro:

  1. Không thể sử dụng hiệu quả giá trong ngày. Rùa chỉ mở các vị trí trên các kênh đột phá, không thể sử dụng tình huống chính xác hơn để tăng vị trí. Điều này có thể được cải thiện thông qua tối ưu hóa.

  2. Các điểm dừng lỗ có xu hướng săn bắn. Sự mất mát dừng đường ray giữa cố định của rùa có thể dễ dàng bị tấn công trong các thị trường hoạt động. Điều này đòi hỏi phải điều chỉnh năng động các thông số đường ray giữa.

  3. Các tham số kênh kép cần điều chỉnh kỹ. Cài đặt tham số phù hợp là rất quan trọng để có tín hiệu ổn định hợp lý. Các tham số cố định hiện tại không thể thích nghi với những thay đổi của thị trường, các tính năng thích nghi cần phải được giới thiệu.

  4. Không thể sử dụng thông tin qua đêm và trước thị trường. Hiện nay chiến lược chỉ đánh giá xu hướng dựa trên dữ liệu thị trường trực tiếp, không thể thông báo các quyết định giao dịch với hành động giá qua đêm và trước thị trường. Điều này có thể được giải quyết bằng cách điều chỉnh dữ liệu.

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

Các hướng tối ưu hóa chính cho Chiến lược Rùa đột phá kênh hai là:

  1. Sử dụng giá trong ngày để điều chỉnh các vị trí. Các vị trí có thể được điều chỉnh dựa trên khoảng cách của giá từ kênh thay vì chỉ đơn giản là dài / ngắn.

  2. Thay đổi các điểm dừng trung bình cố định sang tính toán năng động để tránh việc săn lùng điểm dừng cố định.

  3. Tối ưu hóa tham số kênh thích nghi. Cho phép các tham số kênh tự động điều chỉnh dựa trên điều kiện thị trường thay vì các giá trị cố định bằng tay.

  4. Bao gồm thông tin qua đêm và trước thị trường.

  5. Kết hợp nhiều cổ phiếu và chỉ số. Áp dụng chiến lược cho nhiều cổ phiếu, với các cơ hội điều chỉnh giữa cổ phiếu và chỉ số để tăng cường alpha.

Kết luận

Kết luận, Chiến lược Rùa đột phá kênh đôi là một chiến lược ổn định, hiệu quả theo xu hướng chung với kiểm soát rủi ro nhúng. Việc sử dụng hai kênh nhanh và chậm đảm bảo cả sự ổn định tín hiệu và quản lý rủi ro. Ngoài ra, nền tảng vị trí, thu hút tối đa và kích thước vị trí cũng làm cho chiến lược này dễ dàng quản lý và tối ưu hóa. Nói chung, đây là một chiến lược định lượng chất lượng cao đáng nghiên cứu và áp dụng kỹ lưỡng.


/*backtest
start: 2023-12-05 00:00:00
end: 2024-01-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy("Noro's RiskTurtle Strategy", shorttitle = "RiskTurtle str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong  = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
risk      = input(2, minval = 0.1, maxval = 99, title = "Risk size, %")
fast      = input(20, minval = 1, title = "Fast channel (for stop-loss)")
slow      = input(50, minval = 1, title = "Slow channel (for entries)")
showof    = input(true, defval = true, title = "Show offset")
showll    = input(true, defval = true, title = "Show lines")
showdd    = input(true, defval = true, title = "Show label (drawdown)")
showbg    = input(true, defval = true, 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")

//Donchian price channel fast
hf = highest(high, fast)
lf = lowest(low, fast)
center = (hf + lf) / 2

//Donchian price chennal slow
hs = highest(high, slow)
ls = lowest(low, slow)

//Lines
colorpc = showll ? color.blue : na
colorsl = showll ? color.red : na
offset = showof ? 1 : 0
plot(hs, offset = offset, color = colorpc, title = "Slow channel high")
plot(ls, offset = offset, color = colorpc, title = "Slow channel low")
plot(center, offset = offset, color = colorsl, title = "Fast channel stop-loss")

//Background
size = strategy.position_size
colorbg = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(colorbg, transp = 70)

//Var
loss = 0.0
maxloss = 0.0
equity = 0.0
truetime = true

//Lot size
risksize = -1 * risk
risklong = ((center / hs) - 1) * 100
coeflong = abs(risksize / risklong)
lotlong = (strategy.equity / close) * coeflong
riskshort = ((center / ls) - 1) * 100
coefshort = abs(risksize / riskshort)
lotshort = (strategy.equity / close) * coefshort

//Orders
strategy.entry("Long", strategy.long, lotlong, stop = hs, when = needlong and strategy.position_size == 0 and hs > 0 and truetime)
strategy.entry("Short", strategy.short, lotshort, stop = ls, when = needshort and strategy.position_size == 0 and ls > 0 and truetime)
strategy.exit("LongExit", "Long", stop = center, when = needlong and strategy.position_size > 0)
strategy.exit("Short", stop = center, when = needshort and strategy.position_size < 0)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")
    
if showdd

    //Drawdown
    max = 0.0
    max := max(strategy.equity, nz(max[1]))
    dd = (strategy.equity / max - 1) * 100
    min = 100.0
    min := min(dd, nz(min[1]))
    
    //Max loss size
    equity := strategy.position_size == 0 ? strategy.equity : equity[1]
    loss := equity < equity[1] ? ((equity / equity[1]) - 1) * 100 : 0
    maxloss := min(nz(maxloss[1]), loss)
    
    //Label
    min := round(min * 100) / 100
    maxloss := round(maxloss * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%" + "\nMax.loss " + tostring(maxloss) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*10)
    osy = highest(100)
    // la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)

Thêm nữa