Chiến lược này xây dựng các kênh siêu xu hướng hai lớp và tạo ra các tín hiệu giao dịch khi giá phá vỡ các kênh. Nó cũng điều chỉnh chiều rộng kênh bằng cách sử dụng biến động giá để có hiệu ứng thích nghi. Nó thuộc về các chiến lược theo xu hướng.
Tính toán độ lệch chuẩn giá và biến động ATR, sử dụng biến động để điều chỉnh chiều rộng kênh.
Xây dựng các kênh siêu xu hướng hai lớp, với lớp bên trong nhạy cảm hơn và lớp bên ngoài ổn định hơn.
Tạo tín hiệu mua / bán khi giá phá vỡ kênh bên trong hoặc bên ngoài.
Cấu trúc kênh đôi giúp lọc một số sự đột phá sai.
Độ biến động ATR điều chỉnh chiều rộng kênh, rộng hơn khi độ biến động tăng lên để có hiệu ứng thích nghi.
Các kênh siêu xu hướng rất đơn giản và hiệu quả trong việc theo dõi xu hướng.
Kênh đôi lọc các sự đột phá giả và cải thiện chất lượng tín hiệu.
Điều chỉnh thích nghi với biến động làm cho các kênh phù hợp với môi trường thị trường khác nhau.
Dễ dàng thực hiện với điều chỉnh tham số đơn giản.
Các kênh và breakout được hiển thị tạo thành các tín hiệu giao dịch trực quan.
Các tín hiệu đột phá có thể tạo ra các tín hiệu sai dẫn đến tổn thất không cần thiết.
Nó không thể xác định hướng xu hướng, rủi ro của giao dịch ngược xu hướng.
Điều chỉnh thích nghi có thể quá nhạy cảm, với quá nhiều điều chỉnh.
Tối ưu hóa tham số không đúng dẫn đến quá phù hợp.
Là một xu hướng theo chiến lược, nó đấu tranh trong các thị trường giới hạn phạm vi.
Các thông số thử nghiệm ảnh hưởng đến hiệu ứng thích nghi.
Bao gồm MA để xác định xu hướng chính.
Tối ưu hóa xác nhận thoát để tránh thoát sai.
Thêm stop loss để giới hạn lỗ cho mỗi giao dịch.
Đánh giá việc điều chỉnh kênh về tần số giao dịch.
Sử dụng máy học để tối ưu hóa các tham số một cách năng động.
Chiến lược này sử dụng các kênh siêu xu hướng kép thích nghi để nắm bắt xu hướng giá. Nó đơn giản và trực quan trong việc theo dõi xu hướng. Nhưng rủi ro bao gồm đột phá sai và hướng xu hướng không chính xác. Việc điều chỉnh tham số hơn nữa và các cơ chế bổ sung có thể cải thiện hiệu suất chiến lược, làm cho nó trở thành một hệ thống theo xu hướng mạnh mẽ.
/*backtest start: 2023-08-20 00:00:00 end: 2023-09-19 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SuperTrend Cloud Strategy", shorttitle="SuperTrend Cloud Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital = 1000) //Inputs multi = input(title="Multiplier", type=input.float, step=0.1, defval=3, minval=1) period = input(title="Period", type=input.integer, step=1, defval=10, minval=1) SelfAdjust = input(title="Self-Adjusting", type=input.bool, defval = false) //////////////////////////////////////////////////////////////////////////////// // BACKTESTING RANGE // From Date Inputs fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2019, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2020, title = "To Year", minval = 1970) // Calculate start/end date and time condition startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true //////////////////////////////////////////////////////////////////////////////// dev = stdev(close, period) stdDev = (dev / close) * 100 + 1 MultDev = SelfAdjust ? multi * stdDev : multi up_lev1 = hl2 - MultDev * atr(period) dn_lev1 = hl2 + MultDev * atr(period) up_lev2 = hl2 - (MultDev * 2 * atr(period)) dn_lev2 = hl2 + (MultDev * 2 * atr(period)) up_trend1 = 0.0 up_trend1 := close[1] > up_trend1[1] ? max(up_lev1, up_trend1[1]) : up_lev1 up_trend2 = 0.0 up_trend2 := close[1] > up_trend2[1] ? max(up_lev2, up_trend2[1]) : up_lev2 down_trend1 = 0.0 down_trend1 := close[1] < down_trend1[1] ? min(dn_lev1, down_trend1[1]) : dn_lev1 down_trend2 = 0.0 down_trend2 := close[1] < down_trend2[1] ? min(dn_lev2, down_trend2[1]) : dn_lev2 trend1 = 0 trend1 := close > down_trend1[1] ? 1: close < up_trend1[1] ? -1 : nz(trend1[1], 1) trend2 = 0 trend2 := close > down_trend2[1] ? 1: close < up_trend2[1] ? -1 : nz(trend2[1], 1) st_line1 = trend1 == 1 ? up_trend1 : down_trend1 st_line2 = trend2 == 1 ? up_trend2 : down_trend2 // Plotting plot1 = plot(st_line1, color = trend1 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 1") plot2 = plot(st_line2, color = trend2 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 2") fill(plot1, plot2, color = color.aqua, title = "Cloud") buy = crossover(close, st_line1) and close > st_line2 or crossover(close, st_line2) and close > st_line1 sell = crossunder(close, st_line1) and close < st_line2 or crossunder(close, st_line2) and close < st_line1 if(buy and time_cond) strategy.entry("long", long = true , comment="long") if (close < st_line1 and time_cond or close < st_line2 and time_cond) strategy.close("long") if (not time_cond) strategy.close_all()