Chiến lược kéo là một chiến lược theo xu hướng dựa trên các kênh Donchian. Nó sử dụng các kênh Donchian nhanh và chậm để xác định hướng xu hướng và tham gia rút lui. Lợi thế của chiến lược này là nó có thể theo dõi xu hướng tự động và cắt giảm lỗ trong thời gian khi xu hướng thay đổi.
Chiến lược đầu tiên xác định khoảng thời gian kênh nhanh là 20 thanh, và khoảng thời gian kênh chậm là 50 thanh.
Đầu tiên, mức cao nhất và thấp nhất của kênh nhanh được tính toán, và điểm giữa được lấy làm đường dừng lỗ. Đồng thời, mức cao nhất và thấp nhất của kênh chậm được tính toán, và kênh trên và dưới được sử dụng làm đường nhập.
Khi giá vượt qua đỉnh của kênh chậm, đi dài. Khi giá vượt qua đáy của kênh chậm, đi ngắn. Sau khi vào vị trí, đặt stop loss ở giữa kênh nhanh.
Vì vậy, kênh chậm xác định hướng xu hướng chính, trong khi kênh nhanh theo dõi các đột phá nhỏ trong phạm vi nhỏ để xác định điểm dừng lỗ.
Tự động theo dõi xu hướng và cắt giảm tổn thất trong thời gian.
Chỉ lấy các mục nhập khi giá vượt qua ranh giới kênh có thể lọc ra một số sự đột phá giả mà không có xu hướng thực sự.
Rủi ro có thể kiểm soát được.
Các chiến lược theo xu hướng có thể có các khoản rút tương đối lớn đòi hỏi sự chuẩn bị tâm lý.
Stop loss quá gần. Thời gian kênh nhanh là ngắn nên stop loss gần, dễ bị dừng lại. Chúng ta có thể thư giãn thích hợp thời gian kênh nhanh.
Quá nhiều giao dịch. Cấu trúc kênh kép có thể tạo ra các mục nhập quá nhiều, đòi hỏi kích thước vị trí hợp lý.
Chúng ta có thể thêm biến động v.v. trong các điều kiện nhập cảnh để lọc các sự đột phá mà không có đủ sức mạnh xu hướng.
Tối ưu hóa các tham số thời gian kênh. Chúng ta có thể tìm ra các kết hợp tham số kênh tối ưu một cách có hệ thống.
Kết hợp nhiều khung thời gian. Xác định xu hướng chính trong khung thời gian cao hơn và giao dịch trong khung thời gian thấp hơn.
Phân đoạn dừng mất mát động. Điều chỉnh khoảng cách dừng động dựa trên biến động thị trường.
Chiến lược kéo là một chiến lược theo xu hướng tiêu chuẩn nói chung. Nó sử dụng các kênh giá để xác định hướng xu hướng và thiết lập dừng lỗ để kiểm soát rủi ro. Chiến lược có một số lợi thế nhưng cũng có những vấn đề về giảm và dừng lỗ quá gần. Chúng ta có thể tối ưu hóa nó bằng cách điều chỉnh các tham số kênh, thêm bộ lọc vv. Nhưng chúng ta nên lưu ý các chiến lược theo xu hướng đòi hỏi tâm lý mạnh mẽ để chịu được giảm.
/*backtest start: 2023-09-30 00:00:00 end: 2023-10-30 00:00:00 period: 2h 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)