Chiến lược này là một hệ thống theo xu hướng năng động dựa trên các kênh trung bình động kép, kết hợp với các cơ chế quản lý rủi ro. Nó sử dụng hai Trung bình di chuyển đơn giản (SMA) để xây dựng một kênh giao dịch, với dải trên được tính bằng cách sử dụng giá cao và dải dưới sử dụng giá thấp. Hệ thống tạo ra tín hiệu đầu vào khi giá đóng ở trên dải trên trong năm thanh liên tiếp và tín hiệu ra khi giá giảm xuống dưới dải dưới trong năm thanh liên tiếp hoặc quay lại 25% từ điểm cao nhất, đạt được theo dõi xu hướng và kiểm soát rủi ro năng động.
Các nguyên tắc cốt lõi liên quan đến việc nắm bắt xu hướng giá thông qua hai kênh trung bình động và thiết lập các cơ chế nhập và xuất nghiêm ngặt: 1. Cơ chế nhập cảnh: yêu cầu giá duy trì trên dải trên trong năm ngày liên tiếp, đảm bảo tính liên tục và hợp lệ của xu hướng 2. Cơ chế thoát: Hoạt động trên hai cấp - Xuất phát lệch xu hướng: Bắt đầu khi giá giảm xuống dưới dải dưới trong năm ngày liên tiếp, cho thấy khả năng đảo ngược xu hướng - Stop-Loss Exit: Được kích hoạt khi giá quay trở lại 25% từ điểm cao nhất, ngăn ngừa tổn thất quá mức 3. Quản lý vị trí: Sử dụng một tỷ lệ phần trăm cố định của vốn chủ sở hữu tài khoản cho kích thước vị trí, đảm bảo phân bổ vốn hiệu quả
Chiến lược này xây dựng một hệ thống giao dịch theo xu hướng hoàn chỉnh thông qua các kênh trung bình động kép, kết hợp các cơ chế xác nhận nhập cảnh nghiêm ngặt và cơ chế ra đi kép để đạt được theo dõi xu hướng và kiểm soát rủi ro hiệu quả.
/*backtest start: 2025-01-02 00:00:00 end: 2025-01-09 00:00:00 period: 10m basePeriod: 10m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy("Moving Average Channel (MAC)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Parameters for Moving Averages upperMALength = input.int(10, title="Upper MA Length") lowerMALength = input.int(8, title="Lower MA Length") stopLossPercent = input.float(25.0, title="Stop Loss (%)", minval=0.1) / 100 // Calculate Moving Averages upperMA = ta.sma(high, upperMALength) lowerMA = ta.sma(low, lowerMALength) // Plot Moving Averages plot(upperMA, color=color.red, title="Upper Moving Average") plot(lowerMA, color=color.green, title="Lower Moving Average") // Initialize variables var int upperCounter = 0 var int lowerCounter = 0 var float entryPrice = na var float highestPrice = na // Update counters based on conditions if (low <= upperMA) upperCounter := 0 else upperCounter += 1 if (high >= lowerMA) lowerCounter := 0 else lowerCounter += 1 // Entry condition: 5 consecutive bars above the Upper MA if (upperCounter == 5 and strategy.position_size == 0) strategy.entry("Long", strategy.long) highestPrice := high // Initialize highest price // Update the highest price after entry if (strategy.position_size > 0) highestPrice := na(highestPrice) ? high : math.max(highestPrice, high) // Exit condition: 5 consecutive bars below the Lower MA if (lowerCounter == 5 and strategy.position_size > 0) strategy.close("Long", comment="Exit: 5 bars below Lower MA") // Stop-loss condition: Exit if market closes below 25% of the highest price since entry stopLossCondition = low < highestPrice * (1 - stopLossPercent) if (stopLossCondition and strategy.position_size > 0) strategy.close("Long", comment="Exit: Stop Loss")