
Chiến lược phá vỡ hai kênh Turtle là một chiến lược phá vỡ sử dụng chỉ số kênh Donchian để xây dựng tín hiệu giao dịch. Chiến lược này đồng thời tạo ra kênh nhanh và kênh chậm, kênh nhanh được sử dụng để thiết lập giá dừng lỗ và kênh chậm được sử dụng để tạo ra tín hiệu mở và đóng.
Lịch lý cốt lõi của chiến lược phá vỡ hai kênh Turtle dựa trên chỉ số kênh Donchian. Đường Donchian được tính bằng giá cao nhất và giá thấp nhất, bao gồm đường lên, đường xuống và đường giữa. Chiến lược này đồng thời tạo ra các kênh nhanh và chậm, các tham số được thiết lập bởi người dùng, chu kỳ kênh chậm mặc định là 50 đường K và chu kỳ kênh nhanh là 20 đường K.
Đường trên và đường dưới của kênh chậm (đường xanh) được sử dụng để tạo ra tín hiệu giao dịch. Khi giá phá vỡ đường lên, hãy làm nhiều; Khi giá rơi xuống đường xuống, hãy làm trống.
Bằng cách này, kênh chậm chịu trách nhiệm tạo tín hiệu, kênh nhanh chịu trách nhiệm dừng lỗ, sử dụng song song với hai kênh, đảm bảo sự ổn định của tín hiệu giao dịch 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 là nhiều đầu, màu đỏ là đầu không.
Ngoài ra, chiến lược cũng thiết lập mức độ rủi ro và quản lý vị trí. Mức độ rủi ro mặc định là 2%, vị trí được tính theo mức độ rủi ro và tỷ lệ biến động của kênh.
Chiến lược Turtle có những lợi thế sau:
Khả năng theo dõi xu hướng mạnh mẽ. Sử dụng các kênh Donchian để đánh giá xu hướng, có thể nắm bắt hiệu quả các xu hướng đường dài và đường trung. Thiết kế hai kênh cho phép chiến lược chỉ theo dõi các trường hợp có xu hướng mạnh mẽ.
Quay lại và kiểm soát rủi ro. Đường trung tuyến đường nhanh làm dừng lỗ, từ đường trên đến đường trung và từ đường dưới đến đường trung là khu vực rủi ro, đảm bảo rằng mỗi tổn thất có thể kiểm soát được. Chiến lược cũng đặt mức độ rủi ro, giới hạn trực tiếp tổn thất tối đa của tài khoản.
Tín hiệu giao dịch ổn định. Các tham số kênh chậm là lớn, hình thành kênh cần thời gian dài, tránh giao dịch thường xuyên. Trong khi các kênh nhanh như dừng lỗ có thể nắm bắt được điều chỉnh ngắn hạn.
Vị trí và quản lý rủi ro được cải thiện. Chiến lược sử dụng biến động của kênh Donchian để tính toán quy mô vị trí và kiểm soát lỗ hổng rủi ro. Việc gia tăng vị trí dần dần cũng làm cho vị trí của hai bên có nhiều không gian cân bằng hơn.
Các chỉ số trực quan được hiển thị. Các đường hai, đường dừng và bối cảnh vị trí được vẽ rõ ràng, logic giao dịch được hiển thị một cách trực quan. Đồng thời hiển thị các chỉ số quan trọng như rút tối đa, mất tối đa.
Tuy nhiên, chiến lược Turtle có một số rủi ro:
Không thể sử dụng hiệu quả giá trong kho. Chiến lược Rùa chỉ mở vị trí khi phá vỡ kênh, 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 bằng cách tối ưu hóa.
Điểm dừng lỗ dễ bị theo dõi. Điểm dừng của chiến lược Turtle là đường trung đạo nhanh nhất định. Trong thị trường hoạt động, điều này có thể bị chặn. Điều này đòi hỏi phải điều chỉnh động các tham số đường trung đạo.
Các tham số hai kênh cần được điều chỉnh. Các tham số kênh được thiết lập đúng để tạo ra tín hiệu ổn định hợp lý. Các tham số cố định hiện tại không thể thích ứng với sự thay đổi của thị trường, cần giới thiệu chức năng tự thích ứng.
Không thể sử dụng thông tin về giao dịch đêm và giao dịch trước. Chiến lược hiện tại chỉ đánh giá xu hướng dựa trên tình hình giao dịch thực tế, không thể sử dụng tình hình giao dịch trước và sau giao dịch để hướng dẫn quyết định giao dịch. Điều này có thể được cải thiện bằng cách điều chỉnh dữ liệu.
Chiến lược Turtle Breakthrough có một số hướng tối ưu hóa:
Sử dụng giá trong đĩa để điều chỉnh vị trí. Bạn có thể điều chỉnh kích thước vị trí dựa trên khoảng cách giữa giá và kênh trong đĩa, thay vì chỉ đơn giản là làm thêm lỗ hổng.
Tăng trí thông minh cho chiến lược dừng lỗ. Thay đổi quỹ đạo dừng cố định thành tính toán động, tránh các điểm dừng lỗ bị theo dõi.
Tự điều chỉnh và tối ưu hóa các tham số kênh. Cho phép các tham số kênh được điều chỉnh tự động theo các điều kiện thị trường, thay vì đặt giá trị cố định bằng tay.
Thêm phán đoán thị trường trước và sau khi mua. Trong phán đoán chiến lược, không chỉ tham khảo giá thực, mà còn nên xem xét giá trước và sau khi mua, để có được tình hình thị trường toàn diện hơn.
Kết hợp nhiều giao dịch cổ phiếu hoặc chỉ số. Áp dụng chiến lược cho nhiều cổ phiếu, giao dịch tháo gỡ có thể được cấu hình giữa các cổ phiếu và chỉ số khác nhau, để có được alpha.
Chiến lược phá vỡ hai kênh Turtle nói chung là một chiến lược theo dõi xu hướng ổn định, hiệu quả và có kiểm soát rủi ro. Chiến lược sử dụng cả hai kênh nhanh và chậm, đảm bảo sự ổn định của tín hiệu giao dịch và quản lý rủi ro. Ngoài ra, màu nền, rút lui tối đa và quản lý vị trí giúp chiến lược dễ quản lý và tối ưu hóa.
/*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)