Đây là một chiến lược theo xu hướng dựa trên chỉ số SuperTrend, Exponential Moving Average (EMA) và Average True Range (ATR). Chiến lược đạt được theo dõi xu hướng năng động và kiểm soát rủi ro thông qua sự kết hợp của nhiều chỉ số kỹ thuật, dừng lỗ ban đầu và dừng lỗ sau.
Chiến lược hoạt động dựa trên các thành phần cốt lõi sau: Chỉ số SuperTrend để xác định sự thay đổi hướng xu hướng, được tính bằng thời gian ATR là 16 và yếu tố 3,02 2. EMA 49 giai đoạn như bộ lọc xu hướng để xác nhận hướng xu hướng 3. Stop loss ban đầu được thiết lập ở mức 50 điểm cung cấp bảo vệ cơ bản cho mỗi giao dịch 4. Trailing stop loss được kích hoạt sau khi 70 điểm lợi nhuận, theo dõi thay đổi giá năng động
Hệ thống tạo ra tín hiệu dài khi hướng SuperTrend biến xuống và giá đóng là trên EMA, miễn là không có vị trí hiện có. Ngược lại, tín hiệu ngắn được tạo ra khi hướng SuperTrend biến lên và giá đóng là dưới EMA.
Đây là một chiến lược giao dịch hoàn chỉnh kết hợp nhiều chỉ số kỹ thuật và cơ chế kiểm soát rủi ro. Nó đạt được tỷ lệ rủi ro-lợi nhuận thuận lợi thông qua việc nắm bắt xu hướng với chỉ số SuperTrend, xác nhận hướng với EMA, cùng với các cơ chế dừng lỗ kép. Tiềm năng tối ưu hóa của chiến lược chủ yếu nằm trong điều chỉnh tham số động, đánh giá môi trường thị trường và nâng cao hệ thống quản lý rủi ro. Trong ứng dụng thực tế, khuyến cáo tiến hành kiểm tra kỹ lưỡng dữ liệu lịch sử và điều chỉnh các tham số theo đặc điểm cụ thể của công cụ giao dịch.
/*backtest start: 2024-01-17 00:00:00 end: 2025-01-15 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy(" nifty supertrend triton", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Input parameters atrPeriod = input.int(16, "ATR Length", step=1) factor = input.float(3.02, "Factor", step=0.01) maPeriod = input.int(49, "Moving Average Period", step=1) trailPoints = input.int(70, "Trailing Points", step=1) // Points after which trailing stop activates initialStopLossPoints = input.int(50, "Initial Stop Loss Points", step=1) // Initial stop loss of 50 points // Calculate Supertrend [_, direction] = ta.supertrend(factor, atrPeriod) // Calculate EMA ema = ta.ema(close, maPeriod) // Variables to track stop loss levels var float trailStop = na var float entryPrice = na var float initialStopLoss = na // To track the initial stop loss // Generate buy and sell signals if ta.change(direction) < 0 and close > ema if strategy.position_size == 0 // Only open a new long position if no current position strategy.entry("Buy", strategy.long) entryPrice := close // Record the entry price for the long position initialStopLoss := entryPrice - initialStopLossPoints // Set initial stop loss for long position trailStop := na // Reset trailing stop for long if ta.change(direction) > 0 and close < ema if strategy.position_size == 0 // Only open a new short position if no current position strategy.entry("Sell", strategy.short) entryPrice := close // Record the entry price for the short position initialStopLoss := entryPrice + initialStopLossPoints // Set initial stop loss for short position trailStop := na // Reset trailing stop for short // Apply initial stop loss for long positions if (strategy.position_size > 0) // Check if in a long position if close <= initialStopLoss // If the price drops to or below the initial stop loss strategy.close("Buy", "Initial Stop Loss Hit") // Exit the long position // Apply trailing stop logic for long positions if (strategy.position_size > 0) // Check if in a long position if (close - entryPrice >= trailPoints) // If the price has moved up by the threshold trailStop := na(trailStop) ? close - trailPoints : math.max(trailStop, close - trailPoints) // Adjust trailing stop upwards if not na(trailStop) and close < trailStop // If the price drops below the trailing stop strategy.close("Buy", "Trailing Stop Hit") // Exit the long position // Apply initial stop loss for short positions if (strategy.position_size < 0) // Check if in a short position if close >= initialStopLoss // If the price rises to or above the initial stop loss strategy.close("Sell", "Initial Stop Loss Hit") // Exit the short position // Apply trailing stop logic for short positions if (strategy.position_size < 0) // Check if in a short position if (entryPrice - close >= trailPoints) // If the price has moved down by the threshold trailStop := na(trailStop) ? close + trailPoints : math.min(trailStop, close + trailPoints) // Adjust trailing stop downwards if not na(trailStop) and close > trailStop // If the price rises above the trailing stop strategy.close("Sell", "Trailing Stop Hit") // Exit the short position