Chiến lược này là một hệ thống giao dịch SuperTrend thích nghi dựa trên máy học tăng cường độ tin cậy của chỉ số SuperTrend truyền thống bằng cách tích hợp cụm biến động, phát hiện xu hướng ATR thích nghi và cơ chế vào / ra có cấu trúc. Khái niệm cốt lõi nằm trong việc phân loại biến động thị trường thông qua các phương pháp học máy, thực hiện các giao dịch theo xu hướng trong điều kiện thị trường phù hợp, đồng thời sử dụng mức dừng lỗ và lấy lợi nhuận năng động để kiểm soát rủi ro.
Chiến lược bao gồm ba thành phần chính: 1) Tính thích nghi tính toán siêu xu hướng dựa trên ATR để xác định hướng xu hướng và điểm chuyển đổi; 2) K-means dựa trên sự biến động cụm mà phân loại các trạng thái thị trường vào môi trường biến động cao, trung bình và thấp; 3) Các quy tắc giao dịch khác biệt dựa trên môi trường biến động. Nó tìm kiếm các cơ hội xu hướng trong môi trường biến động thấp trong khi duy trì thận trọng trong điều kiện biến động cao. Hệ thống nắm bắt các tín hiệu đảo ngược xu hướng bằng cách sử dụng các hàm ta.crossunder và ta.crossover, kết hợp với vị trí giá tương đối với đường siêu xu hướng.
Chiến lược này tạo ra một hệ thống theo dõi xu hướng thông minh bằng cách kết hợp các kỹ thuật học máy với các phương pháp phân tích kỹ thuật truyền thống. Ưu điểm cốt lõi của nó nằm trong khả năng thích nghi và kiểm soát rủi ro, đạt được nhận dạng trạng thái thị trường thông minh thông qua cụm biến động. Trong khi các rủi ro như độ nhạy của tham số tồn tại, tối ưu hóa và tinh chỉnh liên tục có thể giúp duy trì hiệu suất ổn định trên các môi trường thị trường khác nhau. Các nhà giao dịch được khuyên nên kiểm tra kỹ lưỡng độ nhạy của tham số và tối ưu hóa dựa trên các đặc điểm thị trường cụ thể khi thực hiện chiến lược trong giao dịch trực tiếp.
/*backtest start: 2025-01-09 00:00:00 end: 2025-01-16 00:00:00 period: 10m basePeriod: 10m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy("Adaptive SuperTrend Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=200) // Import Indicator Components atr_len = input.int(10, "ATR Length", group="SuperTrend Settings") fact = input.float(3, "SuperTrend Factor", group="SuperTrend Settings") training_data_period = input.int(100, "Training Data Length", group="K-Means Settings") // Volatility Clustering volatility = ta.atr(atr_len) upper = ta.highest(volatility, training_data_period) lower = ta.lowest(volatility, training_data_period) high_volatility = lower + (upper-lower) * 0.75 medium_volatility = lower + (upper-lower) * 0.5 low_volatility = lower + (upper-lower) * 0.25 cluster = volatility >= high_volatility ? 0 : volatility >= medium_volatility ? 1 : 2 // SuperTrend Calculation pine_supertrend(factor, atr) => src = hl2 upperBand = src + factor * atr lowerBand = src - factor * atr prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand int _direction = na float superTrend = na prevSuperTrend = superTrend[1] if na(atr[1]) _direction := 1 else if prevSuperTrend == prevUpperBand _direction := close > upperBand ? -1 : 1 else _direction := close < lowerBand ? 1 : -1 superTrend := _direction == -1 ? lowerBand : upperBand [superTrend, _direction] [ST, dir] = pine_supertrend(fact, volatility) // Entry Conditions longEntry = ta.crossunder(dir, 0) and cluster > 1 and close > ST shortEntry = ta.crossover(dir, 0) and cluster == 0 and close < ST // Stop Loss & Take Profit atr_mult = input.float(2, "ATR Multiplier for SL/TP", group="Risk Management") sl = atr_mult * ta.atr(atr_len) longStopLoss = close - sl longTakeProfit = close + (sl * 1.5) shortStopLoss = close + sl shortTakeProfit = close - (sl * 1.5) // Execute Trades if longEntry strategy.entry("Long", strategy.long) strategy.exit("Take Profit", from_entry="Long", limit=longTakeProfit, stop=longStopLoss) if shortEntry strategy.entry("Short", strategy.short) strategy.exit("Take Profit", from_entry="Short", limit=shortTakeProfit, stop=shortStopLoss) // Plot SuperTrend plot(ST, title="SuperTrend", color=dir > 0 ? color.green : color.red, linewidth=2) // Alerts alertcondition(longEntry, title="Long Entry Signal", message="Buy Signal - Trend Shift Up") alertcondition(shortEntry, title="Short Entry Signal", message="Sell Signal - Trend Shift Down")