Chiến lược đồng bộ hóa xu hướng RMI

Tác giả:ChaoZhang, Ngày: 2024-01-16 14:10:25
Tags:

img

Tổng quan

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.

Nguyên tắc chiến lược

Chỉ số động lực tương đối (RMI)

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

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.

Phán quyết động lực

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ố siêu xu hướng

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.

Chọn hướng giao dịch

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ọ.

Phân tích lợi thế

Kết hợp phân tích động lực và xu hướng

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.

Phân tích nhiều khung thời gian

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.

Thời gian thực Stop Loss

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.

Hướng giao dịch linh hoạt

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.

Phân tích rủi ro

Tối ưu hóa tham số khó khăn

Việc tối ưu hóa các thông số như RMI và Super Trend khá phức tạp.

Dừng Loss quá chặt

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.

Hướng dẫn tối ưu hóa

Khả năng thích nghi giữa các tài sản

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.

Đánh lỗ dừng động

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ỏ.

Các điều kiện bộ lọc bổ sung

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.

Kết luận

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)

Thêm nữa