
Chiến lược đồng bộ hóa xu hướng động lực thực hiện sự kết hợp hiệu quả của phân tích động lực và phán đoán xu hướng bằng cách tích hợp các lợi thế của chỉ số động lực tương đối (RMI) và chỉ số xu hướng siêu. Chiến lược này đồng thời chú ý đến xu hướng thay đổi giá cả và mức độ động lực thị trường, đánh giá xu hướng thị trường từ góc độ toàn diện hơn.
RMI là một phiên bản cải tiến của chỉ số cường độ tương đối (RSI). Nó kết hợp nhiều tính năng hơn như chiều hướng và độ lớn của sự thay đổi giá, cho phép đánh giá chính xác hơn về động lực thị trường.
RMI được tính bằng cách tính trung bình tăng và giảm trong một chu kỳ nhất định. Khác với RSI, RMI sử dụng giá trị thay đổi của giá đóng cửa ngày hôm đó so với giá đóng cửa ngày hôm trước, thay vì tăng và giảm đơn giản.
Chiến lược này sử dụng giá trị trung bình của RMI so với MFI để so sánh với giá trị tích cực và giá trị tiêu cực của động lực dự kiến để đánh giá mức động lực thị trường hiện tại, để quyết định đặt vị trí và đặt vị trí.
Chỉ số siêu xu hướng dựa trên tính toán chu kỳ thời gian cao hơn, có thể cung cấp phán đoán về xu hướng lớn. Nó sẽ điều chỉnh các tham số ATR động dựa trên bước sóng thực, do đó có thể xác định hiệu quả các điểm chuyển hướng.
Chiến lược này cũng có thêm đường trung bình trọng lượng khối lượng giao dịch VWMA, tăng cường khả năng nhận diện các biến động xu hướng quan trọng.
Chiến lược này có thể lựa chọn giao dịch nhiều, ngắn hoặc hai chiều. Điều này cho phép các nhà giao dịch có thể điều chỉnh linh hoạt theo quan điểm thị trường và sở thích rủi ro của họ.
So với các chiến lược sử dụng chỉ số động lực hoặc chỉ số xu hướng đơn lẻ, chiến lược này đạt được sự phán đoán chính xác hơn về xu hướng thị trường bằng cách tích hợp lợi thế của chỉ số RMI và siêu xu hướng.
Sử dụng các chỉ số RMI và siêu xu hướng trong các chu kỳ khác nhau để nắm bắt đượ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ể kiểm soát hiệu quả tổn thất đơn lẻ.
Lựa chọn giao dịch nhiều, ngắn hoặc hai chiều, cho phép chiến lược này thích ứng với các môi trường thị trường khác nhau.
Tối ưu hóa các tham số như RMI và siêu xu hướng rất phức tạp và có thể ảnh hưởng đến hiệu quả của chiến lược nếu thiết lập không đúng cách.
Thị trường quá nhạy cảm với biến động thị trường trong các chu kỳ nhỏ, có thể gây ra vấn đề dừng lỗ quá thường xuyên.
Cách giải quyết: Giảm phạm vi thiệt hại một cách thích hợp, hoặc sử dụng các phương pháp dừng xung động khác.
Mở rộng phạm vi giống có thể áp dụng, xác định các hướng tối ưu hóa tham số của các giống khác nhau. Cho phép chiến lược được sao chép ở nhiều thị trường hơn.
Phương thức dừng động được thêm vào, cho phép dây dừng theo dõi tốt hơn các băng tần hiện tại và giảm thiểu thiệt hại quá mức do rung động nhỏ.
Kết hợp nhiều chỉ số phán đoán như một điều kiện lọc, tránh xây dựng nhà kho khi không có tín hiệu rõ ràng.
Chiến lược này có khả năng đánh giá chính xác tình trạng thị trường thông qua sự kết hợp khéo léo của chỉ số RMI và siêu xu hướng. Nó cũng rất tốt trong việc kiểm soát rủi ro.
/*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)