Chiến lược RMI Trend Sync kết hợp hiệu quả các điểm mạnh của Chỉ số Động lực Tương đối (RMI) và chỉ số siêu xu hướng để thực hiện tích hợp phân tích động lực và đánh giá xu hướng. Bằng cách đồng thời theo dõi xu hướng thay đổi giá và mức độ động lực thị trường, chiến lược xác định xu hướng thị trường từ một quan điểm toàn diện hơn.
RMI là một phiên bản nâng cao của Chỉ số sức mạnh tương đối (RSI). Nó kết hợp nhiều tính năng hơn của các thay đổi giá như định hướng và cường độ để đánh giá chính xác hơn đà thị trường.
Phương pháp tính toán RMI là: đầu tiên tính toán lợi nhuận trung bình và lỗ trung bình trong một khoảng thời gian nhất định. Không giống như RSI, RMI sử dụng sự thay đổi giữa giá đóng cửa hiện tại và giá đóng cửa trước đó, thay vì tăng trưởng tích cực và âm tính đơn giản. Sau đó chia lợi nhuận trung bình bằng lỗ trung bình và bình thường hóa giá trị để phù hợp trong thang 0-100.
Chiến lược này sử dụng giá trị trung bình của RMI và MFI để so sánh với ngưỡng đà tích cực và đà tiêu cực đã được đặt trước để xác định mức đà thị trường hiện tại cho các quyết định nhập và xuất.
Chỉ số Super Trend được tính dựa trên khung thời gian cao hơn, có thể cung cấp các phán đoán về các xu hướng chính. Nó điều chỉnh động các thông số dựa trên tỷ lệ biến động thực sự ATR để xác định hiệu quả sự đảo ngược xu hướng.
Chiến lược này cũng kết hợp Trung bình Di chuyển Cân trọng khối lượng (VWMA) để tiếp tục tăng cường khả năng phát hiện sự thay đổi xu hướng quan trọng.
Chiến lược này cho phép chọn giao dịch dài, ngắn hoặc hai chiều. Sự linh hoạt này cho phép các nhà giao dịch thích nghi với quan điểm thị trường và ham muốn rủi ro của họ.
So với các chiến lược chỉ dựa trên các chỉ số động lực hoặc xu hướng, chiến lược này nhận ra xác định xu hướng thị trường chính xác hơn thông qua việc tích hợp các điểm mạnh của RMI và Super Trend.
Việc áp dụng RMI và Super Trend trong các khung thời gian khác nhau dẫn đến sự hiểu biết thích hợp hơn về cả xu hướng ngắn hạn và dài hạn.
Cơ chế dừng lỗ thời gian thực dựa trên siêu xu hướng có thể hạn chế hiệu quả lỗ trên mỗi giao dịch.
Sự lựa chọn giữa giao dịch dài, ngắn hoặc hai chiều cho phép chiến lược này thích nghi với môi trường thị trường khác nhau.
Việc tối ưu hóa các thông số như RMI và Super Trend khá phức tạp.
Là quá nhạy cảm với biến động nhỏ có thể dẫn đến kích hoạt dừng lỗ quá mức.
Giải pháp: Dỡ bỏ phạm vi dừng lỗ một cách thích hợp hoặc áp dụng các phương pháp dừng lỗ dựa trên biến động khác.
Mở rộng các tài sản áp dụng và xác định hướng tối ưu hóa tham số cho các tài sản khác nhau, để cho phép sao chép rộng hơn trên nhiều thị trường hơn.
Tích hợp các cơ chế dừng lỗ động để theo dõi tốt hơn các sóng xoay hiện tại và giảm lỗ dừng quá mức do khôi phục nhỏ.
Thêm các đánh giá từ nhiều chỉ số hơn như điều kiện lọc để tránh nhập vào các vị trí mà không có tín hiệu rõ ràng.
Thông qua sự kết hợp khéo léo của RMI và Super Trend, chiến lược này nhận ra các phán đoán chính xác về điều kiện thị trường. Nó cũng xuất sắc trong kiểm soát rủi ro. Với tối ưu hóa sâu sắc, người ta tin rằng hiệu suất của nó trên nhiều tài sản và khung thời gian sẽ ngày càng trở nên đáng chú ý.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // @ presentTrading //@version=5 strategy("RMI Trend Sync - Strategy [presentTrading]", shorttitle = "RMI Sync [presentTrading]", overlay=true ) // ---> Inputs -------------- // Add Button for Trading Direction tradeDirection = input.string("Both", "Select Trading Direction", options=["Long", "Short", "Both"]) // Relative Momentum Index (RMI) Settings Length = input.int(21, "RMI Length", group = "RMI Settings") pmom = input.int(70, "Positive Momentum Threshold", group = "RMI Settings") nmom = input.int(30, "Negative Momentum Threshold", group = "RMI Settings") bandLength = input.int(30, "Band Length", group = "Momentum Settings") rwmaLength = input.int(20, "RWMA Length", group = "Momentum Settings") // Super Trend Settings len = input.int(10, "Super Trend Length", minval=1, group="Super Trend Settings") higherTf1 = input.timeframe('480', "Higher Time Frame", group="Super Trend Settings") factor = input.float(3.5, "Super Trend Factor", step=.1, group="Super Trend Settings") maSrc = input.string("WMA", "MA Source", options=["SMA", "EMA", "WMA", "RMA", "VWMA"], group="Super Trend Settings") atr = request.security(syminfo.tickerid, higherTf1, ta.atr(len)) TfClose1 = request.security(syminfo.tickerid, higherTf1, close) // Visual Settings filleshow = input.bool(true, "Display Range MA", group = "Visual Settings") bull = input.color(#00bcd4, "Bullish Color", group = "Visual Settings") bear = input.color(#ff5252, "Bearish Color", group = "Visual Settings") // Calculation of Bar Range barRange = high - low // RMI and MFI Calculations upChange = ta.rma(math.max(ta.change(close), 0), Length) downChange = ta.rma(-math.min(ta.change(close), 0), Length) rsi = downChange == 0 ? 100 : upChange == 0 ? 0 : 100 - (100 / (1 + upChange / downChange)) mf = ta.mfi(hlc3, Length) rsiMfi = math.avg(rsi, mf) // Momentum Conditions positiveMomentum = rsiMfi[1] < pmom and rsiMfi > pmom and rsiMfi > nmom and ta.change(ta.ema(close,5)) > 0 negativeMomentum = rsiMfi < nmom and ta.change(ta.ema(close,5)) < 0 // Momentum Status bool positive = positiveMomentum ? true : negativeMomentum ? false : na bool negative = negativeMomentum ? true : positiveMomentum ? false : na // Band Calculation calculateBand(len) => math.min(ta.atr(len) * 0.3, close * (0.3/100)) * 4 band = calculateBand(bandLength) // Range Weighted Moving Average (RWMA) Calculation calculateRwma(range_, period) => weight = range_ / math.sum(range_, period) sumWeightedClose = math.sum(close * weight, period) totalWeight = math.sum(weight, period) sumWeightedClose / totalWeight rwma = calculateRwma(barRange, rwmaLength) colour = positive ? bull : negative ? bear : na rwmaAdjusted = positive ? rwma - band : negative ? rwma + band : na max = rwma + band min = rwma - band longCondition = positive and not positive[1] shortCondition = negative and not negative[1] longExitCondition = shortCondition shortExitCondition = longCondition // Dynamic Trailing Stop Loss vwma1 = switch maSrc "SMA" => ta.sma(TfClose1*volume, len) / ta.sma(volume, len) "EMA" => ta.ema(TfClose1*volume, len) / ta.ema(volume, len) "WMA" => ta.wma(TfClose1*volume, len) / ta.wma(volume, len) upperBand = vwma1 + factor * atr lowerBand = vwma1 - factor * atr prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) float superTrend = na int direction = na superTrend := direction == -1 ? lowerBand : upperBand longTrailingStop = superTrend - atr * factor shortTrailingStop = superTrend + atr * factor // Strategy Order Execution if (tradeDirection == "Long" or tradeDirection == "Both") strategy.entry("Long", strategy.long, when = longCondition) strategy.exit("Exit Long", "Long", when=longExitCondition, stop = longTrailingStop) if (tradeDirection == "Short" or tradeDirection == "Both") strategy.entry("Short", strategy.short, when =shortCondition) strategy.exit("Exit Short", "Short", when=shortExitCondition, stop = shortTrailingStop)